Overblog
Folge diesem Blog Administration + Create my blog
SAPManDoo - SAP Resource

Der vorliegende Blog enthält von mir im Laufe meiner beruflichen Tätigkeit als SAP-Berater zusammengetragene Informationen / Beispiel-Codings zum Themenkreis SAP, speziell FI/CO.

Pivot-Browser - eigene Aktionen

Veröffentlicht am 16. August 2019 von sapmandoo in Basis-Entwicklung allg., FI, S4, SAP Reports, Accruals Management, ACE, ACAC

Der Pivot-Browser (PIVB) ist ein neues Ausgabe-Framework der SAP, welches die Anzeige beliebiger (strukturierter) Dateninhalte in Tabellenform ermöglicht. Die Art der Darstellung der Daten ist dabei an das bekannte ALV-Grid angelehnt. Im Unterschied zum ALV geht der Funktionsumfang des Pivot-Browsers jedoch über die reine Aufbereitung und Anzeige der Daten hinaus. Auch die Datenbeschaffung (HANA-optimiert) sowie die Behandlung von Benutzerinteraktionen ist in das Framework integriert. 

Details hierzu finden sich in den PDF-Anhängen zum Hinweis 2100879 - Pivot Browser: Dokumentation

Einige der im Standard ausgelieferten Funktionalitäten, die auf dem Pivot-Browser basieren, sind die Einzelpostenbrowser in der S/4 Finanzbuchhaltung:

Transaktion Funktion / Beschreibung
FAGLL03H Sachkonteneinzelposten-Browser (ledgerspezifisch)
FBL3H Sachkonteneinzelposten-Browser (einfach)
FBL1H Kreditoren-Einzelposten
FBL5H Debitoren-Einzelposten
Beispiel FAGLL03H

Beispiel FAGLL03H

Während der Anzeige-Bereich (links) weitestgehend identisch zum bekannten ALV funktioniert, ist der Interaktionsbereich (rechts) ein neu gestaltetes Element im Pivot-Browser. 

Im Bereich Spalten können die anzuzeigenden Felder ausgewählt werden. Bei den o.g. FI-Einzelpostenbrowsern stehen gegen Ende der Liste auch Stammdatenfelder und Bezeichnungen zur Verfügung. So kann bspw. zur Kostenstelle die entsprechende Kostenstellenbezeichnung in die Anzeige geholt werden, ohne wie bei den klassischen Einzelpostenlisten (FBLxN) den Feldvorrat erweitern und die Inhalte per BTE/BADI nachlesen zu müssen.

Der Bereich Layouts enthält alle verfügbaren Anzeigelayouts und ermöglicht deren Verwaltung wie unter ALV bekannt (entsprechende Berechtigung vorausgesetzt).

Interessant ist der Bereich Aktionen, in dem für den aktuellen Anzeigevorrat verfügbare Benutzeraktionen dargestellt sind. Diese können in einer (max. zweistufigen) Baumstruktur angeordnet werden, um so gewisse Interaktionen zu gruppieren. 

Bereich "Aktionen" in der FAGLL03H

Bereich "Aktionen" in der FAGLL03H

Sie ahnen es wahrscheinlich schon, dieser Bereich lässt sich modifikationsfrei beliebig erweitern und mit kundenspezifischen Aktionen spicken...

Weiter unten möchte ich ein Beispiel für eine solche kundeneigene Aktion zeigen, das die Erzeugung von Abgrenzungsobjekten der Accrual Engine bzw. des Accruals Management (ab S/4 1809) direkt aus den Einzelpostenbrowsern der Finanzbuchhaltung ermöglicht.

Die einzelnen Anwendungen des Pivot-Browsers werden als Erweiterungsimplementierung des Erweiterungsspots PIVB registriert. Für die EP-Browser im FI (s.o.) ist dies die Implementierung FAGL_LIB_PIVB. In ihr wiederum werden die Implementierungen zur BadI-Definition FAGL_LIB gerufen, zu der auch kundeneigene Implementierungen angelegt werden können.

Für die Aktionen sind die beiden Interface-Methoden SIDEBAR_ACTIONS_SET und SIDEBAR_ACTIONS_HANDLE relevant. In ersterer kann der "Aktionsbaum" um kundeneigene Aktionen erweitert werden, in der zweitgenannten Methode wird dann die eigentliche Aktion ausgestaltet.

Fügen wir also zunächst eine Aktion in einem kundeneigenen Ordner hinzu:

METHOD if_fagl_lib~sidebar_actions_set.

*   Kundeneigene Aktionen im Einzelpostenbrowser 

    TYPE-POOLS: icon.

*   Neuer Ordner am Ende anfügen
    APPEND INITIAL LINE TO c_menu-t_folder_level1 ASSIGNING FIELD-SYMBOL(<lf_folder>).
    <lf_folder>-folder_key = 'ZZACE'.
    <lf_folder>-folder_text = 'Abgrenzungsobjekt'.

*   Aktion in den neuen Ordner einfügen
    APPEND INITIAL LINE TO <lf_folder>-t_item_level2 ASSIGNING FIELD-SYMBOL(<lf_menuitem>).
    <lf_menuitem>-item_key = 'ZZACE_CREATE'.
    <lf_menuitem>-text = 'Abgrenzungsobjekt anlegen'.
    <lf_menuitem>-icon = icon_fencing.

  ENDMETHOD.
