14.10.2007 13:54
Vovantus
 
Здравствуйте. Помогите, пожалуйста, с запросом.. нужно определить, какие документы были изменены за определённый период. Например, нужно увидеть, какие документы редактировались за прошлый месяц. В связи с тем, что я на текущий момент вообще не шарю в запросах, прошу не ругаться громко, т.к. могу позадовать глупые вопросы
15.10.2007 06:33
akonev
 
Цитата:
Vovantus нужно определить, какие документы были изменены за определённый период. Например, нужно увидеть, какие документы редактировались за прошлый месяц.
насколько я понимаю, ни разу не принимавшиеся черновики должны быть неинтересны. они на то и черновики, чтобы их редактировать.
если так - то самое простое, это прорыть журнал документов.
потому как для редактирования надо сначала статус опустить.
Код:
select * from smdoclog t
where (t.oldstate=2 and t.newstate=1) or (t.oldstate=3 and t.newstate=2)
это мы нашли все документы у которых статус менялся от принят в количестве до черновика и от принят полностью до принят в количестве.
дальше надо добавлять условия по датам, типам документов, потом связывать с таблицей документов и добавлять условия по местам хранения.
наращивай поэтапно :)

PS вопрос явно имеет специфику не оракла вообще, а супермага. надо было в другой раздел его пихать.
15.10.2007 06:55
Vovantus
 
Цитата:
Andrew_Konev это мы нашли все документы у которых статус менялся от принят в количестве до черновика и от принят полностью до принят в количестве.
дальше надо добавлять условия по датам, типам документов, потом связывать с таблицей документов и добавлять условия по местам хранения.
наращивай поэтапно :)
вот сижу и думаю, ну получу я документы которые менялись, а что в итоге? Наверное, не правильно определил задачу.. Смысл в том, что я хочу видеть какие документы (ВЛИЯЮЩИЕ НА ОСТАТКИ) менялись задним числом! Например, создана НП от 1.01.2007. Сегодня уже 15 число 10 месяца, как определить, менял ли кто-нить статус документа за это период.. Блин, не могу объяснить что треюуется более понятным языком, но, надеюсь мысль понятна..
15.10.2007 07:17
akonev
 
вот и добавляй условий!
то же самое (понижение статуса до черновика), но берем только приходные, расходные и перемещения;
документы старше трех месяцев; откатили в последний месяц:
Код:
select t.eventtime, d.createdat, t.doctype, t.id, t.username, t.oldstate, t.newstate 
from smdoclog t, smdocuments d
where (t.oldstate=2 and t.newstate=1)
  and (t.doctype='WI' or t.doctype='WO' or t.doctype='IW')
  and t.eventtime>add_months((sysdate),-1)
  and t.doctype=d.doctype and t.id=d.id
  and d.createdat<add_months((sysdate),-3);
все. кроме них остатки меняют только кассовые документы.
если хочешь - тоже добавь. типы CS и CR.
периоды сам подбирай под свои задачи.
19.10.2007 07:11
Vovantus
 
скрипт готов и протестирован, спасибо Андрею Коневу

итак, чтобы отследить документы (ПН, РН, НП), у которых статус менялся с проведённого до чернового, нуна зделать такой запрос:

Код:
select t.eventtime, d.createdat, t.doctype, t.id, t.username, t.oldstate, t.newstate 
from smdoclog t, smdocuments d
where (t.oldstate=2 and t.newstate=1)
  and (t.doctype='WI' or t.doctype='WO' or t.doctype='IW')
  and t.eventtime>((sysdate)-7)
  and t.doctype=d.doctype and t.id=d.id
  and d.createdat>((sysdate)-365);
В течении 7 прошедших дней , включая текущий, производилась смена статуса в документах, созданных за последний год.

ещё один запрос до кучи. Показывает удалённые документы за определённый период:

Код:
select t.eventtime, t.doctype, t.id, t.username, t.oldstate, t.newstate 
from smdoclog t
where (t.oldstate=1 and t.newstate=-1)
and (t.doctype='WI' or t.doctype='WO' or t.doctype='IW')
and t.eventtime>((sysdate)-7);
Часовой пояс GMT +3, время: 12:32.

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