SQL запрос (лимиты)

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

SQL запрос (лимиты)

Сообщение Marisha_P »

Подскажите, пожалуйста, в чем ошибка в данном запросе:
select spstep.kol,spsopr.kolfact,katsopr.nsopr
from
spsopr,spstep
where
(( 281474977708292==STEPDOC.CBASEDOC AND
281474979367529==dopbdoc.ckatsopr
and STEPDOC.NREC==SPSTEP.CSTEPDOC AND
SPSTEP.NREC==SPSOPR.CSPSTEP
and spsopr.csopr==katsopr.nrec
and dopbdoc.cbasedoc==basedoc.nrec
and spsopr.cmcusl==dopbdoc.cmc
));

Вроде ограничиваю катсопр (281474979367529==dopbdoc.ckatsopr), а выводится много лишнего вместо одной требующейся накладной:(
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: SQL запрос (лимиты)

Сообщение Vik »

Весьма и весьма странный запрос для вывода одной накладной, нрек которой известен, к тому же. Слишком много лишнего, да и связки нелогичные какие-то.
where
((
<nrec> == KatSopr.Nrec and
KatSopr.Nrec == SpSopr.cSopr and
SpSopr.cSpStep == SpStep.Nrec // тут не уверен , так как не оч понял, что вы хотите , возможно, надо наоборот SpSopr.Nrec == SpStep.cSpSopr
....
))
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: SQL запрос (лимиты)

Сообщение Marisha_P »

Есть накладная на отпуск в производство, и есть ЛЗК. И может так быть, что количества по лимиту не хватает для отпуска, и для этого нужно учесть дополнительное количество из таблицы dopbdoc, поэтому и пыталась собрать такой запрос... Наверное поулчилось плохо:) Т.е. если есть возможность добрать из лимиток, то требование-накладная должна будет печтаться, иначе нет , потому что превышается лимит....
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: SQL запрос (лимиты)

Сообщение RAJAH »

Стандартный механизм сверхлимитного отпуска не устраивает, что ли? С настройкой MANUF.LIMIT.
Кстати, таблицу dopbdoc надо бы, наверно, в секции from указать...
oiko
Местный житель
Сообщения: 419
Зарегистрирован: 29 мар 2005, 17:49

Re: SQL запрос (лимиты)

Сообщение oiko »

неясно что за зверь dopbdoc в 810 его нет
ну а так если бы он был
select spstep.kol,spsopr.kolfact,katsopr.nsopr, dopbdoc.*
from
spsopr,spstep
where
((
281474979367529==katsopr.nrec and
katsopr.nrec==dopbdoc.ckatsopr and
katsopr.nrec==spsopr.csopr and
katsopr.CSTEPDOC==STEPDOC.NREC and
SPSOPR.CSPSTEP==SPSTEP.NREC and
and spsopr.cmcusl==dopbdoc.cmc(noindex?)
));
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: SQL запрос (лимиты)

Сообщение Marisha_P »

oiko - спасибо!
RAJAN - я не нашла такой настройки... ее надо добавить ?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: SQL запрос (лимиты)

Сообщение RAJAH »

Marisha_P писал(а):я не нашла такой настройки...
"Настройки Галактики \ Производство и планирование \ Управление производственной логистикой \ Отпуск в производство при превышении лимита"
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: SQL запрос (лимиты)

Сообщение Marisha_P »

Опять вернулись к лимитам:) Подскажите, люди добрые, что не так..Есть запрос

Код: Выделить всё

.create view Limit
select * from basedoc,katsopr,stepdoc,spstep,katmc,spsopr
where
((comp(BaseDocNRec)==stepdoc.cbasedoc
and  stepdoc.nrec/== katsopr.cstepdoc
and STEPDOC.CBASEDOC ==BASEDOC.NREC
and SpSopr.cSpStep ==  SpStep.nRec
and String(NOMENKL)==katmc.barkod
and katsopr.nrec/==spsopr.csopr
and katmc.nrec /==spsopr.cmcusl
));   
Запрос необходим для того, чтоб определить какое количество МЦ уже выбрано из имеющегося лимита.. В печатной форме вывожу

Код: Выделить всё

Summa_nakl:=0;
if  (Limit.GetFirst stepdoc = 0) then
  do { 
      if  (Limit.GetFirst katsopr = 0) then
     do {
       if  (Limit.GetFirst basedoc = 0) then
        do {
          if  (Limit.GetFirst spstep = 0) then
           do {
            if  (Limit.GetFirst katmc = 0) then
             do {
               if  (Limit.GetFirst spsopr = 0) then
                do {summa_nakl:=summa_nakl+Limit.spsopr.kolfact
                Message (Limit.spsopr.kolfact);
      }while  ((Limit.getnext spsopr)=0)
    } while  ((Limit.getnext katmc)=0)
   } while  ((Limit.getnext spstep)=0)
  } while  ((Limit.getnext basedoc)=0)
 } while  ((Limit.getnext katsopr)=0)
} while  ((Limit.getnext stepdoc)=0);
и у меня в этот цикл не заходит:( не понимаю, что делаю не так..
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: SQL запрос (лимиты)

Сообщение RAJAH »

Marisha_P
1) как-то слишком просто;
2) SpSopr.cSpStep часто 0 бывает;
3) у вас разве замены не используются? 8)
oiko
Местный житель
Сообщения: 419
Зарегистрирован: 29 мар 2005, 17:49

Re: SQL запрос (лимиты)

Сообщение oiko »

Лучше использовать 2 вьюхи, одну для вычисления что отпущено по позициям ДО (stepdoc.nrec==SpStep.cstepdoc and SpStep.nRec==SpSopr.cSpStep)
и что отпустили мимо (stepdoc.nrec==katsopr.cstepdoc and katsopr.nrec==spsopr.ckatsopr and 0==SpSopr.cSpStep)

Зачем еще ограничение по katmc?
oiko
Местный житель
Сообщения: 419
Зарегистрирован: 29 мар 2005, 17:49

Re: SQL запрос (лимиты)

Сообщение oiko »

Или одну
stepdoc.nrec==katsopr.cstepdoc and katsopr.nrec==spsopr.ckatsopr and SpSopr.cSpStep==SpStep.nrec and stepdoc.nrec==SpStep.cstepdoc(noindex)
проверять spstep на валидность
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: SQL запрос (лимиты)

Сообщение Marisha_P »

Мне по позиции в накладной на отпуск надо посмотреть - сколько МЦ было в привязанной ЛЗК, и сколько МЦ уже было забрано накладными, привязанными к документу...
Ответить