Обновил для 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);
}
}