[ОТВЕТИТЬ]
19.01.2015 18:11
Aligator
 
Просьба помочь с отчетов по запросу информации из СМ+ о возвратах поставщику и их номера контрактов.
пример:
номер_расхода --- номер_контракта
WO05600005658 - 00000095649

Т.е. для отбора номера контракта необходимо посмотреть на основание расходной накладной(основание есть приход), далее у прихода посмотреть
на основание (основание заказ), после этого в основание заказа (соглашение о поставке и контракт) - и последний шаг как раз и будет номер контракта...
20.01.2015 07:19
Mtirt
 
Месье знает толк в извращениях...
Зачем?
20.01.2015 18:04
Aligator
 
Цитата:
Mtirt Месье знает толк в извращениях...
Зачем?
К сожалению не могу пояснить, большей части просто очередная хотелка, без которой не могут жить менеджеры...
21.01.2015 07:03
Mtirt
 
Предлагаю допросить менеджеров.
Понимание, что именно нужно пользователю помогает иногда упростить задачу и свести её к чему-то, что будет работать быстрее, чем последовательная выборка 4-х оснований.
К тому же, в твоей задаче: в возврате может быть МНОГО оснований - приходов, соответственно, может быть выбрано НЕСКОЛЬКО заказов и МНОГО контрактов. Как сопоставлять номера?
21.01.2015 13:21
Aligator
 
Цитата:
Mtirt К тому же, в твоей задаче: в возврате может быть МНОГО оснований - приходов, соответственно, может быть выбрано НЕСКОЛЬКО заказов и МНОГО контрактов. Как сопоставлять номера?
Необходимо отбирать по первым вхождениям, потому как у них на товарные карточки может быть только один контракт.
21.01.2015 13:25
Mtirt
 
Один ДЕЙствующий контракт на одну карточку товара не означает однозначной пары Возврат - Контракт.
В возврате из 3-х позиций, две могут быть уже исключенными из действующего контракта. И находиться в двух разных контрактах, которые действовали раньше.
21.01.2015 13:29
Aligator
 
Цитата:
Mtirt Один ДЕЙствующий контракт на одну карточку товара не означает однозначной пары Возврат - Контракт.
В возврате из 3-х позиций, две могут быть уже исключенными из действующего контракта. И находиться в двух разных контрактах, которые действовали раньше.
Верно, но цепочка ведь будет правильная, хоть контракт и будет завершен, но другого контракта на момент прихода не было, соотв-но и отберет нужный контракт
21.01.2015 13:32
Mtirt
 
ТОгда это будет выглядеть так:
WO05600005658 - 00000000649
WO05600005658 - 00000095649
WO05600005658 - 00000195649

И что это тебе даст?
21.01.2015 18:49
Aligator
 
Цитата:
Mtirt ТОгда это будет выглядеть так:
WO05600005658 - 00000000649
WO05600005658 - 00000095649
WO05600005658 - 00000195649

И что это тебе даст?

Необходимо отобразить только последний действующий контракт:
WO05600005658 - 00000195649
23.01.2015 11:25
Aligator
 
не хочется быть навязчивым...но все-таки, не получится у кого-то попробовать с запросом разобраться?
23.01.2015 12:43
vdm
 
Так как у вас основания в накладных проставляются.
На каждую позицию спецификации (основание для товародвижения) или одно общее основание на весь документ?
Для поартикульных оснований не вижу смысла возиться, выше правильно расписали - там по каждой позиции свой контракт может вылезти.
Для общих оснований посмотрю на выходных.
23.01.2015 12:49
Aligator
 
Цитата:
vdm Так как у вас основания в накладных проставляются.
На каждую позицию спецификации (основание для товародвижения) или одно общее основание на весь документ?
Для поартикульных оснований не вижу смысла возиться, выше правильно расписали - там по каждой позиции свой контракт может вылезти.
Для общих оснований посмотрю на выходных.
А если поартикульно смотреть только на последний активный контракт ?
23.01.2015 12:55
vdm
 
В исходных условиях в результате требовалось
расход - контракт

с детализацией по позициям будет
расход - артикул1 - контракт
расход - артикул2 - контракт2
и т.д.
26.01.2015 10:01
vdm
 
Ну вот такое.
Т.е. не последний контракт, а строго по цепочке оснований.
Не вникал подробно в ситуацию, когда в основании прихода несколько заказов или в основании заказа несколько соглашений о поставке, поставил примитивный отбор по совпадению артикулов.
Статусы документов не проверяются.

Код:
SELECT t2.wo_id, t2.article, t2.wi_id, t2.or_id, t2.cq_id, 
       (SELECT d_cq.docco  
          FROM supermag.svdocnopricecq d_cq
         WHERE d_cq.doctype = 'CQ' AND d_cq.id = t2.cq_id
       ) co_id  
  FROM (
        SELECT t1.wo_id, t1.article, t1.wi_id, t1.or_id, 
               (SELECT MIN(b_cq.baseid) KEEP (DENSE_RANK FIRST ORDER BY s_cq.article ASC NULLS LAST)  
                  FROM supermag.smcommonbases b_cq, supermag.smspec s_cq
                 WHERE b_cq.doctype = 'OR' AND b_cq.id = t1.or_id AND b_cq.basedoctype = 'CQ'
                   AND s_cq.doctype(+) = b_cq.basedoctype AND s_cq.docid(+) = b_cq.baseid AND s_cq.article(+) = t1.article
               ) cq_id  
          FROM (
                SELECT s.docid wo_id, s.article, s.causeid wi_id,
                       (SELECT MIN(b_or.baseid) KEEP (DENSE_RANK FIRST ORDER BY s_or.article ASC NULLS LAST) or_id  
                          FROM supermag.smcommonbases b_or, supermag.smspec s_or
                         WHERE b_or.doctype = s.causetype AND b_or.id = s.causeid AND b_or.basedoctype = 'OR'
                           AND s_or.doctype(+) = b_or.basedoctype AND s_or.docid(+) = b_or.baseid AND s_or.article(+) = s.article
                       ) or_id  
                  FROM supermag.smdocuments d, supermag.smspec s
                 WHERE s.doctype = 'WO' 
                   AND d.opcode = 2
                   AND d.docstate = 3
                   AND d.locationfrom = :P_LOC
                   AND d.createdat BETWEEN :P_DATEFROM AND :P_DATETO
                   AND s.docid=d.id AND s.doctype=d.doctype
               ) t1
       ) t2
;
Опции темы


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

 

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