Edifact-Nachrichten und Edipath

Edifact-Nachrichten

Übersicht

EDIFACT-Nachrichten enthalten ein bzw. mehrere Geschäftsvorfälle und können zwischen allen am Markt beteiligten Akteuren (z. B. Netzbetreiber, Lieferant, Bilanzkreisverantwortliche, Messstellen-betreiber und Messdienstleister) ausgetauscht werden. Dabei beinhaltet jede EDIFACT-Nachrichtendatei eine eindeutige Identifizierung der Nachrichtendatei, des Senders und Empfängers, sowie des Nachrichtentyps (z.B. MSCONS, UTILMD, IFTSTA etc.) und des Nachrichtendatums.

EDIFACT-Nachrichten basieren gemäß den Vorgaben des BDEW auf Segmenten, Komponenten und Datenwerten. Segmente (S) werden durch Segmentbezeichner gekennzeichnet, die aus drei Buchstaben bestehen (z.B. UNH, BGM, DTM etc.). Innerhalb eines Segmentes kann es mehrere Komponenten (C) geben, die wiederum mehrere Datenwerte (D) enthalten.

edipath

In der Regel werden innerhalb eines Segments Komponenten durch ein Pluszeichen + und Datenwerte durch einen Doppelpunkt „:“ getrennt.

Eine EDIFACT-Nachricht ist prinzipiell nach folgendem Schema aufgebaut:

edipath

Das UNA-Segment legt die Trennzeichen fest, wenn andere als die Standardtrennzeichen verwendet werden sollen. Das UNB-Segment eröffnet, identifiziert und beschreibt die Übertragungsdatei während sie vom UNZ-Segment beendet und auf Vollständigkeit hin überprüft wird. Innerhalb des UNH-Segmentes werden die eigentlichen Daten kodiert. Je nach Nachrichtentyp sind ein oder mehrere UNH-Segmente pro EDIFACT-Nachricht möglich.

Eine genaue Beschreibung dieser Struktur ist den Implementierungsleitfäden des BDEW zu entnehmen (www.edi-energy.de).

Beispiele

Ein Beispiel für eine EDIFACT-Nachricht, hier eine UTILMD:

