Geschäftszeiten in S/4HANA: ABAP vs. SimDia²

Seit einiger Zeit beschäftige ich mich mit den Geschäftspartnern in S/4HANA und deren programmatischer Anlage, Änderung sowie der Erweiterung der einzelnen Sichten. In meinem aktuellen Projekt führt kein Weg an der Anlage der Business Partner per Programm vorbei, da die Daten über eine Schnittstelle kommen und verarbeitet werden müssen.

Wie sieht es aber aus, wenn Geschäftspartner zwar massenhaft aber nicht automatisch geändert werden müssen, zum Beispiel durch den Fachbereich? In der aktuellen Situation, in der wir uns befinden, müssen Stammdatenänderungen mitunter schnell erfolgen können. Die IT kann dies oftmals nicht leisten, denn der Aufwand ist erheblich und die Vorlaufzeit mitunter katastrophal. Und wenn dann noch regelmäßige, weit auseinander liegende Releasezyklen dazu kommen (also Produktivsetzung nur alle drei Monate), dann kann locker ein dreiviertel Jahr ins Land gehen, bis der Anwender sein Programm hat.

Mit der Software SimDia² können viele Aufgaben vom Anwender selbst erledigt werden. Die Einarbeitungszeit für SimDia² ist gering, die Möglichkeiten sind vielfältig.

Ich möchte heute einmal vergleichen, wie sich meine Programmierung und Simdia² im Vergleich schlagen.

Disziplin: Geschäftszeiten ändern

Die Änderung von Geschäftspartnern in S/4HANA ist eine sehr anspruchsvolle Aufgabe. Das Objekt „Business Partner“ ist komplex und sehr variabel. Es gibt für einzelne Funktionen entsprechende Funktionsbausteine (die man jedoch erst einmal finden muss) oder die zentrale Funktion CL_MD_BP_MAINTAIN=>MAINTAIN, die mit einem komplexen Datentypen gefüttert werden muss.

Aktuell und wohl auch noch viele Monate später sind die genauen Öffnungszeiten von Partnern wichtig. Kunden haben eventuell eingeschränkte und häufig wechselnde Warenannahmezeiten und auch Lieferanten sind nicht ständig zu den normalen Geschäftszeiten erreichbar.

Geschäftszeiten eines Geschäftspartners

Aus diesem Grund denke ich, dass die Funktion der Geschäftszeiten eine sehr wichtige Rolle spielt oder spielen kann. Der Fachbereich erfragt die Geschäftszeiten seiner Partner jedoch in der Regel nicht einzeln um sie dann in den Geschäftspartner einzutragen, sondern erfragt diese eventuell über ein Online-Formular. Oder die Daten werden von Kollegen und Kolleginnen gesammelt, die diese dann in eine Excel-Tabelle eintragen. Am Ende wäre es also für den Fachbereich sehr hilfreich, wenn er ein Programm hätte, mit dem die aktuellen Geschäftszeiten automatisiert in die betroffenen Partner eingetragen werden könnte.

Ablauf in der IT

Auch wenn inzwischen viel über Continuous Integration und Continuous Delivery geredet wird, sieht der Alltag in der SAP-IT immer noch anders aus. Natürlich muss der Fachbereich eine Anforderung stellen. Alleine das ist häufig nicht ganz einfach. Die Anforderung muss geprüft und die technische Umsetzung geplant werden. Wenn dann irgendwann ein Programmierer für die Entwicklung eingeplant wurde, müssen weitere Hürden genommen werden:

  • Es müssen die richtigen Bausteine für die Aufgabe gefunden werden
  • Selbst wenn die programmierende Person sich mit der Programmierung der Geschäftspartner auskennt, muss eventuell erst einmal recherchiert werden
  • Dann muss die Excel-Datei eingelesen werden
    • entweder wird tatsächlich eine recht aufwendige Programmierung zum Einlesen der Excel-Datei entwickelt
    • oder man macht es sich leicht und liest eine CSV-Datei ein. Dann muss der Fachbereich die Datei erst als CSV speichern, bevor die Datei verarbeitet werden kann
  • Es müssen eventuell Berechtigungen für die neue Transaktion beantragt und zugeordnet werden

Sobald das Programm fertiggestellt wurde, muss der Fachbereich testen. Meiner Erfahrung nach funktioniert ein Programm selten nach dem ersten Wurf.

Häufig kommen noch Urlaub oder Krankheit entweder aus dem Fachbereich oder in der IT hinzu, was die Fertigstellung des Programms verzögert…

Und wenn dann noch lange Releasezyklen dazu kommen, dann ist in manchen Firmen die Pandemie bereits vorbei, bevor der Fachbereich das Programm zur Arbeitserleichterung erhalten hat.

Änderung der Geschäftszeiten in S4/HANA mit der Business-Partner-API

