|
![]() |
#1 |
Участник
|
Цитата:
Не. Этот класс используется сугубо в WMS. Этот класс позволяет хранить результаты и перебирать их повторно в алгоритме оптимального поиска ячеек. В остальных случаях этот класс явно избыточен, на мой взгляд. Кроме того, этот класс выбирает несколько результатов в цикле (!) при помощи InventOnHand. А inventOnHand заточен на получение итога по одной аналитике. В цикле этот класс чудовищно неэффективен. А следовательно, неэффективен и InventDimOnHand. По-моему, InventDimOnHand был и остается примером крайне неудачного использования инструмента InventOnHand. Разработчикам InventDimOnHand надо было использовать InventSum::newQuery, а не InventOnHand. Или я чего-то не понимаю? |
|
![]() |
#2 |
Участник
|
InventOnHand, конечно
![]() Dim я туда случайно всунул, так как АХ не открыл, чтобы проверить, что это тот класс, который на уме. Сорри за запутывание ![]() Вот пример написал, что исправиться ![]() X++: static void InventOnHandExample(Args _args) { InventDim inventDim; InventDimParm inventDimParm; #define.InventLocationId("MW") #define.ItemId("ESB-005") ; inventDimParm.InventLocationIdFlag = NoYes::Yes; inventDim.InventLocationId = #InventLocationId; box::info(strFmt("%1", InventOnHand::newItemDim(#ItemId, inventDim, inventDimParm).availPhysical())); } А про InventSum::newQuery() - ты немного просто напутал, когда написал цикл. Ведь этот запрос, по сути, уже возвращает готовый запрос с агрегированием, поэтому цикла там никогда не будет - хотя код, естественно, будет работать. |
|
![]() |
#3 |
Участник
|
Цитата:
![]() Цикла не будет только в этом примере. Я специально сделал группировку как у Тринха. При его группировке и условиях цикл действительно не нужен. В реальности параметры ParmCriteria, ParmGroupBy могут и не совпадать. А также ParmGroupBy может содержать больше галочек, чем ParmCriteria. Тогда цикл очень даже нужен. Кстати, InventOnHand как раз предполагает совпадение. ![]() Я же старался написать действительно универсальный код, который можно использовать как паттерн в любых случаях. Какие бы галки не включили в ParmCriteria и ParmGroupBy - мой код будет работать корректно. |
|
![]() |
#4 |
Участник
|
Да. Единственное ограничение - не наод использовать конструкцию с InventOnHand внутри цикла. Только для одноразового запроса.
|
|
![]() |
#5 |
Участник
|
Кстати, если говорить об аккуратности и краткости при предположениях и в частных случаях...
Если нужно получить только по непустым складским аналитикам, то можно упростить и унифицировать инициализацию InventDimParm. Вот так. X++: static void InventOnHandExample(Args _args) { InventDim inventDim; InventDimParm inventDimParm; #define.InventLocationId("MW") #define.ItemId("ESB-005") ; inventDim.InventLocationId = #InventLocationId; inventDimParm.initFromInventDim(InventDim); // галочки берем из непустых полей InventDim info(strFmt("%1", InventOnHand::newItemDim(#ItemId,inventDim,inventDimParm).availPhysical() )); } |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|