Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Die Begriffe FeRD (Forum elektronische Rechnung Deutschland) und ZUGFeRD (Zentraler User Guide vom Forum elektronische Rechnung Deutschland) meinen in der Regel das gleiche. Das Forum hat eine Verfahrensbeschreibung ZUGFeRD erstellt, das für Unternehmen aller Art als Norm oder Orientierung dienen soll, damit der Datenaustausch vom Absender zum Empfänger auf digitalem Weg rasch und fehlerfrei erfolgen kann. Dies ist Teil der Digitalisierungsbestrebungen der deutschen Wirtschaft.

Inhaltsübersicht

Table of Contents
maxLevel2

Ausgehend von einer funktionierenden directspool-Definition wird nachfolgend beschrieben, wie die Funktion FeRD aktiviert und die Indizes zugeordnet werden.

Der PDF-Standard PDF/A-3 erlaubt neben dem Transport des Belegs die gleichzeitige Auslieferung der Rechnungsdaten im XML-Format. Dies erfolgt sozusagen als interner „Anhang" einer PDF-Datei. Der Empfänger wird so in die Lage versetzt, die wichtigen Daten einer Rechnung in eine Datenbank zu exportieren. Die manuelle Erfassung durch Ablesen vom Beleg entfällt.

Einige große Unternehmen haben diese Methode des Datentransfers bereits zur Bedingung bei der Rechnungsschreibung in Form einer PDF-Datei gemacht oder sie für die nahe Zukunft als notwendig angekündigt.

directspool (früher directspool) ist in der Lage, die Rechnungsdaten aus der Spooldatei (SPLF) abzugreifen und der PDF-Datei als XML-Daten mitzugeben. Für den Absender ist keine Programmierung erforderlich. Der Empfänger kann mit dem Adobe Reader den Beleg anzeigen und über das Symbol „Büroklammer" den Export der XML-Daten vornehmen (dazu mehr weiter unten).

Voraussetzungen für FeRD

  • directspool/DirectMail ab Version 5.50
  • Toolmaker Lizenz für FeRD XML (ggf. auch für XMR)
  • Spooldateien mit SCS Datenstrom (Standard)
  • Ausgabeformat *EPDF
  • Wert *ZUGFERD in den PDF Formularangaben bei Parameter PDF/A erstellen
  • Fontdatei im IFS unter /Toolmaker/DirectMail400/Fonts (z.B. cour.ttf)
  • Dateien ZUG.XML und ZUG.XMP im IFS unter /Toolmaker/DirectMail400/ferd

Indizes definieren

Die Daten, die für FeRD benötigt werden, werden mit den normalen Index-Funktionen (siehe Abschnitt Index erstellen) von directspool aus der Spooldatei abgegriffen oder aus einer Datenbank gelesen.

Zuordnung der Indizes

Seitens FeRD gibt es fest vordefinierte Felder sowohl für die Kopf- als auch die Postendaten einer Rechnung, denen über eine komfortable Funktion die gesammelten Indizes aus der SPLF zugeordnet werden. Auch die Verwendung von konstanten Werten und die Nutzung von Datumsroutinen zur Formatumsetzung sind möglich.

FeRD Definitionen und Default Werte

Rufen Sie directspool (directspool) mit WRKATMDEF auf. Drücken Sie dann Taste F7-X-Strukturen.

Image Removed

Image Removed

Image Removed

X-File Template  - Definiert Die Einbettungsstruktur für das PDF

X-ADD Template - zug.xmp definiert das Muster für die Zugferd Struktur

Anfang Position / Ende Position - bestimmt die Vervielfältigung der Positionen. Z.B Rechnungspositionen

API Programm - es kann ein Programm hinterlegt werden, in welchem das XML erzeugt wird

Das Programm muss in der Bibliothek DIRMAIL stehen und einen beliebigen neuen Namen Haben

Nachfolgend ein API Musterprogramm:

