Codeunit 99000781 "Mfg. Calculate BOM Tree"
Base Application · Microsoft.Inventory.BOM.Tree
Across versions
- BC23-26not present
- BC27added
- BC282 events added, 1 events removed
- BC29unchanged
- BC301 procedures added
Neighbourhood 3 connected objects and pages
Base Application · Microsoft.Inventory.BOM.Tree · BC27-30 · source at ea08af5e · facts from BC29
Events published
OnBeforeFilterByQuantityPer(var ProductionBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; var IsHandled: Boolean; BOMBuffer: Record "BOM Buffer")(integration)OnGenerateProdCompSubTreeOnBeforeExitForNonProdOrder(ParentItem: Record Item; var BOMBuffer: Record "BOM Buffer"; var FoundSubTree: Boolean)(integration)OnAfterTransferFromProdItem(var BOMBuffer: Record "BOM Buffer"; ProdBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; var EntryNo: Integer)(integration)OnGenerateProdCompSubTreeOnAfterGenerateItemSubTree(var ParentBOMBuffer: Record "BOM Buffer"; var BOMBuffer: Record "BOM Buffer")(integration)OnBeforeTransferFromProdBOM(var BOMBuffer: Record "BOM Buffer"; var ProdBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; var ParentItem: Record Item; var ParentBOMBuffer: Record "BOM Buffer"; var EntryNo: Integer; TreeType: Enum "BOM Tree Type")(integration)OnAfterTransferFromProdBOM(var BOMBuffer: Record "BOM Buffer"; ProdBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line")(integration)OnAfterGenerateProdCompSubTree(var ParentItem: Record Item; var BOMBuffer: Record "BOM Buffer"; var ParentBOMBuffer: Record "BOM Buffer")(integration)OnGenerateProdCompSubTreeOnAfterProdBOMLineLoop(var ParentBOMBuffer: Record "BOM Buffer"; var BOMBuffer: Record "BOM Buffer")(integration)OnGenerateProdCompSubTreeOnBeforeBOMBufferModify(var BOMBuffer: Record "BOM Buffer"; var ParentBOMBuffer: Record "BOM Buffer"; ParentItem: Record Item)(integration)OnGenerateProdCompSubTreeOnAfterBOMBufferModify(var BOMBuffer: Record "BOM Buffer"; RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; LotSize: Decimal; ParentItem: Record Item; ParentBOMBuffer: Record "BOM Buffer"; TreeType: Enum "BOM Tree Type")(integration)OnBeforeGenerateProdOrderLineSubTree(ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; var BOMBuffer: Record "BOM Buffer"; var ParentBOMBuffer: Record "BOM Buffer"; var Result: Boolean; var IsHandled: Boolean)(integration)OnBeforeCalcRoutingLineCosts(var RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; var LotSize: Decimal; var ScrapPct: Decimal; ParentItem: Record Item)(integration)OnCalcRoutingLineCostsOnBeforeBOMBufferAdd(RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; LotSize: Decimal; ScrapPct: Decimal; var CapCost: Decimal; var SubcontractedCapCost: Decimal; var CapOverhead: Decimal; var BOMBuffer: Record "BOM Buffer")(integration)OnAfterCalcRoutingLineCosts(RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; LotSize: Decimal; ScrapPercent: Decimal; var CapacityCost: Decimal; var SubcontractedCapacityCost: Decimal; var CapacityOverhead: Decimal; var BOMBuffer: Record "BOM Buffer"; var ParentItem: Record Item)+ BC28 (integration)OnBeforeTransferProdBOMLine(var BOMBuffer: Record "BOM Buffer"; var ProdBOMLine: Record Microsoft.Manufacturing.ProductionBOM."Production BOM Line"; var ParentItem: Record Item; var ParentBOMBuffer: Record "BOM Buffer"; var EntryNo: Integer; TreeType: Option " ",Availability,Cost; var IsHandled: Boolean)(integration)OnGenerateProdCompSubTreeOnBeforeRoutingLineLoop(var RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line"; var BOMBuffer: Record "BOM Buffer"; var RunIteration: Boolean; ItemFilter: Record Item)+ BC28 − BC28 (integration)OnAfterTransferFromProdRouting(var BOMBuffer: Record "BOM Buffer"; var RoutingLine: Record Microsoft.Manufacturing.Routing."Routing Line")(integration)
Event subscriptions
- ProdOrderLineOnGenerateTreeForSource subscribes to Codeunit “Calculate BOM Tree” OnGenerateTreeForSource
- OnGenerateItemSubTreeOnSetIsLeaf subscribes to Codeunit “Calculate BOM Tree” OnGenerateItemSubTreeOnSetIsLeaf
- OnWriteToDatabaseOnProductionBOM subscribes to Codeunit “BOM Node” OnWriteToDatabaseOnProductionBOM
- OnCopyFromItemOnAfterGetParentItem subscribes to Table “BOM Component” OnCopyFromItemOnAfterGetParentItem
Procedures
GenerateTreeForProdOrderLine(ProdOrderLine: Record "Prod. Order Line"; var BOMBuffer: Record "BOM Buffer"; TreeType: Enum "BOM Tree Type"; var ItemFilter: Record Item; var EntryNo: Integer; var sender: Codeunit "Calculate BOM Tree")
Plus 5 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 5870 “Calculate BOM Tree” (13 calls:
GenerateProdCompSubTree → (object),GenerateProdCompSubTree → CalcCompDueDate,GenerateProdCompSubTree → GenerateItemSubTree, …) - Codeunit 5402 “Unit of Measure Management” (3 calls:
GenerateProdCompSubTree → GetQtyPerUnitOfMeasure,GenerateProdCompSubTree → QtyRndPrecision,GetQtyPerBOMHeaderUnitOfMeasure → GetQtyPerUnitOfMeasure) - Codeunit 99000756 “VersionManagement” (1 call:
GenerateProdCompSubTree → GetBOMVersion)
Recent changes
- 2026-10-02 #12066 Bugs/remove asm inv mfg clean27 tags for wave2 2026 (main, BC30, obsoletion)
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. Calculate BOM Tree"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.