Code: Alles auswählen.
*&---------------------------------------------------------------------
*& Report Z_BUCHSELEKTUIN
*&---------------------------------------------------------------------
*&
*&---------------------------------------------------------------------
REPORT z_berechtigunbgen.
TYPES: BEGIN OF my_out,
uname TYPE xubname,
FROM_DAT TYPE agr_fdate,
TO_DAT TYPE agr_tdate,
AGR_NAME TYPE agr_name, " Hier muss das Feld für den Rollennamen rein
tcode TYPE agxreport,
END OF my_out.
DATA lt_out TYPE TABLE OF my_out. "interne Tabelle definiert
* Workarea
DATA ls_out TYPE my_out.
DATA: lt_berechtigungen TYPE TABLE OF AGR_users,
ls_berechtigungen LIKE LINE OF lt_berechtigungen,
l_berr TYPE string,
o_salv TYPE REF TO cl_salv_table.
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: pa_name TYPE agr_users-agr_name. "Parameter für den Rollennamen
SELECT-OPTIONS so_user FOR ls_berechtigungen-uname. "Die Option für die Benutzernamen
SELECTION-SCREEN END OF BLOCK b1.
CONCATENATE '%' pa_name '%' INTO l_berr.
* Korrekt referenzierte Felder in der SELECT-Anweisung
SELECT a~AGR_NAME,
Ben~UNAME,
Ben~FROM_DAT,
Ben~TO_DAT ,
a~TCODE
FROM AGR_users AS Ben
INNER JOIN AGR_TCODES AS a
ON a~agr_name = ben~agr_name
WHERE a~AGR_NAME LIKE @l_berr
AND Ben~UNAME IN @so_user
GROUP BY a~AGR_NAME, Ben~UNAME, a~TCODE,Ben~FROM_DAT,Ben~TO_DAT
INTO CORRESPONDING FIELDS OF TABLE @lt_out.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = o_salv
CHANGING
t_table = lt_out.
o_salv->display( ).
CATCH cx_salv_msg INTO DATA(lx_salv).
" Fehlerbehandlung
MESSAGE lx_salv->get_text( ) TYPE 'E'.
ENDTRY.
Code: Alles auswählen.
TYPES: BEGIN OF ts_data,
uname TYPE agr_users-uname,
tcode TYPE agr_tcodes-tcode,
sprsl TYPE tstct-sprsl,
tstct TYPE tstct-ttext,
agr_name TYPE agr_users-agr_name,
END OF ts_data.
DATA: mt_data TYPE STANDARD TABLE OF ts_data.
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01.
SELECT-OPTIONS: so_uname FOR agr_users-uname NO INTERVALS,
so_tcode FOR agr_tcodes-tcode NO INTERVALS,
so_agrn FOR agr_users-agr_name NO INTERVALS,
so_sprsl FOR tstct-sprsl DEFAULT 'DE' NO INTERVALS.
SELECTION-SCREEN: END OF BLOCK b01.
SELECT *
FROM agr_users
JOIN agr_tcodes
ON agr_users~agr_name EQ agr_tcodes~agr_name
LEFT JOIN tstct
ON agr_tcodes~tcode EQ tstct~tcode
INTO CORRESPONDING FIELDS OF TABLE @mt_data
WHERE agr_users~uname IN @so_uname
AND agr_users~agr_name IN @so_agrn
AND agr_tcodes~tcode IN @so_tcode
AND tstct~sprsl IN @so_sprsl.
Hallo Jan,JM1804_ABAP hat geschrieben: ↑11.02.2025 14:46Hi Alexus,
ich bin selber noch nicht der beste im ABAP-Umfeld, habe mir aber mal was ähnliches programmiert und eventuell hilft es dir.
Mit dem Programm kann ich leicht nachschauen, ob User für bestimmte Transaktionen berechtigt sind und kann mir auch alle User für eine bestimmte Transaktion anzeigen.Code: Alles auswählen.
TYPES: BEGIN OF ts_data, uname TYPE agr_users-uname, tcode TYPE agr_tcodes-tcode, sprsl TYPE tstct-sprsl, tstct TYPE tstct-ttext, agr_name TYPE agr_users-agr_name, END OF ts_data. DATA: mt_data TYPE STANDARD TABLE OF ts_data. SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01. SELECT-OPTIONS: so_uname FOR agr_users-uname NO INTERVALS, so_tcode FOR agr_tcodes-tcode NO INTERVALS, so_agrn FOR agr_users-agr_name NO INTERVALS, so_sprsl FOR tstct-sprsl DEFAULT 'DE' NO INTERVALS. SELECTION-SCREEN: END OF BLOCK b01. SELECT * FROM agr_users JOIN agr_tcodes ON agr_users~agr_name EQ agr_tcodes~agr_name LEFT JOIN tstct ON agr_tcodes~tcode EQ tstct~tcode INTO CORRESPONDING FIELDS OF TABLE @mt_data WHERE agr_users~uname IN @so_uname AND agr_users~agr_name IN @so_agrn AND agr_tcodes~tcode IN @so_tcode AND tstct~sprsl IN @so_sprsl.
Beste Grüße
Jan
Hallo @PeterPalettiPeterPaletti hat geschrieben: ↑11.02.2025 15:20Hi Alexus,
mir ist nicht ganz klar, was du mit Hierarchie-Ansicht meinst. Wenn du die Ausgabe durch Sortierung gruppieren willst, sind das ganz einfache Codingzeilen, dafür braucht du die Menüleiste nicht.