Code Block
languagetext
titleMuster für ein API-Programm
collapsetrue
        CTL-OPT DEBUG(*YES)   OPTION(*NODEBUGIO)  ;
        CTL-OPT DECEDIT('0,') DATEDIT(*DMY.)                    ;
       //********************************************************************
       //   Example ZugFeRD API Programm                                    *
       //                                                                   *
       // Autor: Roman Tutschka   07.2019                                   *
       //********************************************************************
       //  CREATE  COMMANDS:
       // Replace PGMLIB , SRCLIB , PGMNAM with your own Names
       // PGMLIB is normaly DIRMAIL  use an NEW !!! Programm Name 
       // COMMANDS:
       // ADDLIBLE DIRMAIL 
       //
       // CRTSQLRPGI OBJ(PGMLIB/PGMNAM) SRCFILE(SRCLIB/QRPGLESRC) 
       // SRCMBR(PGMNAM) COMMIT(*NONE) OBJTYPE(*MODULE) USER(*CURRENT) 
       // REPLACE(*YES) DBGVIEW(*SOURCE) 
       //
       // CRTPGM PGM(PGMLIB/PGMNAM) BNDSRVPGM((DIRMAIL/DMLIB))
       //
       // Entry
    ?   DCL-PR  DMWRKZUX ;
         ID   PACKED(11:0);       // Identifikation
         SEGMENT   PACKED(9:0);   // Identifikation
         PXML POINTER ;           // Returns Pointer for embedded XML
         siz INT(10) ;            // Returns Size of the XML
        END-PR;
       // Internal Definition
    ?   DCL-PI  DMWRKZUX ;
         ID   PACKED(11:0);       // Identifikation
         SEGMENT   PACKED(9:0);   // Identifikation
         PXML POINTER ;      // Returns Pointer for embedded XML
         siz INT(10) ;       // Size of the XML
        END-PI;

      
       DCL-PR dm_etoa  INT(10) extproc('dm_etoa') ;
        buffer      CHAR(32767) options(*varsize)  ;
        bufferlen   INT(10)  value ;    
       END-PR;

        DCL-S PRETCHAR char(999999)  based(PXML) ;
       //
        DCL-DS DSHDR EXTNAME('DMEXCHDR') END-DS;             // Datastucture for Header Information
        DCL-DS DSZUG EXTNAME('DMATMZUG') QUALIFIED END-DS;   // Datastucture for ZUGFERD Information
        DCL-DS DSIDX EXTNAME('DMEXCIDX') QUALIFIED END-DS;   // Datastucture for INDEX Information
        DCL-S INDEXNAM LIKE(DSIDX.EINAM)  ;   // Name of the Index
       //********************************************************************
       // Main Programm
       //********************************************************************
         PXML = %ALLOC(10000000);       // Allocate MAX space for Return FREED in DIRMAIL

         // Read DIRMAIL Header Information OPTIONAL
         EXEC SQL  SELECT * INTO :DSHDR FROM DMEXCHDR
           WHERE   EASEQ = :ID ;
         // Read Indexes Values from DIRMAIL
         clear DSIDX;  // init
         INDEXNAM = 'RGNR';  //  Example in this case the result 
         // is the Value from the DIRMAIL Index for Example the Invoice Number 
         EXEC SQL SELECT I.* INTO :DSIDX  from DMEXCSEG as S 
           join DMEXCIDX as I on ESSEQ = EISEQ
           WHERE   ESSEQ = :ID AND ESNUM = :SEGMENT  AND
           EIPAG >= ESSTR AND EIPAG <= ESEND
            AND  EINAM = :INDEXNAM
            FETCH FIRST 1 ROWS ONLY;
         // Result value for the example Index ''RGNR'' in in DSIDX.DSIDX   

         // Create Embedded XML
         // EXAMLE  Value
         IF SQLCOD = 0;
           // Example embed INVOICE Number INDEXNAM RGNR exist 
           PRETCHAR = DSIDX.EIVAL ;     // Example embed INVOICE Number INDEXNAM
         ELSE;
           // Example embed INVOICE Number INDEXNAM RGNR do not exist 
           PRETCHAR = 'RETURN XML'  ;  // Example
         ENDIF;
         // Convert to ASCII  needed if the valoue is in EBDIC
         dm_etoa(PRETCHAR: %LEN(%TRIM(PRETCHAR))) ;
         siz = %LEN(%TRIM(PRETCHAR))     ;
         // if the Value of the XML is in ASCII only  return the address of PXML
         // and the Size of DATA

         return;

Nach dem Druck auf Enter erscheint folgendes Dialogprogramm, mit dem Sie die Standardwerte je FeRD Feld erfassen und abspeichern können.

Image Removed

...

Typ: H=Header (Kopfinfos der Rechnung), P=Positionen (z.B. für Artikelzeile)
Variablen Name: Der von der FeRD Organisation festgelegte Name für ein Merkmal
Default Wert: Ein von Ihnen für Ihre Firma vorgegebener konstanter Wert für ein Merkmal

...

XML Format: Hier kann bei Bedarf mit F4 die Funktion für Dezimal- und Datumsformate ausgewählt werden. Die angezeigten Möglichkeiten sind in der Parameter Kontrolldatei von WOPiXX unter ZUGFORMAT definiert.

Image Removed

Herkunft Format: Angeben, wenn unbedingt erforderlich. Normalerweise wird das Datumsformat automatisch erkannt. Auch hier kann mit F4 das Format ausgewählt werden. Die angezeigten Möglichkeiten sind in der Parameter Kontrolldatei von WOPiXX unter ZUGOFORMAT definiert.

Reihenfolge: Sequenz für die Darstellung in dieser Anzeige.

Image Removed

Falls die Variablen Namen nicht verständlich sind, kann mit F11 die Sicht umgeschaltet und eine Bezeichnung eingeblendet werden.

Format der PDF-Datei

Innerhalb der directspool Definition ist zu prüfen, ob das Spoolausgabe Format richtig gesetzt ist, es muss *EPDF sein.

Image Removed

Sie finden dieses Fenster unter dem Pulldown Menü Email bei 3. Ausgabeformat.

PDF Formularangaben – Parameter Schriftart und PDF/A *ZUGFERD

Image Removed

Unter dem Punkt 5. Formular/Papier im Menü Email müssen 2 Parameter gesetzt werden.

Der Parameter Schriftart muss den Namen einer Fontdatei enthalten, üblicherweise COUR.TTF (sie stammt aus dem Windows Umfeld). Die Datei muss im IFS-Verzeichnis unter
/Toolmaker/Directmail400/Font existieren und wird nicht von Toolmaker geliefert.

Grund: Fontdateien können Copyrights unterliegen! Wird keine Fontdatei bereitgestellt und hier angegeben, tritt ein Fehler auf. Der hier allgemein angegebene Sonderwert *COURIER ist nicht ausreichend, weil das PDF/A Format die Einbettung der Fontdatei erzwingt.
Unten muss bei PDF/A erstellen *ZUGFERD angegeben werden, damit die XML-Daten auch in die PDF-Datei eingefügt werdendirectspool unterstützt das Erstellen von ZUGFeRD-kompatiblen PDF-Dateien.

Dieses ist beschrieben auf der Seite directmail/directspool/pdfenhancer und ZUGFeRD.