---
id: object/codeunit/5790
type: object
title: Codeunit 5790 "Available to Promise"
summary: Codeunit 5790 "Available to Promise" in Base Application (Microsoft.Inventory.Availability). 20 public procedures, 30 events. Present since at least BC23, still in BC30, changed in BC24-28, BC30.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "30"
  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: 9a3e3efb84f84b27b526c6e232e6494f622c69f4aab2ce31da96b0b7a9027e5f
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Inventory/Availability/AvailabletoPromise.Codeunit.al
    title: src/Layers/W1/BaseApp/Inventory/Availability/AvailabletoPromise.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/12066
object_type: codeunit
object_id: 5790
name: Available to Promise
namespace: Microsoft.Inventory.Availability
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "30"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 64
  events: 30
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 9
  calls: 1
  called_by: 22
  implements: 0
---

# Codeunit 5790 "Available to Promise"

> Codeunit 5790 "Available to Promise" in Base Application (Microsoft.Inventory.Availability). 20 public procedures, 30 events. Present since at least BC23, still in BC30, changed in BC24-28, BC30.

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

## Properties

| Property | Value |
|---|---|
| Permissions | tabledata "Assembly Header" = r, tabledata "Assembly Line" = r, tabledata "Item Ledger Entry" = r, tabledata "Job Planning Line" = r, tabledata "Planning Component" = r, #if not CLEAN27 tabledata Microsoft.Manufacturing.Document."Prod. Order Component" = r, tabledata Microsoft.Manufacturing.Document... |

## Events published

- `OnAfterCalculateAvailability(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item)` (integration)
  - subscribers: [Codeunit 6452 "Serv. Availability Mgt."](../codeunit/6452.md) OnAfterCalculateAvailability, [Codeunit 99000871 "Job Planning Availability Mgt."](../codeunit/99000871.md) OnAfterCalculateAvailability, [Codeunit 99000875 "Prod. Order Availability Mgt."](../codeunit/99000875.md) OnAfterCalculateAvailability, [Codeunit 99000973 "Purch. Availability Mgt."](../codeunit/99000973.md) OnAfterCalculateAvailability
- `OnAfterCalcGrossRequirement(var Item: Record Item; var GrossRequirement: Decimal)` (integration)
  - subscribers: [Codeunit 6450 "Serv. Integration Mgt."](../codeunit/6450.md) OnAfterCalcGrossRequirement
- `OnAfterCalcScheduledReceipt(var Item: Record Item; var ScheduledReceipt: Decimal)` (integration)
- `OnAfterCalcReservedRequirement(var Item: Record Item; var ReservedRequirement: Decimal)` (integration)
  - subscribers: [Codeunit 6450 "Serv. Integration Mgt."](../codeunit/6450.md) OnAfterCalcReservedRequirement, [Codeunit 6450 "Serv. Integration Mgt."](../codeunit/6450.md) OnCalcAllItemFieldsOnAfterItemCalcFields
- `OnAfterCalcReservedReceipt(var Item: Record Item; var ReservedReceipt: Decimal)` (integration)
- `OnAfterQtyAvailableToPromise(var Item: Record Item; ScheduledReceipt: Decimal; GrossRequirement: Decimal; var AvailableToPromise: Decimal)` (integration)
  - subscribers: [Codeunit 4413 "SOA Shipment Date Mgt."](../codeunit/4413.md) OnAfterQtyAvailableToPromise
- `OnAfterCalcAvailableInventory(var Item: Record Item; var AvailableInventory: Decimal)` (integration)
- `OnBeforeCalcAvailableInventory(var Item: Record Item; var AvailableInventory: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcGrossRequirement(var Item: Record Item; var GrossRequirement: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcScheduledReceipt(var Item: Record Item; var ScheduledReceipt: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcReservedRequirement(var Item: Record Item; var ReservedRequirement: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcReservedReceipt(var Item: Record Item; var ReservedReceipt: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateSalesOrderAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; ChangedSalesLine: Record "Sales Line"; CurrentOrderPromisingLine: Record "Order Promising Line"; ReqShipDate: Date; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcQtyAvailableToPromise(var Item: Record Item; var AvailabilityDate: Date; var GrossRequirement: Decimal; var ScheduledReceipt: Decimal; PeriodType: Enum "Analysis Period Type"; LookaheadDateFormula: DateFormula; var AvailableToPromise: Decimal; var IsHandled: Boolean)` (integration)
- `OnCalcAllItemFieldsOnAfterItemCalcFields(var Item: Record Item)` (integration)
  - subscribers: [Codeunit 99000875 "Prod. Order Availability Mgt."](../codeunit/99000875.md) OnCalcAllItemFieldsOnAfterItemCalcFields
