Buchungssatz XML Import

 

Über diese Schnittstelle können Buchungssätze, die in einer XML Datei enthalten sind, importiert werden. Die Daten werden in die Tabelle FIBUIMPORT geschrieben.

Auswahlliste

Die einzuspielenden und eingespielten Dateien werden in der Tabelle Buchungssatzimport gespeichert, diese Dateien können unter [BSSIX] oder Finanzbuchhaltung -> Abschlussarbeiten -> DATEV/Import/Export -> Buchungssatz XML Import  angezeigt werden.

In der Variante „Buchungssatzimport“ können importierte Dateien gelöscht werden. Das Löschen hier hat keinen Einfluss auf bereits erfolgreich in die Finanzbuchhaltung eingespielte Belege oder Daten die noch im FIBUIMPORT stehen.

Des Weiteren wird angezeigt, ob eine Datei erfolgreich in den FIBUIMPORT eingespielt wurde. Ist eine Datei nicht erfolgreich in die FIBUIMPORT eingespielt worden, da z.B. die Kontonummer oder die Gegenkontonummer nicht im System eingerichtet sind, wird beim nächsten Importlauf noch einmal versucht diese Datei einzuspielen.

Um einen Import durchzuführen, klicken Sie bitte auf Buchungssatz Import XML F9.

 

Bereitstellung der XML Datei

Die zu importierende Datei mit den Buchungsätzen muss auf dem Rechner vorhanden sein, damit diese in die Tabelle Buchungssatzimport gespeichert werden können.

Ist die Datei nicht auf dem Rechner vorhanden, so kann diese per VBA, VBS Skript geladen und gespeichert werden, oder per Explorer kopiert werden.

Den Namen des VBA oder VBS Skriptes wird in den Einrichterparameter der Maske hinterlegt.

 

Privates VBS oder VBA

Ein Beispiel für das Laden und Speichern einer Datei von einem FTP Server finden Sie unter dem Direktsprung [VBA]. Der Name des VBA Skriptes lautet AMIC_FTP_LEDGERIMPORT. Als Parameter werden folgende Werte übergeben:

1. /GUID=Die ID des Import ( Siehe Auswahlliste )

2. /File=Der Dateiname oder Dateipfad. Bei Pfadangabe werden alle nicht eingespielten XML-Dateien Importiert.

 

Fehlerbehandlung im Skript:

Um der Import Schnittstelle mitzuteilen, dass in dem Skript ein Fehler aufgetreten ist wird die JVAR JVAR_TEMPWERT_2 mit Besitzer 3551 gesetzt. Der Wert 1 bedeutet, dass kein Fehler aufgetreten ist. Desweitern sollte in dem Skript ein Eintrag in das Fehlerprotokoll mit dem Bereich FiBuImport28 gemacht werden, da die Importschnittstelle nach dem ausführen des Skriptes alle Fehler aus diesem Bereich auf einer speziellen Maske angezeigt wird.

Das Setzten der JVAR mit 0 im Script bewirkt, dass der Import für diese Datei nicht gestartet werden kann. Existieren mehrerer Dateien in der Tabelle Buchungssatzimport, wird versucht die nächste einzuspielen.

 

Datenaufbereitung

Die XML Datei mit den Buchungssätzen wird in einer Datenbankprozedur(fibu_ledgerimport)  so aufgearbeitet, dass die Daten eingelesen und importiert werden können.

Anstelle der Standardprozedur kann die Prozedur auf der Maske durch eine private Prozedur ersetzt werde (Auswahl mit F3).

 

Wichtig

Das Hauptkonto und das Gegenkonto müssen immer numerisch sein. In der Beispiel XML Struktur ist das Hauptkonto alphanumerisch. Um die Datei trotzdem erfolgreich zu importieren, wird eine Zuweisung von dem alphanumerischen zu dem numerischen Konto benötigt. Um eine Zuweisung zwischen dem alphanumerischen und numerischen Konto herzustellen rufen Sie bitte den Importumsetzer auf (Direktsprung [IMPUM]) auf.

Als erstes wird in der Variante Import-Schlüssel über F8 ein neuer Schlüssel angelegt.

