AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2017, 10:41   #1  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Вопрос по запросу
Здравствуйте!

Изучаю структуру базы данных для Microsoft Dynamic AX 2009 и пишу SQL-запрос для выгрузки отгрузок, возвратов и продаж из базы данных путем соединением таблиц CUSTINVOICEJOUR и CUSTINVOICETRANS.

Код:
Declare @StartDate date ='2017-08-10'
Declare @EndDate date ='2017-08-10'

SELECT	
	*
FROM
	CUSTINVOICEJOUR
INNER JOIN
	CUSTINVOICETRANS
ON
	CUSTINVOICEJOUR.RECID=CUSTINVOICETRANS.RECID
WHERE	
	(CUSTINVOICEJOUR.INVOICEDATE >= @StartDate AND CUSTINVOICEJOUR.INVOICEDATE <=@EndDate)	
	AND
	CUSTINVOICEJOUR.ORDERACCOUNT='00001грд'
Я немного запутался и есть сомнение: те ли я использую таблицы в запросе для выгрузки данных об отгрузках и возвратах? Если те, то те ли колонки использую для соединения? Что еще в фильтре надо указывать типа статусы накладных, вычерки и т. д.?
Старый 11.12.2017, 10:46   #2  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
787 / 313 (12) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от axapter Посмотреть сообщение
Код:
CUSTINVOICEJOUR.RECID=CUSTINVOICETRANS.RECID
Можно полюбопытствовать, что навело на мысль о такой противоестественной связи таблиц заголовка и строк ?
__________________
Axapta will die, MorphX stay forever
Старый 11.12.2017, 10:51   #3  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Можно полюбопытствовать, что навело на мысль о такой противоестественной связи таблиц заголовка и строк ?
Я предположил, в структуре базы данных для аксапты пытаюсь разобраться.
Старый 11.12.2017, 11:44   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
787 / 313 (12) ++++++
Регистрация: 24.01.2005
Адрес: Томск
как-то вот так
Миниатюры
Нажмите на изображение для увеличения
Название: custinvoicetrans.jpg
Просмотров: 240
Размер:	61.0 Кб
ID:	11757  
__________________
Axapta will die, MorphX stay forever
Старый 11.12.2017, 12:22   #5  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
SQL-запрос для выгрузки отгрузок, возвратов и продаж
Есть еще табличка InventTrans (складские движения), LedgerTrans (бух проводки) и CustTrans (проводки по клиенту).
В зависимости от необходимых полей в выборке можно вместо CustInvoice* таблиц взять какую-нибудь из этих.

Если, к примеру, если нет необходимости тянуть данные по выручке - то можно глянуть в InventTrans.
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2017, 12:44   #6  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Я правильно понимаю, что из таблицы CUSTINVOICETRANS можно выгрузить только отгрузку (поле QTY), а для получения возврата нужно еще таблицу соединять? Аналогично для реализации, если не расчетно в запросе (=отгрузка-возвраты).
Старый 11.12.2017, 13:02   #7  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Таблицы CUSTINVOICETRANS и INVENTTRANS. Какая из таблиц учитывает вычерки? Или вычерки это отдельная таблица?
Старый 11.12.2017, 13:10   #8  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
Таблицы CUSTINVOICETRANS и INVENTTRANS. Какая из таблиц учитывает вычерки? Или вычерки это отдельная таблица?
А что такое вычерки?
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Ace of Database (5).
Старый 11.12.2017, 13:12   #9  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
Я правильно понимаю, что из таблицы CUSTINVOICETRANS можно выгрузить только отгрузку (поле QTY), а для получения возврата нужно еще таблицу соединять? Аналогично для реализации, если не расчетно в запросе (=отгрузка-возвраты).
Соединять ничего не надо. Надо смотреть на знак QTY. Положительный - это отгрузка. Отрицательный - возврат
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2017, 13:18   #10  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А что такое вычерки?
Не довезли, обратно на склад.
Старый 11.12.2017, 13:20   #11  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Надо смотреть на знак QTY. Положительный - это отгрузка. Отрицательный - возврат
А может быть наоборот, то есть положительная это возврат, а отрицательная это отгрузка? То есть исключения?
Старый 11.12.2017, 13:37   #12  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
Не довезли, обратно на склад.
Документ либо есть, либо нет. Понятия "Не довезли" в таблицах CustInvoice* нет