UNB+UNOC:3+9903681000004:500+9907399000009:500+120712:0805+991000150820'
UNH+991000150820+UTILMD:D:04B:UN:4.4a'
BGM+E02+991000150820+9'
DTM+137:201207120805:203'
DTM+735:?+0200:406'
NAD+MS+9903681000004::293'
NAD+MR+9907399000009::293'
IDE+24+051MXW3P7j6o}FEI{tmFTG'
DTM+93:20120715:102'
STS+7++E01'
LOC+172+DE0009974279900000000000000048034::89'
UNT+11+991000150820'
UNZ+1+991000150820'

Suchen in Edifact-Nachrichten

B2B by Practice stellt eine spezielle Syntax bereit (Edipath), mit der auf einzelne Elemente eines EDIFACT-Segments zugegriffen werden kann.

Einfache Suchanfragen

Die Syntax für einfache Suchanfragen lautet:

SEGMENT+KOMPONENTENINDEX+DATENWERTINDEX

Dabei besteht der Eintrag SEGEMENT immer aus drei Buchstaben (z.B. BGM, UNH etc.) und der KOMPONENTENINDEX ist der von links gezählte Index der Komponente beginnend bei 0. Index 0 ist der Segmentbezeichner selbst, ab Index 1 folgen dann alle Komponenten. Der DATENWERTINDEX ist der von links gezählte Index des Datenwerts innerhalb der Komponente beginnend bei 0.

Voraussetzung für eine solche Suche ist, dass im Kontext lediglich ein Segment mit diesem Namen vorkommt.

Beispiele

Die Angabe BGM+2+0 ermittelt also das Segment mit dem Bezeichner BGM, den dritten durch ein Pluszeichen getrennten Wert von links und den ersten durch einen Doppelpunkt getrennten Wert von links innerhalb der ermittelten Komponente.

BGM+E02+991000150820+9'

In unserer Beispiel EDIFACT-Nachricht wäre dies also der Wert „991000150820“.

Komplexe Suchanfragen

Kommen im Kontext mehrere Segmente mit dem gleichen Namen vor und möchte man gezielt auf ein Bestimmtes oder auch mehrere Elemente zugreifen, muss man die Syntax entsprechend erweitern. Dabei gibt es zwei Möglichkeiten der Suche, die Suche nach Segmenten mit einer bestimmten Bedingung oder die Frage, wie oft ein entsprechendes Segment vorhanden ist.

Suche über Bedingungen 1

Die Bedingungen, unter denen in einem bestimmten Segment nach Einträgen gesucht werden soll, werden in einem eckigen Klammernpaar dem Segmentbezeichner angehängt:

SEGMENT[KOMPONENTENINDEX+DATENWERTINDEX = "WERT"]+KOMPONENTENINDEX +DATENWERTINDEX

bzw. wenn man weiß, in welchem der Segmente man suchen möchte, kann dieses auch sofort angegeben werden:

SEGMENT[WIEVIELTES_SEGMENT]+KOMPONENTENINDEX +DATENWERTINDEX

Dabei zählt der Eintrag WIEVIELTES_SEGMENT das Vorkommen dieses Segments von links beginnend ab 1.

Beispiele

DTM+137:201207120805:203'
DTM+735:?+0200:406'
NAD+MS+9903681000004::293'
NAD+MR+9907399000009::293'
…
DTM+93:20120715:102'
  • Die Angabe DTM[1+0=“93“]+1+2 liefert, unter der Bedingung, dass an der Stelle DTM+1+0 der Wert 93 steht, den Wert für die Stelle DTM+1+2. In unserem Beispiel werden somit die beiden oberen DTM-Segmente ignoriert und aus dem unteren der Wert „102“ zurückgegeben.

  • Die Angabe DTM[3]+1+2 liefert ebenfalls den Wert „102“ zurück, da hier beim dritten Vorkommen des Segments DTM nach dem entsprechenden Wert gesucht wird.

  • Die einfache Suche nach DTM+1+2 würde hier [203, 406, 102] zurückgeben. Bei der einfachen Suchsyntax wird, wenn das Segment mehrfach vorkommt, in allen Segmenten nach dem entsprechendem Wert gesucht und eine Liste mit allen vorkommenden Werten zurückgegeben.

  • Die Angabe NAD[1+0=“MR“]+2+0 liefert hier den Wert „9907399000009“.

2.2.3 Suche über Bedingungen 2

In vielen EDIFACT-Nachrichten gibt es ganze Segmentgruppen, die sich blockweise wiederholen, wie z.B. die bei dem Segment LIN beginnenden Blöcke, die selber wiederum CCI-Unterblöcke beinhalten, in dem folgendem Beispiel einer MSCONS-Nachricht:

UNB+UNOC:3+9900102000000:500+9903086000005:500+090114:1011+000000874347++VL'
  UNH+000000874347+MSCONS:D:04B:UN:2.1'
    …
    LIN+1'
    PIA+5+1-1?:0.1.0:SRW'
    QTY+88:25'
    CCI+11++VKS'
          MEA+SV+ZZZ+NCL:02'
    CCI+11++NKS'
          MEA+SV+ZZZ+NCL:00'
          MEA+SV+ZZZ+NCL:00'
     LIN+2'
    PIA+5+1-1?:1.8.1:SRW'
    QTY+88:2659.02:KWH'
    CCI+11++VKS'
          MEA+SV+ZZZ+NCL:05'
    CCI+11++NKS'
          MEA+SV+ZZZ+NCL:02'
    CCI+11++WAK'
          MEA+SV+RY+A9:1000.00000'
    LIN+3'
    PIA+5+1-1?:1.8.2:SRW'
    QTY+88:223.26:KWH'
    CCI+11++VKS'
          MEA+SV+ZZZ+NCL:05'
    CCI+11++NKS'
          MEA+SV+ZZZ+NCL:02'
    CCI+11++WAK'
          MEA+SV+RY+A9:1000.00000'
  UNT+75+000000874347'
UNZ+1+000000874347'

Um nach speziellen Elementen aus einem solchen Block suchen zu können, braucht man eine verschachtelte Abfrage nach den Suchbedingungen. Dazu wird die Syntax der Bedingungssuche folgendermaßen erweitert:

{ÄUßERES_SEGMENT[KOMPONENTENINDEX+DATENWERTINDEX = “WERT“] {INNERES_SEGMENT[KOMPONENTENINDEX+DATENWERTINDEX = “WERT“] {GESUCHTES_SEGMENT+KOMPONENTENINDEX +DATENWERTINDEX}}}

Dabei müssen dem ÄUßEREN_SEGMENT und dem INNEREN_SEGMENT nicht unbedingt Bedingungen mitgegeben werden.

2.2.4 Beispiele

Alle Beispiele aus diesem Abschnitt beziehen sich auf die obige MSCONS-Nachricht.

  • Die Angabe {LIN[1+0=“1“]{CCI[3+0=“VKS“]{MEA+3+1}}} liefert den Wert für Eintrag MEA+3+1 zurück, wenn im Block LIN+1 das Element (3,0) aus dem CCI-Segment den Wert „VKS“ hat:
LIN+1'
…
CCI+11++VKS'
MEA+SV+ZZZ+NCL:02'
CCI+11++NKS'
…

In unserem Beispiel also „02“.

  • Die Angabe {LIN[1+0=“1“]{CCI{MEA+3+1}}} liefert alle Einträge für MEA+3+1, die im Block LIN+1 in den CCI-Unterblöcken auftreten, in unserem Beispiel also die Liste [02, 00, 00].

  • Die Angabe {LIN{CCI{MEA+3+1}}} liefert alle Einträge für MEA+3+1, die in den LIN-Blöcken in den CCI-Unterblöcken auftreten. Das ergibt in diesem Beispiel die Liste [02, 00, 00, 05, 02, 1000.00000, 05, 02, 1000.00000].

  • Die Angabe LIN[2]{CCI+3+0} liefert alle Wertes für CCI+3+0, die im zweiten LIN-Block vorkommen, hier also [VKS, NKS, WAK].

Suche nach Vorkommen

Da sich z.B. manche Segmentgruppen blockweise wiederholen, kann man auch danach suchen, wie oft ein bestimmtes Segment in der EDIFACT-Nachricht oder einem Abschnitt dieser vorkommt:

(SEGMENT…SEGMENT).size()

oder

(SEGMENT[WIEVIELTES_SEGMENT1]…SEGMENT[WIEVIELTES_SEGMENT2]).size()

Dabei wird das erste Element mitgezählt, das letzte hingegen ist exklusive.

Beispiele

UNH+991000150820+UTILMD:D:04B:UN:4.4a'
  BGM+E02+991000150820+9'
  DTM+137:201207120805:203'
  DTM+735:?+0200:406'
  NAD+MS+9903681000004::293'
  NAD+MR+9907399000009::293'
  IDE+24+051MXW3P7j6o}FEI{tmFTG'
  DTM+93:20120715:102'
  STS+7++E01'
  LOC+172+DE0009974279900000000000000048034::89'
UNT+11+991000150820'
  • Die Angabe (DTM…UNT).size() liefert „3” zurück, da das Segment DTM vom ersten Vorkommen bis UNT dreimal vorkommt.

  • Die Angabe (DTM[1]…DTM[3]).size() liefert „2“ zurück, da die rechte Suchgrenze exklusive ist.

View Me   Edit Me