Codeunit 99000758 "Mfg. Cost Calculation Mgt."
Base Application · Microsoft.Inventory.Costing
Across versions
- BC23-25not present
- BC26added
- BC272 procedures changed, 1 procedures added
- BC28unchanged
- BC293 events added, 1 events removed
- BC30unchanged
Neighbourhood 24 connected objects and pages
Base Application · Microsoft.Inventory.Costing · BC26-30 · source at ea08af5e · facts from BC29
Properties
| Property | Value |
|---|---|
| Permissions | TableData “Item Ledger Entry” = r, TableData “Prod. Order Capacity Need” = r, TableData “Value Entry” = r |
Events published
OnBeforeCalcRoutingCostPerUnit(Type: Enum Microsoft.Manufacturing.Capacity."Capacity Type"; var DirUnitCost: Decimal; var IndirCostPct: Decimal; var OvhdRate: Decimal; var UnitCost: Decimal; var UnitCostCalculation: Enum "Unit Cost Calculation Type"; WorkCenter: Record Microsoft.Manufacturing.WorkCenter."Work Center"; MachineCenter: Record Microsoft.Manufacturing.MachineCenter."Machine Center"; var IsHandled: Boolean)(integration)OnAfterCalcRoutingCostPerUnit(Type: Enum Microsoft.Manufacturing.Capacity."Capacity Type"; var DirUnitCost: Decimal; var IndirCostPct: Decimal; var OvhdRate: Decimal; var UnitCost: Decimal; var UnitCostCalculation: Enum "Unit Cost Calculation Type"; WorkCenter: Record Microsoft.Manufacturing.WorkCenter."Work Center"; MachineCenter: Record Microsoft.Manufacturing.MachineCenter."Machine Center")(integration)OnCalcProdOrderLineStdCostOnAfterCalcSingleLevelCost(var Item: record Item; InvtAdjmtEntryOrder: record "Inventory Adjmt. Entry (Order)")(integration)OnBeforeCalcProdOrderLineStdCost(var ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; QtyBase: Decimal; CurrencyFactor: Decimal; RndgPrec: Decimal; var StdMatCost: Decimal; var StdCapDirCost: Decimal; var StdSubDirCost: Decimal; var StdCapOvhdCost: Decimal; var StdMfgOvhdCost: Decimal; var IsHandled: Boolean)(integration)OnCalcProdOrderLineExpCostOnAfterProdOrderCompSetFilters(var ProdOrderComp: Record Microsoft.Manufacturing.Document."Prod. Order Component"; ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line")(integration)OnCalcProdOrderLineExpCostOnAfterProdOrderRtngLineSetFilters(var ProdOrderRtngLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line"; ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line")(integration)OnCalcProdOrderLineExpCostOnExpOperCostCalculated(var ExpOperCost: Decimal; ProdOrderRtngLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line")(integration)OnAfterCalcProdOrderLineExpCost(var ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; var ShareOfTotalCapCost: Decimal; var ExpMatCost: Decimal; var ExpCapDirCost: Decimal; var ExpSubDirCost: Decimal; var ExpCapOvhdCost: Decimal; var ExpMfgOvhdCost: Decimal)(integration)OnBeforeCalcProdOrderLineExpCost(var ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; ShareOfTotalCapCost: Decimal; var ExpMatCost: Decimal; var ExpCapDirCost: Decimal; var ExpSubDirCost: Decimal; var ExpCapOvhdCost: Decimal; var ExpMfgOvhdCost: Decimal; var IsHandled: Boolean)+ BC29 (integration)OnBeforeCalcProdOrderLineExpCostWithNonInvMatCost(var ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; ShareOfTotalCapCost: Decimal; var ExpMatCost: Decimal; var ExpNonInvMatCost: Decimal; var ExpCapDirCost: Decimal; var ExpSubDirCost: Decimal; var ExpCapOvhdCost: Decimal; var ExpMfgOvhdCost: Decimal; var IsHandled: Boolean)+ BC29 (integration)OnCalcProdOrderLineActCostOnBeforeSetProdOrderLine(var ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; var ActMatCost: Decimal; var ActCapDirCost: Decimal; var ActSubDirCost: Decimal; var ActCapOvhdCost: Decimal; var ActMfgOvhdCost: Decimal; var ActMatCostCostACY: Decimal; var ActCapDirCostACY: Decimal; var ActSubDirCostACY: Decimal; var ActCapOvhdCostACY: Decimal; var ActMfgOvhdCostACY: Decimal)(integration)OnBeforeCalcProdOrderExpCapNeed(ProductionOrder: Record Microsoft.Manufacturing.Document."Production Order"; var ProdOrderCapacityNeed: Record Microsoft.Manufacturing.Document."Prod. Order Capacity Need"; var ProdOrderRoutingLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line")(integration)OnCalcProdOrderExpCapNeedOnAfterProdOrderCapNeedSetFilters(var ProdOrderCapNeed: Record Microsoft.Manufacturing.Document."Prod. Order Capacity Need"; ProdOrder: Record Microsoft.Manufacturing.Document."Production Order")(integration)OnCalcProdOrderExpCapNeedOnBeforeMarkNotFinishedProdOrderRtngLine(ProdOrderRtngLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line"; WorkCenter: Record Microsoft.Manufacturing.WorkCenter."Work Center"; var ExpectedCapNeed: Decimal)(integration)OnBeforeCalcProdOrderActTimeUsed(ProductionOrder: Record Microsoft.Manufacturing.Document."Production Order"; var CapacityLedgerEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry")(integration)OnCalcProdOrderActTimeUsedOnAfterCapacityLedgerEntrySetFilters(var CapLedgEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry"; ProdOrder: Record Microsoft.Manufacturing.Document."Production Order")(integration)OnCalcProdOrderActTimeUsedOnBeforeCalcQty(CapLedgEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry"; var Qty: Decimal; var IsHandled: Boolean)(integration)OnAfterClearWorkCenter(var CapacityLedgerEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry"; var WorkCenter: Record Microsoft.Manufacturing.WorkCenter."Work Center")(integration)OnBeforeCalcOutputQtyBaseOnPurchOrder(ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; ProdOrderRtngLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line"; var OutstandingBaseQty: Decimal; var IsHandled: Boolean)(integration)OnCalcActOutputQtyBaseOnAfterSetFilters(var CapacityLedgerEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry"; ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; ProdOrderRoutingLine: Record Microsoft.Manufacturing.Document."Prod. Order Routing Line")(integration)OnCalcActOperOutputAndScrapOnAfterFilterCapLedgEntry(var CapacityLedgerEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry")(integration)OnBeforeCalcActNeededQtyBase(var OutputQtyBase: Decimal; ProdOrderComponent: Record Microsoft.Manufacturing.Document."Prod. Order Component"; ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; var Result: Decimal; var IsHandled: Boolean)(integration)OnCalcActTimeAndQtyBaseOnAfterFilterCapLedgEntry(var CapacityLedgerEntry: Record Microsoft.Manufacturing.Capacity."Capacity Ledger Entry")(integration)OnBeforeCalcCompItemQtyBase(ProdBOMComponent: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; CalculationDate: Date; var MfgItemQtyBase: Decimal; RtngNo: Code[20]; AdjdForRtngScrap: Boolean; var IsHandled: Boolean)(integration)OnFindRoutingLineOnAfterRoutingLineSetFilters(var RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; ProdBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; CalculationDate: Date; RoutingNo: Code[20])(integration)OnBeforeCalcQtyAdjdForBOMScrap(Qty: Decimal; ScrapPct: Decimal; var QtyAdjdForBomScrap: Decimal; var IsHandled: Boolean)(integration)OnBeforeCalcQtyAdjdForRoutingScrap(Qty: Decimal; ScrapFactorPctAccum: Decimal; FixedScrapQtyAccum: Decimal; var QtyAdjdForRoutingScrap: Decimal; var IsHandled: Boolean)(integration)OnAfterCalculateCostTime(MfgItemQtyBase: Decimal; ScrapFactorPctAccum: Decimal; FixedScrapQtyAccum: Decimal; UnitCostCalculationType: Enum "Unit Cost Calculation Type"; var CostTime: Decimal; SetupTime: Decimal; RunTime: Decimal; CostInclSetup: Boolean; ConcurrentCapacities: Decimal)+ BC27 + BC29 − BC29 (integration)
Event subscriptions
- OnBeforeValidateStandardCost subscribes to Table “Item” OnBeforeValidateStandardCost
- OnBeforeValidateSKUStandardCost subscribes to Table “Stockkeeping Unit” OnBeforeValidateStandardCost
- OnCanIncNonInvCostIntoProductionItem subscribes to Codeunit “Cost Calculation Management” OnCanIncNonInvCostIntoProductionItem
Procedures
CalcRoutingCostPerUnit(Type: Enum "Capacity Type"; No: Code[20]; var DirUnitCost: Decimal; var IndirCostPct: Decimal; var OvhdRate: Decimal; var UnitCost: Decimal; var UnitCostCalculation: Enum "Unit Cost Calculation Type")CalcRoutingCostPerUnit(Type: Enum "Capacity Type"; var DirUnitCost: Decimal; var IndirCostPct: Decimal; var OvhdRate: Decimal; var UnitCost: Decimal; var UnitCostCalculation: Enum "Unit Cost Calculation Type"; WorkCenter: Record "Work Center"; MachineCenter: Record "Machine Center")CalcProdOrderLineStdCost(ProdOrderLine: Record "Prod. Order Line"; CurrencyFactor: Decimal; RndgPrec: Decimal; var StdMatCost: Decimal; var StdCapDirCost: Decimal; var StdSubDirCost: Decimal; var StdCapOvhdCost: Decimal; var StdMfgOvhdCost: Decimal)CalcProdOrderLineStdCost(ProdOrderLine: Record "Prod. Order Line"; CurrencyFactor: Decimal; RndgPrec: Decimal; var StdMatCost: Decimal; var StdNonInvMatCost: Decimal; var StdCapDirCost: Decimal; var StdSubDirCost: Decimal; var StdCapOvhdCost: Decimal; var StdMfgOvhdCost: Decimal)CalcProdOrderLineExpCost(ProdOrderLine: Record "Prod. Order Line"; ShareOfTotalCapCost: Decimal; var ExpMatCost: Decimal; var ExpCapDirCost: Decimal; var ExpSubDirCost: Decimal; var ExpCapOvhdCost: Decimal; var ExpMfgOvhdCost: Decimal)CalcProdOrderLineExpCost(ProdOrderLine: Record "Prod. Order Line"; ShareOfTotalCapCost: Decimal; var ExpMatCost: Decimal; var ExpNonInvMatCost: Decimal; var ExpCapDirCost: Decimal; var ExpSubDirCost: Decimal; var ExpCapOvhdCost: Decimal; var ExpMfgOvhdCost: Decimal)CalcProdOrderLineActCost(ProdOrderLine: Record "Prod. Order Line"; var ActMatCost: Decimal; var ActCapDirCost: Decimal; var ActSubDirCost: Decimal; var ActCapOvhdCost: Decimal; var ActMfgOvhdCost: Decimal; var ActMatCostCostACY: Decimal; var ActCapDirCostACY: Decimal; var ActSubDirCostACY: Decimal; var ActCapOvhdCostACY: Decimal; var ActMfgOvhdCostACY: Decimal)CalcProdOrderLineActCost(ProdOrderLine: Record "Prod. Order Line"; var ActMatCost: Decimal; var ActNonInvMatCost: Decimal; var ActCapDirCost: Decimal; var ActSubDirCost: Decimal; var ActCapOvhdCost: Decimal; var ActMfgOvhdCost: Decimal; var ActMatCostACY: Decimal; var ActNonInvMatCostACY: Decimal; var ActCapDirCostACY: Decimal; var ActSubDirCostACY: Decimal; var ActCapOvhdCostACY: Decimal; var ActMfgOvhdCostACY: Decimal)CalcProdOrderExpCapNeed(ProdOrder: Record "Production Order"; DrillDown: Boolean): DecimalCalcProdOrderActTimeUsed(ProdOrder: Record "Production Order"; DrillDown: Boolean): DecimalCalcOutputQtyBaseOnPurchOrder(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRtngLine: Record "Prod. Order Routing Line"): DecimalCalcActOutputQtyBase(var ProdOrderLine: Record "Prod. Order Line"; ProdOrderRtngLine: Record "Prod. Order Routing Line"): DecimalCalcActualOutputQtyWithNoCapacity(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRtngLine: Record "Prod. Order Routing Line"): DecimalCalcActQtyBase(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRtngLine: Record "Prod. Order Routing Line"): DecimalCalcActOperOutputAndScrap(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRtngLine: Record "Prod. Order Routing Line"): DecimalCalcActNeededQtyBase(ProdOrderLine: Record "Prod. Order Line"; ProdOrderComp: Record "Prod. Order Component"; OutputQtyBase: Decimal): DecimalCalcActTimeAndQtyBase(ProdOrderLine: Record "Prod. Order Line"; OperationNo: Code[10]; var ActRunTime: Decimal; var ActSetupTime: Decimal; var ActOutputQty: Decimal; var ActScrapQty: Decimal)CalcCompItemQtyBase(ProdBOMComponent: Record "Production BOM Line"; CalculationDate: Date; MfgItemQtyBase: Decimal; RtngNo: Code[20]; AdjdForRtngScrap: Boolean): DecimalCalculateCostTime(MfgItemQtyBase: Decimal; SetupTime: Decimal; SetupTimeUOMCode: Code[10]; RunTime: Decimal; RunTimeUOMCode: Code[10]; RtngLotSize: Decimal; ScrapFactorPctAccum: Decimal; FixedScrapQtyAccum: Decimal; WorkCenterNo: Code[20]; UnitCostCalculation: Enum "Unit Cost Calculation Type"; CostInclSetup: Boolean; ConcurrentCapacities: Decimal): DecimalFindRoutingLine(var RoutingLine: Record "Routing Line"; ProdBOMLine: Record "Production BOM Line"; CalculationDate: Date; RoutingNo: Code[20]): BooleanCalcQtyAdjdForBOMScrap(Qty: Decimal; ScrapPct: Decimal): DecimalCalcQtyAdjdForRoutingScrap(Qty: Decimal; ScrapFactorPctAccum: Decimal; FixedScrapQtyAccum: Decimal): DecimalCanIncNonInvCostIntoProductionItem(): Boolean
Plus 3 local procedures.
Calls
From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an Object::"Name" argument. Interface dispatch and calls through events are not counted, so the list is not complete.
- Codeunit 5402 “Unit of Measure Management” (2 calls:
CalcOutputQtyBaseOnPurchOrder → GetQtyPerUnitOfMeasure,CalculateCostTime → TimeRndPrecision) - Codeunit 5896 “Calc. Inventory Adjmt. - Order” (2 calls:
CalcProdOrderLineActCost → CalcActualUsageCosts,CalcProdOrderLineActCost → CalcOutputQty) - Codeunit 99000755 “Shop Calendar Management” (2 calls:
CalcProdOrderActTimeUsed → TimeFactor,CalculateCostTime → QtyperTimeUnitofMeasure) - Codeunit 5836 “Cost Calculation Management” (1 call:
CalcProdOrderLineExpCost → CalcOvhdCost) - Codeunit 99000756 “VersionManagement” (1 call:
FindRoutingLine → GetRtngVersion)
Called by
- Codeunit 5812 “Calculate Standard Cost” (8 calls:
CalcMfgItem → CalcQtyAdjdForBOMScrap,CalcMfgItem → CanIncNonInvCostIntoProductionItem,CalcMfgSKU → CalcQtyAdjdForBOMScrap, …) - Codeunit 99000776 “Mfg. InventoryAdjmtEntryOrder” (8 calls:
OnAddDirectCostNonInv → CanIncNonInvCostIntoProductionItem,OnAddSingleLvlNonInvMaterialCost → CanIncNonInvCostIntoProductionItem,OnAfterCalcDiff → CanIncNonInvCostIntoProductionItem, …) - Page 99000816 “Production Order Statistics” (7 calls:
OnAfterGetRecord → CalcProdOrderActTimeUsed,OnAfterGetRecord → CalcProdOrderExpCapNeed,OnAfterGetRecord → CalcProdOrderLineActCost, …) - Codeunit 5407 “Prod. Order Status Management” (5 calls:
FlushProdOrderProcessProdOrderRtngLine → CalcActOperOutputAndScrap,FlushProdOrderProcessProdOrderRtngLine → CalcActualOutputQtyWithNoCapacity,GetOutputQtyForProdOrderRoutingLine → CalcActOutputQtyBase, …) - Codeunit 99000820 “Mfg. Bom Buffer” (5 calls:
OnAfterCalcDirectCost → CanIncNonInvCostIntoProductionItem,OnAfterCalcOvhdCost → CanIncNonInvCostIntoProductionItem,OnAfterGetUnitCost → CanIncNonInvCostIntoProductionItem, …) - Report 99001015 “Calculate Subcontracts” (4 calls:
CalculateSubContractRequirements → CalcActOutputQtyBase,CalculateSubContractRequirements → CalcOutputQtyBaseOnPurchOrder,CalculateSubContractRequirements → CalcQtyAdjdForBOMScrap, …) - Codeunit 5845 “Get Inventory Report” (3 calls:
CalcDiff → CanIncNonInvCostIntoProductionItem,CalcInvtPostingSetup → CanIncNonInvCostIntoProductionItem,CalcValueEntries → CanIncNonInvCostIntoProductionItem) - Codeunit 5406 “Output Jnl.-Expl. Route” (2 calls:
OnRun → CalcActOutputQtyBase,OnRun → CalcQtyAdjdForRoutingScrap) - Codeunit 5510 “Production Journal Mgt” (2 calls:
CalculateQtyToPostForProdOrder → CalcActOutputQtyBase,CalculateQtyToPostForProdOrder → CalcQtyAdjdForRoutingScrap) - Codeunit 99000774 “Calculate Routing Line” (2 calls:
CalculateRoutingLine → CalcActOutputQtyBase,ReplanRoutingLine → CalcActOutputQtyBase) - Table extension 99000820 “Mfg. BOM Buffer” (2 calls:
TransferFromProdComp → CalcCompItemQtyBase,TransferFromProdComp → CalcQtyAdjdForBOMScrap) - Codeunit 99000762 “Mfg. Item Journal Mgt.” (1 call:
OnValidateCapUnitOfMeasureCodeOnCaseOrderTypeElse → CalcRoutingCostPerUnit) - Codeunit 99000770 “Where-Used Management” (1 call:
BuildWhereUsedList → CalcCompItemQtyBase) - Codeunit 99000773 “Calculate Prod. Order” (1 call:
InitProdOrderRoutingLine → CalcRoutingCostPerUnit) - Codeunit 99000819 “Mfg. Planning Line Management” (1 call:
TransferRoutingLine → CalcRoutingCostPerUnit) - Codeunit 99000822 “Mfg. Item Jnl.-Post Line” (1 call:
PostFlushedConsumption → CalcActNeededQtyBase) - Page 5510 “Production Journal” (1 call:
GetActTimeAndQtyBase → CalcActTimeAndQtyBase) - Report 99000754 “Rolled-up Cost Shares” (1 call:
CalcMfgItemQtyBase → CalcQtyAdjdForBOMScrap) - Table 5407 “Prod. Order Component” (1 call:
GetNeededQty → CalcActNeededQtyBase)
Recent changes
- 2026-10-07 #11959 [Master]-Production Order Fails to Finish Due to Quantity Rounding Difference Between Component Consumption and Item Tracking Quantity - Copy (main, BC30, fix)
- 2026-08-26 #10631 Integration/main to releases 29.x 31a860b5 (releases/29.x, BC29, feature)
- 2026-08-24 #10173 [Extensibility Request] issue 30129: expose manufacturing cost calculation events (main, BC30, feature)
Ask your agent
Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "codeunit", object_name: "Mfg. Cost Calculation Mgt."), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.