Цитата:
Сообщение от axapter Посмотреть сообщение
А может быть наоборот, то есть положительная это возврат, а отрицательная это отгрузка? То есть исключения?
Может... Но для таблиц CustInvoice* именно так, как я сказал. В таблице InventTrans "+" - это приход, а "-" - расход.
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2017, 14:28   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,401 / 887 (32) +++++++
Регистрация: 13.01.2004
Цитата:
Сообщение от axapter Посмотреть сообщение
Здравствуйте!

Изучаю структуру базы данных для Microsoft Dynamic AX 2009 и пишу SQL-запрос для выгрузки отгрузок, возвратов и продаж из базы данных путем соединением таблиц CUSTINVOICEJOUR и CUSTINVOICETRANS.

(...)

Я немного запутался и есть сомнение: те ли я использую таблицы в запросе для выгрузки данных об отгрузках и возвратах? Если те, то те ли колонки использую для соединения? Что еще в фильтре надо указывать типа статусы накладных, вычерки и т. д.?
Лично мне в изучении структуры данных помогает существующий в Axapta инструмент просмотра настроек открытой формы.

1. Открываете форму с отображением нужных таблиц. В данном случае накладную клиента
2. Правой клавишей мыши по объекту формы и в открывшемся контекстном меню выбираете пункт "Настройки"
3. В открывшейся форме настроек формы переходите на закладку "Запрос" и смотрите, какие есть связи (Link, DynaLink) и ограничения (Range)

Замечание - насколько я помню, факт наличия пункта "Настройка" и закладки "Запрос" в Ax2009 регулируется правами доступа. Т.е. если у Вас этого нет, то смотрите права. Сейчас не помню, какие именно это ключи

Что есть "отгрузка", "возврат" и "продажа" - это надо предметно выяснять у финансистов. Скорее всего, вам придется делать еще связку с исходными документами, чтобы брать реквизиты из них. Но, возможно, будет достаточно анализа поля CustInvoiceJour.RefNum и знака количества (суммы).

Т.е. следует понимать, что отгрузка и возврат с точки зрения "стандарта" Axapta - это одно, а вот с точки зрения пользователей - это может быть совсем другое
Миниатюры
Нажмите на изображение для увеличения
Название: CustInvoice.PNG
Просмотров: 203
Размер:	27.3 Кб
ID:	11758  
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 11.12.2017, 14:57   #14  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Отрицательный - возврат
А это какой возврат? По дате клиента (дата счет фактуры клиента) или дате проводки (поставки)?
Старый 11.12.2017, 15:08   #15  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Счет-фактура в АХ не документ в том смысле, что он не имеет проводки. Это так... чисто российская справка.
Дата - это та, которая стоит в записи в таблице. А уж она будет той, которой сделали документ по возврату или сторно. Любое действие, математически возвращающее товар на склад
__________________
Возможно сделать все. Вопрос времени
Старый 12.12.2017, 09:15   #16  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
В таблице InventTrans "+" - это приход, а "-" - расход.
То есть одновременно в одной строке Дата+ТТ+SKU (или Дата+ТТ+SKU + [Тип документа]) не может быть и приход, и расход. Если было, то две строки. Верно?
Старый 12.12.2017, 09:59   #17  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
То есть одновременно в одной строке Дата+ТТ+SKU (или Дата+ТТ+SKU + [Тип документа]) не может быть и приход, и расход. Если было, то две строки. Верно?
Одновременно и приход и расход в одной строке InventTrans быть не может.
Данные по Дате и Типу документа в строке есть (только для отгрузки и возвратов - тип один - Заказ на продажу). Номер документа тоже есть (точнее номер накладной, сгенерированный системой и код заказа на продажу, сгенерированный системой).

