---
id: object/codeunit/11038-de
type: object
title: Codeunit 11038 "E-Document DE Helper" (DE)
summary: Codeunit 11038 "E-Document DE Helper" (DE) in the DE country layer (Microsoft.eServices.EDocument.Formats). 8 public procedures. 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: 8e893ec69160ff6027dc44274adb87ec774ca697a0282c0854838053a6cf06bc
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/DE/EDocumentDE/app/src/EDocumentDEHelper.Codeunit.al
    title: src/Apps/DE/EDocumentDE/app/src/EDocumentDEHelper.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/9646
    - change/bcapps/9860
object_type: codeunit
object_id: 11038
name: E-Document DE Helper
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: 18
  events: 0
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
---

# Codeunit 11038 "E-Document DE Helper" (DE)

> Codeunit 11038 "E-Document DE Helper" (DE) in the DE country layer (Microsoft.eServices.EDocument.Formats). 8 public procedures. 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/EDocumentDEHelper.Codeunit.al) · facts from BC29

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

## Properties

| Property | Value |
|---|---|
| Access | Public |

## Procedures

- `IsValidRoutingNo(RoutingNo: Text[50]): Boolean`: Checks whether the given routing number (Leitweg-ID) is structurally valid.
- `HasRoutingNo(SourceDocumentHeader: RecordRef): Boolean`: Determines whether the source document has a routing number (Leitweg-ID) available. First checks the document's Buyer Reference field for a valid routing number, then falls back to the bill-to customer's E-Invoice Routing No.
- `ValidateRoutingNo(RoutingNo: Text[50])`: Validates the structure of a routing number (Leitweg-ID) and raises an error if it is invalid. Validates the overall length, segment count, coarse routing (Grobadressierung), optional fine routing (Feinadressierung), and check digit (Prüfziffer) using Mod 97-10.
- `GetBuyerReferenceValue(DocumentBuyerReference: Text[100]; BillToCustomerNo: Code[20]; YourReference: Text[35]): Text` (internal): Resolves the Buyer Reference (BT-10) value using a priority chain. Priority 1: Document Buyer Reference field — accepted only if it is a structurally valid Leitweg-ID. Priority 2: Bill-to Customer E-Invoice Routing No. Priority 3a: Document Buyer Reference if explicitly set but not a valid Leitweg-I...
- `CheckBuyerReferenceMandatory(EDocumentService: Record "E-Document Service"; SourceDocumentHeader: RecordRef)` (internal): Checks whether a Buyer Reference (BT-10) can be resolved for the given document and raises an error if not. Only runs when the E-Document Service has "Buyer Reference Mandatory" enabled and the document is a supported type. Uses GetBuyerReferenceValue to resolve the reference via the same priority c...
- `CheckSellerContactMandatory(SourceDocumentHeader: RecordRef)` (internal): Checks that the seller contact (BG-6) can be fully supplied from the source that the export uses, so that BR-DE-2 (group present), BR-DE-5 (BT-41 name), BR-DE-6 (BT-42 telephone) and BR-DE-7 (BT-43 e-mail) are satisfied. When a salesperson is assigned to the document, the salesperson supplies all th...
- `IsCharge(SignedAmount: Decimal): Boolean` (internal): Tells whether a signed amount is reported as a charge or as an allowance.
- `GetReportedAmount(SignedAmount: Decimal): Decimal` (internal): Gets the amount to report for a signed allowance/charge amount. The e-document formats report allowances with a positive amount and distinguish them from charges through the charge indicator.

Plus 10 local procedures.

## Recent changes

- 2026-09-22 [#9646 [Bug]: [DE] XRechnung/ZUGFeRD — no posting-time error when SELLER CONTACT (BG-6) source data is incomplete, producing non-compliant e-invoices](../../changes/bcapps/9646.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)

## 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: "codeunit", object_name: "E-Document DE Helper")`, 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.
