Valutadatum 30.Feb. im elektronischen Kontoauszug MT940
Aus aktuellem Anlass wurde ich daran erinnert, dass einige Banken in ihren elektronischen Kontoauszügen (MT940-Format) "technische" Valutadaten liefern, da die Banken ja zuweilen so ihren eigenen Kalender verwenden, wo jeder Monat 30 Tage hat. Dabei kommt z.T. so was skurriles zustande wie bspw. der 30. Februar. Der (Bank-) Fachmann lächelt, die Eingangsverarbeitung des elektronischen Kontoauszugs hat hier leider keinen Humor und quittiert dererlei Auszüge mit der Fehlermeldung FB080 - ungültiges Datum...
Schuld daran sind wie gesagt die "technischen" Valuta-Daten, die in den MT940-Dateien (Satzart :61:) vorhanden sind:
Bsp.:
:20:DEUTDEFFXXXX
:25:67070010/….
:28C:00072/001
:60F:C070412EUR0,00
:61:070230C1604,35NCHKNONREF//1804480992
Das Problem betrifft natürlich nur den Februar, da die übrigen Monate ja mindestens 30 Tage haben.
Entweder man editiert die Dateien manuell vor der Verarbeitung mit einem geeigneten Editor oder löst das Problem mithilfe der SMOD-Erweiterung FEB00004:
Funktionsexit: EXIT_RFEKA400_001
Include: ZXF01U06
Coding:
* Prüfen, ob wieder 30. Februar von der Bank geliefert wurde... Dreckspack!
DATA: check_datum(6) TYPE c.
DATA: ls_raw_data LIKE LINE OF t_raw_data.
LOOP AT t_raw_data INTO ls_raw_data.
CASE ls_raw_data-line+0(4).
WHEN ':61:'.
check_datum = ls_raw_data-line+4(6).
IF check_datum+2(2) = '02' AND check_datum+4(2) >= '30'. "FUUUUUUUUUUU.....
check_datum+4(2) = '28'. "Schaltjahr? ham wa nich'
ENDIF.
ls_raw_data-line+4(6) = check_datum.
MODIFY t_raw_data FROM ls_raw_data TRANSPORTING line.
ENDCASE.
ENDLOOP.
/image%2F1473637%2F20170207%2Fob_adae32_profilbild.png)