Tag Archives: Item Requirement
Create Item Requirement from Item Forecast using X++ in D365 Operations
Introduction: In this blog article, we will see how we can create Item Requirement on insertion of Item Forecast using code. Steps: Create Extension Class for ForecastSales Table that is Item Forecast and using CoC for post insert() method we will initialize Item Requirement. We will call a new class which is created in Step 2. public void insert() { next insert(); SalesType salesType = SalesType::ItemReq; CFSCreateItemReqFrmItemForecast createItemReq = new CFSCreateItemReqFrmItemForecast(); createItemReq.initParameters(this); createItemReq.copyToSalesLine(SalesType); } Create a new class that will initialize values and insert record in Item Requirement form. class CFSCreateItemReqFrmItemForecast { ForecastSales forecastSales; } In the new class create a method initParameter. This method will initialize ForecastSales object. void initParameters(ForecastSales _forecastSales) { forecastSales = _forecastSales; } Create another method ‘copytoSalesLine’. It will validate the record and call other methods to copy values to SalesLine Table. public void copyToSalesLine(SalesType _salesType) { ProjTable projTable = ProjTable::find(forecastSales.ProjId); if (_salesType == SalesType::ItemReq) { if (!ProjStatusType::construct(projTable).validateWriteItemRequirement()) { throw error(“@SYS18447”); } } else { if (!ProjStatusType::construct(projTable).validateWriteSalesLine()) { throw error(“@SYS18447”); } } SalesLine salesLine = this.initializeSalesLine(_salesType, forecastSales, projTable); salesLine.createLine(false, // Validation false, // Init from SalesTable true, // Init from InventTable true, // Calc invent Qty false, // Search markup – copied from salesQuotationline false, // Search price – copied from salesQuotationline false, // Check reservation true); // Skip creditlimit check this.updateSalesLine(salesLine, forecastSales); salesLine.update(); } Create a new method ‘initializeSalesLine’. It is called from copyToSalesLine(). protected SalesLine initializeSalesLine(SalesType _salesType, ForecastSales _forecastSales, ProjTable _projTable) { SalesLine salesLine; salesLine.SalesType = _salesType; salesLine.initValue(); salesLine.setInventDimId(_forecastSales.InventDimId); salesLine.ItemId = _forecastSales.ItemId; salesLine.SalesQty = _forecastSales.SalesQty; salesLine.SalesUnit = _forecastSales.SalesUnitId; salesLine.ProjId = _forecastSales.ProjId; salesLine.ActivityNumber = _forecastSales.ActivityNumber; salesLine.CurrencyCode = _forecastSales.Currency; salesLine.initFromProjTable(_projTable, false); return salesLine; } Create a new method updateSalesLine(). It is called from copyToSalesLine() method. protected void updateSalesLine(SalesLine _salesLine, ForecastSales _forecastSales) { _salesLine.DefaultDimension = _salesLine.copyDimension(_forecastSales.DefaultDimension); _salesLine.ProjLinePropertyId = _forecastSales.ProjLinePropertyId; _salesLine.TaxGroup = _forecastSales.TaxGroupId; _salesLine.TaxItemGroup = _forecastSales.TaxItemGroupId; _salesLine.ProjCategoryId = _forecastSales.ProjCategoryId; _salesLine.CostPrice = _forecastSales.CostPrice; _salesLine.SalesPrice = _forecastSales.SalesPrice; _salesLine.LinePercent = _forecastSales.DiscPercent; _salesLine.LineDisc = _forecastSales.DiscAmount; _salesLine.LineAmount = 0; _salesLine.LineAmount = _salesLine.calcLineAmount(); SalesLineType_ItemReq::setSalesLineReceiptDate(_salesLine); }