22.01.2007, 11:22 | #1 |
Участник
|
Как правильно создать в коде X++ новый planned order (ReqPO, ReqTrans)
Помогите, кто может!
Как правильно создать в коде X++ новый planned order (ReqPO, ReqTrans). Я делаю так: Цитата:
reqPO.clear();
reqTrans.clear(); ttsbegin; reqPO.ReqPlanId = "P??suunnit"; reqPO.RefType = ReqRefType::ItemPlannedOrder; reqPO.ItemId = ItemId; reqPo.ReqDateDlv = systemDateGet(); reqPO.Qty = str2num(ReqQuantity); // reqPO.CovInventDimId = Warehouse; // reqPO.initFromItemId(ItemId); reqPO.insert(); reqTrans.initFromReqPo(reqPO); reqTrans.insert(); ttscommit; В общем, помогите, как правильно создать новый planned order - каие ф-ции, методы надо вызывать... Заранее спасибо. |
|
22.01.2007, 11:39 | #2 |
Участник
|
А Вы создайте новый заказ, в форме "Спланированные заказы". Там вываливается форма, в которой указываются входящие параметры. Потом Аксапта начинает колбасить то что надо. Так вот если вы нормальный программер, то загляните в этот механизм с помощью трассировки и посмотрите, что там происходит
|
|
22.01.2007, 16:58 | #3 |
Участник
|
reqPO.CovInventDimId = Warehouse; //
здесь ошибка, изучите как устроен InventDim и все заработает. Ну, и конечно reqPO.initFromItemId(ItemId) не на своем месте - должно быть до инициализации даты, кол-ва, т.к. в этом методе эти поля переписываются |
|
23.01.2007, 10:52 | #4 |
Участник
|
Спасибо.
Вроде работает: Цитата:
reqPO.clear();
reqTrans.clear(); ttsbegin; reqPlanId = reqPlanSched::defaultStaticId(); reqPlan = reqPlan::find(reqPlanId); if (!reqPlan.RecId) this.addError("@SYS28502",KRBErrorLevel::E2_Warning); reqPO.ReqPlanId = reqPlanId; reqPO.RefType = ReqRefType::ItemPlannedOrder; reqPO.initFromItemId(ItemId); reqPO.Qty = str2num(ReqQuantity); reqPO.PurchQty = str2num(ReqQuantity); inventDim.InventLocationId = Warehouse; reqPO.CovInventDimId = InventDim::findOrCreate(inventDim).inventDimId; reqPO.PurchUnit = inventTableModule::find(ItemId,moduleInventPurchSales::Invent).UnitId; reqPO.insert(); reqTrans.insertFromReqPo(reqPO); ttscommit; |
|
23.01.2007, 11:50 | #5 |
Участник
|
Обратите внимание, что если у Вас разные InventUnit и PurchUnit для ном. единицы, то необходимо применить стандартную конверсию из reqPO.Qty в reqPO.PurchQty.. и не забывайте про округления - это потенциальный источник различных "неприятностей"
|
|
02.06.2016, 18:00 | #6 |
Участник
|
Обновил для AX2012 и оформил в функцию:
X++: static void CreateReq(ItemId ItemId, Qty Qty, InventDimId InventDimId, ReqPOType ReqPOType,TransDate TransDate=today(), InventLocationId fromLoc="", ReqPlanId reqPlanId = ReqParameters::find().CurrentReqPlanIdSchedDynamic) { ReqPO reqPO; ReqTrans ReqTrans; ReqPlan ReqPlan; ReqPlanData reqPlanData = ReqPlanData::newReqPlanId(reqPlanId); reqTransPOCreate reqTransPOCreate; BOMVersion bomVersion; InventTable InventTable=InventTable::find(ItemId); InventDim InventDim=InventDim::find(InventDimId); InventLocationId toLoc=InventDim.InventLocationId; ; reqPO.clear(); reqTrans.clear(); reqPlan = reqPlan::findReqPlanId(reqPlanId); if (!reqPlan.RecId) Error("@SYS28502"); reqPO.PlanVersion = reqPlan.RecId; reqPO.initReqPOType( ReqPlanData.parmReqPlanVersionRefRecId(), reqPoType); reqPO.initFromItemId(ItemId); reqPO.Qty = Qty; reqPO.PurchQty = Qty; reqPO.CovInventDimId = inventDimId; reqPO.PurchUnit = inventTableModule::find(ItemId,moduleInventPurchSales::Invent).UnitId; reqPO.ReqDateDlv=TransDate; if(reqPO.validateFieldValue(fieldStr(ReqPO, ItemId))&&reqPO.validateWrite()) { switch(reqPoType) { case ReqPOType::Transfer: ReqTransFormPO::validateFromInventLocationId(fromLoc, toLoc,reqPO); break; case ReqPOType::Production: reqPO.ItemBomId=InventTable.bomId(TransDate,Qty,InventDim); reqPO.ItemRouteId=InventTable.routeId(TransDate,Qty,InventDim); break; case ReqPOType::Purch: reqPO.VendId=InventTable.PrimaryVendorId; break; } reqPO.insert(); ReqPlannedOrder::construct().insertFromForm(reqPO,inventDim,fromLoc,toLoc,true,true); } } |
|
|
За это сообщение автора поблагодарили: AK-76 (1). |
Теги |
сводное планирование |
|
|