- `OnCalcAllItemFieldsOnBeforeItemCalcFields(var Item: Record Item)` (integration)
- `OnCalculateAvailabilityAfterClearAvailabilityAtDate(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var ReqShipDate: Date)` (integration)
- `OnCalcEarliestAvailabilityDateOnBeforeFilterDate(var Item: Record Item; NeededQty: Decimal; StartDate: Date; var AvailableQty: Decimal; PeriodType: Enum "Analysis Period Type"; LookaheadDateFormula: DateFormula; var AvailabilityAtDate: Record "Availability at Date"; var AvailableDate: Date; var IsHandled: Boolean; ExcludeOnDate: Date)` (integration)
- `OnBeforeCalcAllItemFields(var Item: record Item; var AllFieldCalculated: Boolean; var PrevItemNo: Code[20]; var PrevItemFilters: Text; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdatePurchReqRcptAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateTransOrderRcptAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdatePlanningIssuesAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateTransOrderShptAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAsmOrderAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAsmCompAvail(var AvailabilityAtDate: Record "Availability at Date"; var Item: Record Item; var IsHandled: Boolean; var ChangedAssemblyLine: Record "Assembly Line")` (integration)
- `OnCalcEarliestAvailabilityDateOnAfterUpdateScheduledReceipt(var TempAvailabilityAtDate: Record "Availability at Date" temporary)` (integration)
- `OnUpdateAvailabilityOnBeforeInsertModify(var AvailabilityAtDate: Record "Availability at Date"; Date: Date; var ScheduledReceipt: Decimal; var GrossRequirement: Decimal)` (integration)
- `OnCalculateAvailabilityByPeriodOnBeforeDeleteAvailabilityAtDate(var AvailabilityInPeriod: Record "Availability at Date"; AvailabilityAtDate: Record "Availability at Date")` (integration)
- `OnCalcEarliestAvailabilityDateOnBeforeNextTempAvailabilityAtDate(var AvailabilityAtDate: Record "Availability at Date")` (integration)
- `OnCalcEarliestAvailabilityDateOnAfterCalculateAvailableQty(var AvailableQty: decimal; var Item: Record "Item"; ScheduledReceipt: decimal; GrossRequirement: decimal)` (integration)

## Procedures

- `SetRecalculateFields()`
- `CalcQtyAvailableToPromise(var Item: Record Item; var GrossRequirement: Decimal; var ScheduledReceipt: Decimal; AvailabilityDate: Date; PeriodType: Enum "Analysis Period Type"; LookaheadDateFormula: DateFormula): Decimal`
- `CalcAvailableInventory(var Item: Record Item): Decimal`
- `CalcGrossRequirement(var Item: Record Item): Decimal`
- `CalcReservedRequirement(var Item: Record Item): Decimal`
- `CalcScheduledReceipt(var Item: Record Item): Decimal`
- `CalcReservedReceipt(var Item: Record Item): Decimal`
- `CalcEarliestAvailabilityDate(var Item: Record Item; NeededQty: Decimal; StartDate: Date; ExcludeQty: Decimal; ExcludeOnDate: Date; var AvailableQty: Decimal; PeriodType: Enum "Analysis Period Type"; LookaheadDateFormula: DateFormula): Date`
- `CalculateForward(var Item: Record Item; PeriodType: Enum "Analysis Period Type"; StartDate: Date; EndDate: Date): Decimal`
- `CalculateAvailability(var Item: Record Item; var AvailabilityAtDate: Record "Availability at Date")`
- `UpdateScheduledReceipt(var AvailabilityAtDate: Record "Availability at Date"; ReceiptDate: Date; ScheduledReceipt: Decimal)`
- `UpdateGrossRequirement(var AvailabilityAtDate: Record "Availability at Date"; ShipmentDate: Date; GrossRequirement: Decimal)`
- `GetRequiredShipmentDate(): Date`
- `GetForwardPeriodEndDate(LookaheadDateFormula: DateFormula; PeriodType: Enum "Analysis Period Type"; StartDate: Date): Date`
- `GetPeriodEndingDate(PeriodEnd: Date; PeriodType: Enum "Analysis Period Type"): Date`
- `SetPromisingReqShipDate(OrderPromisingLine: Record "Order Promising Line")`
- `SetOriginalShipmentDate(OrderPromisingLine: Record "Order Promising Line")`
- `SetChangedSalesLine(SalesLine: Record "Sales Line")`
- `SetChangedAsmLine(AssemblyLine: Record "Assembly Line")`
- `ResetItemNo()`

Plus 14 local procedures.

## Triggers

OnRun

## 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 7600 "Calendar Management"](../codeunit/7600.md) (2 calls: `CalcEarliestAvailabilityDate → GetMaxDate`, `GetForwardPeriodEndDate → GetMaxDate`)

## Called by

