---
id: object/table/5870
type: object
title: Table 5870 "BOM Buffer"
summary: Table 5870 "BOM Buffer" in Base Application (Microsoft.Inventory.BOM). 53 fields, 25 public procedures, 25 events. Present since at least BC23, still in BC30, changed in BC24, BC26-28.
tier: official
language: en
tags:
  - table
  - base application
versions:
  introduced: null
  last_changed: "28"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: 56b153e4b5a20c785b57f6e8788ed282f60cf2a946e22bb32999a90616ab85a7
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Inventory/BOM/BOMBuffer.Table.al
    title: src/Layers/W1/BaseApp/Inventory/BOM/BOMBuffer.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/assembly-how-work-assembly-boms
    - https://learn.microsoft.com/dynamics365/business-central/inventory-how-availability-overview
  objects: []
  features: []
  topics:
    - topic/business-central/analytics-business-intelligence-and-repo/built-in-reports/assembly-management
    - topic/business-central/business-functionality/assembly-management
    - topic/business-central/business-functionality/inventory
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: table
object_id: 5870
name: BOM Buffer
namespace: Microsoft.Inventory.BOM
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "26"
  - "27"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 53
  procedures: 59
  events: 25
  subscribers: 0
relations:
  out: 8
  referenced_by: 0
  pages: 3
  extended_by: 2
  event_subscribers: 9
  calls: 1
  called_by: 0
  implements: 0
---

# Table 5870 "BOM Buffer"

> Table 5870 "BOM Buffer" in Base Application (Microsoft.Inventory.BOM). 53 fields, 25 public procedures, 25 events. Present since at least BC23, still in BC30, changed in BC24, BC26-28.

Base Application · Microsoft.Inventory.BOM · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Inventory/BOM/BOMBuffer.Table.al) · facts from BC29

Learn documents this table through its pages: [Page 5870 "BOM Structure"](../page/5870.md) (1 Learn page), [Page 5871 "Item Availability by BOM Level"](../page/5871.md) (1), [Page 5872 "BOM Cost Shares"](../page/5872.md) (1).

## Properties

| Property | Value |
|---|---|
| Caption | BOM Buffer |
| DataClassification | SystemMetadata |

## Fields

Explanation: the field's ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.

| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 1 | Entry No. | Integer | — | AutoIncrement |
| 2 | Type | Enum "BOM Type" | Specifies the item's position in the BOM structure. Lower-level items are indented under their parents. | enum [Enum 5870 "BOM Type"](../enum/5870.md) |
| 3 | No. | Code[20] | Specifies the number of the involved entry or record, according to the specified number series. | TableRelation [Table 156 "Resource"](../table/156.md), [Table 27 "Item"](../table/27.md) (if (Type = const(Item)) Item else if (Type = const(Resource)) Resource) |
| 5 | Description | Text[100] | Specifies the item's description. |  |
| 6 | Unit of Measure Code | Code[10] | Specifies how each unit of the item or resource is measured, such as in pieces or hours. By default, the value in the Base Unit of Measure field on the item or resource card is inserted. | TableRelation [Table 205 "Resource Unit of Measure"](../table/205.md), [Table 5404 "Item Unit of Measure"](../table/5404.md) (if (Type = const(Item)) "Item Unit of Measure".Code where("Item No." = field("No.")) else if (Type = const(Resource)) "Resource Unit of Measure".Code where("Resource No." = field("No."))) |
| 7 | Variant Code | Code[10] | Specifies the variant code that you entered in the Variant Filter field in the Item Availability by BOM Level window. | TableRelation [Table 5401 "Item Variant"](../table/5401.md) (if (Type = const(Item)) "Item Variant".Code where("Item No." = field("No."))) |
| 8 | Location Code | Code[10] | — | TableRelation [Table 14 "Location"](../table/14.md) |
| 9 | Replenishment System | Enum "Replenishment System" | Specifies the item's replenishment system. | enum [Enum 5419 "Replenishment System"](../enum/5419.md) |
| 10 | Indentation | Integer | — |  |
| 11 | Is Leaf | Boolean | — |  |
| 13 | Bottleneck | Boolean | Specifies which item in the BOM structure restricts you from making a larger quantity than what is shown in the Able to Make Top Item field. |  |
| 20 | Lot Size | Decimal | Specifies the item's lot size. The value is copied from the Lot Size field on the item card. |  |
| 21 | Low-Level Code | Integer | Specifies the item's level in the BOM structure. | not editable |
| 22 | Rounding Precision | Decimal | — |  |
| 30 | Qty. per Parent | Decimal | Specifies how many units of the component are required to assemble or produce one unit of the parent. |  |
| 31 | Qty. per Top Item | Decimal | Specifies how many units of the component are required to assemble or produce one unit of the top item. |  |
| 32 | Able to Make Top Item | Decimal | Specifies how many units of the BOM item on the top line can be assembled or produced. |  |
| 33 | Able to Make Parent | Decimal | Specifies how many units of the BOM item on the collapsible line above it can be assembled or produced. |  |
| 35 | Available Quantity | Decimal | Specifies how many units of the item on the line are available, regardless of how many parents you can make with the item. |  |
| 36 | Gross Requirement | Decimal | Specifies the total demand for the item. |  |
| 37 | Scheduled Receipts | Decimal | Specifies how many units of the item are inbound on orders. |  |
| 38 | Unused Quantity | Decimal | Specifies the part of the item's total availability that is not required to make the quantities that are shown in the fields. |  |
| 40 | Lead Time Calculation | DateFormula | Specifies how long it takes to replenish the item, by purchase, assembly, or production. |  |
| 41 | Lead-Time Offset | DateFormula | Specifies the total number of days that are required to assemble or produce the item. |  |
| 42 | Rolled-up Lead-Time Offset | Integer | Specifies the cumulative lead time of components under a parent item. |  |
| 43 | Needed by Date | Date | Specifies when the item must be available to make the parent or top item. |  |
| 45 | Safety Lead Time | DateFormula | Specifies any safety lead time that is defined for the item. |  |
| 50 | Unit Cost | Decimal | Specifies the cost of one unit of the item or resource on the line. |  |
| 52 | Indirect Cost % | Decimal | Specifies the percentage of the item's last purchase cost that includes indirect costs, such as freight that is associated with the purchase of the item. |  |
| 54 | Overhead Rate | Decimal | Specifies the item's overhead rate. |  |
| 55 | Scrap % | Decimal | Specifies the percentage of the item that you expect to be scrapped in the production process. |  |
| 56 | Scrap Qty. per Parent | Decimal | Specifies how many units of the item are scrapped to output the top item quantity. |  |
| 57 | Scrap Qty. per Top Item | Decimal | Specifies how many units of the item are scrapped to output the parent item quantity. |  |
| 59 | Resource Usage Type | Option | Specifies how the cost of the resource on the assembly BOM is allocated during assembly. | OptionCaption: Direct,Fixed |
| 61 | Single-Level Material Cost | Decimal | Specifies the total material cost of all components on the parent item's BOM. |  |
| 62 | Single-Level Capacity Cost | Decimal | Specifies the capacity costs related to the item's parent item only. |  |
| 64 | Single-Level Cap. Ovhd Cost | Decimal | Specifies the single-level capacity overhead cost. |  |
| 63 | Single-Level Subcontrd. Cost | Decimal | Specifies the single-level cost of outsourcing operations to a subcontractor. |  |
| 65 | Single-Level Mfg. Ovhd Cost | Decimal | Specifies the single-level manufacturing overhead cost. |  |
| 66 | Single-Level Scrap Cost | Decimal | Specifies the cost of material at this BOM level that will eventually be scrapped in order to produce the parent item. |  |
| 71 | Rolled-up Material Cost | Decimal | Specifies the material cost of all items at all levels of the parent item's BOM, added to the material cost of the item itself. | not editable |
| 72 | Rolled-up Capacity Cost | Decimal | Specifies the capacity costs related to the item's parent item and other items in the parent item's BOM. | not editable |
| 74 | Rolled-up Capacity Ovhd. Cost | Decimal | Specifies the rolled-up manufacturing overhead cost of the item. | not editable |
| 73 | Rolled-up Subcontracted Cost | Decimal | Specifies the single-level cost of outsourcing operations to a subcontractor. | not editable |
| 75 | Rolled-up Mfg. Ovhd Cost | Decimal | Specifies the item's overhead capacity cost rolled up from underlying item levels. | not editable |
| 76 | Rolled-up Scrap Cost | Decimal | Specifies the cost of all component material that will eventually be scrapped to produce the parent item. |  |
| 77 | Single-Lvl Mat. Non-Invt. Cost | Decimal | Specifies the total non inventory material cost of all components on the parent item's BOM. |  |
| 78 | Rolled-up Mat. Non-Invt. Cost | Decimal | Specifies the non inventory material cost of all items at all levels of the parent item's BOM, added to the non inventory material cost of the item itself. | not editable |
| 81 | Total Cost | Decimal | Specifies the sum of all cost at this BOM level. |  |
| 82 | BOM Unit of Measure Code | Code[10] | Specifies the unit of measure of the BOM item. | TableRelation [Table 205 "Resource Unit of Measure"](../table/205.md), [Table 5404 "Item Unit of Measure"](../table/5404.md) (if (Type = const(Item)) "Item Unit of Measure".Code where("Item No." = field("No.")) else if (Type = const(Resource)) "Resource Unit of Measure".Code where("Resource No." = field("No."))) |
| 83 | Qty. per BOM Line | Decimal | Specifies how many units of the component are required to assemble or produce one unit of the item on the BOM line. |  |
| 84 | Inventoriable | Boolean | — |  |
| 85 | Calculation Formula | Enum "Quantity Calculation Formula" | — | enum [Enum 5444 "Quantity Calculation Formula"](../enum/5444.md) |

