---
id: object/codeunit/392
type: object
title: Codeunit 392 "Reminder-Make"
summary: Codeunit 392 "Reminder-Make" in Base Application (Microsoft.Sales.Reminder). 7 public procedures, 43 events. Present since at least BC23, still in BC30, changed in BC24-28.
tier: official
language: en
tags:
  - codeunit
  - 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: df15d24249f4e001ec78e8b11f3854f4d6ecdbf3c777d0f11ee286b495a39a39
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Sales/Reminder/ReminderMake.Codeunit.al
    title: src/Layers/W1/BaseApp/Sales/Reminder/ReminderMake.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations:
    - localization/no
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 392
name: Reminder-Make
namespace: Microsoft.Sales.Reminder
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"
source_major: "29"
obsolete: null
countries:
  - "no"
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 67
  events: 43
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 2
  calls: 2
  called_by: 3
  implements: 0
---

# Codeunit 392 "Reminder-Make"

> Codeunit 392 "Reminder-Make" in Base Application (Microsoft.Sales.Reminder). 7 public procedures, 43 events. Present since at least BC23, still in BC30, changed in BC24-28.

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

## Events published

- `OnAfterCode(var RetVal: Boolean)` (integration): Raised after the reminder creation process completes.
- `OnAfterFilterCustLedgEntryReminderLevel(var CustLedgerEntry: Record "Cust. Ledger Entry"; var ReminderLevel: Record "Reminder Level"; ReminderTerms: Record "Reminder Terms"; Customer: Record Customer; ReminderHeaderReq: Record "Reminder Header"; ReminderHeader: Record "Reminder Header")` (integration): Raised after filters are applied to customer ledger entries based on reminder level.
- `OnAfterInitReminderLine(var ReminderHeader: Record "Reminder Header"; var ReminderLine: Record "Reminder Line"; LineType: Enum "Reminder Line Type"; Description: Text)` (integration): Raised after a reminder line is initialized with default values.
- `OnAfterMakeReminder(var ReminderHeader: Record "Reminder Header"; var ReminderLine: Record "Reminder Line")` (integration): Raised after a reminder document is created with all its lines.
- `OnAfterSet(var Cust: Record Customer; var CustLedgEntry: Record "Cust. Ledger Entry"; var ReminderHeaderReq: Record "Reminder Header"; var OverdueEntriesOnly: Boolean; var IncludeEntriesOnHold: Boolean; var CustLedgEntryLinefeeOn: Record "Cust. Ledger Entry")` (integration): Raised after the reminder creation parameters are set.
- `OnAfterSetReminderLine(CustLedgEntry: Record "Cust. Ledger Entry"; var LineLevel2: Integer; var ReminderDueDate2: Date)` (integration): Raised after the reminder level and due date are calculated for a customer ledger entry.
- `OnAfterSuggestLines(ReminderHeader: Record "Reminder Header"; var CustLedgEntry2: Record "Cust. Ledger Entry"; OverdueEntriesOnly2: Boolean; IncludeEntriesOnHold2: Boolean; var CustLedgEntryLinefeeOn: Record "Cust. Ledger Entry")` (integration): Raised after the suggest lines parameters are set for an existing reminder.
- `OnAddLineFeeForCustLedgEntryOnAfterCalcRemainingAmount(var CustLedgerEntry: Record "Cust. Ledger Entry")` (integration): Raised after the remaining amount is calculated for a customer ledger entry when adding line fees.
- `OnAddLineFeeForCustLedgEntryOnReminderLineInsert(var ReminderLine: Record "Reminder Line")` (integration): Raised before inserting a line fee reminder line.
- `OnAddRemiderLinesFromCustLedgEntryWithNoReminderLevelFilterOnBeforeCheckAmountsNotDueLineInserted(ReminderHeader: Record "Reminder Header"; ReminderLine: Record "Reminder Line"; var AmountsNotDueLineInserted: Boolean)` (integration): Raised before checking if the amounts not due line has been inserted.
- `OnBeforeAddRemiderLinesFromCustLedgEntryWithNoReminderLevelFilter(var CustLedgEntry: Record "Cust. Ledger Entry"; ReminderHeaderReq: Record "Reminder Header"; ReminderHeader: Record "Reminder Header"; var IsHandled: Boolean; var ReminderLine: Record "Reminder Line"; var NextLineNo: Integer; var StartLineInserted: Boolean)` (integration): Raised before adding reminder lines from customer ledger entries with no reminder level filter.
- `OnBeforeCustLedgerEntryFind(var CustLedgerEntry: Record "Cust. Ledger Entry"; ReminderHeader: Record "Reminder Header"; Customer: Record Customer)` (integration): Raised before finding customer ledger entries for reminder creation.
- `OnBeforeGetReminderTerms(var ReminderHeader: Record "Reminder Header"; var ReminderTerms: Record "Reminder Terms"; var IsHandled: Boolean)` (integration): Raised before retrieving the reminder terms for a customer.
- `OnBeforeFindAndMarkReminderCandidates(var ReminderLevel: Record "Reminder Level"; ReminderHeaderReq: Record "Reminder Header"; ReminderTerms: Record "Reminder Terms"; var ReminderEntry: Record "Reminder/Fin. Charge Entry"; var CustLedgEntry: Record "Cust. Ledger Entry"; var TempCustLedgEntryOnHold: Record "Cust. Ledger Entry" temporary; var CustLedgEntryLastIssuedReminderLevelFilter: Text; var CustAmount: Decimal; var MakeDoc: Boolean; var MaxReminderLevel: Integer; var MaxLineLevel: Integer; OverdueEntriesOnly: Boolean; IncludeEntriesOnHold: Boolean; var IsHandled: Boolean; var Result: Boolean)` (integration): Raised before finding and marking customer ledger entries as reminder candidates.
- `OnBeforeInsertReminderLine(ReminderNo: Code[20]; LineType: Enum "Reminder Line Type"; Description: Text[100]; var NextLineNo: Integer; var IsHandled: Boolean)` (integration): Raised before inserting a reminder line.
- `OnBeforeMakeReminder(var ReminderHeader: Record "Reminder Header"; CurrencyCode: Code[10]; var RetVal: Boolean; var IsHandled: Boolean; ReminderHeaderReq: Record "Reminder Header"; OverdueEntriesOnly: Boolean; IncludeEntriesOnHold: Boolean; HeaderExists: Boolean; Customer: Record Customer)` (integration): Raised before creating a reminder for a specific currency.
- `OnBeforeMarkReminderCandidate(var CustLedgEntry: Record "Cust. Ledger Entry"; var IsHandled: Boolean)` (integration): Raised before marking a customer ledger entry as a reminder candidate.
- `OnBeforeRemoveLinesOfNegativeReminder(var ReminderHeader: Record "Reminder Header"; ReminderHeaderReq: Record "Reminder Header"; Customer: Record Customer; var IsHandled: Boolean)` (integration): Raised before removing lines from a reminder with negative total amount.
- `OnBeforeReminderHeaderFind(var ReminderHeader: Record "Reminder Header"; ReminderHeaderReq: Record "Reminder Header"; ReminderTerms: Record "Reminder Terms"; Customer: Record Customer; CustLedgerEntry: Record "Cust. Ledger Entry")` (integration): Raised before finding an existing reminder header for the customer and currency.
- `OnBeforeReminderHeaderInsert(var ReminderHeader: Record "Reminder Header"; ReminderHeaderReq: Record "Reminder Header"; ReminderTerms: Record "Reminder Terms"; Customer: Record Customer)` (integration): Raised before inserting a new reminder header.
- `OnBeforeReminderHeaderModify(var ReminderHeader: Record "Reminder Header"; var ReminderHeaderReq: Record "Reminder Header"; HeaderExists: Boolean; ReminderTerms: Record "Reminder Terms"; Customer: Record Customer; ReminderLevel: Record "Reminder Level"; var CustLedgerEntry: Record "Cust. Ledger Entry")` (integration): Raised before modifying the reminder header with reminder level and other settings.
  - subscribers: [Codeunit 6761 "Create Aut. Event Handler"](../codeunit/6761.md) BeforeReminderHeaderModify
