Bodo's Dynamics NAV Blog

Bodo ist ein Dynamics NAV Urgestein. Er programmiert NAV seit DOS Zeiten und hat auch keine Scheu vor .NET. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu NAV Entwicklern ausgebildet.

In diesem Blog veröffentlichen Bodo und andere Superhelden Interessantes aus der Welt von Dynamics NAV.

Kontoauszüge mit NAV 2013 R2 Rollup 2

Verfasst von Silas am Mittwoch, 19. Februar 2014

Tags: 2013 R2, r2, zahlungsverkehr, camt, mt940, kontoauszug

Seit dem Rollup 2 für NAV2013 R2 kann man auch Kontoauszüge im camt.053-Format einlesen. Dieses Format löst das alte MT940-Format ab.

1. Als erstes müssen Sie die Buchungsaustauschdefinition, die hier zum Download bereitsteht, importieren. Gehen Sie dazu auf „Abteilungen/Verwaltung/Anwendung Einrichtung/Allgemein/Buchungsaustauschdefinitionund klicken Sie auf „Datenaustausch importieren“. Wählen Sie die heruntergeladene Datei aus und bestätigen Sie mit Ok.

BuchungsaustauschdefinitionCAMT053.xml

2. Nun tragen Sie die gerade importierte Buchungsaustauschdefinition in einem neuen Datensatz unter „Abteilungen/Verwaltung/IT-Verwaltung/Allgemein/Einrichtung Bankexport/-import ein:

Code CAMT.053
Name camt.053 Buchungsaustauschdefinition
Richtung Import
[…]  
Buchungsaustauschdefinition CAMT.053

blog-2014-02-19-image2.png

3. Öffnen Sie die Bankkontenübersicht

Abteilungen/Finanzmanagement/Bankmanagement/Bankkonten“ und wählen Sie ihr Bankkonto aus, für das Sie die Kontoauszüge importieren wollen.

Tragen Sie hier im Abschnitt „Transfer“ das Format für den Bankauszugsimport ein:

Format Bankauszugsimport       CAMT.053

blog-2014-02-19-image3.png

4. Gehen Sie auf „Abteilungen/Finanzmanagement/Finanzbuchhaltung/Fibu Buch.-Blätter“ und klicken Sie neben „Buch.-Blattname“ auf den Pfeil, so dass sich die Fibu Buch.-Blatt Übersicht öffnet.

blog-2014-02-19-image4.png

5. Erstellen Sie ein Buchungsblatt mit Ihrem Bankkonto als Gegenkonto und öffnen Sie dieses anschließend.
Anmerkung: Sie können alternativ auch das Bankimportformat in der Fibu Buch.-Blatt Übersicht angeben, statt auf dem Bankkonto. Dann muss das Gegenkonto allerdings ein Sachkonto sein.

6. Klicken Sie auf „Bankauszug importieren“ um Ihren Kontoauszug einzulesen. Im Screenshot sehen Sie die eingelesene Gesamt-Beispieldatei von www.ebics.de.

blog-2014-02-19-image5.png

Technische Details

Nun möchte ich noch kurz erläutern, wie die Buchungsaustauschdefinition eigentlich aufgebaut ist und was im Hintergrund abläuft. Um das Importieren von verschiedenen Formaten zu erleichtern, hat Microsoft für Dynamics NAV das Data Exchange Framework geschaffen. Im Folgenden gehen wir die drei Abschnitte der Buchungsaustauschdefinitionenkarte durch („Abteilungen/Verwaltung/Anwendung Einrichtung/Allgemein/Buchungsaustauschdefinitionen“).

blog-2014-02-19-image6.png

Abschnitt 1: „General“ (Allgemein)

Code und Name sind wie üblich frei wählbar.

Grundsätzlich gibt es drei Formate („Dateityp“), die unterstützt werden:

  • XML
  • Fester Text
  • Variabler Text

Das camt-Format, was wir hier verwenden ist ein XML-Format, dessen genaue Definition auf www.ebics.de nachzulesen ist.

Bei der Art beschränken wir uns zunächst auf den „Bankauszugsimport“.

