Mapping
Diese Seite beschreibt in Geschäftsbegriffen, wie ein SAP-INVOIC02-IDoc interpretiert und in eine UBL-Rechnung überführt wird (z. B. Peppol BIS Billing 3.0).
Die Tabellen sind als „Geschäftsfeld → Herkunft im IDoc → Ziel in UBL“ aufgebaut:
- Der linke Aufzählungspunkt in jeder Zeile ist der Ziel-UBL-XPath (Inhalt des fachlichen Enddokuments).
- Der rechte Aufzählungspunkt ist die Quelle IDoc-XPath (Auslesepfad im INVOIC02-XML).
- Der Text nach der Liste beschreibt die Zuordnungslogik (Qualifier, Parsing, Grenzen).
IDoc lesen (warum Qualifier wichtig sind)
INVOIC02 verwendet kurze Segmentnamen; die Bedeutung steht meist in einem Qualifier:
E1EDK02/QUALF: Art des Verweises (Rechnungsnummer, Bestellung, Lieferschein, Vorläuferrechnung, …).E1EDK03/IDDAT: Art des Datums (Fälligkeit, Lieferdatum, …).E1EDKA1/PARVW: Partnerrolle (Lieferant, Kunde, Warenempfänger, Kontakt, …).E1EDS01/SUMID: Art der Summe (Steuer, Netto, Brutto/zahlbar, …).
Die Konvertierung ist daher kein simples 1:1-„Tag umbenennen“: Die Zuordnung muss zuerst die richtige Segmentinstanz (per Qualifier) wählen und danach Parsing/Normalisierung anwenden, damit es zum UBL-Fachmodell passt.
Beträge, Steuern, Zu- und Abschläge (Standard-Zuordnung)
Dieser Abschnitt beschreibt, wie INVOIC02-Segmentgruppen in der Standard-Integration zu UBL-Beträgen und -Steuern stehen. Werte werden so übernommen, wie SAP sie liefert; die Zuordnung berechnet die Steuer nicht neu aus Satz × Basis und gleicht Positions- und Kopfsummen nicht ab.
Positionsbeträge (E1EDP01 → E1EDP26)
Pro Zeile werden E1EDP26-Zeilen per QUALF gelesen:
QUALF='001'→ Stückpreis. Der Betrag inBETRGwird ohne Minuszeichen auf den Preis normalisiert (Stückpreis ist im Ausgabemodell immer positiv).QUALF='002'→ Netto / Zeilensumme (Subtotal).BETRGwird für negative Beträge normalisiert: enthält die Zeichenkette-, wird auf höchstens ein führendes Minus reduziert und überzählige Minuszeichen im Zahlenanteil entfernt (SAP kodiert Negative manchmal mit mehreren-).
Damit: Preis nach der Zuordnung nie negativ; Subtotal kann nach Normalisierung negativ sein.
Positionssteuer (E1EDP04)
Aus dem Positionssteuersegment:
MSATZ→ Steuersatz (Prozent) als Zeichenkette.MWSBT→ Steuerbetrag der Zeile mit derselben Normalisierung negativer Beträge wie beim Zeilensubtotal.MWSKZ→ SAP-Steuercode, Abbildung auf eine UBL-/Peppol-Steuerkategorie (E,S,Z,AE, …) per fester Tabelle; unbekannte Codes → StandardZ.
Ist der Positionssteuerbetrag negativ, wird die Zeile gutschriftähnlich behandelt: Menge (MENGE) erhält ein führendes -, der Stückpreis bleibt positiv (nur Subtotal/Steuerseite tragen die Gutschrift).
Zu- und Abschläge auf Positionsebene (E1EDP05)
Jede E1EDP05-Zeile ist eine Kondition (Rabatt, Zuschlag, …):
- Textfilter: Zeilen mit
KOTXTexaktBruttooder mit TeilstringGrosswerden übersprungen (Brutto-/Hilfszeilen, keine separaten Zu-/Abschläge in diesem Mapping). - Pro verbleibender Zeile legt
ALCKZdie Richtung fest:-→ Rabatt,+→ Zuschlag. BETRGist der absolute Betrag der Kondition. Jede Kondition wird vollständig erfasst; zusammenfassende Rabatt- und Zuschlagsbeträge für einige Summen werden bei jedem Treffer überschrieben, sodass nur der letzte nicht gefilterte Rabatt und der letzte nicht gefilterte Zuschlag in diesen Summen erscheinen. Die vollständige Liste der Konditionen bleibt auf Positionsebene erhalten.
Es gibt keinen separaten Schritt „Netto vor Rabatt“ aus Brutto: Subtotal und Steuer kommen aus E1EDP26 / E1EDP04, Rabatt/Zuschlag sind parallele Beträge aus E1EDP05.
Dokumentsummen (E1EDS01)
Summensegmente nutzen SUMID für die Bedeutung von SUMME:
SUMID |
Rolle in UBL-Summen |
|---|---|
005 |
Steuersumme (an Positionssteuersummen angeglichen) |
010 |
Netto-Zwischensumme (an Positions-Nettosummen angeglichen) |
012 |
Zahlbar / Brutto und Saldo |
Beträge kommen als Zeichenketten aus SUMME ohne weitere Rechnung.
Steuerzwischensummen nach Satz (Dokumentebene)
Für die kopfweite Steueraufschlüsselung aggregiert die Standard-Zuordnung pro Steuerkategorie und -satz aus den Positionen: Ausgangspunkt ist jeweils der Netto-Zeilensubtotal, die Bemessungsgrundlage wird um den Positions-Rabatt verringert und um den Positions-Zuschlag erhöht (falls zutreffend), und Steuerbeträge werden in die Buckets akkumuliert. So entsteht die UBL-Steueraufschlüsselung am Kopf—keine alleinige Neuberechnung aus dem SAP-Kopf-Steuersegment.
Parteien und Endpoint-IDs (E1EDKA1/PARVW)
Partner werden aus E1EDKA1 per PARVW gelesen:
PARVW='RS'→ Lieferant / Rechnungsaussteller →cac:AccountingSupplierPartyPARVW='RE'→ Käufer →cac:AccountingCustomerPartyPARVW='WE'→ Warenempfänger / Lieferung →cac:Delivery/*PARVW='ZX'→ Lieferantenkontakt → Kontaktfelder Lieferant und Lieferanten-Endpoint-ID
Aus jeder gewählten E1EDKA1-Instanz wird eine feste Menge IDoc-Felder gemappt. Einige UBL-Adress- oder Kontaktelemente (z. B. Region, dritte Adresszeile, Kontakt-E-Mail) können leer bleiben, wenn Ihr IDoc die Segmentfelder nicht füllt oder die Zuordnung sie nicht abdeckt.
Endpoint-IDs stammen nicht aus einem separaten SAP-Segment; sie werden aus STRS2 mit einfachen String-Regeln abgeleitet:
- Lieferanten-Endpoint-ID: Kontaktpartner (
PARVW='ZX'), FeldSTRS2. - Enthält
STRS2:→ AufteilungschemeID:Wert(links@schemeID, rechts Wert). - Ohne
:→ keine Endpoint-ID nach dieser Regel. - Käufer-Endpoint-ID: Kunde (
PARVW='RE'), FeldSTRS2. - Mit
:→schemeID:Wertwie beim Lieferantenkontakt. - Sonst, wenn
STRS2@enthält → gesamte Zeichenkette als Wert (ohne Schema).
Kopf |
|---|
Rechnungsnummer
QUALF='009'. |
Rechnungsdatum (Erstellung)
YYYYMMDD → UBL YYYY-MM-DD. |
Fälligkeitsdatum
YYYYMMDD → UBL YYYY-MM-DD. Nur bei IDDAT='028' gemappt. |
Rechnungsart (Code)
BSART='CRME' → UBL 384 (Gutschrift). Bei BSART='INVO' und E1EDK14[QUALF='015']/ORGID ∈ {ZMA,ZMV} → 326, sonst 380. |
Währung
CURCY. |
Käuferreferenz
STRS2 : → Teil nach :. Fehlt/leer → Käuferreferenz wird nicht gemappt. |
Bedingungen / Hinweis
E1EDKT2 aus dem IDoc. Der Hinweistext kann ein übliches Verarbeitungspräfix vor dem Freitext tragen. |
Zahlungsreferenz / Zahlungsbeschreibung (PaymentID)
|
Buchungskosten (Kopfebene)
|
Rechnungszeitraum Beginn
|
Rechnungszeitraum Ende
|
Rechnungszeitraum: Beschreibungscode (Steuerzeitpunkt-Code)
|
Steuerwährung
|
Steuerzeitpunkt (Datum)
|
Zahlungsbedingungen (Text)
QUALF='005' gemappt. |
Bestellreferenz (Einkaufsbeleg)
QUALF='001'. |
Vertriebsauftragsreferenz
QUALF='002'. |
Vertragsreferenz
|
Projektreferenz
|
Referenz Auftraggeber (OriginatorDocumentReference)
|
Referenz Warenausgang (DespatchAdvice)
|
Referenz Wareneingang (ReceiptAdvice)
|
Zusatzbelegreferenz: Objekt (DocumentTypeCode=130)
QUALF='012' liefert die Referenz auf den Beleg. In UBL erscheint das als cac:AdditionalDocumentReference mit cbc:DocumentTypeCode=130 und Schema DQ auf cbc:ID. |
Zusatzbelegreferenz: ID-Schema
QUALF='012' ist das Kennungsschema in UBL DQ (kein separates Schema-Feld im IDoc für diese Referenz). |
Zusatzbelegreferenz: Beschreibung
|
Zusatzbelegreferenz: externe URI
|
Zusatzbelegreferenz: eingebetteter Inhalt (base64)
|
Vorgängerrechnung (BillingReference)
QUALF='031' / BELNR. Das Datum der Vorgängerrechnung ist in der Standard-Integration nicht aus dem IDoc gemappt. |
Parteien (Mapping) |
Lieferant: Name (RegistrationName)
PARVW='RS'). |
Lieferant: Rechtsform / Beschreibung
NAME4 des Lieferantenpartners. |
Lieferant: Handelsname
NAME4, wenn als Handels- oder zweiter Name genutzt; Semantik hängt von Ihren SAP-Daten ab. |
Lieferant: Straße
|
Lieferant: Adresszusatz
STRS2 überladen und kann Codes mit : tragen; nur als Adresse nutzen, wenn kein : / explizite Vereinbarung. |
Lieferant: Adresszeile 3
|
Lieferant: Ort
|
Lieferant: PLZ
|
Lieferant: Region (Subentity)
|
Lieferant: Ländercode
|
Lieferant: Partei-ID (CompanyID)
|
Lieferant: Endpoint-ID (Peppol)
PARVW='ZX': bei : in STRS2 → links @schemeID, rechts Wert. |
Lieferant: USt-IdNr.
E1EDK01/EIGENUINR. |
Kunde: Name (RegistrationName)
PARVW='RE'). |
Kunde: Handelsname
|
Kunde: Straße
|
Kunde: Ort
|
Kunde: PLZ
|
Kunde: Ländercode
|
Kunde: Partei-ID (CompanyID)
|
Kunde: Endpoint-ID
STRS2: mit : → Aufteilung in Schema und Wert; mit @ → gesamte Zeichenkette als Wert (ohne Schema). |
Kunde: USt-IdNr.
E1EDK01/KUNDEUINR. |
Kunde: Kontaktname
TELF1 am Käuferpartner; mit SAP-Partnerstammdaten prüfen, ob Kontaktname oder Telefon. |
Kunde: Kontakt-E-Mail
|
Lieferant: Kontakt Name / Telefon / E-Mail
PARVW='ZX' existiert. |
Lieferant: Kontakt Telefon
|
Lieferant: Kontakt E-Mail
NAME3 am Kontaktpartner PARVW='ZX' (übliche Projektkonvention). |
Lieferung (Mapping) |
Lieferort-ID
PARVW='WE'): PARTN liefert den Wert der Lieferort-ID. @schemeID kommt in der Standard-Integration nicht aus dem IDoc. |
Lieferung: Straße
|
Lieferung: Adresszusatz
NAME2 des Lieferpartners. |
Lieferung: Adresszeile 3
NAME3 des Lieferpartners. |
Lieferung: Ort
|
Lieferung: PLZ
|
Lieferung: Region (Subentity)
|
Lieferung: Ländercode
|
Lieferung: Parteiname
|
Zahlungsmittel (Mapping) |
Zahlungsempfänger-Konto IBAN
E1EDK28 → ein PaymentMeans. |
Bank BIC (Zahlungsempfänger)
|
Rechnungspositionen (Mapping) |
Rechnungspositions-ID / Position
|
Hinweis zur Rechnungsposition
|
In Rechnung gestellte Menge
MENEE; optional kann eine Einheitencode-Zuordnung für Zielvalidierungsregeln angewendet werden. |
Basismenge
|
Verkäufer-Artikel-ID
QUALF='002'. |
Käufer-Artikel-ID
|
Artikelbezeichnung
QUALF='002'. |
Standard-Artikel-ID
QUALF='003'. |
Schema der Standard-Artikel-ID
|
Steuersatz (Position)
MSATZ. |
Steuerbetrag (Position)
--Zeichen). |
Steuerkategorie-Code (Position)
A0,A2→E, A3,19→S, A6,B2→Z, A9,B3→AE, sonst Z. |
Preis (Betrag)
|
Bruttopreis / Zu-/Abschlag auf Preis
|
Positionsbetrag (Zwischensumme Position)
|
Positions-Zu-/Abschlag (Rabatt/Zuschlag)
ALCKZ='-' → Rabatt, ALCKZ='+' → Zuschlag. Nur wenn KOTXT != 'Brutto' und kein Gross enthält. |
Artikelbeschreibung (Textzeilen)
\n zwischen den TDLINE-Werten verkettet. |
Bestellpositionsreferenz (LineID)
|
Belegreferenz (Position)
|
Belegreferenz: Dokumenttyp-Code
|
Kostenstelle / Buchungskosten (Position)
|
Leistungszeitraum: Startdatum
Leistungsdatum: dd.mm.yyyy vorkommt (Umrechnung dd.mm.yyyy → YYYY-MM-DD). |
Leistungszeitraum: Enddatum
Leistungsdatum: dd.mm.yyyy vorkommt (Umrechnung dd.mm.yyyy → YYYY-MM-DD). |
Herkunftsland (Artikel)
|
Warenklassifikation
|
Zusatzattribute (frei)
Position: X → Unterzeilen gruppieren; Lieferschein: X → Eigenschaft (Name=Lieferschein); Reparaturvorgang: X → Eigenschaft; Gerätebezeichnung: X → Eigenschaft; Leistungsdatum: dd.mm.yyyy → Zeitraum Start/Ende (dd.mm.yyyy → YYYY-MM-DD). |
Unterposition (aggregiert)
Position: X (TDID Z007); es gibt kein direktes IDoc-Segment für Unterpositionen. |
Summen (Mapping) |
Gesamtsteuer
SUMME mit SUMID='005' (Gesamtsteuer; in Einklang mit der Summe der Positionssteuern). |
Zwischensumme (netto)
SUMME mit SUMID='010' (Netto-Zwischensumme). |
Gesamtbetrag (brutto) / Saldo
SUMME mit SUMID='012' (Brutto / zahlbar). |
Summe Zu-/Abschläge
SUMID-Werte 005, 010 und 012. |
Summe Zuschläge
|
Vorauszahlungsbetrag
|
Rundungsbetrag (zahlbar)
|