- `OnBeforeReminderLineInsert(var ReminderLine: Record "Reminder Line"; ReminderHeader: Record "Reminder Header"; ReminderLevel: Record "Reminder Level"; CustLedgerEntry: Record "Cust. Ledger Entry"; ReminderHeaderReq: Record "Reminder Header")` (integration): Raised before inserting a reminder line for a customer ledger entry.
- `OnCodeOnBeforeCurrencyLoop(CustLedgEntry: Record "Cust. Ledger Entry"; ReminderHeaderReq: Record "Reminder Header"; ReminderTerms: Record "Reminder Terms"; OverdueEntriesOnly: Boolean; IncludeEntriesOnHold: Boolean; HeaderExists: Boolean; CustLedgEntryLastIssuedReminderLevelFilter: Text; var TempCurrency: Record Currency temporary; Customer: Record Customer; var CustLedgEntryLineFeeFilters: Record "Cust. Ledger Entry")` (integration): Raised before processing reminders for each currency.
- `OnCodeOnBeforeGetReminderTerms(var Customer: Record Customer; var CustLedgerEntry: Record "Cust. Ledger Entry"; var CustLedgEntryLastIssuedReminderLevelFilter: Text; var ReminderHeader: Record "Reminder Header"; var IsHandled: Boolean; var ReturnValue: Boolean)` (integration): Raised before retrieving reminder terms for processing.
- `OnFindAndMarkReminderCandidatesOnBeforeCustLedgEntryLoop(var CustLedgerEntry: Record "Cust. Ledger Entry"; var ReminderHeader: Record "Reminder Header"; var IsHandled: Boolean)` (integration): Raised before processing each customer ledger entry in the reminder candidate loop.
- `OnAfterFindAndMarkReminderCandidates(CustLedgEntry: Record "Cust. Ledger Entry"; ReminderLevel: Record "Reminder Level"; var CustAmount: Decimal; MakeDoc: Boolean; MaxReminderLevel: Integer; MaxLineLevel: Integer; var IsHandled: Boolean; var Result: Boolean)` (integration): Raised after finding and marking reminder candidates from customer ledger entries.
- `OnMakeReminderOnAfterCalcShouldMakeDoc(ReminderHeaderReq: Record "Reminder Header"; ReminderHeader: Record "Reminder Header"; Customer: Record Customer; var ShouldMakeDoc: Boolean; MakeDoc: Boolean; var CustLedgerEntry: Record "Cust. Ledger Entry")` (integration): Raised after calculating whether a reminder document should be created.
- `OnMakeReminderOnAfterAddRemiderLinesFromCustLedgEntriesWithNoReminderLevelFilter(var CustLedgerEntry: Record "Cust. Ledger Entry"; Customer: Record Customer; ReminderHeader: Record "Reminder Header"; MaxReminderLevel: Integer; var OverdueEntriesOnly: Boolean)` (integration): Raised after adding reminder lines from customer ledger entries with no reminder level filter.
- `OnMakeReminderOnAfterReminderLevelLoop(var ReminderLevel: Record "Reminder Level"; var NextLineNo: Integer; StartLineInserted: Boolean; ReminderHeaderReq: Record "Reminder Header"; ReminderHeader: Record "Reminder Header"; Customer: Record Customer)` (integration): Raised after processing each reminder level in the reminder creation loop.
- `OnMakeReminderOnAfterCalcIsGracePeriodExpired(var ReminderDueDate: Date; var ReminderHeader: Record "Reminder Header"; var IsGracePeriodExpired: Boolean)` (integration): Raised after calculating whether the grace period has expired for an overdue entry.
- `OnMakeReminderOnBeforeCustLedgEntryFindSet(var CustLedgEntry: Record "Cust. Ledger Entry"; Cust: Record Customer; ReminderHeader: Record "Reminder Header"; MaxReminderLevel: Integer; var OverDueEntriesOnly: Boolean)` (integration): Raised before finding customer ledger entries for processing in the reminder creation.
- `OnMakeReminderOnBeforeOnHoldReminderLineInsert(var ReminderLine: Record "Reminder Line"; ReminderHeader: Record "Reminder Header"; ReminderLevel: Record "Reminder Level"; var CustLedgerEntry: Record "Cust. Ledger Entry"; var CustLedgEntryOnHoldTEMP: Record "Cust. Ledger Entry" temporary)` (integration): Raised before inserting a reminder line for an on-hold customer ledger entry.
- `OnMakeReminderOnBeforeReminderHeaderModify(var ReminderHeader: Record "Reminder Header"; var ReminderLine: Record "Reminder Line"; var NextLineNo: Integer; MaxReminderLevel: Integer)` (integration): Raised before modifying the reminder header after all lines are processed.
  - subscribers: [Codeunit 6761 "Create Aut. Event Handler"](../codeunit/6761.md) HandlerReminderCreated
