Arbeiten mit XRechnung

Events

Wir bieten Ihnen die Möglichkeit sich mit Events in unsere Programmierlogik einzuklinken, hier beschreiben wir Ihnen wie dies geht.

Um ein Event für Verkaufsrechnungen bzw. Servicerechnungen zu subscriben, muss der XML-Port BEL365 S. Inv. XRechnung 2.0 in einem EventSubscriber angegeben werden.

Beispiel:

1
[EventSubscriber(ObjectType::XmlPort, XmlPort::"BEL365 S. Inv. XRechnung 2.0", 'OnAfterGetLineInvoicePeriodInfo', "", true, true)]

Für Verkaufsgutschriften bzw. Servicegutschriften ist als folgender XML-Port einzutragen: BEL365 S. Cr. M. XRechnung 2.0.

Beispiel:

1
[EventSubscriber(ObjectType::XmlPort, XmlPort::"BEL365 S. Cr. M. XRechnung 2.0", 'OnAfterGetLineInvoicePeriodInfo', "", true, true)]

Einige der Business Terms, welche im folgenden aufgelistet werden, können nicht über die beiden oben genannten XML-Ports verändert werden.
Connector 365 XRechnung bedient sich teilweise aus Funktionen der Microsoft Standard-Codeunit: PEPPOL Management (1605).
Die betroffenden Events werden in dieser Dokumentation mit einer Hinweis-Box versehen.



Die XRechnung-Events bieten die Möglichkeit, Business Terms zu „füllen“ nachdem Sie standardmäßig gesetzt werden und noch bevor Sie weiterverarbeitet, also in die resultierende XML-Datei eingefügt werden. Die Business Terms werden dabei jeweils als Text-Variable übergeben. Vorangestellt an diesen Variablen steht das Schlüsselwort VAR, welches angibt, dass die Variablen Referenzen auf die ursprünglichen Variablen sind.

Nachdem Sie eine Funktion als Subscriber definiert haben, so können Sie die übergebenen Variablen beliebig und nach eigener Logik füllen.

Beispiel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[EventSubscriber(ObjectType::XmlPort, XmlPort::"BEL365 S. Inv. XRechnung 2.0", 'OnAfterGetLineInvoicePeriodInfo', "", true, true)]
local procedure SubAfterGetLineInvoicePeriodInfo (
    var Sender: XmlPort "BEL365 S. Inv. XRechnung 2.0"; 
    SalesLine: Record "Sales Line";
    var InvLineInvoicePeriodStartDate: Text;
    var InvLineInvoicePeriodEndDate: Text);
begin
    InvLineInvoicePeriodStartDate := format(SalesLine."Posting Date");
    InvLineInvoicePeriodEndDate := '2021-04-15';
end;

Die Funktion SubAfterGetLineInvoicePeriod ist hier ein Subscriber für das Event OnAfterGetLineInvoicePeriodInfo.

Unabhängig von der Standardmäßigen Logik der Füllung der Variablen, enthält InvLineInvoicePeriodEndDate nach Erzeugung der XRechnung nun den Wert „2021-04-15“ und erscheint so in der resultierenden XML-Datei. Gleiche Vorgehensweise gilt für alle weiteren Events.

Im Folgenden eine Auflistung der verfügbaren Events und die damit zu verändernden Variablen.

Zu Beginn des XML-Ports wird überprüft, ob es sich um einen Verkaufsbeleg bzw. um einen Servicebeleg handelt. Anschließend werden die zugehörigen Record-Variablen in die Variablen „Sales Header“ und „Sales Line“ transferiert, welche von dort an über den gesamten XML-Port verwendet werden. Beispiel für Verkaufsrechnungen:

„Sales Invoice Header“ -> „Sales Header“,
„Sales Invoice Line“ -> „Sales Line“.

Dies ist der Grund, weshalb alle folgenden Events mit „Sales Header“ oder mit „Sales Line“ arbeiten.

GetGeneralInfoBIS

