[ОТВЕТИТЬ]
Опции темы
25.04.2009 14:01  
OlegON
Никто не писал? Влом возиться, а полезная вещь была бы.
Суть - если по истории документов кто-то из доков менялся после инвентаризации, но менял цену или количество, то его с сотрудником, сделавшим пакость - выводить. Было бы замечательно, если бы скрипт оценивал все инвентаризации.
 
25.05.2009 23:12  
MirProd
Не так подробно, как писал OlegON, но все же запрос проверяет по каждой сличительной ведомости после определенной даты, изменялись ли какие-нибудь документы с момента создания ведомости до момента ее оприходывания, с учетом спецификации, и выводит МХ, номер вед-ти, номер документа, сотрудника.
Код:
select distinct sl.name location, t1.id rlnum, t2.id docnum, stf.surname from 
(select d.location, d.id, d.createdat, l1.eventtime crtime, l2.eventtime uptime from smdocuments d, smdoclog l1, smdoclog l2 where d.id=l1.id and d.id=l2.id and l1.oldstate=-1 and l2.newstate=3 and d.doctype='RL' and docstate=3 and trunc(d.createdat)>=to_date('01.03.09')) t1, smdoclog t2, smstorelocations sl, smstaff stf  where t2.docdate<t1.createdat and t2.eventtime between t1.crtime and t1.uptime and t2.newstate in (0,3) and t2.doctype in ('PO', 'PE', 'CS', 'CR', 'WO', 'WI') and (select count(*) from smspec s1, smspec s2 where s1.docid=t1.id and s2.docid=t2.id and s1.article=s2.article)<>0 and t1.location=sl.id and t2.employee=stf.id
 
26.05.2009 07:05  
Mtirt
Немного поправила твой запрос.
Думаю, что не учитывать типы документов - серьезная ошибка.
И добавила комментарий с вопросом. Ответь пожалуйста.
Код:
select distinct sl.name location, t1.id rlnum, t2.id docnum, stf.surname
  from (select d.location,
              d.doctype, 
               d.id,
               d.createdat,
               l1.eventtime crtime,
               l2.eventtime uptime
          from smdocuments d, smdoclog l1, smdoclog l2
         where d.doctype=l1.doctype
           and d.id = l1.id
           and d.doctype=l2.doctype         
           and d.id = l2.id
           and l1.oldstate = -1
           and l2.newstate = 3
           and d.doctype = 'RL'
           and docstate = 3
           and trunc(d.createdat) >= to_date('01.03.09')) t1,
       smdoclog t2,
       smstorelocations sl,
       smstaff stf
 where t2.docdate < t1.createdat
   and t2.eventtime between t1.crtime and t1.uptime
   and t2.newstate in (0, 3) -- Почему только эти два статуса отбираются? где 1 и 2 ?
   and t2.doctype in ('PO', 'PE', 'CS', 'CR', 'WO', 'WI')
   and (select count(*)
          from smspec s1, smspec s2
         where  s1.doctype=t1.doctype
           and s1.docid = t1.id
           and s1.doctype=t2.doctype
           and s2.docid = t2.id
           and s1.article = s2.article) <> 0 
   and t1.location = sl.id
   and t2.employee = stf.id
 
26.05.2009 08:32  
7zEro
по пытался запустить выдал сообщение ORA-00904; "T1","DOCTYPE": не допустимый идентификатор
 
26.05.2009 08:37  
Mtirt
Исправила. Должно работать.
 
26.05.2009 09:30  
MirProd
Типы документов не учитывал потому, что у меня на каждый тип свой префикс, но правильно было бы учитывать. А статусы - потому, что как правило (во всяком случае у нас), если документы правят, то откатывают до "черновика".. но по ходу дела не те поставил, лучше все включить..
 
26.05.2009 09:36  
Mtirt
Типы документов следует учитывать всегда еще и потому, что по указанным таблицам они входят в первичный индекс. Как следствие - отбор должен работать быстрее.
 
26.05.2009 09:48  
MirProd
Цитата:
Сообщение от Mtirt
Типы документов следует учитывать всегда еще и потому, что по указанным таблицам они входят в первичный индекс. Как следствие - отбор должен работать быстрее.
Согласен. Mtirt, добавь, пожалуйста, в запрос все статусы и вывод типа исправленного докумета.
 
26.05.2009 09:50  
Mtirt
Код:
select distinct sl.name location, t1.id rlnum, t2.doctype, t2.id docnum, stf.surname
  from (select d.location,
              d.doctype, 
               d.id,
               d.createdat,
               l1.eventtime crtime,
               l2.eventtime uptime
          from smdocuments d, smdoclog l1, smdoclog l2
         where d.doctype=l1.doctype
           and d.id = l1.id
           and d.doctype=l2.doctype         
           and d.id = l2.id
           and l1.oldstate = -1
           and l2.newstate = 3
           and d.doctype = 'RL'
           and docstate = 3
           and trunc(d.createdat) >= to_date(&MyDate, 'DD.MM.YYYY')) t1,
       smdoclog t2,
       smstorelocations sl,
       smstaff stf
 where t2.docdate < t1.createdat
   and t2.eventtime between t1.crtime and t1.uptime
   and t2.newstate in (0, 1, 2, 3)
   and t2.doctype in ('PO', 'PE', 'CS', 'CR', 'WO', 'WI')
   and (select count(*)
          from smspec s1, smspec s2
         where  s1.doctype=t1.doctype
           and s1.docid = t1.id
           and s1.doctype=t2.doctype
           and s2.docid = t2.id
           and s1.article = s2.article) <> 0 
   and t1.location = sl.id
   and t2.employee = stf.id
 
26.05.2009 10:22  
7zEro
ошибка: не описана переменная MyDate
 
 


Опции темы



Часовой пояс GMT +3, время: 21:03.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.