- `OnMarkReminderCandidateOnAfterCalcIsGracePeriodExpired(var ReminderLevel: Record "Reminder Level"; var ReminderDueDate: Date; var ReminderHeaderReq: Record "Reminder Header"; var ReminderTerms: Record "Reminder Terms"; var CustLedgerEntry: Record "Cust. Ledger Entry"; var ReminderHeader: Record "Reminder Header"; var LineLevel: Integer; var IsGracePeriodExpired: Boolean; var IsHandled: Boolean)` (integration): Raised after calculating whether the grace period has expired when marking reminder candidates.
- `OnSetReminderLineOnAfterSetFilters(var ReminderFinChargeEntry: Record "Reminder/Fin. Charge Entry")` (integration): Raised after setting filters on the reminder entry record when calculating reminder level.
- `OnSetReminderLineOnAfterFindNextLineLevel(ReminderEntry: Record "Reminder/Fin. Charge Entry"; var LineLevel2: Integer; var ReminderDueDate2: Date)` (integration): Raised after finding the next line level from the reminder entry history.
- `OnAddRemiderLinesFromCustLedgEntryWithNoReminderLevelFilterOnBeforeReminderLineInsert(var ReminderLine: Record "Reminder Line"; ReminderHeader: Record "Reminder Header"; ReminderLevel: Record "Reminder Level"; var CustLedgerEntry: Record "Cust. Ledger Entry")` (integration): Raised before inserting a reminder line for entries not due with no reminder level filter.
- `OnAfterCheckCustomerIsBlocked(Customer: Record Customer; var Result: Boolean)` (integration): Raised after checking if a customer is blocked.
- `OnMakeReminderOnAfterFilterCustLedgEntries(var ReminderLine: Record "Reminder Line")` (integration): Raised after filtering customer ledger entries in the make reminder process.
- `OnMakeReminderOnBeforeReminderHeaderInsertLines(var ReminderHeader: Record "Reminder Header")` (integration): Raised before the reminder header inserts its standard lines.
- `OnBeforeSetReminderLine(var LineLevel2: Integer; var ReminderDueDate2: Date; var IsHandled: Boolean; var CustLedgerEntry: Record "Cust. Ledger Entry"; var ReminderFinChargeEntry: Record "Reminder/Fin. Charge Entry")` (integration): Raised before setting the reminder line level and due date.
- `OnAfterReminderLinesInsertLoop(var ReminderHeader: Record "Reminder Header"; CurrencyCode: Code[10]; var NextLineNo: Integer; var MaxReminderLevel: Integer; OverdueEntriesOnly: Boolean)` (integration): Raised after inserting all reminder lines in the loop.
- `OnCodeOnAfterGlobalReminderGetGlobalCustomer(var ReminderHeader: Record "Reminder Header"; var Customer: Record Customer; var IsHandled: Boolean; var ReturnValue: Boolean)` (integration): Raised after retrieving the customer for an existing reminder header.