Das Feld „Codeunit wird importiert“ wurde leider nicht richtig übersetzt. Mit der originalen englischen Bezeichnung „Importing Codeunit“ ist „Importierende Codeunit“ gemeint. Die hinterlegte Codeunit 1240 ist recht übersichtlich und lädt die Datei für die weitere Verarbeitung in ein Blob. Man könnte also diese Codeunit gegen eine Eigene tauschen, um zum Beispiel die Datei ohne Auswahldialog aus einer anderen Quelle zu laden.

blog-2014-02-19-image7.png

Nachdem die Datei in das Blob-Feld eingelesen wurde, kommt wahlweise der „Verarbeitungs-XML-Port“ oder die „Verarbeitungs-Codeunit“zum Zuge. Das hier gewählte Objekt (egal ob Codeunit oder XML-Port) ist dafür zuständig, mit Hilfe der Definition aus Abschnitt 2 und 3 eine Zwischentabelle zu füllen. Die Daten werden also nicht direkt zum Beispiel in das Fibu Buch.-Blatt. geschrieben, sondern erst in die Tabelle 1221 „Buchungsaustauschfeld“  („Posting Exch. Field“). Codeunit 1200 „Import Bank Statement“ verwendet .NET-Komponenten und Rekursion um die XML-Datei einzulesen.

Das Ergebnis sieht dann ungefähr so aus:

blog-2014-02-19-image8.png

Abschnitt 2: Buchungszeilendefinitionen

Für das XML-Format ist in diesem Abschnitt nur eine Zeile zulässig. Interessant hierbei ist auch nur die Zeile „Datenzeilen-Tag“. An diesem XML-Tag erkennt NAV, wo der nächste Datensatz in der Datei anfängt. In der camt.053-Definition ist festgelegt, dass es pro Buchung einen „Ntry“ (-> Entry) Datensatz gibt, dem alle weiteren Informationen untergeordnet sind, deswegen tragen wir diesen XML-Tag inkl. vollständigem Pfad ein: „/Document/BkToCstmrStmt/Stmt/Ntry

Abschnitt 3: Buchungsspaltendefinitionen

Hier tragen wir alle Felder ein, die wir verwenden wollen. Es ist also durchaus zulässig Felder einfach wegzulassen, die in der Datei vorkommen.

Gehen wir nun einmal die Spalten durch:

Spaltennr.
Die Spaltennr. muss gefüllt werden, ist aber frei wählbar. Ich empfehle 10000er-Schritte zu nehmen um später Zeilen dazwischen einfügen zu können. Das ist zwar technisch nicht notwendig, da die Reihenfolge keine Rolle spielt, aber bei einer großen Anzahl von Spalten ist eine logische Sortierung übersichtlicher.

Name
Der Name ist frei wählbar. Sprechende Namen sind hier natürlich sinnvoll.

Datentyp
Hier gibt es drei zur Auswahl: Text, Datum & Dezimal. Für Datum und Uhrzeit, ist in den folgenden beiden Spalten noch eine genauere Definition vorgesehen.

Datenformat
Wenn der Datentyp Datum oder Dezimal ist, können Sie hier das Format genauer definieren. Da Dynamics NAV bei der Konvertierung .NET-Funktionen verwendet, kann man die hier aufgelisteten Formatbezeichner verwenden:
Benutzerdefinierte Formatbezeichner für Datum und Uhrzeit: http://msdn.microsoft.com/de-de/library/8kb3ddd4(v=vs.90).aspx
Benutzerdefinierte numerische Formate: http://msdn.microsoft.com/de-de/library/4fb56f4y(v=vs.90).aspx

Datenformatierungskultur
Hier kann man Länder-Codes angeben um länderspezifische Formate zu nutzen. Für unser camt-Format können wir beispielsweise bei den Dezimal-Werten als Datenformatierungskultur „en-US“ angeben und das Datenformat leer lassen.

Länge
Dieses Feld wird für das XML-Format nicht benötigt und kann grundsätzlich Null bleiben.

Beschreibung
Die Beschreibung ist frei wählbar und hat keine weitere Bedeutung.