Da ich mich in letzter Zeit öfters mit der API zu den Geschäftspartnern beschäftigt habe (Klasse CL_MD_BP_MAINTAIN), wollte ich wissen, wie lange ich alleine für die Programmierung zur Änderung der Geschäftszeiten benötige.

Etwa vier Stunden waren alleine schon nötig, nur um herauszufinden, welche Parameter bei den Geschäftszeiten überhaupt benötigt werden. Viele Parameter gingen häufig nicht aus den definierten Datenelementen hervor und auch nicht aus der Anwendung selbst.

Beispielsweise ist der Typ (Feldname TYPE), der definiert, welche Regel für die Geschäftszeiten gilt (Täglich, Wöchentlich, Monatlich) vom Typ CHAR2. Ich musste also erst herausfinden, was mit TYPE eigentlich gemeint ist. Welche Id für die Art der Geschäftszeiten (Anrufzeiten, Warenannahmezeiten, Besuchszeiten) verwendet werden muss, habe ich eher durch Zufall herausgefunden. Der SCHEDULE_TYPE hat zwar ein eigenes Datenelement, das jedoch weder Festwerte hat noch auf eine Prüftabelle verweist.

Durch meine Arbeit mit den Geschäftspartnern, beziehungsweise mit der Klasse CL_MD_BP_MAINTAIN, hatte ich bereits eine passende Fehlerbehandlung.

Coding

Der folgende Quelltext legt zu einem Business Partner die Warenannahmezeiten für Montag bis Freitag mit den jeweils übergebenen Von- und Bis-Zeiten an.

    SELECT SINGLE partner_guid FROM but000 INTO @DATA(guid) WHERE partner = @partner.

    CHECK sy-subrc = 0.

    "fill data structure with relevant customer data
    DATA(bp_data) = VALUE cvis_ei_extern(
      partner-header-object_task     = 'M'
      partner-header-object          = 'BUS1006' "Business Partner
      partner-header-object_instance = VALUE #(
      bpartner = partner
        bpartnerguid           = guid )
        partner-central_data-business_hour = VALUE #( current_state = ' '
          business_hours = VALUE #(
            task = 'M'
            data_key-schedule_type = 'B' "Warenannahme TAB TB049
            data-weekly = VALUE #(
              ( weeks      = 1
                fcalid     = '01' "Deutschland
                conflicts  = '0' "Keine Ausnahmen
                type       = 'W'
                start_date = sy-datum
                end_date   = sy-datum + 365
                monday     = 'X' monda_from = time_from  monday_to  = time_to    mond_tzone = 'CET'
                tuesday    = 'X' tuesd_from = time_from  tuesday_to = time_to    tues_tzone = 'CET'
                wednesday  = 'X' wedne_from = time_from  wednesd_to = time_to    wedn_tzone = 'CET'
                thursday   = 'X' thurs_from = time_from  thursda_to = time_to    thur_tzone = 'CET'
                friday     = 'X' frida_from = time_from  friday_to  = time_to    frid_tzone = 'CET'
                saturday   = ' ' satur_from = VALUE #( ) saturda_to = VALUE #( ) satu_tzone = ''
                sunday     = ' ' sunda_from = VALUE #( ) sunday_to  = VALUE #( ) sund_tzone = '' )
                )
                 ( ) ) ) ) .

    TRY.

        SET UPDATE TASK LOCAL.
        cl_md_bp_maintain=>maintain(
          EXPORTING
            i_data     = VALUE #( ( bp_data ) )
          IMPORTING
            e_return   = DATA(lt_return)   ).

        IF lt_return IS INITIAL.
          sy-subrc = 1.
        ELSE.
          READ TABLE lt_return[ 1 ]-object_msg INTO ls_return WITH KEY type = 'A'.
          IF sy-subrc > 0.
            READ TABLE lt_return[ 1 ]-object_msg INTO ls_return WITH KEY type = 'E'.
          ENDIF.
        ENDIF.

        IF sy-subrc <> 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
        ENDIF.
      CATCH zcx_bc_bp.
        RETURN.
    ENDTRY.

In meinem Beispiel habe ich noch nicht das Einlesen und Prüfen der Excel-Tabelle programmiert, keine Darstellung der eingelesenen Daten und keine Fehlerbehandlung für den Anwender.

Deswegen würde ich schätzen, dass die Entwicklung eines ordentlichen Programms, das die Geschäftszeiten anlegt und entsprechend Anwenderfreundlich ist, mindestens eine Woche Entwicklungszeit benötigt.

Und was ist jetzt mit SimDia²?

Das Tool SimDia² von Ersasoft, das als Windowsprogramm auf dem PC des Anwenders vorhanden sein muss, wird vom SAP-Anwender bedient. Im Grunde führt der Anwender dabei die gleichen Schritte aus, wie bei einer normalen manuellen Eingabe in der Transaktion, die er gerade benötigt. In unserem Fall ist es die Transaktion „BP – Geschäftspartner“. Diese Arbeitsschritte werden aufgezeichnet und können beliebig oft wiederholt werden.

