06.07.2012 11:44
Как найти товар, который отсутствовал в контрактах на момент прихода?
06.07.2012 12:17
да, по приходам
06.07.2012 12:23
с контрактами как работаете?

закрыаете старые, открываете новые?
делаете новые редакции?
правите старые контракты?
06.07.2012 12:44
Что-то типа этого?
Код:
 select distinct c.article from smdocuments d, smspec c
where d.doctype=c.doctype
and d.id=c.docid
and d.docstate>=2
and d.createdat between &DateStart and &DateEnd
and d.doctype='WI'

minus
(select distinct c1.article from smdocuments d1, smspec c1, smcontracts k
where
d1.doctype=c1.doctype
and d1.id=c1.docid
and d1.docstate>=2
and k.id=d1.id
and k.doctype=d1.doctype
and k.beginsat<=&DateStart and (k.endsat>=&DateEnd or k.endsat is null)
and d1.doctype='CO')
Прости, особо не проверяла, набросала за пару свободных минут...
09.07.2012 11:54
спасибо,
я не много переделал твой запрос, тока теперь не работает :(
точнее у меня видимо мозги не так вставлены, поэтому результата выполнения запроса я не дождался :(
буду думать, как по другому сделать
Код:
select distinct q2.clientindex, q2.locationto, q2.createdat, q1.article
from smspec q1, smdocuments q2
    where q1.doctype=q2.doctype
      and q1.docid=q2.id
      and q1.doctype='WI'
      and q2.doctype='WI'
      and q2.opcode=0
      and q2.docstate>=2
      and q2.createdat BETWEEN &DateStart and &DateEnd
MINUS      
select distinct s1.clientindex, s1.locationto, s1.createdat, d2.article
    from smdocuments s1, smspec s2, smdocuments d1, smspec d2, SMContractLocations d3, smcontracts d4 
    where s2.doctype=s1.doctype
      and s2.docid=s1.id
      and s2.doctype='WI'
      and s1.doctype='WI'
      and s1.opcode=0
      and s1.docstate>=2
      and s1.createdat BETWEEN &DateStart and &DateEnd

      and d1.doctype='CO'
      and d2.doctype=d1.doctype
      and d2.docid=d1.id
      and d2.doctype='CO'
      and d3.doctype=d1.doctype
      and d3.id=d1.id
      and d3.doctype='CO'
      and d4.doctype=d1.doctype
      and d4.id=d1.id
      and d4.doctype='CO'
      and d4.endsat >= &DateStart 
    
      and s1.createdat BETWEEN d4.beginsat and d4.endsat
      and s2.article=d2.article
      and s1.locationto=d3.locationid
      and s1.clientindex=d1.clientindex
09.07.2012 12:30
Нескромный вопрос, а зачем во второй половине запроса выбираются приходные накладные?

Добавлено через 22 минуты 56 секунд
Код:
select distinct q2.clientindex, q2.locationto, q1.article
from smspec q1, smdocuments q2
    where q1.doctype=q2.doctype
      and q1.docid=q2.id
      and q1.doctype='WI'
      and q2.doctype='WI'
      and q2.opcode=0
      and q2.docstate>=2
      and q2.createdat BETWEEN &DateStart and &DateEnd
MINUS      
select distinct d1.clientindex, d3.locationid,  d2.article
    from smdocuments d1, smspec d2, SMContractLocations d3, smcontracts d4 
    where 
d1.doctype='CO'
      and d2.doctype=d1.doctype
      and d2.docid=d1.id
      and d2.doctype='CO'
      and d3.doctype=d1.doctype
      and d3.id=d1.id
      and d3.doctype='CO'
      and d4.doctype=d1.doctype
      and d4.id=d1.id
      and d4.doctype='CO'
      and d4.endsat >= &DateStart 
      and d4.beginsat <= &Dateend and (d4.endsat>=&dateStart or d4.endsat is null)
09.07.2012 12:46
ради этой строчки
and s1.createdat BETWEEN d4.beginsat and d4.endsat

контракт может действовать всего неделю, потом позицию из контракта вывели, т.е. заблокировали, новый контракт сделали, поставщик всё равно везет (даже без заказа, или с заказом, по сговору)
поэтому я проверяю что бы дата документа была внутри действия дат контракта

или я не прав?
09.07.2012 12:48
Да я по тому же принципу действую, только немного другим способом:
1. Выбираю все артикула из приходных накладных за период.
2. Выбираю все артикула, по которым есть действующие контракты.
3. Нахожу позиции, которые есть в пункте 1 и нет в пункте 2.

Пример я выше привела.
И вообще, в исходном посте речь вообще шла про дату ( я это понимаю, как один день)...
09.07.2012 13:04
Цитата:
Andrew_Konev с контрактами как работаете?

закрыаете старые, открываете новые?
делаете новые редакции?
правите старые контракты?

закрываем старые, открываем новые

Добавлено через 14 минут 40 секунд
Цитата:
Mtirt Да я по тому же принципу действую, только немного другим способом:
1. Выбираю все артикула из приходных накладных за период.
2. Выбираю все артикула, по которым есть действующие контракты.
3. Нахожу позиции, которые есть в пункте 1 и нет в пункте 2.

Пример я выше привела.
И вообще, в исходном посте речь вообще шла про дату ( я это понимаю, как один день)...
Если начало действия контракта (d4.beginsat) меньше даты начала рассматриваемого периода &DateStart
этот контракт не попадет

Если конец действия контракта (d4.endsat) меньше даты конца рассматриваемого периода &dateEnd
этот контракт не попадет

например: если контракт действует с (beginsat)20.04.12 по (endsat)10.05.12
период с 1.05.12(DateStart) по 31.05.12 (dateEnd)
документ за 4.05.12 число
в данном случае условия:
and d4.beginsat BETWEEN &DateStart and &Dateend
and (d4.endsat>=&dateEnd or d4.endsat is null)
некорректны
Часовой пояс GMT +3, время: 13:37.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.