Kundeneigener Ordner mit Aktion im Pivot-Browser

Kundeneigener Ordner mit Aktion im Pivot-Browser

...und nun kann die Aktion, die mit der ID ZZACE_CREATE angelegt wurde, ausgestaltet werden.

  METHOD if_fagl_lib~sidebar_actions_handle.

*   Kundeneigene Aktionen im Einzelpostenbrowser 

    DATA: l_checker TYPE i.
    DATA: ls_bseg TYPE bseg.
    DATA: ls_bkpf TYPE bkpf.

    l_checker = 0.

    CASE i_navigate_item_key.
      WHEN 'ZZACE_CREATE'.   "Abgrenzungsobjekt anlegen
        IF it_outtab_selected_rows[] IS NOT INITIAL.                                            "Mind. eine Zeile selektiert?
          LOOP AT it_column ASSIGNING FIELD-SYMBOL(<lf_col>) WHERE fieldname = 'BUKRS' OR       "Felder Bukrs, Belnr, Gjahr und Buzei in Liste?
                                                                   fieldname = 'BELNR' OR
                                                                   fieldname = 'GJAHR' OR
                                                                   fieldname = 'BUZEI'.
            IF <lf_col>-is_invisible = abap_false.
              ADD 1 TO l_checker.
            ENDIF.
          ENDLOOP.
          IF l_checker < 4.
            MESSAGE 'Bitte mind. BUKRS BELNR GJAHR BUZEI in Anzeige holen' TYPE 'I'.
            EXIT.
          ELSE.
            "Belegdaten nachlesen
            READ TABLE it_outtab INDEX it_outtab_selected_rows[ 1 ]-row_id ASSIGNING FIELD-SYMBOL(<lf_row>).
            MOVE-CORRESPONDING <lf_row> TO ls_bseg.
            SELECT SINGLE * FROM bkpf INTO ls_bkpf
                    WHERE bukrs = ls_bseg-bukrs
                      AND belnr = ls_bseg-belnr
                      AND gjahr = ls_bseg-gjahr.
            SELECT SINGLE * FROM bseg INTO ls_bseg
                    WHERE bukrs = ls_bkpf-bukrs
                      AND belnr = ls_bkpf-belnr
                      AND gjahr = ls_bkpf-gjahr
                      AND buzei = ls_bseg-buzei.
            IF sy-subrc = 0.
              "Aufruf Generierungsprogramm f. Abgrenzungsobjekte
              ls_bseg-dmbtr = abs( ls_bseg-dmbtr ).         "Abgrenzungsbetrag muss positiv sein
              IF ls_bseg-koart NE 'S'.                      "Kontokorrente (FBL1H)
                SUBMIT zacac_d_trans_s4 AND RETURN VIA SELECTION-SCREEN
                       WITH p_check  = 'X'
                       WITH p_efdate = sy-datum
                       WITH p_powip = 'X'
                       WITH so_acmth = 'LINEAR'
                       WITH so_acpst = ls_bkpf-budat
                       WITH so_belnr = ls_bkpf-belnr
                       WITH so_bukrs = ls_bkpf-bukrs
                       WITH so_gjahr = ls_bkpf-gjahr
                       WITH p_amnt   = ls_bseg-dmbtr
                       WITH p_text   = ls_bseg-sgtxt.
              ELSE.                                          "FAGLL03H, FBL3H
                SUBMIT zacac_d_trans_s4 AND RETURN VIA SELECTION-SCREEN
                        WITH p_check  = 'X'
                        WITH p_efdate = sy-datum
                        WITH p_powoip = 'X'                  "Bei Sachkontenposten - OHNE Eröffnungbuchung als Default
                        WITH p_powip  = space
                        WITH so_acmth = 'LINEAR'
                        WITH so_acpst = ls_bkpf-budat
                        WITH so_belnr = ls_bkpf-belnr
                        WITH so_bukrs = ls_bkpf-bukrs
                        WITH so_buzei = ls_bseg-buzei
                        WITH so_gjahr = ls_bkpf-gjahr
                        WITH p_amnt   = ls_bseg-dmbtr
                        WITH p_text   = ls_bseg-sgtxt.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
    ENDCASE.
  ENDMETHOD.

Da der Pivot-Browser HANA optimiert ist, werden nur die Spalten gelesen, die auch im aktuellen Layout benötigt werden. Dies ist ein wesentlicher Unterschied zu den klassischen EP-Listen, die immer alle Spalten eines Postens lesen, unabhängig von deren Verwendung in der Anzeige.

D.h., es muss zunächst geprüft werden, ob die für die weitere Verarbeitung benötigten Felder auch zur Verfügung stehen!

Im weiteren Verlauf dieses Beispiels wird eine angepasste Z-Kopie des Demo-Reports ACAC_D_TRANS_EXAMPLE_S4 gerufen, der aus einem vorgegebenen Belegvorrat Abgrenzungsobjekte im Accruals Management generiert. Für die "alte" Accrual Engine (vor S/4 1809) wäre dies der Report ACAC_DATA_TRANSFER_EXAMPLE.

 

Kommentare