---
title: "Codeunit 60 Sales-Calc. Discount"
author: "Jonas Paprotka"
url: https://jonas-paprotka.de/ref/codeunit/60-sales-calc-discount/
type: codeunit
id: 60
name: "Sales-Calc. Discount"
app: "Base Application"
namespace: Microsoft.Sales.Document
versions: "17-28"
build: 28.5.54151.54365
source: "https://jonas-paprotka.de/ref/codeunit/60-sales-calc-discount/source/29/"
checked: 2026-09-20
subject: "Microsoft Dynamics 365 Business Central"
license: "Content © 2026 Jonas Paprotka. Quote freely with attribution and a link."
---

# Codeunit 60 Sales-Calc. Discount

Jonas Paprotka, https://jonas-paprotka.de/ref/codeunit/60-sales-calc-discount/

| | |
| --- | --- |
| App | Base Application |
| Namespace | Microsoft.Sales.Document |
| Versions | 17-28 |
| Source file | Sales/Document/SalesCalcDiscount.Codeunit.al |

## Procedures

| Name | Parameters | Returns | Access | Versions | Obsolete | Reason |
| --- | --- | --- | --- | --- | --- | --- |
| CalculateWithSalesHeader | (var Record Sales Header, var Record Sales Line) | - | public | 17-28 | - | - |
| CalculateInvoiceDiscountOnLine | (var Record Sales Line) | - | public | 17-28 | - | - |
| CalculateIncDiscForHeader | (var Record Sales Header) | - | public | 17-28 | - | - |
| UpdatePrepmtLineAmount | (Record Sales Header) | - | public | 17-28 | - | - |
| CustInvDiscRecExists | (Code[20]) | Boolean | public | 23-28 | - | - |

## Events

| Kind | Name | Parameters | Versions | Obsolete | Reason |
| --- | --- | --- | --- | --- | --- |
| Integration event | OnBeforeCalcSalesDiscount | (var Record Sales Header, var Boolean, var Record Sales Line, var Boolean) | 17-28 | - | - |
| Integration event | OnAfterCalcSalesDiscount | (var Record Sales Header, var Record VAT Amount Line, var Record Sales Line) | 17-28 | - | - |
| Integration event | OnAfterCustInvDiscRecExists | (var Record Sales Header) | 17-18 | - | - |
| Integration event | OnAfterValidateSalesLine2Quantity | (Record Sales Header, var Record Sales Line, Record Cust. Invoice Disc.) | 17-28 | - | - |
| Integration event | OnBeforeCalculateIncDiscForHeader | (var Record Sales Header, var Boolean) | 17-19 | - | - |
| Integration event | OnBeforeSetSalesLineServiceCharge | (Record Sales Header, var Record Sales Line, Record Cust. Invoice Disc., var Boolean) | 17-28 | - | - |
| Integration event | OnBeforeUpdateSalesHeaderInvoiceDiscount | (var Record Cust. Invoice Disc., var Record Sales Header, var Record VAT Amount Line, var Boolean, var Boolean) | 17-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeCurrencyInitialize | (var Record Customer Posting Group) | 17-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeCustInvDiscRecExists | (var Record Sales Header, var Record Sales Line, var Boolean, var Decimal, var Decimal, var Record VAT Amount Line, var Boolean) | 17-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeCheckCustInvDiscServiceCharge | (var Record Cust. Invoice Disc., var Record Sales Header) | 18 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeSalesLine2FindFirst | (var Record Sales Line) | 18-28 | - | - |
| Integration event | OnAfterCustInvDiscRecExists | (var Record Sales Header, Record Cust. Invoice Disc., Decimal, Decimal, var Boolean) | 19 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeCheckCustInvDiscServiceCharge | (var Record Cust. Invoice Disc., var Record Sales Header, Date, Decimal) | 19-27 | - | - |
| Integration event | OnAfterCustInvDiscRecExists | (var Record Sales Header, var Record Cust. Invoice Disc., Decimal, Decimal, var Boolean) | 20-28 | - | - |
| Integration event | OnBeforeCalculateIncDiscForHeader | (var Record Sales Header, var Boolean, var Record Sales Line, var Record Sales Line, var Boolean) | 20-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeSalesLineInsert | (var Record Sales Line, Record Sales Header) | 20-28 | - | - |
| Integration event | OnBeforeCalculateWithSalesHeader | (var Record Sales Line, var Record Sales Header, var Record Sales Line, var Boolean, var Boolean) | 20-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeSalesLine2DeleteTrue | (Boolean, var Record Sales Line, var Boolean) | 20-28 | - | - |
| Integration event | OnRunOnBeforeCalculateInvoiceDiscount | (var Record Sales Line, var Record Sales Header, var Record Sales Line, var Boolean, var Boolean) | 20-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeUpdateSalesLine2 | (var Record Sales Header, var Record Sales Line, Boolean, Record Cust. Invoice Disc., var Boolean) | 20-28 | - | - |
| Integration event | OnBeforeCustInvDiscRecExists | (Code[20], var Boolean, var Boolean) | 22-28 | - | - |
| Integration event | OnBeforeCalculateInvoiceDiscount | (var Record Sales Header, var Record Sales Line, var Boolean) | 23-28 | - | - |
| Integration event | OnCalculateInvoiceDiscountOnBeforeCheckCustInvDiscServiceCharge | (var Record Cust. Invoice Disc., var Record Sales Header, Date, Decimal, var Boolean) | 28 | - | - |

## Source

Symbols: Microsoft.BaseApplication.symbols.437dbf0e-84ff-417a-965d-ed2bb9650972, https://dynamicssmb2.pkgs.visualstudio.com/DynamicsBCPublicFeeds/_packaging/MSSymbols/nuget/v3/index.json, highest build per major on 2026-09-20.
AL source 29: https://github.com/microsoft/BCApps, MIT, releases/29.x at a66254c3b8b5bb1cea290dc8f9d097aec4381153.

Jonas Paprotka, 2026-09-20.
