Requirement
Insert & Activate Item Price Or Cost In Costing Versions using X++.
To know more about Costing Versions please follow below link
Sample Code
public static void main(Args args)
{
InventItemPriceSim inventItemPriceSim;
InventDim inventDim;
PriceDiscAdmTrans priceDiscAdmTrans;
PriceDiscAdmTable PriceDiscAdmTable;
Dialog dialog;
DialogField dialogfieldItemId, dialogfieldInventSiteId, dialogActivatePrice, dialogCostingVersionId;
ItemId itemid;
NoYes activatePrice;
InventSiteId inventSiteId;
InventDim inventDimCreate;
CostingVersionId costingVersionId;
Args argsmenuItem = new Args();
;
dialog = new Dialog(‘Update Item Cost Price’);
dialogfieldItemId = dialog.addField(identifierStr(ItemId));
dialogfieldItemId.mandatory_RU(true);
dialogfieldInventSiteId = dialog.addField(identifierStr(InventSiteId));
dialogActivatePrice = dialog.addField(identifierStr(NoYes), ‘Activate Price’,’Activate Price ?’);
dialogfieldInventSiteId.mandatory_RU(true);
dialogCostingVersionId = dialog.addField(identifierStr(CostingVersionId));
dialogCostingVersionId.mandatory_RU(true);
dialog.run();
if (dialog.closedOk() == false)
{
return;
}
else
{
itemid = dialogfieldItemId.value();
inventSiteId = dialogfieldInventSiteId.value();
activatePrice = dialogActivatePrice.value();
costingVersionId = dialogCostingVersionId.value();
}
if (itemid && inventSiteId && costingVersionId)
{
try
{
ttsbegin;
while select sum(Amount), count(RecId) from priceDiscAdmTrans
join PriceDiscAdmTable
where priceDiscAdmTrans.JournalNum == PriceDiscAdmTable.JournalNum
join inventDim
group by inventDim.InventColorId, inventDim.InventSizeId, inventDim.InventStyleId, inventDim.configId, priceDiscAdmTrans.UnitId
where inventDim.inventDimId == priceDiscAdmTrans.InventDimId
&& PriceDiscAdmTable.Posted == NoYes::Yes
&& priceDiscAdmTrans.FromDate <= today()
&& priceDiscAdmTrans.ToDate >= today()
&& priceDiscAdmTrans.ItemRelation == itemid
&& priceDiscAdmTrans.relation == PriceType::PricePurch
{
inventItemPriceSim.clear();
inventItemPriceSim.initValue();
inventItemPriceSim.ItemId = itemid;
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim, ItemId));
inventItemPriceSim.VersionId = costingVersionId;
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,VersionId));
inventItemPriceSim.PriceType = CostingVersionPriceType::Cost;
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,PriceType));
inventDimCreate.clear();
inventDimCreate.initValue();
//site wise costing so need todo use InventLocationId
inventDimCreate.InventSiteId = inventSiteId;
inventDimCreate.InventColorId = inventDim.InventColorId;
inventDimCreate.configId = inventDim.configId;
inventDimCreate.InventStyleId = inventDim.InventStyleId;
inventDimCreate.InventSizeId = inventDim.InventSizeId;
inventDimCreate = InventDim::findOrCreate(inventDimCreate);
inventItemPriceSim.InventDimId = inventDimCreate.inventDimId;
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim, ItemId));
inventItemPriceSim.PriceUnit = 1;
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,FromDate));
inventItemPriceSim.UnitID = priceDiscAdmTrans.UnitId; //can be multiple unit of measure so curreny wise lines will be created //exception and assumption
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,UnitId));
if (priceDiscAdmTrans.RecId)//lines count
{
inventItemPriceSim.Price = priceDiscAdmTrans.Amount/priceDiscAdmTrans.RecId;//
}
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,Price));
inventItemPriceSim.FromDate = today();
inventItemPriceSim.modifiedField(fieldNum(inventItemPriceSim,FromDate));
inventItemPriceSim.insert();
if (activatePrice == NoYes::Yes)
{
inventItemPriceActivationJob inventItemPriceActivationJob = InventItemPriceActivationJob::construct();
inventItemPriceActivationJob.activateOneInventItemPriceSim(inventItemPriceSim);
}
}
ttscommit;
}
catch
{
ttsabort; //full rollback
throw error(‘Operation aborted.’);
}
}
}