---
id: object/codeunit/13916-de
type: object
title: Codeunit 13916 "Export XRechnung Document" (DE)
summary: Codeunit 13916 "Export XRechnung Document" (DE) in the DE country layer (Microsoft.eServices.EDocument.Formats). 22 public procedures, 18 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - de 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: 6e8f7899f3c8d3372bc25507dc132d5e7de0fb6a63c3fc2727bda5717e160736
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/DE/EDocumentDE/app/src/XRechnung/ExportXRechnungDocument.Codeunit.al
    title: src/Apps/DE/EDocumentDE/app/src/XRechnung/ExportXRechnungDocument.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations:
    - localization/de
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/9347
    - change/bcapps/8429
    - change/bcapps/9642
    - change/bcapps/9860
    - change/bcapps/10631
    - change/bcapps/10349
    - change/bcapps/10342
    - change/bcapps/10048
    - change/bcapps/9955
object_type: codeunit
object_id: 13916
name: Export XRechnung Document
namespace: Microsoft.eServices.EDocument.Formats
app: EDocumentDE
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: DE
counts:
  fields: 0
  procedures: 162
  events: 18
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
---

# Codeunit 13916 "Export XRechnung Document" (DE)

> Codeunit 13916 "Export XRechnung Document" (DE) in the DE country layer (Microsoft.eServices.EDocument.Formats). 22 public procedures, 18 events. Introduced in BC29, still in BC30.

DE country layer · Microsoft.eServices.EDocument.Formats · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/DE/EDocumentDE/app/src/XRechnung/ExportXRechnungDocument.Codeunit.al) · facts from BC29

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

## Properties

| Property | Value |
|---|---|
| TableNo | Record Export Buffer |

## Events published

- `OnCreateXMLOnBeforeSalesInvXmlDocumentWriteToFile(var XMLDoc: XmlDocument; SalesInvoiceHeader: Record "Sales Invoice Header")` (integration)
- `OnCreateXMLOnBeforeSalesCrMemoXmlDocumentWriteToFile(var XMLDoc: XmlDocument; SalesCrMemoHeader: Record "Sales Cr.Memo Header")` (integration)
- `OnAfterFindEDocumentService(var EDocumentService: Record "E-Document Service"; EDocumentFormat: Code[20])` (integration)
- `OnAfterInsertSalesInvHeaderData(var XMLCurrNode: XmlElement; SalesInvoiceHeader: Record "Sales Invoice Header")` (integration)
- `OnAfterInsertSalesCrMemoHeaderData(var XMLCurrNode: XmlElement; SalesCrMemoHeader: Record "Sales Cr.Memo Header")` (integration)
- `OnInsertOrderReferenceOnBeforeInsertSalesInvoiceElement(var SalesInvoiceHeader: Record "Sales Invoice Header"; var OrderReferenceElement: XmlElement)` (integration)
- `OnInsertOrderReferenceOnBeforeInsertSalesCrMemoElement(var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var OrderReferenceElement: XmlElement)` (integration)
- `OnDocumentLinesExistOnAfterFilterSalesInvLine(var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesInvLine: Record "Sales Invoice Line")` (integration)
- `OnDocumentLinesExistOnAfterFilterSalesCrMemoLine(var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var SalesCrMemoLine: Record "Sales Cr.Memo Line")` (integration)
- `OnAfterCalculateInvoiceLineAmounts(var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesInvLine: Record "Sales Invoice Line"; Currency: Record Currency; var LineAmounts: Dictionary of [Text, Decimal])` (integration)
- `OnAfterCalculateCrMemoLineAmounts(var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var SalesCrMemoLine: Record "Sales Cr.Memo Line"; Currency: Record Currency; var LineAmounts: Dictionary of [Text, Decimal])` (integration)
- `OnAfterGetSetups(var CompanyInformation: Record "Company Information"; var GeneralLedgerSetup: Record "General Ledger Setup")` (integration)
- `OnBeforeInsertInvoiceLine(var InvoiceElement: XmlElement; var SalesInvLine: Record "Sales Invoice Line"; Currency: Record Currency; CurrencyCode: Code[10]; PricesIncVAT: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeAddInvoiceLineElement(var InvoiceLineElement: XmlElement; var SalesInvLine: Record "Sales Invoice Line"; Currency: Record Currency; CurrencyCode: Code[10]; PricesIncVAT: Boolean)` (integration)
- `OnBeforeInsertCrMemoLine(var CrMemoElement: XmlElement; var SalesCrMemoLine: Record "Sales Cr.Memo Line"; Currency: Record Currency; CurrencyCode: Code[10]; PricesIncVAT: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeAddCrMemoLineElement(var CrMemoLineElement: XmlElement; var SalesCrMemoLine: Record "Sales Cr.Memo Line"; Currency: Record Currency; CurrencyCode: Code[10]; PricesIncVAT: Boolean)` (integration)
- `OnInsertAttachmentOnAfterSetFilters(TableNo: Integer; DocumentNo: Code[20]; var DocumentAttachment: Record "Document Attachment")` (integration): Allows subscribers to add additional filters on the Document Attachment record after the default filters are set.
- `OnInitializeDecimalFormatFlags(var AlwaysIncludeTwoDecimalPlacesForAmountFields: Boolean)` (integration): Use this event to always include two decimal places for amount fields