## Keys

- Key1: Entry No. (clustered)
- Key2: Low-Level Code
- Key3: Type, No., Indentation
- Key4: Total Cost

## Events published

- `OnAfterCalcUnitCost(var BOMBuffer: Record "BOM Buffer")` (integration)
- `OnAfterGetItemCosts(var BOMBuffer: Record "BOM Buffer"; Item: Record Item)` (integration)
- `OnAfterInitFromItem(var BOMBuffer: Record "BOM Buffer"; Item: Record Item; StockkeepingUnit: Record "Stockkeeping Unit")` (integration)
- `OnAfterInitFromRes(var BOMBuffer: Record "BOM Buffer"; Resource: Record Resource)` (integration)
- `OnAfterIsLineOk(var BOMBuffer: Record "BOM Buffer"; LogWarning: Boolean; var BOMWarningLog: Record "BOM Warning Log"; var Result: Boolean)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterIsLineOk
- `OnAfterRoundCosts(var BOMBuffer: Record "BOM Buffer"; ShareOfTotalCost: Decimal)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterRoundCosts
- `OnBeforeCalcOvhdCost(var BOMBuffer: Record "BOM Buffer"; var IsHandled: Boolean)` (integration)
- `OnBeforeInitFromItem(var BOMBuffer: Record "BOM Buffer"; Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeIsBOMOk(var BOMBuffer: Record "BOM Buffer"; var Result: Boolean; var IsHandled: Boolean; var LogWarning: Boolean; var BOMWarningLog: Record "BOM Warning Log")` (integration)
- `OnBeforeIsLowLevelOk(var BOMBuffer: Record "BOM Buffer"; var Result: Boolean; var IsHandled: Boolean; var LogWarning: Boolean; var BOMWarningLog: Record "BOM Warning Log")` (integration)
- `OnBeforeInitFromRes(var BOMBuffer: Record "BOM Buffer"; Resource: Record Resource; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAbleToMake(var BOMBuffer: Record "BOM Buffer"; var AvailQty: Decimal; var IsHandled: Boolean)` (integration)
- `OnGetItemCostsOnBeforeRoundCosts(var BOMBuffer: Record "BOM Buffer"; var Item: Record Item)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnGetItemCostsOnBeforeRoundCosts
- `OnTransferFromItemCopyFields(var BOMBuffer: Record "BOM Buffer"; Item: Record Item)` (integration)
- `OnTransferFromBOMCompCopyFields(var BOMBuffer: Record "BOM Buffer"; BOMComponent: Record "BOM Component")` (integration)
- `OnBeforeIsQtyPerOk(var BOMBuffer: Record "BOM Buffer"; var BOMWarningLog: Record "BOM Warning Log"; LogWarning: Boolean; var Result: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeIsReplenishmentOk(var BOMBuffer: Record "BOM Buffer"; var BOMWarningLog: Record "BOM Warning Log"; LogWarning: Boolean; var Result: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeRoundUnitAmt(Amt: Decimal; ShareOfCost: Decimal; var IsHandled: Boolean; var ReturnValue: Decimal)` (integration)
- `OnAfterCalcDirectCost(var BOMBuffer: Record "BOM Buffer"; var Cost: Decimal)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterCalcDirectCost
- `OnAfterCalcIndirectCost(var BOMBuffer: Record "BOM Buffer"; var Cost: Decimal)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterCalcIndirectCost
- `OnAfterCalcOvhdCost(var BOMBuffer: Record "BOM Buffer"; LotSize: Decimal)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterCalcOvhdCost
- `OnAfterGetUnitCost(var BOMBuffer: Record "BOM Buffer"; var Item: Record Item)` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnAfterGetUnitCost
- `OnIsQtyPerOKOnAfterCheckItemAssemblyBOM(Item: Record Item; var BOMWarningLog: Record "BOM Warning Log")` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnIsQtyPerOKOnAfterCheckItemAssemblyBOM
- `OnInitFromItemOnAfterSetReplenishmentSystem(var BOMBuffer: Record "BOM Buffer"; Item: Record Item; StockkeepingUnit: Record "Stockkeeping Unit")` (integration)
  - subscribers: [Codeunit 99000820 "Mfg. Bom Buffer"](../codeunit/99000820.md) OnInitFromItemOnAfterSetReplenishmentSystem
- `OnAfterSetLocationVariantFiltersFrom(var BOMBuffer: Record "BOM Buffer"; var ItemFilter: Record Item)` (integration)

## Procedures

- `TransferFromItem(var EntryNo: Integer; Item: Record Item; DemandDate: Date)`
- `TransferFromBOMComp(var EntryNo: Integer; BOMComp: Record "BOM Component"; NewIndentation: Integer; ParentQtyPer: Decimal; ParentScrapQtyPer: Decimal; NeedByDate: Date; ParentLocationCode: Code[10])`
- `InitFromItem(Item: Record Item)`
- `InitFromRes(Resourse: Record Resource)`
- `UpdateAbleToMake(AvailQty: Decimal)`
- `AddMaterialCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddCapacityCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddCapOvhdCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddSubcontrdCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddMfgOvhdCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddScrapCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `AddNonInvMaterialCost(SingleLvlCostAmt: Decimal; RolledUpCostAmt: Decimal)`
- `GetItemCosts()`
- `GetItemUnitCost()`
- `GetResCosts()`
- `RoundCosts(ShareOfTotalCost: Decimal)`
- `RoundUnitAmt(Amt: Decimal; ShareOfCost: Decimal): Decimal`
- `CalcOvhdCost()`
- `CalcDirectCost(): Decimal`
- `CalcIndirectCost(): Decimal`
- `CalcUnitCost()`
- `IsLineOk(LogWarning: Boolean; var BOMWarningLog: Record "BOM Warning Log"): Boolean`
- `AreAllLinesOk(var BOMWarningLog: Record "BOM Warning Log"): Boolean`
- `SetLocationVariantFiltersFrom(var ItemFilter: Record Item)`
- `SetItemWarningLog(var BOMWarningLog: Record "BOM Warning Log"; var Item: Record Item; WarningText: Text)`

Plus 9 local procedures.

## Relations

- Location Code: TableRelation [Table 14 "Location"](../table/14.md)
- No.: TableRelation [Table 156 "Resource"](../table/156.md) (conditional)
- BOM Unit of Measure Code: TableRelation [Table 205 "Resource Unit of Measure"](../table/205.md) (conditional)
- Unit of Measure Code: TableRelation [Table 205 "Resource Unit of Measure"](../table/205.md) (conditional)
- No.: TableRelation [Table 27 "Item"](../table/27.md) (conditional)
- Variant Code: TableRelation [Table 5401 "Item Variant"](../table/5401.md)
- BOM Unit of Measure Code: TableRelation [Table 5404 "Item Unit of Measure"](../table/5404.md) (conditional)
- Unit of Measure Code: TableRelation [Table 5404 "Item Unit of Measure"](../table/5404.md) (conditional)

## Pages and codeunits on this table

- [Page 5870 "BOM Structure"](../page/5870.md) (source table)
- [Page 5871 "Item Availability by BOM Level"](../page/5871.md) (source table)
- [Page 5872 "BOM Cost Shares"](../page/5872.md) (source table)

## Extended by

- [Table extension 958 "Asm. BOM Buffer"](../tableextension/958.md)
- [Table extension 99000820 "Mfg. BOM Buffer"](../tableextension/99000820.md)

## 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"](../codeunit/5402.md) (7 calls: `CalcOvhdCost → GetQtyPerUnitOfMeasure`, `GetItemCosts → GetQtyPerUnitOfMeasure`, `GetItemUnitCost → GetQtyPerUnitOfMeasure`, …)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24, BC26-28

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## 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: "table", object_name: "BOM Buffer")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
