Вот код который я нашел ) Но я не знаю насколько он правильный т.е. он работает снимает маркировку к примеру и ставить знаю что ее можно подкорректировать под свои нужды. Мне просто интересно есть ли более простой способ ?
X++:
InventTrans _InventTrans;
InventTrans InventTrans;
InventDim _InventDim;
InventDim InventDim;
SalesLine _SalesLine;
Container con;
InventQty qty , qty2;
Container res;
Map recMAp = new MAp(Types::Integer, Types::Record);
Map recMAp2 = new MAp(Types::String, Types::Container);
TmpInventTransMark tmp;
MapIterator mti, mti2;
Map mapMarkNow = new map(types::Integer,types::Record);
Str mapKey ;
str mapKey(
InventTrans invTrans,
InventDim invDim
)
{
return invDim.mapKey()+'#'+enum2Str(invTrans.Direction);
}
;
While Select _SalesLine
where _SalesLine.SalesId == 'КЛ10-0111435'
{
while select ItemId, TransType, TransRefId, InventTransId, Direction, inventDimId, sum(qty), sum(qtySettled) from _InventTrans
group by ItemId, TransType, TransRefId, InventTransId, Direction, inventDimId
where _InventTrans.InventTransId == _SalesLine.InventTransId
&& _InventTrans.ValueOpen == inventTransOpen::Yes
&& _InventTrans.TransChildType == InventTransChildType::None
&& _InventTrans.PackingSlipReturned == noYes::No
join // maxof(RecId) from
_InventDim
Where _InventDim.inventDimId == _InventTrans.inventDimId
{
res = inventTrans::packTmpMark(_inventTrans.ItemId,_inventDim,_inventTrans.InventTransId,_inventTrans.Qty);
recMAp2.insert(mapKey, conpeek(res, 1));
}
if(recMAp2 && recMAp2.elements()> 0 )
{
mti = new MapIterator(recMAp2);
mti.begin();
while (mti.more())
{
recMAp = map::create(recMAp2.lookup(mti.key()));
mti.next();
}
}
mti = new MapIterator(recMAp);
mti.begin();
while (mti.more())
{
tmp.data( recMAp.lookup(mti.key()));
tmp.insert();
mti.next();
}
ttsbegin;
while select forupdate tmp
where (tmp.TransType == InventTransType::Purch
|| tmp.TransType == InventTransType::InventTransfer)
&& tmp.StatusReceipt == StatusReceipt::Ordered
&& tmp.InventDimId == _SalesLine.InventDimId
{
Info(strfmt("%1 %2 %3",_SalesLine.ItemId,tmp.InventTransId,tmp.Qty));
if (tmp.QtyMarked)
{
qty = -tmp.QtyMarked;
qty2 = tmp.QtyMarked;
}
else
{
qty = _SalesLine.SalesQty;
qty2 = -_SalesLine.SalesQty;
}
tmp.qtyMarkNow = qty;
tmp.update();
mapMarkNow.insert(tmp.RecId, tmp);
inventTrans.Qty = qty;
// inventTrans.costAmountPosted = Qty;
inventTrans.TransType = InventTransType::Sales;
inventTrans.TransRefId = tmp.TransRefId;
inventTrans.InventTransId = _SalesLine.InventTransId;
inventTrans.ItemId = _SalesLine.ItemId;
//+ снять
//- установить
if(qty < 0)
inventTrans::updateTmpMark(inventTrans.InventTransId, inventDim, qty ,mapMarkNow.pack());
else
inventTrans::updateTmpMark(inventTrans.InventTransId, inventDim, -qty ,mapMarkNow.pack());
//Pause;
}
ttscommit;
delete_from tmp;