Dies ist ein kleines Programm, um die Zeitbuchungen (Habe ich eingestempelt oder nicht) rasch anzuzeigen.
Kein anderes Programm ist so rasch und einfach.
REPORT zhr_zeit.
PARAMETERS: p_pernr TYPE pernr_d "OBLIGATORY
MATCHCODE OBJECT prem. "NO-DISPLAY.
PARAMETERS: p_vari TYPE slis_vari. "NO-DISPLAY. "Variante
TYPES: BEGIN OF ty_alv,
pernr TYPE persno, "Personalnummer
ldate TYPE teven-ldate,
ltime TYPE teven-ltime,
END OF ty_alv.
DATA: gt_alv TYPE STANDARD TABLE OF ty_alv. "Ausgabedatei
CLASS application DEFINITION CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS f4_alv_variant.
CLASS-METHODS init.
CLASS-METHODS collect.
CLASS-METHODS show.
ENDCLASS.
CLASS application IMPLEMENTATION.
METHOD init.
DATA lv_pernr TYPE pernr_d.
SELECT SINGLE pernr FROM pa0105 INTO @lv_pernr
WHERE usrid = @sy-uname
AND usrty = '0001'.
IF p_pernr IS INITIAL.
p_pernr = lv_pernr.
ELSE.
IF p_pernr NE lv_pernr.
MESSAGE e631(5w) WITH p_pernr.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD collect.
SELECT pernr, ldate, ltime FROM teven INTO TABLE @gt_alv WHERE pernr EQ @p_pernr.
ENDMETHOD.
METHOD show.
"Initialisierung
DATA: lr_salv TYPE REF TO cl_salv_table,
lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key.
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
DATA: lr_display TYPE REF TO cl_salv_display_settings.
* Titel
DATA: lv_titel TYPE lvc_title.
* Sortierung und Aggregation
DATA: lr_sorts TYPE REF TO cl_salv_sorts.
DATA: lr_aggs TYPE REF TO cl_salv_aggregations.
* Spalten Feldkatalog ändern
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
* Variant
DATA: lf_variant TYPE slis_vari.
"Rücksprung wenn die Daten leer sind.
IF gt_alv[] IS INITIAL.
EXIT.
ENDIF.
* ALV aufbauen,
* lr_salv zeigt danach auf das Objekt,
*gt_alv_pers ist die Tabelle, die als Info mitgegeben wird, wo die Daten
*zukünftig gespeichert werden.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lr_salv
CHANGING
t_table = gt_alv.
CATCH cx_salv_msg.
cl_demo_output=>display('Error' ).
ENDTRY.
"Die Keydaten werden gefüllt
ls_key-report = sy-repid.
"lr_layout zeigt auf das Layout des ALV
lr_layout = lr_salv->get_layout( ).
"Layout erhält Keydaten: Program Name
lr_layout->set_key( ls_key ).
"Layout Speichern erlaubt (3 Werte möglich) User can save
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
* Layout auf Kundenspezifisches Layout einstellen
* IF sy-slset = 'CUS&Z_PPMDT_01'.
* lr_layout->set_initial_layout( value = '/Z_PPMDT_TEL' ).
* ENDIF.
"lr_functions zeigt auf die Funktionen des ALV
lr_functions = lr_salv->get_functions( ).
"lr_functions einschalten
" lr_functions->set_default( ). "minimal
lr_functions->set_all( abap_true ). "Standard
TRY.
"Sort einstellen
lr_sorts = lr_salv->get_sorts( ).
lr_sorts->add_sort( columnname = 'PERNR' sequence = if_salv_c_sort=>sort_down ).
lr_sorts->add_sort( columnname = 'LDATE' sequence = if_salv_c_sort=>sort_down ).
lr_sorts->add_sort( columnname = 'LTIME' sequence = if_salv_c_sort=>sort_down ).
IF p_vari IS INITIAL.
p_vari = '/DEFAULT'.
ENDIF.
lf_variant = p_vari. "20190424 Variante
lr_layout->set_initial_layout( lf_variant ).
CATCH cx_salv_not_found.
cl_demo_output=>display('Error' ).
CATCH cx_salv_existing.
cl_demo_output=>display('Error: Existence' ).
CATCH cx_salv_data_error.
cl_demo_output=>display('Error: Data' ).
CATCH cx_salv_msg.
cl_demo_output=>display('Error' ).
ENDTRY.
"Überschrift des Display einstellen
CONCATENATE 'Zeitereignisse: ' p_pernr
INTO lv_titel RESPECTING BLANKS.
lr_display = lr_salv->get_display_settings( ).
lr_display->set_list_header( lv_titel ).
lr_display->set_striped_pattern( abap_true ). "Zebra
lr_display->set_no_merging( abap_false ). "Kein Merge von Zeilen
* Ausgabe
lr_salv->display( ).
ENDMETHOD.
METHOD f4_alv_variant.
"CHANGING p_variant LIKE p_vari.
DATA:variant TYPE disvariant.
DATA: lv_exit TYPE c.
variant-report = sy-repid.
"variant-handle = '0001'.
variant-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variant
i_save = 'A'
IMPORTING
es_variant = variant
e_exit = lv_exit
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lv_exit EQ space.
p_vari = variant-variant.
ENDIF.
ENDIF.
"CHECK sy-subrc = 0.
"p_variant = variant-variant.
ENDMETHOD. " f4_alv_variant
ENDCLASS.
"AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
" application=>f4_alv_variant( ). "CHANGING p_vari.
INITIALIZATION.
" IF sy-tcode = 'ZHR_ZEIT'.
"
" SUPPRESS DIALOG.
"
" ENDIF.
START-OF-SELECTION.
application=>init( ).
application=>collect( ).
application=>show( ).