---
id: object/report/12115-it
type: object
title: Report 12115 "Calculate End Year Costs" (IT)
summary: Report 12115 "Calculate End Year Costs" (IT) in the IT country layer (Microsoft.Inventory.Costing). 29 public procedures, 3 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - report
  - it layer
versions:
  introduced: "29"
  last_changed: null
  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: 0097f56638548adc5a5d49f551a545e422700ca7b4079481d0704f2713829cf3
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/IT/BaseApp/Local/Inventory/Costing/CalculateEndYearCosts.Report.al
    title: src/Layers/IT/BaseApp/Local/Inventory/Costing/CalculateEndYearCosts.Report.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations:
    - localization/it
  videos: []
  posts: []
  guidelines: []
object_type: report
object_id: 12115
name: Calculate End Year Costs
caption: Calculate Year Costs
namespace: Microsoft.Inventory.Costing
app: Base Application
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in: []
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
country: IT
counts:
  fields: 0
  procedures: 32
  events: 3
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
---

# Report 12115 "Calculate End Year Costs" (IT)

> Report 12115 "Calculate End Year Costs" (IT) in the IT country layer (Microsoft.Inventory.Costing). 29 public procedures, 3 events. Introduced in BC29, still in BC30.

IT country layer · Microsoft.Inventory.Costing · captioned "Calculate Year Costs" · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/IT/BaseApp/Local/Inventory/Costing/CalculateEndYearCosts.Report.al) · facts from BC29

An object of the [IT localization](../../localizations/it.md), not part of W1.

## Properties

| Property | Value |
|---|---|
| Caption | Calculate Year Costs |
| UsageCategory | ReportsAndAnalysis |
| ApplicationArea | Basic, Suite |

## Events published

- `OnBeforeInitPurchFields(var ItemCostHistory: Record "Item Cost History"; var IsHandled: Boolean)` (integration)
- `OnInitPurchFieldsOnAfterSetItemLedgerEntryFilters(var ItemCostHistory: Record "Item Cost History"; var ItemLedgerEntry: Record "Item Ledger Entry"; var IsHandled: Boolean)` (integration)
- `OnUpdateCostsOnAfterGetProdOrdOutput(ProdOrdOutput: Decimal; var IsHandled: Boolean; var ProdAmt: Decimal)` (integration)

## Procedures

- `InitItemCostHistory()`
- `CalcStartYearInv(): Decimal`
- `CalcEndYearInv(): Decimal`
- `InitPurchFields()`
- `CalcPurchFIFOCost(): Decimal`
- `CalcPurchLIFOCost(): Decimal`
- `InitProdFields()`
- `CalcProdLIFOCost(): Decimal`
- `UpdateEstimatedCosts(ProdOrderLine: Record "Prod. Order Line"; UpdateItemCostHistory: Boolean): Decimal`
- `CalcWeighAvgCost(): Decimal`
- `GetAdjCosts(var TotInvoicedQty: Decimal; var TotInvoicedAmt: Decimal; var NotInvoicedQty: Decimal; var NotInvoicedAmt: Decimal)`
- `NewLIFOBand(ClosedBy: Integer)`
- `UpdateDiscLIFOCost()`
- `DoAbsorbtion(TotalBandQty: Decimal)`
- `DoDistribution(var NewBand: Boolean; Quantity: Decimal; TotalBandQty: Decimal): Boolean`
- `GetRoutingCost(var DirectRtgAmt: Decimal; var OverheadRtgAmt: Decimal; var SubconAmt: Decimal)`
- `CalcCosts(CalcLIFO: Boolean; var EndYearInv: Decimal; var Cost: Decimal; Qty: Decimal; Amt: Decimal)`
- `UpdateExpCostExist(PostingDate: Date; StartingDate: Date)`
- `GetBefStartItemQtyAndCost(var BefStItemQty: Decimal; var BefStItemCost: Decimal)`
- `SetBefStItemFilters(var BefStartItemCost: Record "Before Start Item Cost"; StartDate: Date; EndDate: Date)`
- `SetItemLedgerEntryFilters(var ItemLedgerEntry: Record "Item Ledger Entry"; StartDate: Date; EndDate: Date; FilterTxt: Text[5]; EntryType: Enum "Item Ledger Entry Type")`
- `ItemLedgEntryExist(): Boolean`
- `SetStartDateAndRefDate(CompetenceYear: Date)`
- `GetComponentCost(): Decimal`
- `UpdateCosts(UpdateItemCostHistory: Boolean): Decimal`
- `GetProdOrderOutput(): Decimal`
- `GetPurchAmt(ItemLedgEntry: Record "Item Ledger Entry"): Decimal`
- `GetProdAmt(ItemLedgEntry2: Record "Item Ledger Entry"; UpdateItemCostHistory: Boolean): Decimal`
- `SetItemCostHistFilter(CompYearDate: Date; FilterTxt: Text[4]; Def: Boolean)`

## Triggers

OnPostReport, OnPreReport

## Across versions

- Present in: BC29-30
- Changed (declaration) in: none

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). 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: "report", object_name: "Calculate End Year Costs")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.

A IT country object, not part of W1: the default corpus does not have it; `bcatlas_list_countries` shows which countries the atlas has.
