[ОТВЕТИТЬ]
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
26.05.2009 10:31
Mtirt
 
Ты это где запустить пытаешься?
26.05.2009 10:32
MirProd
 
Цитата:
7zEro ошибка: не описана переменная MyDate
Вместо :MyDate поставь to_date('дата').
26.05.2009 10:35
Mtirt
 
Цитата:
MirProd Вместо :MyDate поставь to_date('дата').
Опять не совсем правильно.
Во-первых, в большинстве случаев, использование параметров в запросе вместо явного задания условий, экономит процессорное время и память, так как не тратится время на разбор запроса.
Во-вторых, у функции to_date() есть второй параметр, и лучше его указывать.
26.05.2009 10:43
MirProd
 
Цитата:
Mtirt Опять не совсем правильно.
Во-первых, в большинстве случаев, использование параметров в запросе вместо явного задания условий, экономит процессорное время и память, так как не тратится время на разбор запроса.
Во-вторых, у функции to_date() есть второй параметр, и лучше его указывать.
Судя по ошибке, у 7zEro нет возможности использовать параметры.
26.05.2009 10:46
Mtirt
 
Судя по ошибке, он использует что-то типа PL/SQL Developer.
В нём, вместо двоеточия для обозначения параметров запроса используется знак & .
26.05.2009 13:09
7zEro
 
запускаю в SQl Plus или что то не так? *22
26.05.2009 13:38
MirProd
 
Исправил ошибку в последнем блоке проверки спецификации и добавил расшифровку типов документов.
Код:
select distinct sl.name location, t1.id rlnum, obj.typename, 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, ssobjecttypes obj
 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 s2.doctype=t2.doctype
           and s2.docid = t2.id
           and s1.article = s2.article) <> 0 
   and t1.location = sl.id
   and t2.employee = stf.id
   and t2.doctype = obj.objtype
27.05.2009 09:46
BR
 
после запуска справшивает дату, а затем выдает ошибку

ERROR at line 17:
ORA-00907: missing right parenthesis
28.05.2009 14:33
deucel
 
Цитата:
7zEro запускаю в SQl Plus или что то не так? *22
Там нужно включить ввод параметров (по умолчанию отключен), в SQL Editor на панели кнопок есть значек & (Scan Defines (Off)) - нажми его.
Опции темы


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

 

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