- [Table 901 "Assembly Line"](../table/901.md) (9 calls: `CalcAvailBaseQuantities → CalcAvailableInventory`, `CalcAvailBaseQuantities → CalcGrossRequirement`, `CalcAvailBaseQuantities → CalcReservedReceipt`, …)
- [Codeunit 311 "Item-Check Avail."](../codeunit/311.md) (8 calls: `AsmOrderLineShowWarning → SetChangedAsmLine`, `EarliestAvailabilityDate → CalcEarliestAvailabilityDate`, `QtyAvailToPromise → CalcAvailableInventory`, …)
- [Codeunit 7171 "Sales Info-Pane Management"](../codeunit/7171.md) (7 calls: `CalcAvailability → CalcQtyAvailableToPromise`, `CalcAvailableInventory → CalcAvailableInventory`, `CalcGrossRequirements → CalcGrossRequirement`, …)
- [Codeunit 915 "Assembly Info-Pane Management"](../codeunit/915.md) (7 calls: `CalcAvailability → CalcQtyAvailableToPromise`, `CalcAvailableInventory → CalcAvailableInventory`, `CalcGrossRequirement → CalcGrossRequirement`, …)
- [Page 874 "Prod. Order Comp. Item FactBox"](../page/874.md) (7 calls: `CalcAvailability → CalcQtyAvailableToPromise`, `CalcAvailableInventory → CalcAvailableInventory`, `CalcGrossRequirement → CalcGrossRequirement`, …)
- [Codeunit 99000889 "AvailabilityManagement"](../codeunit/99000889.md) (5 calls: `CalcAvailableQty → CalcQtyAvailableToPromise`, `CalcAvailableQty → GetPeriodEndingDate`, `CalcAvailableQty → SetPromisingReqShipDate`, …)
- [Codeunit 5701 "Item Subst."](../codeunit/5701.md) (3 calls: `AssemblyCalcCustPrice → CalcQtyAvailableToPromise`, `CalcCustPrice → CalcQtyAvailableToPromise`, `CreateSubstList → CalcQtyAvailableToPromise`)
- [Codeunit 5522 "Order Planning Mgt."](../codeunit/5522.md) (2 calls: `CalcATPEarliestDate → CalcEarliestAvailabilityDate`, `CalcATPQty → CalcQtyAvailableToPromise`)
- [Codeunit 99000875 "Prod. Order Availability Mgt."](../codeunit/99000875.md) (2 calls: `UpdateSchedNeedAvail → UpdateGrossRequirement`, `UpdateSchedRcptAvail → UpdateScheduledReceipt`)
- [Codeunit 99000973 "Purch. Availability Mgt."](../codeunit/99000973.md) (2 calls: `UpdatePurchOrderAvail → UpdateGrossRequirement`, `UpdatePurchOrderAvail → UpdateScheduledReceipt`)
- [Report 705 "Inventory Availability"](../report/705.md) (2 calls: `CalcNeed → CalcGrossRequirement`, `CalcNeed → CalcScheduledReceipt`)
- [Report 707 "Inventory - Availability Plan"](../report/707.md) (2 calls: `CalcNeed → CalcGrossRequirement`, `CalcNeed → CalcScheduledReceipt`)
- [Report 717 "Inventory - Reorders"](../report/717.md) (2 calls: `CalcQuantities → CalcGrossRequirement`, `CalcQuantities → CalcScheduledReceipt`)
- [Report 719 "Inv. Availability Plan"](../report/719.md) (2 calls: `CalcNeed → CalcGrossRequirement`, `CalcNeed → CalcScheduledReceipt`)
- [Codeunit 5870 "Calculate BOM Tree"](../codeunit/5870.md) (1 call: `InitItemAvailDates → CalcQtyAvailableToPromise`)
- [Codeunit 5972 "Service Info-Pane Management"](../codeunit/5972.md) (1 call: `CalcAvailability → CalcQtyAvailableToPromise`)
- [Codeunit 6452 "Serv. Availability Mgt."](../codeunit/6452.md) (1 call: `UpdateServOrderAvail → UpdateGrossRequirement`)
- [Codeunit 6474 "Serv. Item Substitution"](../codeunit/6474.md) (1 call: `InsertInSubstServiceList → CalcQtyAvailableToPromise`)
- [Codeunit 7181 "Purchases Info-Pane Management"](../codeunit/7181.md) (1 call: `CalcAvailability → CalcQtyAvailableToPromise`)
- [Codeunit 99000871 "Job Planning Availability Mgt."](../codeunit/99000871.md) (1 call: `UpdateJobOrderAvail → UpdateGrossRequirement`)
- [Codeunit 99000886 "Capable to Promise"](../codeunit/99000886.md) (1 call: `GetCumulativeATP → CalcQtyAvailableToPromise`)
- [Table 99000880 "Order Promising Line"](../table/99000880.md) (1 call: `CalcAvailability → CalcQtyAvailableToPromise`)

## Recent changes

- 2026-10-02 [#12066 Bugs/remove asm inv mfg clean27 tags for wave2 2026](../../changes/bcapps/12066.md) (main, BC30, obsoletion)

## Across versions

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

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: "codeunit", object_name: "Available to Promise")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