Сопоставление между строкой возврата и строкой исходной расходной накладной - тоже есть. InventTrans(возврат).InventTransIdReturn -> InventTrans(продажа).InventTransId. Но в общем случае связка может быть M:N. Для приходных накладных - связка осуществляется по другим полям.
__________________
Возможно сделать все. Вопрос времени
Старый 12.12.2017, 13:50   #18  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Пока выгружаю из таблиц CUSTINVOICEJOUR и CUSTINVOICETRANS и получается такой запрос
Код:
Declare @StartDate date ='2017-07-01'
Declare @EndDate date ='2017-07-21'

SELECT	
	CUSTINVOICEJOUR.ORDERACCOUNT,
	CUSTINVOICEJOUR.INVOICEACCOUNT,
	CUSTINVOICEJOUR.INVOICEDATE,
        CUSTINVOICEJOUR.REFNUM,
        CUSTINVOICETRANS.ITEMID,
	CUSTINVOICETRANS.QTY,	
	CASE WHEN CUSTINVOICETRANS.QTY>0 THEN CUSTINVOICETRANS.QTY END Отгрузка,
	CASE WHEN CUSTINVOICETRANS.QTY<0 THEN -1 * CUSTINVOICETRANS.QTY END Возврат,
FROM
	CUSTINVOICEJOUR
INNER JOIN
	CUSTINVOICETRANS
ON
	(CUSTINVOICEJOUR.SALESID=CUSTINVOICETRANS.SALESID
	AND
	CUSTINVOICEJOUR.INVOICEID=CUSTINVOICETRANS.INVOICEID
	AND
	CUSTINVOICEJOUR.INVOICEDATE=CUSTINVOICETRANS.INVOICEDATE
	AND
	CUSTINVOICEJOUR.NUMBERSEQUENCEGROUP=CUSTINVOICETRANS.NUMBERSEQUENCEGROUP)
WHERE	
	(CUSTINVOICEJOUR.INVOICEDATE >= @StartDate AND CUSTINVOICEJOUR.INVOICEDATE <=@EndDate)	
	AND
	CUSTINVOICEJOUR.ORDERACCOUNT='00001ГРД'
	AND
	CUSTINVOICETRANS.ITEMID = 00001
Время выполнения запроса 5 секунд. Но в результате нету возвратов. А возвраты были. Почему так? Тут особенность в том, что в день поставки отгружается продукция и принимается возврат от предыдущих поставок

Выручка будет как расчетная?

Напоминаю, нужно в итоге получить таблицу со следующими колонками:
Код юр. лица, Код ТТ, SKU, Дата, Отгрузки шт., Возврат шт., Реализация шт..
Старый 12.12.2017, 14:33   #19  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,648 / 2140 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axapter Посмотреть сообщение
Время выполнения запроса 5 секунд.
Сделайте еще джойн по DataareaId. Время может уменьшиться. Запросы из кода X++ и запросы, которые АХ посылает к БД немного разные. АХ посылает запрос еще с фильтрацией по DataareaId по данным табличкам.

Цитата:
Сообщение от axapter Посмотреть сообщение
Но в результате нету возвратов. А возвраты были. Почему так?
Сложно дать ответ не видя данные. Думаю, что Вам надо вручную найти пару накладных и на них оттестировать конечный вид запроса. Возможно он немножко изменится. На форуме можно дать только концептуальное направление. До финального вида нужно уже идти самостоятельно

Цитата:
Сообщение от axapter Посмотреть сообщение
Выручка будет как расчетная?
В конкретном Вами приведенном запросе выручки вообще нет, т.к. запрос выбирает только количество.
__________________
Возможно сделать все. Вопрос времени
Старый 12.12.2017, 14:54   #20  
axapter is offline
axapter
Участник
 
47 / 10 (1) +
Регистрация: 20.11.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Сделайте еще джойн по DataareaId. Время может уменьшиться.
Теперь быстрее стало
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос по проектам Фиксированная цена PSA DAX: Функционал 9 29.06.2006 14:23
Еще вопрос про покрытие по аналитикам в Сводном планировании rt2 DAX: Функционал 3 24.03.2006 18:56
Вопрос по запросу (query) Александр_1975 DAX: Программирование 2 23.01.2004 17:35
Вопрос по Запросу отчета ravil DAX: Программирование 0 18.12.2003 17:06
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:27.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.