ebInterface: der österreichische XML Rechnungsstandard

6. Dezember 2013 13:01

Hallo zusammen.

Ich muss mich kurzfristig mit der Implementierung einer NAV Lösung für den ebInterface Standard in Österreich beschäftigen. Ich bin gerade dabei mich in das Thema einzulesen - es ist nicht ganz so trivial und muss anscheinend ab 1.1.14 gesetzlich umgesetzt sein.

Meine Frage wäre, hat hier jemand schon eine NAV Implementierung für das XML File, dessen Übertragung und würde die Lösung teilen? Oder den Lösungsweg skizzieren?

Viele Grüße,
Jörg

Re: ebInterface: der österreichische XML Rechnungsstandard

7. Dezember 2013 12:45

Also verpflichtend sind meiner Meinung nach nur die Rechnungen an den Bund ab 01.01.14 elektronisch zu übermitteln. Gute Infos dazu gibt es hier:
https://www.erb.gv.at/

Man findet auf dieser Seite genaue Formatbeschreibungen, es gibt ein Forum und man kann Dateien testweise hochladen.

Ich muss die Funktionalität "Rechnungen an den Bund" auch gerade bei einem Kunden umsetzen. Unser Weg ist es, das XML in Navision zu erzeugen und dann mittels eines externen .net Programmes (läuft als Service) hochzuladen. Sprich beim Rechnungsdruck wird das XML erzeugt und in ein definiertes Verzeichnis gestellt. Der Service überwacht dieses Verzeichnis und lädt die Datei dann hoch.

Grüsse

scan

Re: ebInterface: der österreichische XML Rechnungsstandard

9. Dezember 2013 10:31

Wir werden die Rechnungen erst einmal manuell uploaden. Der Ansatz mit dem Webservice der das Verzeichnis abgrast klingt gut, werde ich mal so avisieren.

Re: ebInterface: der österreichische XML Rechnungsstandard

13. Dezember 2013 12:33

Zwischenstand hier:

mit einem XMLPort wird das nur schwer möglich sein. Der ebInterface Standard sieht leider keine leeren Elemente vor. XMLPorts erzeugen aber Elemente immer, sobald diese definiert sind, unabhängig vom Wert (z.b. <element />. Oder gibt es doch einen Weg?

Andernfalls man müsste nach dem Erzeugen das XML File nochmal mit einer XMLDoc Automation parsen und dann alle leeren Elemente entfernen.

Oder gleich über eine automation Instanz erzeugen...

Re: ebInterface: der österreichische XML Rechnungsstandard

13. Dezember 2013 13:10

JoergR hat geschrieben:Oder gleich über eine automation Instanz erzeugen...

Das ist wohl am sinnvollsten, zu leeren Elementen hatten wir hier auch schon mal ein Thema.

Re: ebInterface: der österreichische XML Rechnungsstandard

13. Dezember 2013 13:24

Hier ist mein Ansatz. Ich mache es nun doch über den XML Port da es einfacher zu lesen und zu verstehen ist. Anschließend wird das XML file nochmal bereinigt.

Achtung der code ist nur ein Entwurf aber es ist nun relativ darauf aufzubauen...ich muss es noch vervollständigen (Gutschriften, Einrichtungen)...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: ebInterface: der österreichische XML Rechnungsstandard

21. November 2017 10:43

Hallo,

ich stand vor dem gleichen Problem und habe es folgendermaßen gelöst:

Nach dem Erstellen der XML Datei, wird diese Datei mit einer Funktion bereinigt.
Ich habe eine ganze Weile gebraucht, um eine passende XPath Expression zu finden. (Der String hinter SelectNodes). Denn ich wollte auch Knoten mit leeren Attributen entfernen. Da die ParentNodes mit einem Absatz stehen bleiben, war "normalize-space" die Lösung. Dazu kann ich auch den folgenden Onlinetester für XPath Expressions empfehlen: https://www.freeformatter.com/xpath-tester.html
Es werden also alle Knoten ausgewählt die keinen Inhalt haben. Damit Knoten ohne Inhalt, aber mit einem gefüllten Attribut nicht gelöscht werden, wird nochmal die gleiche Teilexpression mit (@*) verwendet.

Variablen:
Code:
Name   DataType   Subtype   Length
XMLDocument   DotNet   System.Xml.XmlDocument.'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
XMLNode   DotNet   System.Xml.XmlNode.'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
XMLNodeList   DotNet   System.Xml.XmlNodeList.'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
i   Integer      

Funktion:
Code:
RemoveEmptyNodes(TempServerFile : Text)

XMLDocument := XMLDocument.XmlDocument();
XMLDocument.Load(TempServerFile);
XmlNodeList := XMLDocument.SelectNodes('//*[not(string-length(normalize-space())) and not(string-length(normalize-space(@*)))]');
for i := XmlNodeList.Count - 1 downto 0 do begin
  XmlNode := XmlNodeList.Item(i);
  XmlNode.ParentNode.RemoveChild(XmlNode);
end;

XMLDocument.Save(TempServerFile);


Meine XML Datei ist so von 61Kb auf 6Kb geschrumpft :mrgreen:

Beispiel (stark eingekürzt):

XML Alt
Code:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<ORDERS05>
  <IDOC BEGIN="">
    <EDI_DC40 SEGMENT="">
      <TABNAM>EDI_DC40</TABNAM>
      <MANDT />
      <DOCNUM>123456789</DOCNUM>
      <DOCREL />
    </EDI_DC40>
    <E1EDK01 SEGMENT="">
      <ACTION />
      <KZABS />
    </E1EDK01>
    <E1EDK14 SEGMENT="nicht löschen">
      <QUALF />
      <ORGID />
    </E1EDK14>
   </IDOC>
</ORDERS05>


XML Neu:
Code:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<ORDERS05>
  <IDOC BEGIN="">
    <EDI_DC40 SEGMENT="">
      <TABNAM>EDI_DC40</TABNAM>
      <DOCNUM>123456789</DOCNUM>
    </EDI_DC40>
    <E1EDK14 SEGMENT="nicht löschen">
    </E1EDK14>
   </IDOC>
</ORDERS05>