Ingo Biermann
24. Januar 2014

BOPF: Die Nummernkreise sind nicht rund

Für die Verwendung von Nummernkreisen im Business Object Processing Framework (BOPF) gibt es eine Library Klasse /BOFU/CL_D_DRAW_NUMBER. Diese Klasse zieht Nummern aus einem angegebenen Nummernkreis, die dann für ein Business Object verwendet werden können. Dabei gibt es aber durch ein Problem mit dem Puffer der Nummernkreise häufig Lücken in den Nummerierungen. Dies ist beispielsweise bei Rechnungsnummern ein Problem, falls diese fortlaufend nummeriert werden sollen. Woraus dieses Problem resultiert und wie es behoben werden kann wird in diesem Beitrag beschrieben.

Unser E-Book zum Thema SAP Entwicklung

E-Book: SAP Entwicklung

Wir erklären Ihnen im E-Book die 3 wichtigsten Frameworks und zeigen Ihnen weitere Erfolgsbooster, die wir selbst einsetzen.

Das Problem

Innerhalb eines Projektes wurde eine große Anzahl von Instanzen eines Business Objects angelegt. Diese Instanzen hatten eine ID, die auf einem Nummernkreis basiert. Dabei fiel auf, dass immer wieder Lücken bei dieser ID auftraten.

Zur Verdeutlichung des Problems ein Beispiel:

Es werden im Projekt durch einen Report 8 neue Instanzen eines Business Objects angelegt.
Die ID der zuletzt angelegten Instanz des Business Objects ist z.B. die 48. Nach dem Import sollte die höchste ID die 56 sein (48 + 8 = 56).

Korrekte Nummernkreisberechnung in SAP BOPF

Abbildung 1: Korrekte Nummernkreisberechnung

 

Während des Tests ist allerdings aufgefallen, dass die höchste ID nach der Ausführung des Reports die 58 ist.

Fehlerhafte Nummernkreisberechnung in SAP BOPF

Abbildung 2: Fehlerhafte Nummernkreisberechnung

Es stellte sich die Frage, warum die ID um zwei Stellen höher ist, als sie eigentlich sein müsste.

Die Ursache

Gefunden wurde der Fehler, da auch beim Anlegen von nur 3, 6 oder 7 Instanzen die neue höchste ID immer genau 10 Stellen über der vorherigen höchsten ID lag.
Es stellte sich heraus, dass die Ursache für diesen Fehler im Puffer des Nummernkreises liegt. Im Nummernkreis war das Buffering auf “Main Memory Buffering” mit einer Anzahl von 10 Nummern eingestellt.

Pufferung des Nummernkreises aktiviert (SAP BOPF)

Abbildung 3: Pufferung des Nummernkreises aktiviert

Durch diese Einstellungen werden bei jeder Anfrage nach einer neuen Nummer gleich 10 Stück in den Puffer gelegt und die höchste Nummer zurückgeliefert. In unserem Fall wurden die Nummern durch eine BOPF Determination angefordert. Diese Determination nutzte die zurückgelieferte Nummer und zählte dann für jede Instanz die sie während des Importes erzeugte eine Stelle zurück.
Wurden also weniger als die 10 gepufferten Nummern verwendet, so wurde der Rest ignoriert und es entstanden Lücken bei der Nummerierung.

Die einfachste Lösung für dieses Problem ist sicherlich die Pufferung des Nummernkreises zu deaktivieren

Pufferung der Nummernkreise deaktiviert (SAP BOPF)

Abbildung 4: Pufferung der Nummernkreise deaktiviert

Es gibt jedoch noch eine weitere Möglichkeit diesen Fehler in BOPF zu umgehen.

Wird beispielsweise eine Validierung benötigt um einen alternativen Schlüssel zu erzeugen, so erbt diese von der Klasse /BOFU/CL_D_DRAW_NUMBER. In dieser Klasse gibt es eine Membervariable MV_IGNORE_BUFFER welche initial auf false steht.

Pufferung bei Nummernkreisen ignorieren in SAP BOPF

Abbildung 5: Pufferung bei Nummernkreisen ignorieren

Im Konstruktor kann diese Membervariable auf true gesetzt werden. Anschließend wird der Puffer ignoriert und die richtige Anzahl an Nummern vom Nummernkreis bezogen.

METHOD constructor.
super->constructor( ).
mv_attribute_name = ‘INVOICE_ID’.
mv_nobj           = ‘/MIND2/INV’.
mv_nr_range_nr    = ‘1’.
mv_ignore_buffer  = abap_true.
ENDMETHOD.

Nun sind die Nummernkreise wieder rund: Die Nummern sind fortlaufend ohne Lücken, so wie es bei Nummernkreisen sein soll.


Ich hoffe, ich konnte Ihnen mit dieser Anleitung helfen und freue mich über Ihr Feedback.

 Save as PDF

Ingo Biermann

Ingo Biermann

Als Management- und Technologieberater unterstütze ich seit mehr als 15 Jahren große und mittelständische Unternehmen in Fragen der IT-Strategie und bin unterwegs in unterschiedlichen SAP-Themen wie SAP S/4HANA, User Experience und SAP Entwicklung.

Sie haben Fragen? Kontaktieren Sie mich!



Das könnte Sie auch interessieren

Sie wollen die ABAP-Entwicklung effizienter gestalten? In einem unverbindlichen Gespräch zeigen wir Ihnen gerne die Möglichkeiten auf, die das neue SAP BOPF Framework bietet. Kontaktieren Sie uns! Telefon 0211.9462 8572-16 […]

weiterlesen

Das Property Concept des Business Object Processing Frameworks (BOPF) unterscheidet zwischen statischen und dynamischen Properties. In diesem Beitrag werden Ihnen beide Arten vorgestellt und der Unterschied erklärt.

weiterlesen

In vielen zentralen Bereichen des SAP-Systems wird die Menge der erzeugten Belegen oder sonstigen Bewegungsdaten schnell so groß, dass die Systemlast bei Datenabfragen signifikant ansteigt. Im etablierten SAP-Standard ist dafür das […]

weiterlesen

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.





Kontaktieren Sie uns!
Alexander Koessner-Maier
Alexander Kössner-Maier Kundenservice