Пожалуйста: приведенный ниже код копирует поле из SalesLine в ReqPO. Практически ваш случай.
X++:
// EVGGL, PT0616 -->
protected void TCHUpdatePlannedOrderSalesPoolId(ReqSetupDim _setupDim)
{
ReqTrans reqTrans;
ReqTransCov reqTransCov;
ReqTrans reqTransSettled;
SalesPoolId salesPoolId, oldSalesPoolId;
ReqPO reqPO;
Map mapPlannedOrder;
MapIterator mi_PlannedOrder;
Map mapReqTransReceipts;
ReqTransCache reqTransCache = reqPlanData.reqTransCache();
mapPlannedOrder = reqTransCache.mapPlannedOrder();
mapReqTransReceipts = reqTransCache.findReceipts(_setupDim);
if (! mapPlannedOrder || ! mapReqTransReceipts)
return;
mi_PlannedOrder = new mapIterator(mapPlannedOrder);
mi_PlannedOrder.begin();
while (mi_PlannedOrder.more())
{
// ignore planned order coming from another cycle
if (! mapReqTransReceipts.exists(mi_PlannedOrder.key()))
{
mi_PlannedOrder.next();
continue;
}
reqTrans = mapPlannedOrder.lookup(mi_PlannedOrder.key());
salesPoolId = "";
oldSalesPoolId = "";
if (reqTrans.CovQty && ! reqTrans.IsDerivedDirectly && ! reqTrans.IsForecastPurch &&
(reqTrans.RefType == ReqRefType::ItemPlannedOrder || reqTrans.RefType == ReqRefType::BOMPlannedOrder))
{
reqTransCov = reqTrans.selectCovJoinTrans(true);
reqTransSettled = reqTransCov.joinChild();
while (reqTransCov)
{
if (reqTransCov.Qty == 0)
continue;
if (! reqTransSettled.InventTransId || ! reqTransSettled.RefId || reqTransSettled.RefType != ReqRefType::Sales)
{
// There cannot be any common relation
salesPoolId = "";
break;
}
salesPoolId = SalesLine::findInventTransId(reqTransSettled.InventTransId).TCHSalesPoolId;
if (! salesPoolId)
break;
if (oldSalesPoolId && salesPoolId != oldSalesPoolId)
{
salesPoolId = "";
break;
}
oldSalesPoolId = salesPoolId;
next reqTransCov;
}
if (salesPoolId)
{
reqPO = reqTrans.reqPo(true);
reqPO.TCHSalesPoolId = salesPoolId;
reqPO.doUpdate();
}
}
mi_PlannedOrder.next();
}
}
Этот новый метод вызывается из ReqCalc.covCalc:
X++:
...
}
// EVGGL, PT0616 -->
this.TCHUpdatePlannedOrderSalesPoolId(setupDim);
// EVGGL, PT0616 <--
}
ttscommit;
}
catch (Exception::Deadlock)
...
Разумеется, все это работает только в модели планирования "1:1". В противном случае вы получаете одну закупку, которая "закрывает" несколько заказов на продажу.