Найти общее количество доступных и доступных физических предметов / складов - PullRequest
5 голосов
/ 27 января 2012

У меня есть метод для поля отображения, который выполняет следующее:

return InventSum::find(_salesLine.ItemId, InventDim::_salesLine.InventDimId).AvailPhysical();

Это дает мне доступный физический материал для линейного сайта / склада / местоположения.

Iнужно посмотреть общее количество доступных только для сайта / склада.Я думаю, что мне нужно искать InventDim по Item / Warehouse, чтобы получить Inventdimid, но я не могу найти метод, поэтому я подозреваю, что это неверно.

Может кто-нибудь помочь?

Ответы [ 4 ]

4 голосов
/ 30 января 2012

Мое рабочее решение ...

InventDimParm       invDimParm;
InventDim           warehouseInvDim;
InventDim           salesLineInventDim;
;

salesLineInventDim = _salesLine.inventDim();

warehouseInvDim.InventSiteId = salesLineInventDim.InventSiteId;
warehouseInvDim.InventLocationId = salesLineInventDim.InventLocationId;

warehouseInvDim = InventDim::findOrCreate(warehouseInvDim);
invDimParm.initFromInventDim(InventDim::find(warehouseInvDim.inventDimId));

return InventSum::findSum(_salesLine.ItemId,warehouseInvDim,invDimParm).availOrdered();

Я знаю, что это для vendOrdered (), но оно работает точно так же для utilPhysical ()

2 голосов
/ 03 февраля 2012

Следующее задание находит все строки продаж со статусом «Открытый заказ», у которых в наличии имеется Доступное физическое количество, соответствующее всем измерениям, указанным в линиях продаж, кроме местоположения:

static void FindOpenSalesLineAvailPhys(Args _args)
{
    SalesLine salesline;
    InventDim inventDim;
    InventDimParm inventDimParm;
    InventOnHand inventOnHand;
    ;

    while select salesLine where salesLine.SalesStatus == SalesStatus::Backorder
    {
        inventDim = salesLine.inventDim();
        inventDimParm.initFromInventDim(inventDim);
        inventDimParm.WMSLocationIdFlag = NoYes::No;
        inventOnHand = InventOnHand::newItemDim(salesLine.ItemId, inventDim, inventDimParm);
        if (inventOnHand.availPhysical())
        {
            info(strfmt("Sales Order %1 Line %2 Item Id %3 Available Physical (ignoring Location) %4",
                salesLine.salesId, salesLine.LineNum, salesLine.ItemId, inventOnHand.availPhysical()));
        }
    }
}
2 голосов
/ 28 января 2012

Вы должны использовать класс InventOnhand.

Суммирует имеющиеся в наличии значения на основе таких критериев, как идентификатор изделия и размеры инвентаря.

Есть много вариантов использования в AX, ищите узел класса.

0 голосов
/ 27 января 2012

По сути, вы устанавливаете значения InventDim так, как вы хотите их искать, а затем выполняете InventDim :: FindOrCreate, чтобы увидеть, существует ли измерение инвентаризации, или его нужно создать, и будет использоваться новая числовая последовательность. , Это используется для того, чтобы таблица InventDim не хранила все возможные комбинации измерений. Кроме того, потому что, если у вас есть какие-либо сериализованные продукты, таблица не может хранить все комбинации, поэтому она хранит только те, которые ей нужны.

InventDim   inventDim;
SalesLine   _salesLine;
;

inventDim.InventSiteId      = 'mySite';
inventDim.InventLocationId  = 'myWarehouse';
inventDim   = InventDim::findOrCreate(inventDim);

return InventSum::find(_salesLine.ItemId, inventDim.inventDimId).AvailPhysical();
...