In die Felder Referenz und Schlüsselklasse wird z.B. die Nummer 20 eingetragen. Als Klasse wird „Buchungssatz Import“ ausgewählt.

Nachdem hier eine neue Schlüsselklasse angelegt worden ist, wird in der Variante Import-Umsetzer mit F8 ein neuer Datensatz angelegt.

Es können folgende Felder in der Standard  Prozedur umgeschlüsselt werden.

Hauptkonto

Gegenkonto

KostStelNummer

KSTRNummer

 

Maskenfelder

Bedeutung

Eingangsschlüssel

Hier wird der Wert der alphanummerischen Kontonummer eingetragen. In der Beispieldatei ist dies 047A11.

Umsetzung

In die Umsetzung wird die numerische Kontonummer eingetragen. In der Beispieldatei ist dies 123456

Schlüsselklasse

Hier wird die Schlüsselklasse wie z.B. 20 eingetragen.

Info-text

Hier kann ein Informationstext eingetragen werden, wie z.B. „Ledger Import“.

In den Einrichterparametern der Maske des Buchungssatz XML Import wird die Schlüsselklasse hinterlegt.

Werden mehrere Dateien mit einem Skript geladen, so muss in den Einrichterparametern der Parameter „Dateiprüfung und Einspielung passiert im privaten VBA oder VBS Script“  auf Ja gestellt werden. Dann reicht es aus in der Maske Buchungssatz XML Import nur den Pfad anzugeben, wo die Dateien zwischengespeichert werden sollen. Dafür muss dann die Dateinamensbehandlung im Skript stattfinden.

 

Maskenfelder

Name

Bedeutung

Name der Importdatei

Pfad zum Speicherort der XML Datei. Der Pfad muss auch angegeben werden, wenn die Datei per VBA oder VBS gespeichert wurde.

Name der Importprozedur

Name der Prozedur, welche mir die Daten aus der XML Datei zurückliefert. Hier kann auch eine private Prozedur hinterlegt werden.

Nummernkreis

Nummernkreis für das Einspielen der Buchungssätze.

Arbeitsschritt

Informationsfenster welches die nächsten Schritte anzeigt.

 

Um einen Import zu starten klicken Sie bitte in der Optionbox auf „Import Starten“ oder drücken Sie die  Taste F9.

 

XML Struktur

Die XML Struktur muss genauso wie in diesem Beispiel aufgebaut sein. Bei den XML Tags muss auf Groß und Klein Schreibung geachtet werden.

<LedgerImport>                                                                                                                     

<Account>                                                                                                                          

<FiBuV_Klasse>6</FiBuV_Klasse>                                                                                                     

<HauptKonto>047A11</HauptKonto>                                                                                                    

<HauptText>FOREIGNEXCHANGE</HauptText>                                                                                             

<GegenKonto>123456</GegenKonto>                                                                                                    

<GegenText>FX IDT Clearing</GegenText>                                                                                             

<Betrag>0128053.00</Betrag>                                                                                                        

<WBetrag>033000.00</WBetrag>                                                                                                       

<SollHaben>2</SollHaben>                                                                                                           

<BelDatum>2010-04-26</BelDatum>                                                                                                    

<JahrNummer></JahrNummer>                                                                                                          

<PeriNummer></PeriNummer>                                                                                                          

<KostStelNummer></KostStelNummer>                                                                                                  

<KSTRNummer></KSTRNummer>                                                                                                          

<FiBuV_FremdNr></FiBuV_FremdNr>                                                                                                    

<PaginierNr></PaginierNr>                                                                                                          

<FiBuVPW_Kurs>0.25770501</FiBuVPW_Kurs>                                                                                            

<FiBuVPW_RechFormel>0</FiBuVPW_RechFormel>                                                                                         

<FiBuVPW_Faktor>1</FiBuVPW_Faktor>                                                                                                 

<FiBuVPW_Typ>2</FiBuVPW_Typ>                                                                                                       

<WaehrISOCode> EUR </WaehrISOCode>                                                                                                 

</Account>

</LedgerImport> 

 

Beispielprozedur

