Sitemap
MUHAMMAD ASAD KHAN

MUHAMMAD ASAD KHAN

D365 FO Techno Functional Consultant with over 7 years of Experience in ERP field.

2 min readJul 23, 2026

--

Bill of Materials Journal Creation (BOM Journal) in MS DYNAMICS AX 2012 AND FO USING X++

static void Main(Args _args)
{
InventJournalTable srcJourTable;
InventJournalTable revJourTable;
InventJournalName journalName;
InventJournalTrans srcJourTrans;
InventJournalTrans revJourTrans,inventTransPrev,inventJourUpdate;
InventTrans inventTrans;
InventTransOrigin inventTransOrigin;

InventJournalId srcJournalId = “JR-XXX01”;
Qty revQty;
AmountCur revCostAmount;
NumberSeq voucherSeq;
InventJournalTrans transJour;
InventJournalTableData journalTableData;
InventJournalTransData journalTransData;
journalTableData = JournalTableData::newTable(revJourTable);
journalTransData = journalTableData.journalStatic().newJournalTransData(revJourTrans,journalTableData);

srcJourTable = InventJournalTable::find(srcJournalId, true);
if (!srcJourTable.RecId)
throw error(strFmt(“Source journal %1 was not found.”, srcJournalId));

journalName = InventJournalName::find(srcJourTable.JournalNameId);
if(journalName.JournalNameId !=”BOM”)
{
throw error(“Ledger Journal Type is not BOM”);
}

if (!journalName.RecId)
throw error(strFmt(“Journal name %1 was not found.”, srcJourTable.JournalNameId));

Get MUHAMMAD ASAD KHAN’s stories in your inbox

Join Medium for free to get updates from this writer.

revJourTable.clear();
revJourTable.initFromInventJournalName(journalName);
revJourTable.Description = strFmt(“Reversal of BOM journal %1”, srcJournalId);
revJourTable.InventLocationId = srcJourTable.InventLocationId;
revJourTable.InventSiteId = srcJourTable.InventSiteId;
revJourTable.Source = srcJourTable.Source;
// revJourTable.SystemBlocked = true;
ttsBegin;
revJourTable.insert();
ttsCommit;
journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(revJourTable.JournalNameId));
while select srcJourTrans
where srcJourTrans.JournalId == srcJourTable.JournalId
{
journalTransData.initFromJournalTable();
revJourTrans.clear();
revJourTrans.initValue();
revJourTrans.initFromInventJournalTable(revJourTable);
revJourTrans.DefaultDimension = srcJourTrans.DefaultDimension;
revJourTrans.ItemId = srcJourTrans.ItemId;
revJourTrans.InventDimId = srcJourTrans.InventDimId;
revQty = -srcJourTrans.Qty;
revJourTrans.Qty = revQty;

select firstonly inventTrans
where inventTrans.InventTransOrigin == InventTransOrigin::findByInventTransId(srcJourTrans.InventTransId).RECID;

if (inventTrans.RecId && revQty > 0)
{
inventTransOrigin = InventTransOrigin::find(inventTrans.InventTransOrigin);
if (inventTransOrigin.RecId)
{
revCostAmount = (inventTrans.CostAmountPosted + inventTrans.CostAmountAdjustment)*-1;
revJourTrans.CostPrice = inventTrans.costPrice();
}
}
revJourTrans.BOMLine = srcJourTrans.BOMLine;
select inventTransPrev
where inventTransPrev.JournalId == revJourTrans.JournalId
&& inventTransPrev.BOMLine == NoYes::No;
revJourTrans.InventTransId = srcJourTrans.InventTransId;
revJourTrans.modifiedField(fieldNum(InventJournalTrans,InventTransId));
revJourTrans.CostAmount = revCostAmount;

if (inventTransPrev.RecId)
revJourTrans.InventTransIdFather = inventTransPrev.InventTransIdFather;
else
revJourTrans.InventTransIdFather = srcJourTrans.InventTransIdFather;
ttsBegin;
journalTransData.create();
ttsCommit;

}

// TO UPDATE INVENTRANSIDFATHER FOR NON BOM ITEM LINES. ALSO TO UPDATE SAME VOUCHER AS OF non bom item created earlier.
while select forUpdate inventJourUpdate
where inventJourUpdate.JournalId == revJourTable.JournalId
&& inventJourUpdate.BOMLine == NoYes::Yes
{
select transJour
where transJour.JournalId == revJourTable.JournalId
&& transJour.BOMLine == NoYes::No;
inventJourUpdate.InventTransIdFather = transJour.InventTransId;
inventJourUpdate.Voucher = transJour.Voucher;
inventJourUpdate.modifiedField(fieldNum(InventJournalTrans,InventTransIdFather));
ttsBegin;
inventJourUpdate.write();
inventJourUpdate.update();
ttsCommit;
}
info(revJourTable.JournalId);

}

--

--

MUHAMMAD ASAD KHAN
MUHAMMAD ASAD KHAN

Written by MUHAMMAD ASAD KHAN

0 followers

D365 FO Techno Functional Consultant with over 7 years of Experience in ERP field.