Pfad
Die Spalte Pfad muss den vollständigen XML-Pfad des Elements enthalten, wobei Attribute in eckigen Klammern mit einem @-Zeichen dahinter stehen müssen.
Beispiel:
Das Feld Amt (Amount/Betrag) hat das Attribut Ccy (Currency/Währung) und wird wie folgt mit vollständigem Pfad eingetragen: /Document/BkToCstmrStmt/Stmt/Ntry/Amt[@Ccy]

Kennzeichen mit negativem Zeichen
In der camt-Datei gehört zu den Betragsfeldern immer ein zweites Feld, in dem steht, ob es sich um „Soll“ oder „Haben“ handelt. Dieses Soll/Haben-Feld wird zunächst als normales Text-Feld in die Buchungsspaltendefinition aufgenommen. In der Spalte „Kennzeichen mit negativem Zeichen“ wird nun eingetragen bei welchem Wert NAV den zugehörigen Betrag mit einem negativen Vorzeichen versehen soll. In unserem Fall lautet der Wert „DBIT“. Die Zuordnung des Betragsfelds zum Soll/Haben-Feld erfolgt später in der „Feldzuordnung

Konstanten
(wird nicht benötigt)

Anzeigen
(wird nicht benötigt)

Feldzuordnung

Wenn alle benötigten Spalten definiert wurden, müssen diese nun noch den Spalten in NAV zugeordnet werden. Dieses geschieht mit einem Klick auf Feldzuordnung im Abschnitt Buchungszeilendefinition:

blog-2014-02-19-vimage9.png
Von diesen Feldzuordnungen kann es beliebig viele geben, um ein Dateiformat in verschiedene Tabellen einlesen zu können. Standardmäßig ist der Import von Bankkontoauszügen in das Fibu Buch.-Blatt oder in die Bankkontoabstimmung vorgesehen. Für diese beiden Ziel-Tabellen wird auch je eine „Buchungsaustauschzuordnung“ erstellt, wenn Sie das erste Mal auf „Feldzuordnung“ klicken. Um zwischen den Zuordnungssätzen zu wechseln klicken Sie im Menüband auf „Vorheriger“ bzw. „Nächster“. Eine Übersicht über die Zuordnungssätze gibt es leider nicht.

blog-2014-02-19-image10.png

Die „Zuordnungs-Codeunit“ überträgt die Daten aus der oben bereits erwähnten Zwischentabelle 1221 „Buchungsaustauschfeld“ in die Ziel-Tabelle („Tabellen-ID“).Microsofts mitgelieferte Codeunit weist neben den frei definierbaren Feldern leider auch einige fest hinterlegte Felder zu. Um dem zu entgehen, müsste man eigene Codeunits verwenden bzw. eine angepasste Kopie. Die entscheidende Codeunit, die einem zum Verhängnis wird ist Codeunit 1262, die indirekt aufgerufen wird. Folgende Textkonstanten werden dort verwendet:

Name ConstValue
BalTypeTxt /Document/BkToCstmrStmt/Stmt/Bal/Tp/CdOrPrtry/Cd
ClosingBalTxt /Document/BkToCstmrStmt/Stmt/Bal/Amt
StatementDateTxt /Document/BkToCstmrStmt/Stmt/CreDtTm
IBANTxt /Document/BkToCstmrStmt/Stmt/Acct/Id/IBAN
CurrencyTxt /Document/BkToCstmrStmt/Stmt/Bal/Amt[@Ccy]
StatementIDTxt /Document/BkToCstmrStmt/Stmt/Id
CrdDbtIndTxt /Document/BkToCstmrStmt/Stmt/Bal/CdtDbtInd

Bei der Feldzuordnung in der unteren Hälfte des Fensters ordnet man die Spalten aus der Buchungsaustauschdefinition den Spalten in NAV zu. Bei den Beträgen weist man sowohl die Betragsspalte als auch die Soll/Haben-Spalte dem Betragsfeld in NAV zu. Felder die nicht zwingend in der Datei in jedem Datensatz vorkommen, kann man mit dem Haken „Optional“ versehen, da es ansonsten zu einer Fehlermeldung kommt, wenn das Feld in einem Datensatz fehlt.