|
![]() |
#1 |
MCITP
|
![]()
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 |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от 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 ИнвентСума такое ? |
|
![]() |
#3 |
MCITP
|
![]() Цитата:
Сообщение от 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 ИнвентСума такое ? 2. Цитата:
А можно как нибудь ещё добавить "или" в query ИнвентСума такое ?
Тогда ответ - Нет. Придётся анализировать внутри цикла, что либо есть InventTrans.ItemId || есть InventSum.PhysicalInvent...
__________________
Zhirenkov Vitaly |
|
![]() |
#4 |
Участник
|
Хочу предостеречь тех, кто решит добавить поле InventLicationId в таблицу InventSum.
В ранней версии (3,0) делали такое. Это давало (наверное) какие то улучшения по производительности некоторых "самописных" отчетов, едва заметные. Но с переходом на ax2009 всплыла такая особенность. Дело в том, что для определения (например) остатков номенклатуры внутри транзакции в новых версиях Ax используются данные из двух таблиц - InventSum - InventSumDelta Поэтому делая запрос лишь к InventSum (из собственно написанного кода) внутри транзакции можно получить искаженные данные. Это конечно, не относится к работе отчетов, которые будут работать нормально. Но попытка получить остатки по номенклатуре (например при резервировании) делая прямой запрос к inventSum вернет ошибочный результат, если этот запрос делается в транзакции, в которой по данной номенклатуре были изменения в количестве... Вывод: Использовать стандартные классы inventOnHand, тогда проблем не будет. В общем от поля InventLicationId пришлось отказаться. При этом потери скорости работы старых отчетов не заметно... |
|
|
За это сообщение автора поблагодарили: Logger (6), Bega (5). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|