В общем нашел я причину. После обновления проводок по получению на транзитный склад, делается update строки и orig затирается, хотя он продолжает использоваться далее. Сделал следующую заплатку под этот случай:
X++:
if (! _dropEstimated)
{
origReceiveQty = this.orig().QtyRemainReceive;
movementFrom = InventMovement::construct(this);
estimatedFrom = InventUpd_Estimated::newInventMovement(movementFrom);
estimatedFrom.updateNow();
estimatedTransitTo = InventUpd_Estimated::newInventMovement(InventMovement::construct(this,InventMovSubType::TransferOrderTransitTo));
estimatedTransitTo.updateNow();
movementTransitFrom = InventMovement::construct(this,InventMovSubType::TransferOrderTransitFrom);
estimatedTransitFrom = InventUpd_Estimated::newInventMovement(movementTransitFrom);
// -->
if( !this.QtyRemainReceive &&
!this.orig().QtyRemainReceive &&
origReceiveQty )
{
estimatedTransitFrom.parmPreEstimated(-origReceiveQty);
estimatedTransitFrom.parmTransEstimated(0);
estimatedTransitFrom.parmEstimated(origReceiveQty);
}
// <--
// <GEEU>
//if return receipt only specialMarking should be made while create Estimated
if (!estimatedFrom.updEstimated() && estimatedTransitFrom.parmEstimated())
movementTransitFrom.parmInventRefTransId_RU(this.InventTransIdTransitFrom);
// </GEEU>
estimatedTransitFrom.updateNow();
estimatedTo = InventUpd_Estimated::newInventMovement(InventMovement::construct(this,InventMovSubType::TransferOrderTo));
// -->
if( !this.QtyRemainReceive &&
!this.orig().QtyRemainReceive &&
origReceiveQty )
{
estimatedTo.parmPreEstimated(origReceiveQty);
estimatedTo.parmTransEstimated(0);
estimatedTo.parmEstimated(-origReceiveQty);
}
// <--
estimatedTo.updateNow();
}