Die Beispielprozedur „fibu_ledgerimport“ entpackt die XML Struktur und speichert diese in einer lokalen temporären Tabelle zwischen. Sobald sich die Daten in der Tabelle befinden, können diese dann dort abgeändert werden. 

In der Beispiel Prozedur werden die Jahrnummer und die Perinummer versorgt, sowie die Währnummer anhand des Währung ISO-Code aus dem Währungsstamm gezogen.

Bei einer privaten Prozedur müssen immer diese drei Übergabeparameter angegeben werden.

Parameter

Bedeutung

in_GUID

GUID für das Suchen der Datei in der Tabelle amic_datei

4F160BB2-810F-4D83-94DA-0CF5205DE060

in_NumkreisNummer

Nummernkreis für das Einspielen der Buchungssätze

In_ImportSchluessel

Die Schlüsselklasse des Import Umsetzers

 

Als Ergebnis erwarten wir folgende Paramater von der Prozedur zurück.

Name

Typ

 Bedeutung

IDENT

integer

Nummer des Satzes

NumKreisNummer

integer

Nummernkreis für das Einspielen der Buchungssätze

HauptKonto

integer

Hauptkonto

HauptText

Char(100)

Text

GegenKonto

Integer

Gegenkonto

GegenText

Char(100)

Text

FiBuVP_Betrag

Numeric(15,4)

 

FiBuVPW_Betrag

Numeric(15,4)

 

FiBuVP_SollHaben

integer

 

FiBuV_Datum

date

 

JahrNummer

integer

Jahrnummer

PeriNummer

integer

Periodennummer

KostStelNummer

integer

Kostenstelle

KSTRNummer

integer

Kostenträger

FiBuV_FremdNr

Char(20)

 

FiBuV_PaginierNr

Char(40)

 

FiBuVPW_Kurs

Numeric(15,6)

 

FiBuVPW_RechFormel

integer

 

FiBuVPW_Faktor

Numeric(15,4)

 

FiBuVPW_Typ

integer

 

Waehrnummer

integer

Währungsnummer

Dateiname

Char(255)

Gibt den Namen der eingespielten Datei zurück. Wird benötigt, damit der Status eingespielt richtig gesetzt wird.

 

CREATE PROCEDURE fibu_ledgerimport (

                                      in in_GUID char(256)

                                     ,in in_NumkreisNummer integer

                                     ,in in_ImportSchluessel integer

                                   )

