Kategorien
SAP

IBAN – Fehlerquelle vermeiden

Immer wieder kommt es vor: Man wartet auf Zahlungen oder möchte selbst das Skonto bei einem Lieferanten nutzen. IBAN Kontonummern sind oft die Quelle für verpasste Skontofristen da sie ziemlich schwierig zu lesen sind.

iban_strukturWenn man sich mit der Programmierung oder Verbesserung von betriebswirtschaftlicher Software beschäftigt, muss man sich über Eingabeprüfungen Gedanken machen.

In der Zahlenkolonne sind die ersten beiden Ziffern nach dem Länderkürzel, eine Prüfziffer. Rechnet man mit der verbleibenden Zahl, die sich aus Bankleitzahl und Kontonummer zusammen setzt, läßt sich die Eingabe überprüfen und Fehlüberweisungen vermeiden. Bei mir, gehört das ab sofort zum Standard.

Bildschirmfoto - 26.07.2016 - 14:37:21

 

Das würde man so einfach wie in dem Test hier rechts im produktiven Betrieb nicht machen. Die Schwierigkeit liegt darin, das die Buchstaben des Ländercodes in Zahlen übersetzt werden und als Ganzes, also Bankleitzahl, Kontonummer, Zahlencode des Länderschlüssels sowie Prüfziffer dividiert werden. Die meissten Programme können eine derart lange Zahl garnicht berechnen!

Im SAP System natürlich kein Problem.

 

 

FUNCTION y_fiban.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(IBAN) TYPE  IBAN
*"  EXPORTING
*"     REFERENCE(GUELTIG) TYPE  YGUELTIG
*"----------------------------------------------------------------------

* geprueft werden europaeische IBAN Nummern
* Laendercode wird durch ASCII Wert -55 ersetzt

DATA pz TYPE c LENGTH 2.
DATA pruef TYPE n LENGTH 40.
DATA test TYPE i.
DATA: l1,l2,c1(2) TYPE c,c2(2) TYPE c, ll(4) TYPE c.

l1 = iban+0(1).
l2 = iban+1(1).

*try.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = l1
RECEIVING
uccp = c1.
* CATCH cx_sy_codepage_converter_init .
* CATCH cx_sy_conversion_codepage .
* CATCH cx_parameter_invalid_range .
*ENDTRY.
c1 = c1 - 55.

*try.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = l2
RECEIVING
uccp = c2.
* CATCH cx_sy_codepage_converter_init .
* CATCH cx_sy_conversion_codepage .
* CATCH cx_parameter_invalid_range .
*ENDTRY.
c2 = c2 - 55.
CONCATENATE c1 c2 INTO ll.

pz = iban+2(2).
SHIFT iban BY 4 PLACES.
CONCATENATE iban ll pz INTO pruef.

test = pruef MOD 97.

IF test EQ 1 .

gueltig = abap_true.

ELSE.

gueltig = abap_false.


ENDIF.

ENDFUNCTION.