Источник:
http://sashanazarov.blogspot.com/201...de-part-2.html
==============
In
this post, I provided a code sample that manipulated
InventMarking form from code to complete an ad-hoc task.
Today I had to implement marking from X++ code again, but this time it should have been run on the server side on a daily basis, so I did have to use
\Data Dictionary\Tables\TmpInventTransMark\Methods\updateTmpMark
method instead of the form.
As code samples I found in the Internet were outdated, I decided to post here code that did compile on my box (DAX 2012 CU3):
static void testXppMarking
(Args _args
)
{
InventTrans issueInventTrans;
TmpInventTransMark tmpInventTransMask;
Map mapMarkNow;
container con;
real qty;
Map mapTmp;
MapEnumerator mapEnumerator;
InventTransOriginId issueInventTransOriginId
=
InventTransOrigin
::findByInventTransId('Issue lot ID').
RecId;
InventTransOriginId receiptInventTransOriginId
=
InventTransOrigin
::findByInventTransId('Receipt lot ID').
RecId;
InventQty qtyToMark
= 11;
ttsBegin;
issueInventTrans
= InventTrans
::findByInventTransOrigin(
issueInventTransOriginId
);
[con
, qty
] = TmpInventTransMark
::packTmpMark(
InventTransOrigin
::find(issueInventTransOriginId
),
issueInventTrans.
inventDim(),
issueInventTrans.
Qty);
mapTmp
= Map
::create(con
);
mapEnumerator
= mapTmp.
getEnumerator();
while (mapEnumerator.
moveNext())
{
tmpInventTransMask
= mapEnumerator.
currentValue();
if (tmpInventTransMask.
InventTransOrigin == receiptInventTransOriginId
)
{
tmpInventTransMask.
QtyMarkNow = qtyToMark;
tmpInventTransMask.
QtyRemain -= tmpInventTransMask.
QtyMarkNow;
mapMarkNow
= new Map
(Types
::Int64, Types
::Record);
mapMarkNow.
insert(tmpInventTransMask.
RecId, tmpInventTransMask
);
TmpInventTransMark
::updateTmpMark(
issueInventTransOriginId
,
issueInventTrans.
inventDim(),
-qtyToMark
,
mapMarkNow.
pack());
break;
}
}
ttsCommit;
}
Источник:
http://sashanazarov.blogspot.com/201...de-part-2.html