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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.01.2012, 12:06   #1  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
2 Rimantas

Одним запросом это можно сделать через Outer Join с группировкой, примерно так:

X++:
Select sum(xxxQty), sum(yyyAmount), ... from InventSum
 group by ItemId, InventDimId, ...
outer join InventTrans
 group by ItemId 
where InventTrans.InventDimId == InventSum.InventDimId
    && InventTrans.ItemId         == InventSum.ItemId
    && InventTrans.DatePhysical >= dBgn;
Хинты, условия и нужные поля (там где многоточия) добавить по вкусу...

В цикле проверять заполненность поля InventTrans.ItemId - если есть, то это ваш первый случай, если нет - второй.

Насколько это будет быстрее или медленнее, и, соответсвенно, целесообразно использовать, проверьте сами на своих данных.
__________________
Zhirenkov Vitaly
Старый 04.01.2012, 14:18   #2  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от ZVV Посмотреть сообщение
2 Rimantas

Одним запросом это можно сделать через Outer Join с группировкой, примерно так:

X++:
Select sum(xxxQty), sum(yyyAmount), ... from InventSum
 group by ItemId, InventDimId, ...
outer join InventTrans
 group by ItemId 
where InventTrans.InventDimId == InventSum.InventDimId
    && InventTrans.ItemId         == InventSum.ItemId
    && InventTrans.DatePhysical >= dBgn;
Хинты, условия и нужные поля (там где многоточия) добавить по вкусу...

В цикле проверять заполненность поля InventTrans.ItemId - если есть, то это ваш первый случай, если нет - второй.

Насколько это будет быстрее или медленнее, и, соответсвенно, целесообразно использовать, проверьте сами на своих данных.
Дело в том что в отчете может так выглядит :
товар кол1 приход отход кол2
тов1 0 10 -10 0 - в инветСумме уже нету , но были движения ,
тов2 10 0 -10 0 - тоже самое ,
тов22 0 10 0 10 - были движения , есть в инвентсумме ,
тов3 10 0 0 10 - нету движении ...

В моем варянте , 2-ом , чтобы неискать я сделал условие "!= 0" для количества в инвентсумме - чтобы поскорее все работало ... А можно как нибудь ещё добавить "или" в query ИнвентСума такое ?
Старый 06.01.2012, 00:00   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Дело в том что в отчете может так выглядит :
товар кол1 приход отход кол2
тов1 0 10 -10 0 - в инветСумме уже нету , но были движения ,
тов2 10 0 -10 0 - тоже самое ,
тов22 0 10 0 10 - были движения , есть в инвентсумме ,
тов3 10 0 0 10 - нету движении ...

В моем варянте , 2-ом , чтобы неискать я сделал условие "!= 0" для количества в инвентсумме - чтобы поскорее все работало ... А можно как нибудь ещё добавить "или" в query ИнвентСума такое ?
1. Создайте новую ветку, как попросили выше. Или лучше попросить модераторов нужное перенести в отдельную ветку...

2.
Цитата:
А можно как нибудь ещё добавить "или" в query ИнвентСума такое ?
В данном случае речь про мой запрос?
Тогда ответ - Нет. Придётся анализировать внутри цикла, что либо есть InventTrans.ItemId || есть InventSum.PhysicalInvent...
__________________
Zhirenkov Vitaly
Старый 06.01.2012, 14:27   #4  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Хочу предостеречь тех, кто решит добавить поле InventLicationId в таблицу InventSum.

В ранней версии (3,0) делали такое. Это давало (наверное) какие то улучшения по производительности некоторых "самописных" отчетов, едва заметные.

Но с переходом на ax2009 всплыла такая особенность. Дело в том, что для определения (например) остатков номенклатуры внутри транзакции в новых версиях Ax используются данные из двух таблиц
- InventSum
- InventSumDelta

Поэтому делая запрос лишь к InventSum (из собственно написанного кода) внутри транзакции можно получить искаженные данные.

Это конечно, не относится к работе отчетов, которые будут работать нормально.

Но попытка получить остатки по номенклатуре (например при резервировании) делая прямой запрос к inventSum вернет ошибочный результат, если этот запрос делается в транзакции, в которой по данной номенклатуре были изменения в количестве...

Вывод:
Использовать стандартные классы inventOnHand, тогда проблем не будет.

В общем от поля InventLicationId пришлось отказаться.
При этом потери скорости работы старых отчетов не заметно...
За это сообщение автора поблагодарили: Logger (6), Bega (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: Fields modifiedDateTime and modifiedBy on Table InventSum Blog bot DAX Blogs 0 30.12.2010 00:12
DAX 2009 InventSum Кнопка запрос - ошибка f18 DAX: Программирование 0 09.04.2010 14:51
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Ошибка при разноске складских движений Starling DAX: Администрирование 9 12.10.2007 14:21
Временная таблица + RLS leshy DAX: Программирование 6 27.04.2006 12:39
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:58.