Показать сообщение отдельно
Старый 08.10.2020, 08:22   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А чем union не устраивает ? В том плане, что как писал Евгений - для номенклатуры используется ИЛИ, т.е. остатки либо по inventsum считать, либо по WHSInventReserve.

Интересует сам запрос по WHSInventReserve ?

C WHS опыта мало, но я бы смотрел в сторону следующих методов(если уровень склада одинаков во всех иерархиях)
WhsInventOnHand\getReserveAvailQty
WhsInventOnHand\getAvailPhysicalForLevel

Либо запрос из SP, в случае, если до склада есть другие аналитики (например у вас иерархия [статус, сайт, склад]), возможно запрос можно использовать и более универсально - для всех данных, правда по производительности может быть хуже
чем из классов AX 2012 R3. Ускорение sp_WHSOnHand и sp_WHSOnHandWithDelta


В итоге должно получится примерно следующее :
X++:
//ваш запрос по inventsum
union 
 //думаю здесь запрос по inventReserve в реальности будет по сложнее
        select ItemId, minOf(AvailPhysical) from inventReserve
            group by ItemId
             where inventReserve.HierarchyLevel >= locationLevel
            join InventLocationId from inventDim
group by InventLocationId
where inventReserve.InventDimId == inventDim.InventDimId
//или
        select ItemId, sum(AvailPhysical) from inventReserve
            group by ItemId
             where inventReserve.HierarchyLevel == locationLevel
            join InventLocationId from inventDim
group by InventLocationId
where inventReserve.InventDimId == inventDim.InventDimId
// или запрос из SP
Как правильно не знаю, но опять таки в стандарте на inventSum есть метод newQuery, где ItemId не обязательный параметр, аналогично и на табличке WHSInventReserve есть метод newAvailQuery(правда в нём не делается группировка по ItemId, если пустое, но может быть где в других методах затем её вызывают)
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: trud (1).