Der Anwender legt eine Excel-Datei mit den Daten an, die für die Transaktion benötigt werden. Dabei ist es wichtig, dass die Feldnamen eindeutig sind, damit SimDia² die Felder eindeutig zuordnen kann. Die Erstellung der Excel-Datei kann ebenfalls durch SimDia² mit Hilfe des integrierten Vorlagen-Generators erfolgen.

Eingabedatei

In unserem Fall benötigen wir eine Datei mit Spalten für die Felder Geschäftspartnernummer und jeweils drei Felder für jeden Tag:

  • Tag auswählen (X/space)
  • Uhrzeit von
  • Uhrzeit bis

Nach einer kurzen Einführung in die Funktionen und die Arbeitsweise von SimDia² ist der Anwender in der Lage, die Transaktion mit den Daten aus der Excel-Datei zu befüllen. Der große Vorteil ist, dass der Anwender seine Transaktion genau kennt und genau weiß, welche Daten benötigt werden.

Bei der Aufzeichnung muss man sich nach den Besonderheiten der Transaktion richten. Bei der Transaktion BP ist zum Beispiel eine Besonderheit, dass die jeweils letzte Sicht des Geschäftspartners bei Auswahl eines anderen Geschäftspartners erneut präsentiert wird.

Aufzeichnung

Die Aufzeichnung ist sehr einfach und intuitiv. SimDia² und die gewünschte Transaktion müssen gestartet werden. Danach muss die Excel-Datei mit den Daten ausgewählt werden. Mit dem Aufzeichungsassistenten von SimDia² wird die Aufzeichnung gestartet. Alle Felder der Excel-Tabelle werden im SimDia²-Fenster als Drucktaste dargestellt. Der Anwender muss dann nur noch die einzelnen Sichten auswählen, die zu belegenden Felder anklicken und mit einem Klick auf die dazugehörige Drucktaste im SimDia²-Fenster die Daten übertragen. Die Aufzeichnung kann natürlich gespeichert und jederzeit wiederverwendet werden.

Felder aus der Excel-Tabelle

Daten importieren

Zum Import der Daten aus einer Excel-Tabelle müssen die Excel-Datei und die passende Aufzeichnung geladen werden. Die passende Transaktion startet SimDia² selbstständig und schon können die Daten importiert werden. Am Anfang kann man den Import Schritt für Schritt überwachen um sicher zu gehen, dass die Aufzeichnung wirklich korrekt ist.

Wenn alles passt, dann kann der Turbo eingeschaltet werden und die Daten werden in Windeseile importiert.

Simdia² integriert in den SAPGUI

Die importierten Daten werden protokolliert. Kann ein Datensatz nicht gespeichert werden, dann wird dies im Protokoll festgehalten.

Excel-Datei mit Geschäftszeiten und Protokoll aus Simdia²

Fazit

Bei der ABAP-Programmierung habe ich dir eine ungefähre Zeitangabe gegeben, wie lange die Vorarbeit für ein richtiges Programm gedauert hat (Zur Erinnerung: ca. eine Woche). Jetzt bist du sicherlich gespannt, wie lange die Aufzeichnung mit Simdia² gedauert hat? Nun, während ich diesen Artikel schreibe, habe ich die Aufzeichnung erstellt und ein paar Datensätze importiert und ein paar Screenshots gemacht. Ich musste die Aufzeichnung mehrere Male machen, weil ich erst später darüber gestolpert bin, dass ich für das Aktivieren der einzelnen Tage ein separates Feld benötige. Das alles hat insgesamt circa zwei Stunden gedauert. Mit etwas Übung ist man mit SimDia² innerhalb von 10 Minuten mit einer Aufzeichnung fertig.

SimDia² ist also auf jeden Fall eine Alternative zur ABAP-Programmierung. Besonders dann, wenn die IT überlastet ist und der Fachbereich dringend eine Lösung für zeitraubende, wiederkehrende Arbeiten benötigt.

Sicherheit

Sicherheit und Sicherheitslücken sind ein wichtiges Thema in der IT. SimDia² hat diesbezüglich einen enormen Vorteil: Der Anwender kann nur die Daten ändern, für die er auch die Berechtigung hat. Das ist bei SAP-Programmen nicht immer der Fall und wird gerne übersehen.

Weitere Artikel zu SimDia²

Mit dem ab ABAP Release 7.52 verfügbaren Open SQL Test Framework ist es nun einfacher, Daten für Unit Tests zu Read more
Obwohl der SAPGUI bereits als "tot" eingestuft wird, finden sich immer wieder neue Erkenntnisse... In diesem Beitrag zeige ich dir, Read more
Die Klasse CL_SALV_TABLE erfreut sich seit Jahren großer Beliebtheit. In erster Linie wahrscheinlich deswegen, weil man ohne Ermittlung des Feldkatalogs Read more
Enno Wulff
follow me
Letzte Artikel von Enno Wulff (Alle anzeigen)