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 |
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.
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.
...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.