ZHR_ZEIT- Anzeige der Zeitbuchungen

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