## Procedures

- `ExportSalesInvoice(var RecordExportBuffer: Record "Record Export Buffer")`
- `ExportSalesCreditMemo(var RecordExportBuffer: Record "Record Export Buffer")`
- `ExportServiceInvoice(var RecordExportBuffer: Record "Record Export Buffer")`
- `ExportServiceCreditMemo(var RecordExportBuffer: Record "Record Export Buffer")`
- `CreateXML(SalesInvoiceHeader: Record "Sales Invoice Header"; var FileOutstream: Outstream)`
- `CreateXML(SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var FileOutstream: Outstream)`
- `CreateXML(ServiceInvoiceHeader: Record "Service Invoice Header"; var FileOutstream: Outstream)`
- `CreateXML(ServiceCrMemoHeader: Record "Service Cr.Memo Header"; var FileOutstream: Outstream)`
- `GetTaxCategoryID(TaxCategory: Code[10]; VATBusPostingGroup: Code[20]; VATProductPostingGroup: Code[20]): Text[10]`
- `InsertOrderReference(var RootElement: XmlElement; SalesInvoiceHeader: Record "Sales Invoice Header")`
- `InsertOrderReference(var RootElement: XmlElement; SalesCrMemoHeader: Record "Sales Cr.Memo Header")`
- `InsertAttachment(var RootElement: XmlElement; TableNo: Integer; DocumentNo: Code[20])`
- `AddAttachment(var RootElement: XmlElement; var DocumentAttachment: Record "Document Attachment")`
- `FormatDate(VarDate: Date): Text[20]`
- `FormatDecimal(VarDecimal: Decimal): Text[30]`
- `FormatDecimal(VarDecimal: Decimal; IncludeDecimalPlaces: Boolean): Text[30]`
- `FormatDecimalUnlimited(VarDecimal: Decimal): Text`
- `FormatDecimalUnlimited(VarDecimal: Decimal; IncludeMinTwoDecimals: Boolean): Text`
- `FormatFourDecimal(VarDecimal: Decimal): Text[30]` (obsolete 29.0: FormatFourDecimal is no longer used internally. Quantity and unit price fields are now exported with unlimited precision per EN 16931. For VAT percentages, use FormatFiveDecimal. For quantity and unit price, use FormatDecimalUnlimited.)
- `FormatFiveDecimal(VarDecimal: Decimal): Text[30]`
- `GetUoMCode(UoMCode: Code[10]): Text`
- `GetVATRegistrationNo(VATRegistrationNo: Text[20]; CountryRegionCode: Code[10]): Text[30]`

Plus 122 local procedures.

## Triggers

OnRun

## Recent changes

- 2026-10-06 [#9347 Fix IssueDate in E-Documents for Germany](../../changes/bcapps/9347.md) (main, BC30, fix)
- 2026-10-02 [#8429 E-Document DE: map Payment Method to PEPPOL payment means codes, add SEPA Direct Debit export support](../../changes/bcapps/8429.md) (main, BC30, feature)
- 2026-09-29 [#9642 [Bug]: E-Documents for Germany - FindEDocumentService always selects last matching service, ignoring which service triggered the export](../../changes/bcapps/9642.md) (main, BC30, fix)
- 2026-09-05 [#9860 [Bug]: [DE] XRechnung/ZUGFeRD - Item Charge lines exported without a valid unit of measure code (BR-CL-23 / BR-23 on BT-130)](../../changes/bcapps/9860.md) (main, BC30, fix)
- 2026-08-26 [#10631 Integration/main to releases 29.x 31a860b5](../../changes/bcapps/10631.md) (releases/29.x, BC29, feature)
- 2026-08-24 [#10349 [DE] Support registration numbers in E-Documents](../../changes/bcapps/10349.md) (main, BC30, feature)
- 2026-08-20 [#10342 Add GLN information to XRechnung and ZUGFeRD exports](../../changes/bcapps/10342.md) (main, BC30, feature)
- 2026-08-12 [#10048 Add GTIN to XRechnung and ZUGFeRD exports](../../changes/bcapps/10048.md) (main, BC30, feature)
- 2026-08-05 [#9955 XRechnung – Invalid XML Generated When Invoice Discount Percentage Exceeds 2 Decimals](../../changes/bcapps/9955.md) (main, BC30, fix)

## Across versions

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

## Deprecations

- procedure FormatFourDecimal: Pending 29.0 (#if not CLEAN29), "FormatFourDecimal is no longer used internally. Quantity and unit price fields are now exported with unlimited precision per EN 16931. For VAT percentages, use FormatFiveDecimal. For quantity and unit price, use FormatDecimalUnlimited."

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

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