Here is an example of X++ code to create a profit/loss inventory journal connected to a sales order delivery note.
CustPackingSlipJour custPackingSlipJour;
InventJournalTable inventJournalTable;
InventJournalTrans inventJournalTrans;
InventJournalTableData journalTableData;
InventJournalTransData journalTransData;
/// <summary>
/// Create Inventory journal header record
/// </summary>
/// <param name = "_throwOnError">throw on error (Y/N)?</param>
/// <returns>true is record has been created, false if it already exists</returns>
protected boolean createInventJournalTable(boolean _throwOnError = true)
{
boolean ret = true;
if (inventJournalTable.RecId != 0)
{
return ret;
}
journalTableData = JournalTableData::newTable(inventJournalTable);
// Init JournalTable
inventJournalTable.clear();
inventJournalTable.JournalId = journalTableData.nextJournalId();
inventJournalTable.JournalType = InventJournalType::LossProfit;
inventJournalTable.JournalNameId = InventParameters::find().VKJournalNameId;
inventJournalTable.VKRefDeliveryNote = custPackingSlipJour.InternalPackingSlipId;
inventJournalTable.VKRefSourceDocumentHeader = custPackingSlipJour.SourceDocumentHeader; // unique ref
journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(inventJournalTable.JournalNameId));
inventJournalTable.DeletePostedLines = NoYes::No;
if (inventJournalTable.validateWrite())
{
inventJournalTable.insert();
}
else
{
ret = false;
if (_throwOnError)
{
throw Error("@SYS93289");
}
}
return ret;
}
/// <summary>
/// Create Inventory journal line records
/// </summary>
/// <returns>true if records have been created, exception is thrown otherwise</returns>
protected boolean createInventJournalTrans()
{
boolean ret = true;
if (!inventJournalTable)
{
this.createInventJournalTable();
}
CustPackingSlipTrans custPackingSlipTrans;
while select custPackingSlipTrans
where custPackingSlipTrans.SalesId == custPackingSlipJour.SalesId
&& custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId
&& custPackingSlipTrans.DeliveryDate == custPackingSlipJour.DeliveryDate
{
inventJournalTrans.clear();
journalTransData = journalTableData.journalStatic().newJournalTransData(inventJournalTrans, journalTableData);
if (inventJournalTable.NumOfLines)
{
journalTransData.parmLastLineNum(inventJournalTable.NumOfLines);
}
journalTransData.initFromJournalTable();
inventJournalTrans.TransDate = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
inventJournalTrans.ItemId = custPackingSlipTrans.ItemId;
inventJournalTrans.VKOrigRefRecId = custPackingSlipTrans.RecId;
inventJournalTrans.Qty = 0;
if (PdsGlobal::pdsIsCWItem(inventJournalTrans.ItemId)
{
inventJournalTrans.pdsCWQty = 0;
}
// standard unit qty
inventJournalTrans.UnitQty = 0; // synced by default with 0 Qty
inventJournalTrans.Unit = custPackingSlipTrans.SalesUnit;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
select firstonly RecId from inventTransOrigin
where inventTransOrigin.InventTransId == custPackingSlipTrans.InventTransId
join InventDimId from inventTrans
where inventTrans.inventTransOrigin == inventTransOrigin.RecId
&& inventTrans.PackingSlipId == custPackingSlipJour.PackingSlipId;
inventJournalTrans.InventDimId = inventTrans.InventDimId;
inventJournalTrans.setCostPrice(inventJournalTrans.InventDimId);
inventJournalTrans.DefaultDimension = custPackingSlipTrans.DefaultDimension;
journalTransData.create();
}
return ret;
}Support The Author
If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.
No comments. Be the first one to comment on this post.
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.
Authors are allowed to set their own "buy me a coffee" link.
Join us.