Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Проверка изменений документов после инвентаризации : Супермаг Плюс (Супермаг 2000)

29.03.2024 15:57


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, время: 15:57.

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