How do you mark 1 line to another using AX 3.0 in X++? I’ve looked through the code using the inventMarking form but can’t quite get it to work via coding.
Basically in all my coding examples, the findMovement function within the updateTmpMark doesn’t get called (since I somehow don’t have an _inventTrans). With the InventMarking Form it usually calls it just fine.
I’ve seen an example using 4.0, but it uses methods that don’t exist in 4.0 (on the TmpInventTransMark table).
void doInventMarking(PurchLine _purchLine)
{
InventTrans inventTrans;
InventDim inventDim;
VendInvoiceTrans vendInvoiceTrans;
QueryRun queryRun;
Map mapMarkNow;
MapEnumerator mapEnumerator;
container con;
Qty qty, qtyMax;
TmpInventTransMark tmpInventTransMark;
TmpInventTransMark tmpInventTransMarkNow;
;
super(_purchLine);queryRun = new QueryRun(this.initInventTransQuery(_purchLine.InventTransId));
queryRun.next();inventTrans = queryRun.get(tableNum(InventTrans));
inventDim = inventTrans.inventDim();
vendInvoiceTrans = VendInvoiceTrans::findRecId(_purchLine.ZCH_InvoiceTransRefRecId);try
{
[con, qty] = InventTrans::packTmpMark(inventTrans.ItemId, inventDim, inventTrans.InventTransId, inventTrans.Qty);
mapMarkNow = Map::create(con);
mapEnumerator = mapMarkNow.getEnumerator();
while (mapEnumerator.moveNext())
{
tmpInventTransMark = mapEnumerator.currentValue();
if (tmpInventTransMark.TransType == InventTransType::Purch &&
tmpInventTransMark.TransRefId == vendInvoiceTrans.PurchID &&
tmpInventTransMark.InventTransId == vendInvoiceTrans.InventTransId)
{
break;
}
}if (inventTrans.Qty < 0)
qtyMax = min(tmpInventTransMark.QtyRemain, -inventTrans.OpenQty());
else
{
qtyMax = min(-tmpInventTransMark.QtyRemain, inventTrans.OpenQty());
qtyMax = -qtyMax;
}buf2buf(tmpInventTransMark, tmpInventTransMarkNow);
tmpInventTransMarkNow.qtyMarkNow = tmpInventTransMarkNow.QtyMarked ? -tmpInventTransMarkNow.QtyMarked : qtyMax;
tmpInventTransMarkNow.insert();mapMarkNow = new Map(Types::Integer, Types::Record);
mapMarkNow.insert(tmpInventTransMarkNow.RecId, tmpInventTransMarkNow);InventTrans::updateTmpMark(inventTrans.InventTransId, inventDim, inventTrans.Qty, mapMarkNow.pack());
}
catch
{
throw error(“Îøèáêà ìàðêèðîâêè ñòðîêè âîçâðàòà”);
}
}
Or this example:
static void testMarkIvan()
{InventTrans imjTrans;
InventTrans salesLineTrans;
TmpInventTransMark tmpInventTransMark;
SalesLine salesLine;
Map mapMarkNow;
InventDim inventDim;
MapEnumerator mapEnumerator;
Qty qtyMax;
container con;
Qty qty;
TmpInventTransMark tmpInventTransMarkNow;
;salesLineTrans = InventTrans::findTransId(‘ILI-49118’, false);
imjTrans = InventTrans::findTransId(‘ILI-35458’, false);
select * from salesLine where salesLine.InventTransId == salesLineTrans.InventTransId;inventDim = salesLineTrans.inventDim();
// setup marking
[con, qty] = inventTrans::packTmpMark(salesLine.ItemId, inventDim, salesLine.InventTransId, salesLine.quantityToMark);
mapMarkNow = Map::create(con);
mapEnumerator = mapMarkNow.getEnumerator();
while (mapEnumerator.moveNext())
{
tmpInventTransMark = mapEnumerator.currentValue();
if (tmpInventTransMark.InventTransId == imjTrans.InventTransId)
{
break;
}
}buf2buf(tmpInventTransMark, tmpInventTransMarkNow);
tmpInventTransMarkNow.qtyMarkNow = salesLine.quantityToMark;tmpInventTransMarkNow.insert();
mapMarkNow = new Map(Types::Integer, Types::Record);
mapMarkNow.insert(tmpInventTransMarkNow.RecId, tmpInventTransMarkNow);inventTrans::updateTmpMark(salesLineTrans.InventTransId, inventDim, -salesLineTrans.Qty, mapMarkNow.pack());
}