BEGIN

  declare dc_Fehler integer;

  declare dc_Ident integer;

  declare dc_HauptKontoNumeric integer;

  declare dc_HauptKonto char(30);

  declare dc_ListFehlerKonto char(255);

  declare dc_KostStelNummer integer;

  declare dc_KostStelNummerUm integer;

  declare dc_Dateiname char(255);

  declare dc_err_notfound exception for sqlstate value '02000';

  DECLARE dc_ErrorMsg         LONG VARCHAR;

  DECLARE dc_SQLCODE          INTEGER;

  DECLARE dc_SQLSTATE         CHAR(10);

 

  declare local temporary table lttBuchungssatzImport(

                                                        Ident              integer not null default autoincrement

                                                       ,FibuV_Klasse       integer

                                                       ,HauptKonto         char(30)

                                                       ,HauptText          char(100)

                                                       ,GegenKonto         integer

                                                       ,GegenText          char(100)

                                                       ,FiBuVP_Betrag      numeric(15,4)

                                                       ,FiBuVPW_Betrag     numeric(15,4)

                                                       ,FiBuVP_SollHaben   integer

                                                       ,FiBuV_Datum        date

                                                       ,JahrNummer         char(10)

                                                       ,PeriNummer         char(10)

                                                       ,KostStelNummer     char(10)

                                                       ,KSTRNummer         char(10)

                                                       ,FiBuV_FremdNr     char(20)

                                                       ,FiBuV_PaginierNr   char(40)

                                                       ,FiBuVPW_Kurs       numeric(15,6)

                                                       ,FiBuVPW_RechFormel integer

                                                       ,FiBuVPW_Faktor     numeric(15,4)

                                                       ,FiBuVPW_Typ        integer

                                                       ,WaehrISOCode       char(34)

                                                       ,Belegmappe         char(255)

                                                         

  ) on commit delete rows ; 

  if VAREXISTS( 'ledgerimport_xml' ) <> 0 then

    drop VARIABLE ledgerimport_xml;

  end if;

  CREATE VARIABLE ledgerimport_xml XML;

  Begin

    declare LeseDaten dynamic scroll cursor for select Datei, Dateiname 

      from BuchungssatzImport where Id = in_GUID and eingespielt = 0;

     open LeseDaten;

     LeseDatenloop:

     loop fetch next LeseDaten into ledgerimport_xml, dc_Dateiname;

       if sqlstate<>dc_err_notfound then

         insert into GTT_AMic_Ident (typ, ident1, text1) values(in_GUID, 1, dc_Dateiname);

         insert into lttBuchungssatzImport with auto name  (select

                                                           FibuV_Klasse    

                                                          ,if isnumeric(HauptKonto) = 1 then

                                                              umsetzer(in_ImportSchluessel,cast(cast(HauptKonto as integer) as char(255)))

                                                           else

                                                             umsetzer(in_ImportSchluessel, HauptKonto)

                                                           endif as HauptKonto       

                                                          ,HauptText        

                                                          ,if isnumeric(GegenKonto) = 1 then

                                                             umsetzer(in_ImportSchluessel, cast(cast(GegenKonto as integer)as char(255)))

                                                           else

                                                              umsetzer(in_ImportSchluessel, GegenKonto)

                                                           endif as GegenKonto       

                                                          ,GegenText        

                                                          ,FiBuVP_Betrag    

                                                          ,FiBuVPW_Betrag   

                                                          ,FiBuVP_SollHaben 

                                                          ,FiBuV_Datum      

                                                          ,if isnumeric(Jahrnummer)=1 then

                                                             cast(Jahrnummer as integer )

                                                           else

                                                             isnull((select Jahrnummer from GeschJahrStamm where FiBuV_Datum  

                                                              between JahrBeginn and JahrEnde ),-1)

                                                           endif as JahrNummer 

                                                          ,if isnumeric(Perinummer)=1 then

                                                            cast(Perinummer as integer )

                                                           else

                                                            isnull((select Perinummer from PeriStamm

                                                                where FiBuV_Datum between PeriBeginn and PeriEnde and perityp=1                   

                                                                and peribereich =1 and peristatus in ( 1, 2 ) ),-1)                             

                                                           endif as Perinummer      

                                                          ,umsetzer(in_ImportSchluessel, isnull(KostStelNummer,'0')) as                     

                                                            KostStelNummer   

                                                          ,umsetzer(in_ImportSchluessel, isnull(KSTRNummer,'0')) as KSTRNummer       

                                                          ,FiBuV_FremdNr   

                                                          ,FiBuV_PaginierNr 

                                                          ,FiBuVPW_Kurs     

                                                          ,FiBuVPW_RechFormel

                                                          ,FiBuVPW_Faktor   

                                                          ,FiBuVPW_Typ      

                                                          ,if isnumeric(WaehrISOCode)=1 then

                                                             cast ( WaehrISOCode as integer )

                                                           else

                                                             if isnull(trim(WaehrISOCode),'')='' then

                                                               DB_ZENTRALWAEHRUNG

                                                             else

                                                                isnull( (select (Waehrnummer) from waehrungsstamm

                                                                 where waehrungsstamm.WaehrISOBezeich=Trim(WaehrISOCode)),-1)

                                                             endif

                                                           endif as WaehrISOCode

                                                          ,isnull(dc_Dateiname,'') as Belegmappe 

                                                          from openXML(ledgerimport_xml,'LedgerImport/Account'

                                                      )

                                                      WITH

                                                      (

                                                         FibuV_Klasse       integer       'FiBuV_Klasse'

                                                        ,HauptKonto         char(255)     'HauptKonto'

                                                        ,HauptText          char(100)     'HauptText'

                                                        ,GegenKonto         integer       'GegenKonto'

                                                        ,GegenText          char(100)     'GegenText'

                                                        ,FiBuVP_Betrag      numeric(15,4) 'Betrag'

                                                        ,FiBuVPW_Betrag     numeric(15,4) 'WBetrag'

                                                        ,FiBuVP_SollHaben   integer       'SollHaben'

                                                        ,FiBuV_Datum        date          'BelDatum'

                                                        ,JahrNummer         char(10)      'JahrNummer'

                                                        ,PeriNummer         char(10)      'PeriNummer'

                                                        ,KostStelNummer     char(10)      'KostStelNummer'

                                                        ,KSTRNummer         char(10)      'KSTRNummer'

                                                        ,FiBuV_FremdNr     char(20)       'FiBuV_FremdNr'

                                                        ,FiBuV_PaginierNr   char(40)      'PaginierNr'

                                                        ,FiBuVPW_Kurs       numeric(15,6) 'FiBuVPW_Kurs'

                                                        ,FiBuVPW_RechFormel integer       'FiBuVPW_RechFormel'

                                                        ,FiBuVPW_Faktor     numeric(15,4) 'FiBuVPW_Faktor'

                                                        ,FiBuVPW_Typ        integer       'FiBuVPW_Typ'

                                                        ,WaehrISOCode       char(34)      'WaehrISOCode'

                                                     ));

        

      else

        leave LeseDatenloop;

      end if;

    end loop LeseDatenloop;

  close LeseDaten;

    set dc_Fehler = 0;

  End; 

  insert into FibuImport with auto name (select

          IDENT

         ,FibuV_Klasse  as BELKLASSE

         ,if dc_Fehler > 0 then 0 else cast(HauptKonto as integer) endif as HauptKonto

         ,HauptText

         ,GegenKonto

         ,HauptText as GegenText

         ,FiBuVP_Betrag as Betrag

         ,FiBuVPW_Betrag  as WBetrag

         ,FiBuVP_SollHaben as SOLLHABEN

         ,FiBuV_Datum as VALDATUM

         ,FiBuV_Datum as  BELDatum

         ,JahrNummer

         ,PeriNummer

         ,KostStelNummer as KOSTSTEL

         ,KSTRNummer

         ,FiBuV_FremdNr as REFNUMMER

         ,FiBuV_PaginierNr as PaginierNr

         ,FiBuVPW_Kurs as WKurs

         ,FiBuVPW_RechFormel as WRechFormel

         ,FiBuVPW_Faktor as WFaktor

         ,FiBuVPW_Typ as WTyp

         ,cast(WaehrISOCode as integer) as Waehrnummer

         ,Belegmappe  from lttBuchungssatzImport);

  update GTT_AMic_Ident set ident1 = 0 where typ = in_GUID;

  EXCEPTION

  WHEN OTHERS THEN

    SELECT  ERRORMSG()

            ,SQLCODE

            ,SQLSTATE

    INTO    dc_ErrorMsg

           ,dc_SQLCODE

           ,dc_SQLSTATE;

    CALL AMIC_FEHLERPROT( 20

                          ,amic_func_sprachtexte('a', 'b', 'FiBuImport28', -1)

                          ,amic_func_sprachtexte

                                  ('a'

                                  ,'b'

                                  ,'Beim Ausführen der Prozedur "%s" ist ein Fehler aufgetreten.', -1, 'FIBU_LedgerImport'

                                  )

                          || '\n'

                          || amic_func_sprachtexte

                                  ('a'

                                  ,'b'

                                  ,'Parameter (%s): %s', -1, 'in_GUID', in_GUID

                                  )

                          || '\n'

                          || amic_func_sprachtexte

                                  ('a'

                                  ,'b'

                                  ,'Parameter (%s): %s', -1, 'in_NumkreisNummer', in_NumkreisNummer

                                  )

                          || '\n'

                          || amic_func_sprachtexte

                                  ('a'

                                  ,'b'

                                  ,'Parameter (%s): %s', -1, 'in_ImportSchluessel', in_ImportSchluessel

                                  )

                          || '\n'

                          || 'SQLCODE: ' || dc_SQLCODE

                          || ' [' || dc_SQLSTATE || ']'

                          || '\n'

                          || dc_ErrorMsg

                          ,-10171

                           );

END