Dieses Event stammt aus der Codeunit: PEPPOL Management (1605).
1
2
3
4
5
6
7
8
. SalesHeader: Record "Sales Header"
. var ID: Text                   (BT-1)
. var IssueDate: Text            (BT-2)
. var InvoiceTypeCode: Text      (BT-3)
. var Note: Text                 (BT-22)
. var TaxPointDate: Text         (BT-7)
. var DocumentCurrencyCode: Text (BT-5)
. var AccountingCost: Text       (BT-19)
Name Business Term Semantischer Datentyp
Invoice number BT-1 Identifier
Eine eindeutige Kennung der Rechnung, die diese im System des Verkäufers identifiziert.
Invoice issue date BT-2 Date
Das Datum, an dem die Rechnung ausgestellt wurde.
Invoice type code BT-3 Code
Ein Code, der den Funktionstyp der Rechnung angibt. Anmerkung: Der Rechnungstyp muss gemäß UNTDID 1001 spezifiert werden.
Invoice currency code BT-5 Code
Die Währung, in der alle Rechnungsbeträge angegeben werden, ausgenommen ist der Umsatzsteuer-Gesamtbetrag, der in der Abrechnungswährung anzugeben ist.
Value added tax point date BT-7 Date
Das Datum, zu dem die Umsatzsteuer für den Verkäufer und für den Erwerber abrechnungsrelevant wird. Die Anwednung von BT-7 und 8 schließen sich gegenseitig aus.
Buyer accounting reference BT-19 Text
Ein Textwert, der angibt, an welcher Stelle die betreffenden Daten in den Finanzkosten des Erwerbers zu buchen sind.
Invoice note BT-22 Text
Ein Textvermerk, der unstrukturierte Informationen enthält, die für die Rechnung als Ganzes maßgeblich sind.

OnGetInvoicePeriod

1
2
3
. SalesHeader: Record "Sales Header"
. VAR InvoicePeriodStartDate : Text (BT-73)
. VAR InvoicePeriodEndDate : Text (BT-74)
Name Business Term Semantischer Datentyp
Invoicing period start date BT-73 Date
Das Datum, an dem der Abrechnungszeitraum beginnt.
Invoicing period end date BT-74 Date
Das Datum, an dem der Abrechnungszeitraum endet.

Das Event OnGetInvoicePeriod kann genutzt werden, um das Leistungsdatum bzw. ein Leistungszeitraum für eine Rechnung festzulegen. Dabei wird ein Zeitraum durch einen Start- und einen Endzeitpunkt definiert, die jeweils folgendes Format erhalten sollen: „YYYY-MM-DD“. Beispiel: 2017-10-01

OnAfterGetLineInvoicePeriodInfo

1
2
3
. SalesLine : Record „Sales Line“
. VAR InvLineInvoicePeriodStartDate : Text 
. VAR InvLineInvoicePeriodEndDate : Text

Dieses Event setzt das Leistungsdatum ähnlich wie bei OnGetInvoicePeriod fest, jedoch auf Zeilenebene.

OnAfterGetAccountingSupplierPartyContact (BG-6)