## Procedures

- `Code(): Boolean`: Executes the reminder creation process for the configured customer and ledger entry filters.
- `Set(Cust2: Record Customer; var CustLedgEntry2: Record "Cust. Ledger Entry"; ReminderHeaderReq2: Record "Reminder Header"; OverdueEntriesOnly2: Boolean; IncludeEntriesOnHold2: Boolean; var CustLedgEntryLinefeeOn: Record "Cust. Ledger Entry")`: Initializes the reminder creation parameters for batch processing of customer reminders.
- `SuggestLines(ReminderHeader2: Record "Reminder Header"; var CustLedgEntry2: Record "Cust. Ledger Entry"; OverdueEntriesOnly2: Boolean; IncludeEntriesOnHold2: Boolean; var CustLedgEntryLinefeeOn: Record "Cust. Ledger Entry")`: Suggests reminder lines for an existing reminder header based on overdue customer ledger entries.
- `FilterCustLedgEntries(var ReminderLevel2: Record "Reminder Level")`: Applies filters to customer ledger entries based on the specified reminder level.
- `SetReminderLine(var LineLevel2: Integer; var ReminderDueDate2: Date)`: Calculates the reminder level and due date for a customer ledger entry based on previous reminder history.
- `AddLineFeeForCustLedgEntry(var CustLedgEntry: Record "Cust. Ledger Entry"; var ReminderLevel: Record "Reminder Level"; NextLineNo: Integer)`: Adds a line fee for a customer ledger entry if applicable based on reminder level settings.
- `EmitCreateReminderTelemetry()` (internal)

Plus 17 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 8703 "Feature Telemetry"](../codeunit/8703.md) (2 calls: `EmitCreateReminderTelemetry → LogUptake`, `EmitCreateReminderTelemetry → LogUsage`)
- [Codeunit 43 "Language"](../codeunit/43.md) (1 call: `GetOpenEntriesNotDueOnHoldTranslated → GetLanguageIdOrDefault`)

## Called by

- [Codeunit 6761 "Create Aut. Event Handler"](../codeunit/6761.md) (2 calls: `CreateReminders → (object)`, `CreateReminders → Set`)
- [Report 188 "Create Reminders"](../report/188.md) (1 call: `OnPostReport → EmitCreateReminderTelemetry`)
- [Report 189 "Suggest Reminder Lines"](../report/189.md) (1 call: `OnPostReport → EmitCreateReminderTelemetry`)

## Across versions

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

## Countries that replace it

[NO](../../localizations/no.md)

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: "Reminder-Make")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
