04.05.2007 12:25
dmware
 
В Супермаге, выбрав раздел, например, приходные накладные, установив требуемый фильтр, можно вывести список документов у которых заполнено поле основание.
Вопрос: а как определяется это самое "основание" для конкретного документа?
Если верить описанию структуры БД, в таблице SMSPEC существует такое поле CAUSEID- идентификатор документа-основания. Отчего данное поле заполнено только у некоторых документов? По какому принципу?
Беру произвольный документ в указанном разделе "Приходные накладные" (если имеет значение, статус - черновик) ищу его ID в smspec. Нахожу. Поле CAUSEID не заполнено. При том, что Супермаг предоставляет информацию о документе-основании.
04.05.2007 12:45
inna
 
У меня заказ поставщику, который стоит как основание приходной накладной проходит в таблице SMCommonBases. Все ли основания лежат там же - не знаю.
04.05.2007 12:50
dmware
 
Для каждого типа документа организована отдельная таблица.
Таблицы (представления): SVDOCUMENTS[тип документа].
Например для приходной накладной тип документа - WI, т.е. представление SVDOCUMENTSWI и т.д.
По крайней мере у меня так:)
Пишу запросы которые выводят информацию о документах, зарегистрированных в магазинах в течение дня (данные об идентификаторе документов, дате, поставщике и т.д., т.е. то же самое, что можно увидеть в упомянутом мною выше подразделе Супермага).
04.05.2007 17:01
Mtirt
 
У документов товародвижения, как минимум 2 вида оснований:
- общее основание (указазано в шапке, лежит в SMCommonBases)
- основание товародвижения (указано в спрецификации накладной, лежит в SMSpec)
Есть еще финансовые основания, SMFinBases.
Определись, что именно ты хочешь вытащить....
07.05.2007 08:04
dmware
 
Похоже то, что в SMCommonBases.
Хотел еще спросить (вопрос другого характера, но в рамках темы):
Цитата:
dmware Пишу запросы которые выводят информацию о документах, зарегистрированных в магазинах в течение дня (данные об идентификаторе документов, дате, поставщике и т.д., т.е. то же самое, что можно увидеть в упомянутом мною выше подразделе Супермага).
Осталось написать запрос для вывода накладных на перемещение. Написал следующее:
Код:
SELECT   SVDOCUMENTSIW_ID,
            SVDOCUMENTSIW_CREATEDAT,
            --SVDOCUMENTSIW_LOCATIONFROM, 
            SVDOCUMENTSIW_LOCATIONTO,
            SVDOCUMENTSIW_TOTALSUM,
            BASE,
            DOCSTATE
 FROM         
 (
 SELECT   SVDOCUMENTSIW.ID SVDOCUMENTSIW_ID,
          SVDOCUMENTSIW.CREATEDAT SVDOCUMENTSIW_CREATEDAT,          
          SMSTORELOCATIONS.NAME SVDOCUMENTSIW_LOCATIONTO,        
          SVDOCUMENTSIW.TOTALSUM SVDOCUMENTSIW_TOTALSUM,
          SUBSTR(SVDOCUMENTSIW.BASEDOCTYPEANDID, 4) BASE,
          DECODE(SVDOCUMENTSIW.DOCSTATE,
             0, 'Заблокирован',
             1, 'Черновик',
             2, 'Принят на складе',
             3, 'Принят полностью') DOCSTATE
             
                                           
 FROM     SVDOCUMENTSIW, SMSTORELOCATIONS                
 WHERE  
          DOCTYPE IN('IW') 
          AND SVDOCUMENTSIW.CREATEDAT <= to_date('03.05.2007', 'DD.MM.YYYY')
          AND SVDOCUMENTSIW.DOCSTATE < 3 
          
          AND SVDOCUMENTSIW.LOCATIONTO = SMSTORELOCATIONS.ID
 )
Чего не хватает, так это поля: SVDOCUMENTSIW_LOCATIONFROM, которое я закомментировал. Как мне его вывести корректно (мне нужен не идентификатор, а наименование места)?
07.05.2007 08:18
Mtirt
 
Еще раз в запрос включаешь таблицу SMSTORELOCATIONS с псевдонимом T1 каким нибудь
с условием
AND SVDOCUMENTSIW.LOCATIONFROM = T1.ID

И так же как для locationto подставляешь имя...
07.05.2007 08:28
dmware
 
Цитата:
Mtirt Еще раз в запрос включаешь таблицу SMSTORELOCATIONS с псевдонимом T1 каким нибудь
с условием
AND SVDOCUMENTSIW.LOCATIONFROM = T1.ID

И так же как для locationto подставляешь имя...
Здорово! Почти целый день тасовал эти подзапросы, а оказывается можно так элегантно сделать. Спасибо большое!

Запрос:
Код:
SELECT   SVDOCUMENTSIW.ID SVDOCUMENTSIW_ID,
          SVDOCUMENTSIW.CREATEDAT SVDOCUMENTSIW_CREATEDAT,
          T1.NAME SVDOCUMENTSIW_LOCATIONFROM,
          SMSTORELOCATIONS.NAME SVDOCUMENTSIW_LOCATIONTO,        
          SVDOCUMENTSIW.TOTALSUM SVDOCUMENTSIW_TOTALSUM,
          SUBSTR(SVDOCUMENTSIW.BASEDOCTYPEANDID, 4) BASE,
          DECODE(SVDOCUMENTSIW.DOCSTATE,
             0, 'Заблокирован',
             1, 'Черновик',
             2, 'Принят на складе',
             3, 'Принят полностью') DOCSTATE
             
                                           
 FROM     SVDOCUMENTSIW, SMSTORELOCATIONS, SMSTORELOCATIONS T1       
 WHERE  
          DOCTYPE IN('IW') 
          AND SVDOCUMENTSIW.CREATEDAT <= to_date('03.05.2007', 'DD.MM.YYYY')
          AND SVDOCUMENTSIW.DOCSTATE < 3 
          
          AND SVDOCUMENTSIW.LOCATIONTO = SMSTORELOCATIONS.ID
          AND SVDOCUMENTSIW.LOCATIONFROM = T1.ID 

 ORDER BY DOCSTATE
Часовой пояс GMT +3, время: 14:21.

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