1
2
3
4
5
. SalesHeader : Record “Sales Header”
. VAR ContactName : Text  (BT-41)
. VAR Telephone : Text  (BT-42)
. VAR Telefax : Text
. VAR ElectronicMail : Text  (BT-43)
Name Business Term Semantischer Datentyp
Seller Contact Point BT-41 Text
Angaben zu Ansprechpartner oder Kontaktstelle (wie z.B. Name einer Person, Abteilungs- oder Bürobezeichnung
Seller contact telephone number BT-42 Text
Telefonnummer des Ansprechpartners oder der Kontaktstelle
Seller contact email address BT-43 Text
Eine E-Mail-Adresse des Ansprechpartners oder der Kontaktstelle

Business Rules:

BR-DE-2: Die Gruppe „SELLER CONTACT“ (BG-6) ist zwingend zu übermitteln.

BR-DE-5: Das Element „SELLER CONTACT POINT“ (BT-41) ist zwingend zu übermitteln.

BR-DE-6: Das Element „SELLER CONTACT TELEPHONE NUMBER“ (BT-42) ist zwingend zu übermitteln.

BR-DE-7: Das Element „SELLER CONTACT EMAIL ADDRESS“ (BT-43) ist zwingend zu übermitteln.

OnAfterGetPaymentTermsInfo

1
2
. SalesHeader : Record „Sales Header“
. VAR PaymentTermsNote : Text (BT-20)

Eine Textbeschreibung der Zahlungsbedingungen, die für den fälligen Zahlungsbetrag gelten (einschließlich Beschreibung möglicher Skonto- und Verzugsbedingungen.) Dieses Informationselement kann mehrere Zeilen und mehrere Angaben zu Zahlungsbedingungen beinhalten und sowohl unstrukturierten als strukturierten Text enthalten. Der unstrukturierte Text darf dabei keine # enthalten.

Spezifikation XRechnung Standard und Extension
Version XRechnung 2.0.0 | Fassung vom 16.12.2020

OnGetOrderLineReference

1
2
. SalesLine : Record „Sales Line“
. VAR OrderLineReferenceLineID : Text (BT-132)

Referenced purchase oder line reference

Eine vom Erwerber ausgegebene Kennung für eine referenzierte Position einer Bestellung / eines Auftrags.

Anmerkung: Auf den Auftrag wird auf Rechnungsebene Bezug genommen.

Spezifikation XRechnung Standard und Extension
Version XRechnung 2.0.0 | Fassung vom 16.12.2020

OnAfterGetPaymentMeansInfo (BG-16)

1
2
3
4
5
6
. Sales Header : Record „Sales Header“
. VAR PaymentMeansCode : Text  (BT-81)
. VAR PaymentChannelCode : Text  (BT-82)
. VAR PaymentID : Text  (BT-83)
. VAR PrimaryAccountNumberID : Text  (BT-87)
. VAR NetworkID : Text
Name Business Term Semantischer Datentyp
Payment means type code BT-81 Code
Das als Code ausgedrückte erwartete oder genutzte Zahlungsmittel. Hierzu wird auf die Codeliste UN/ECE 4461 verwiesen
Payment means text BT-82 Text
Das in Textform ausgedrückte erwartete oder genutzte Zahlungsmittel
Remittance information BT-83 Text
Ein Textwert, der zur Verknüpfung der Zahlung mit der vom Verkäufer ausgestellten Rechnung verwendet wird
Payment card primary account number BT-87 Text
Die Nummer der Kreditkarte, die für die Zahlung genutzt wurde

Business Rules:

BR-DE-1: Eine Rechnung (INVOICE) muss Angaben zu „PAYMENT INSTRUCTIONS“ (BG-16) enthalten.

BR-DE-13: In der Rechnung müssen Angaben zu einer der drei Gruppen „CREDIT TRANSFER“ (BG-17), „PAYMENT CARD INFORMATION“ (BG-18) oder „DIRECT DEBIT“ (BG-19) gemacht werden.

OnAfterGetContractDocRefInfo

1
2
3
4
5
. SalesHeader : Record „Sales Header“
. VAR ContractDocumentReferenceID : Text (BT-12)
. VAR DocumentTypeCode : Text
. VAR ContractRefDocTypeCodeListID : Text
. VAR DocumentType : Text
Name Business Term Semantischer Datentyp
Contract reference BT-12 Document Reference
Eine eindeutige Bezeichnung des Vertrages (z.B: Vertragsnummer).

OnAfterGetAccountingCustomerPartyInfoBIS

1
2
3
4
5
6
. SalesHeader: Record "Sales Header"
. VAR CustomerEndpointID: Text (BT-49)
. VAR CustomerSchemeID: Text (BT-49-1)
. VAR CustomerPartyIdentificationID: Text (BT-46)
. VAR CustomerPartyIDSchemeID: Text (BT-46-1)
. VAR CustomerName: Text (BT-45)
Name Business Term Semantischer Datentyp
Buyer electronic address BT-49 Identifier
Gibt eine elektronische Adresse des Erwerbers an, an die eine Rechnung gesendet werden sollte.
Buyer electronic address/Scheme identifier
Das Bildungsmuster für Buyer electronic address.

Es ist die Codeliste Electronic Address Scheme code list (EAS) zu verwenden. Die Codeliste wird von der Connecing Eruope Facility gepflegt und herausgegeben.
Buyer identifier BT-46 Identifier
Eine (i.d.R. vom Verkäufer vergebene) Kennung des Erwerbers, wie z.b. die Debitorennummer für die Buchhaltung oder die Kundennummer für die Auftragsverwaltung.

Anmerkung: Für die Bildung des Buyer Identifier ist kein einheitliches Schema erforderlich
Die Kennungs des Bildungsschemas für den "Buyer identifier".

Anmerkung: Wenn das Element verwendet wird, ist der Eintrag aus der von der ISO/IEC 6523 maintenance agency veröffentlichten Liste zu wählen.
Buyer trading name BT-45 Text
Ein Name, unter dem der Erwerber bekannt ist, sofern abweichend vom Namen des Erwerbers.

OnAfterGetPaymentMeansPayeeFinancialAccBIS (BG-17)

1
2
3
. VAR PayeeFinancialAccountID : Text (BT-84)
. VAR FinancialInstitutionBranchID : Text (BT-86)
. VAR PayeeFinancialAccountName : Text (BT-85)
Name Business Term Semantischer Datentyp
Payment account identifier BT-84 Identifier
Die Kennung des Kontos, auf das die Zahlung erfolgen soll: IBAN für Zahlungen im SEPA-Raum, Kontonummer oder IBAN im Fall von Auslandszahlungen
Payment account name BT-85 Text
Name des Kontos bei einem Zahlungsdienstleister, auf das die Zahlunge erfolgeng soll. (z.B. Kontoinhaber)

OnAfterGetLineGeneralInfo

1
2
3
4
5
6
7
8
. SalesLine : Record „Sales Line“
. SalesHeader : Record „Sales Header“
. VAR InvoiceLineID : Text
. VAR InvoiceLineNote : Text
. VAR InvoicedQuantity : Text
. VAR InvoiceLineExtensionAmount : Text
. VAR LineExtensionAmountCurrencyID : Text
. VAR InvoiceLineAccountingCost : Text

OnAfterGetLineItemInfo

1
2
3
4
5
6
7
8
 . SalesLine: Record "Sales Line"
 . VAR Description: Text
 . VAR Name: Text
 . VAR SellersItemIdentificationID: Text
 . VAR StandardItemIdentificationID: Text
 . VAR StdItemIdIDSchemeID: Text
 . VAR OriginCountryIdCode: Text
 . VAR OriginCountryIdCodeListID: Text

OnAfterGetAccountingSupplierPartyLegalEntityBIS

1
2
3
4
5
6
7
 . SalesHeader: record "Sales Header"
 . var PartyLegalEntityRegName: Text
 . var PartyLegalEntityCompanyID: Text
 . var PartyLegalEntitySchemeID: Text
 . var SupplierRegAddrCityName: Text
 . var SupplierRegAddrCountryIdCode: Text
 . var SupplRegAddrCountryIdListId: Text

OnAfterGetAccountingSupplierPartyTaxSchemeBIS

1
2
3
4
5
 . SalesHeader: record "Sales Header"
 . var TempVATAmountLine: record "VAT Amount Line"
 . var CompanyID: text
 . var CompanyIDSchemeID: text
 . var TaxSchemeID: text

OnAfterGetAccountingSupplierPartyPostalAddr

1
2
3
4
5
6
7
 . SalesHeader: record "Sales Header"
 . var StreetName: text
 . var SupplierAdditionalStreetName: text
 . var CityName: text
 . var PostalZone: text
 . var CountrySubentity: text
 . var IdentificationCoder: text

OnAfterGetAccountingSupplierPartyInfoBIS

1
2
3
 . SalesHeader: record "Sales Header"
 . var SupplierEndpointID: text (BT-34)
 . var SupplierName: text (BT-28)
Name Business Term Semantischer Datentyp
Seller electronic address BT-34 Identifier
Gibt die elektronische Adresse des Verkäufers an, an die die Antwort der Anwendungsebene auf eine Rechnung gesendet werden kann.
Seller trading name BT-28 Text
Ein Name, unter dem der Verkäufer bekannst ist, sofern abweichend vom Namen des Verkäufers.

OnAfterGetAccountingCustomerPartyPostalAddr

1
2
3
4
5
6
7
 . SalesHeader: record "Sales Header"
 . var CustomerStreetName: text (BT-35)
 . var CustomerAdditionalStreetName: text (BT-36)
 . var CustomerCityName: text (BT-37)
 . var CustomerPostalZone: text (BT-38)
 . var CustomerCountrySubentity: text (BT-39)
 . var CustomerIdentificationCode: text (BT-40)

OnAfterGetAccountingCustomerPartyTaxSchemeBIS(

1
2
3
4
 . SalesHeader: record "Sales Header"
 . var CustPartyTaxSchemeCompanyID: text
 . var CustPartyTaxSchemeCompIDSchID: text
 . var CustTaxSchemeID: text

OnAfterGetAccountingCustomerPartyLegalEntityBIS

1
2
3
4
 . SalesHeader: record "Sales Header"
 . var CustPartyLegalEntityRegName: text
 . var CustPartyLegalEntityCompanyID: text
 . var CustPartyLegalEntityIDSchemeID: text

OnAfterGetAccountingCustomerPartyContact

1
2
3
4
5
 . var SalesHeader: record "Sales Header"
 . var CustContactName: text
 . var CustContactTelephone: text
 . var CustContactTelefax: text
 . var CustContactElectronicMail: text

OnAfterGetGLNDeliveryInfo

1
2
3
4
 . SalesHeader: record "Sales Header"
 . var ActualDeliveryDate: text
 . var DeliveryID: text
 . var DeliveryIDSchemeID: text

OnAfterGetDeliveryAddress

1
2
3
4
5
6
7
 . SalesHeader: record "Sales Header"
 . var DeliveryStreetName: text
 . var DeliveryAdditionalStreetName: text
 . var DeliveryCityName: text
 . var DeliveryPostalZone: text
 . var DeliveryCountrySubentity: text
 . var DeliveryCountryIdCode: text

OnAfterGetLineItemClassfiedTaxCategoryBIS

1
2
3
4
5
 . SalesLine: record "Sales Line"
 . var ClassifiedTaxCategoryID: text
 . var ItemSchemeID: text
 . var InvoiceLineTaxPercent: Text
 . var ClassifiedTaxCategorySchemeID: text

OnAfterGetLineAllowanceChargeInfo

1
2
3
4
5
6
 . SalesLine: record "Sales Line"
 . SalesHeader: record "Sales Header"
 . var InvLnAllowanceChargeIndicator: text
 . var InvLnAllowanceChargeReason: text
 . var InvLnAllowanceChargeAmount: text
 . var InvLnAllowanceChargeAmtCurrID: text

OnAterGetLineDeliveryInfo

1
2
3
4
5
 . SalesLine: record "Sales Line"
 . SalesHeader: record "Sales Header"
 . var InvoiceLineActualDeliveryDate: text
 . var InvoiceLineDeliveryID: text
 . var InvoiceLineDeliveryIDSchemeID: text

OnAfterGetLineDeliveryPostalAddr

1
2
3
4
5
6
7
8
9
 . SalesLine: record "Sales Line"
 . SalesHeader: record "Sales Header"
 . var InvoiceLineDeliveryStreetName: text
 . var InvLineDeliveryAddStreetName: text
 . var InvoiceLineDeliveryCityName: text
 . var InvoiceLineDeliveryPostalZone: text
 . var InvLnDeliveryCountrySubentity: text
 . var InvLnDeliveryCountryIdCode: text
 . var InvLineDeliveryCountryListID: text

OnAfterGetTaxRepresentativePartyInfo

1
2
3
4
5
 . SalesHeader: record "Sales Header"
 . var TaxRepPartyNameName: text
 . var PayeePartyTaxSchemeCompanyID: text
 . var PayeePartyTaxSchCompIDSchemeID: text
 . var PayeePartyTaxSchemeTaxSchemeID: text

OnAfterGetAllowanceChargeInfo

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 . TempVATAmountLine: record "VAT Amount Line"
 . SalesHeader: record "Sales Header"
 . var ChargeIndicator: text
 . var AllowanceChargeReasonCode: text
 . var AllowanceChargeReason: text
 . var Amount: text
 . var AllowanceChargeCurrencyID: text
 . var TaxCategoryID: text
 . var TaxCategorySchemeID: text
 . var Percent: text
 . var AllowanceChargeTaxSchemeID: text

OnAfterGetTaxExemptionReason

1
2
3
4
 . SalesHeader: record "Sales Header"
 . TempVATProductPostingGroup: record "VAT Product Posting Group"
 . var TaxExemptionReason: text
 . var TaxTotalTaxCategoryID: text

OnAfterGetLineAdditionalItemPropertyInfo

1
2
3
4
 . SalesLine: record "Sales Line"
 . SalesHeader: record "Sales Header"
 . var AdditionalItemPropertyName: Text
 . var AdditionalItemPropertyValue: Text

OnAfterGetLinePriceAllowanceChargeInfo

1
2
3
4
5
6
 . SalesHeader: record "Sales Header"
 . var PriceChargeIndicator: text
 . var PriceAllowanceChargeAmount: text
 . var PriceAllowanceAmountCurrencyID: text
 . var PriceAllowanceChargeBaseAmount: text
 . var PriceAllowChargeBaseAmtCurrID: text