Страница 1 из 1

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

Добавлено: 06 окт 2011, 16:06
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), а выводится много лишнего вместо одной требующейся накладной:(

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

Добавлено: 06 окт 2011, 16:29
Vik
Весьма и весьма странный запрос для вывода одной накладной, нрек которой известен, к тому же. Слишком много лишнего, да и связки нелогичные какие-то.
where
((
<nrec> == KatSopr.Nrec and
KatSopr.Nrec == SpSopr.cSopr and
SpSopr.cSpStep == SpStep.Nrec // тут не уверен , так как не оч понял, что вы хотите , возможно, надо наоборот SpSopr.Nrec == SpStep.cSpSopr
....
))

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

Добавлено: 06 окт 2011, 16:51
Marisha_P
Есть накладная на отпуск в производство, и есть ЛЗК. И может так быть, что количества по лимиту не хватает для отпуска, и для этого нужно учесть дополнительное количество из таблицы dopbdoc, поэтому и пыталась собрать такой запрос... Наверное поулчилось плохо:) Т.е. если есть возможность добрать из лимиток, то требование-накладная должна будет печтаться, иначе нет , потому что превышается лимит....

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

Добавлено: 06 окт 2011, 17:34
RAJAH
Стандартный механизм сверхлимитного отпуска не устраивает, что ли? С настройкой MANUF.LIMIT.
Кстати, таблицу dopbdoc надо бы, наверно, в секции from указать...

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

Добавлено: 06 окт 2011, 17:48
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?)
));

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

Добавлено: 07 окт 2011, 09:02
Marisha_P
oiko - спасибо!
RAJAN - я не нашла такой настройки... ее надо добавить ?

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

Добавлено: 07 окт 2011, 09:26
RAJAH
Marisha_P писал(а):я не нашла такой настройки...
"Настройки Галактики \ Производство и планирование \ Управление производственной логистикой \ Отпуск в производство при превышении лимита"

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

Добавлено: 29 июл 2013, 09:24
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);
и у меня в этот цикл не заходит:( не понимаю, что делаю не так..

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

Добавлено: 29 июл 2013, 10:17
RAJAH
Marisha_P
1) как-то слишком просто;
2) SpSopr.cSpStep часто 0 бывает;
3) у вас разве замены не используются? 8)

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

Добавлено: 29 июл 2013, 10:41
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?

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

Добавлено: 29 июл 2013, 10:47
oiko
Или одну
stepdoc.nrec==katsopr.cstepdoc and katsopr.nrec==spsopr.ckatsopr and SpSopr.cSpStep==SpStep.nrec and stepdoc.nrec==SpStep.cstepdoc(noindex)
проверять spstep на валидность

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

Добавлено: 29 июл 2013, 11:01
Marisha_P
Мне по позиции в накладной на отпуск надо посмотреть - сколько МЦ было в привязанной ЛЗК, и сколько МЦ уже было забрано накладными, привязанными к документу...