ZHR_PFLEGE Programm zur Pflege von HR

Dieses Programm ist das Cockpit für die Pflege der Tabelleneinträge der wichtigsten HR Tabellen.

Realisiert per Pushbuttons und Absprung in die Tabellenpflege per SM30 über den FuBa VIEW_MAINTENANCE_CALL.

*&---------------------------------------------------------------------*
*& Report ZHR_PFLEGE
*&---------------------------------------------------------------------*
*& basiert auf einen Report ZHR_AZP
*&---------------------------------------------------------------------*
*
* Schöne Verwendung der Pushbuttons und des Fuba zur Pflege von Tabellen
* VIEW_MAINTENANCE_CALL
*
*
*
*

REPORT ZHR_PFLEGE.
"REPORT ZTEST45.
TABLES: sscrfields.

DATA: view_name LIKE  dd02v-tabname,
*      gv_ugr(2),
      gt_sel    TYPE STANDARD TABLE OF vimsellist WITH HEADER LINE.
DATA: gs_id TYPE RANGE OF hident WITH HEADER LINE,
      gv_id TYPE  hident.


SELECTION-SCREEN BEGIN OF BLOCK b01
                 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS: gv_ugr(2).

SELECTION-SCREEN END OF BLOCK b01.
SELECTION-SCREEN BEGIN OF BLOCK b02
                 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN SKIP 2.

SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z01 USER-COMMAND z01.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z02 USER-COMMAND z02.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z03 USER-COMMAND z03.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z04 USER-COMMAND z04.
SELECTION-SCREEN SKIP !.
SELECTION-SCREEN END OF BLOCK b02.
SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME.
*                 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-r01 USER-COMMAND r01.
SELECTION-SCREEN END OF BLOCK b03.
SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z10 USER-COMMAND z10.
SELECTION-SCREEN END OF BLOCK b04.

SELECTION-SCREEN BEGIN OF BLOCK b05 WITH FRAME TITLE TEXT-005.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 10(35) TEXT-z11 USER-COMMAND z11.
SELECTION-SCREEN END OF BLOCK b05.


AT SELECTION-SCREEN.

  CASE sscrfields.

    WHEN 'Z01'.

      view_name = 'V_T550P'. "Pausenpläne

      gt_sel-viewfield = 'MOTPR'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = gv_ugr.
      APPEND gt_sel.
      PERFORM get_settings.
      PERFORM call_view.

    WHEN 'Z02'.
      view_name = 'V_T550A'. "Tagesarbeitszeitpläne

      gt_sel-viewfield = 'MOTPR'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = gv_ugr.
      APPEND gt_sel.
      PERFORM get_settings.
      PERFORM call_view.

    WHEN 'Z03'.
      view_name = 'V_T551A'. "Periodenarbeitszeitpläne

      gt_sel-viewfield = 'MOTPR'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = gv_ugr.
      APPEND gt_sel.
      PERFORM get_settings.
      PERFORM call_view.

    WHEN 'Z04'.
      view_name = 'V_T508A'. "Arbeitszeitplanregel

      gt_sel-viewfield = 'ZEITY'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = '1'.
      gt_sel-and_or = 'OR'.
      APPEND gt_sel.

      gt_sel-viewfield = 'ZEITY'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = '2'.
      gt_sel-and_or = 'AND'.
      APPEND gt_sel.

      "Einschränkung auf den Feiertagskalender
      PERFORM get_settings.
      SELECT ident INTO gv_id FROM  thoci WHERE ident IN gs_id.
        gt_sel-viewfield = 'MOFID'.
        gt_sel-operator = 'EQ'.
        gt_sel-value = gv_id.
        gt_sel-and_or = 'OR'.
        APPEND gt_sel.
      ENDSELECT.

      PERFORM call_view.

    WHEN 'Z10'.
*      view_name = 'V_T552W'. "Periodenarbeitszeitpläne
      view_name = 'V_T552V'.
      gt_sel-viewfield = 'MOTPR'.
      gt_sel-operator = 'EQ'.
      gt_sel-value = gv_ugr.
      APPEND gt_sel.
      PERFORM get_settings.
      PERFORM call_view.

    WHEN 'R01'.
*       PERFORM check_t551c.
*       PERFORM check_existing.
*      CALL TRANSACTION 'OG00'.
data: lv_pbeg(6),
      lv_pend(6).

concatenate '01' sy-datum(4) into lv_pbeg.
concatenate '01' sy-datum(4) into lv_pend.
add 1 to lv_pend.


        SUBMIT RPTSHF00 AND RETURN
*               with PRD01 = '012018'
*               with PRD02 = '012019'
               with PRD01 = lv_pbeg
               with PRD02 = LV_Pend
               with ONLINE = 'N'
               VIA SELECTION-SCREEN.

    when 'Z11'.
       PERFORM check_t551c.
       PERFORM check_existing.
       message 'Erledigt!' type 'S'.

  ENDCASE.

INITIALIZATION.
  GET PARAMETER ID 'MOL' FIELD gv_ugr.

START-OF-SELECTION.

  MESSAGE 'Bitte Auswahlbutton verwenden' TYPE 'I'.


*&---------------------------------------------------------------------*
*&      Form  GET_SETTINGS
*&---------------------------------------------------------------------*
*      Allgemeine Einstellungen
*----------------------------------------------------------------------*
FORM get_settings.

  "Feiertagskalender
  CASE gv_ugr.

    WHEN '01'.
      gs_id-sign = 'I'.
      gs_id-option = 'BT'.
      gs_id-low = '00'.
      gs_id-high = '98'.
      APPEND gs_id.

    WHEN '03'.
      gs_id-sign = 'I'.
      gs_id-option = 'EQ'.
      gs_id-low = 'AT'.
      APPEND gs_id.

  ENDCASE.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  CALL_VIEW
*&---------------------------------------------------------------------*
*      View aufrufen
*----------------------------------------------------------------------*
FORM call_view.
  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action      = 'U'
*     CORR_NUMBER = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP                 = ' '
      view_name   = view_name
*     NO_WARNING_FOR_CLIENTINDEP           = ' '
*     RFC_DESTINATION_FOR_UPGRADE          = ' '
*     CLIENT_FOR_UPGRADE                   = ' '
*     VARIANT_FOR_SELECTION                = ' '
*     COMPLEX_SELCONDS_USED                = ' '
*     CHECK_DDIC_MAINFLAG                  = ' '
*     SUPPRESS_WA_POPUP                    = ' '
    TABLES
      dba_sellist = gt_sel[] "Hier können Selektionen vorgenommen werden!
*     EXCL_CUA_FUNCT                       =
* EXCEPTIONS
*     CLIENT_REFERENCE                     = 1
*     FOREIGN_LOCK                         = 2
*     INVALID_ACTION                       = 3
*     NO_CLIENTINDEPENDENT_AUTH            = 4
*     NO_DATABASE_FUNCTION                 = 5
*     NO_EDITOR_FUNCTION                   = 6
*     NO_SHOW_AUTH                         = 7
*     NO_TVDIR_ENTRY                       = 8
*     NO_UPD_AUTH = 9
*     ONLY_SHOW_ALLOWED                    = 10
*     SYSTEM_FAILURE                       = 11
*     UNKNOWN_FIELD_IN_DBA_SELLIST         = 12
*     VIEW_NOT_FOUND                       = 13
*     MAINTENANCE_PROHIBITED               = 14
*     OTHERS      = 15
    .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  REFRESH gt_sel.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_T551C
*&---------------------------------------------------------------------*
*       Überprüfung und Ergänzung der T551C
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_t551c .
  TABLES: t551c.
  DATA: lv_zmond TYPE dzmodn,
        lv_begda TYPE begda,
        ls_t551c TYPE t551c.

  lv_begda = sy-datum.
  lv_begda+4(4) = '0101'. "Jahresbeginn

  SELECT zmodn  INTO lv_zmond FROM t551a WHERE motpr = gv_ugr.

    SELECT SINGLE * FROM t551c INTO ls_t551c WHERE zmodn = lv_zmond
                                             and   motpr = gv_ugr.

    IF sy-subrc NE 0.
      "Neuer Eintrag
      CLEAR ls_t551c.
      ls_t551c-motpr = gv_ugr.
      ls_t551c-zmodn = lv_zmond.
      ls_t551c-begda = lv_begda.
      ls_t551c-endda = '99991231'.
      ls_t551c-zmodk = 0.
      ls_t551c-urlzk = 1.
*append t551c from ls_t551c.
      INSERT t551c FROM ls_t551c.
    ENDIF.

ENDSELECT.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_EXISTING
*&---------------------------------------------------------------------*
*       Überprüfung und Ergänzung der T551C
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_existing .
  TABLES: T550A, TMW_TDTYPE, TMW_TD_SUBLA.
  DATA: lt_tazp TYPE STANDARD TABLE OF T550A,
        ls_tazp LIKE LINE OF lt_tazp,
        lv_langu TYPE tmw_tdlangu,
        lt_tdtype TYPE STANDARD TABLE OF tmw_tdtype,
        ls_tdtype LIKE LINE OF lt_tdtype,
        lv_desc TYPE c,
        lv_maxEnt TYPE tmw_entnr,
        lv_tdold TYPE tdtype,
        lv_maxEnt2 TYPE tmw_entnr,
        lv_tdold2 TYPE tdtype,
        lt_subla TYPE STANDARD TABLE OF tmw_td_subla,
        ls_subla LIKE LINE OF lt_subla.

check gv_ugr = 03.

  SELECT * FROM T550A INTO TABLE lt_tazp
    WHERE MOTPR = gv_ugr.

  CASE gv_ugr.
    WHEN '01'.
      lv_langu = 'ZHR_DE_001'.
    WHEN '03'.
      lv_langu = 'ZHR_AT'.
    WHEN '18'.
      lv_langu = 'SET_CZ'.
  ENDCASE.

sort lt_tazp by TPROG.

  LOOP AT lt_tazp INTO ls_tazp.
    SELECT * FROM tmw_tdtype
      WHERE TDLANGU = lv_langu
      AND TPROG = ls_tazp-tprog
      and varia = ls_tazp-varia.
    ENDSELECT.
    IF SY-SUBRC = 4.
      lv_desc = ls_tazp-tprog(1).
      ls_tdtype-tdtype = 'TAZP'.
*      CASE lv_desc.
*        WHEN 'F'.
*          ls_tdtype-tdtype = 'XFR'.
*        WHEN 'G'.
*          ls_tdtype-tdtype = 'XGL'.
*        WHEN 'N'.
*          ls_tdtype-tdtype = 'XNA'.
*        WHEN 'S'.
*          ls_tdtype-tdtype = 'XSP'.
*        WHEN 'T'.
*          ls_tdtype-tdtype = 'XTE'.
*        when 'L'.
*          ls_tdtype-tdtype = 'XLE'.
*        WHEN OTHERS.
*          CONTINUE.
*      ENDCASE.


      ls_tdtype-tdlangu = lv_langu.
      ls_tdtype-tprog = ls_tazp-tprog.
      ls_tdtype-motpr = gv_ugr.
      ls_tdtype-category = 'IT'.
      ls_tdtype-type = '2003'.
      ls_tdtype-VARIA = ls_tazp-VARIA.

      IF NOT ls_tdtype-tdtype = lv_tdold.
       SELECT max( entnr ) from tmw_tdtype INTO lv_maxEnt
          WHERE tdlangu = lv_langu AND tdtype = ls_tdtype-tdtype.
      ENDIF.

      ADD 1 TO lv_maxEnt.
      ls_tdtype-entnr = lv_maxEnt.

      INSERT tmw_tdtype FROM ls_tdtype.

      lv_tdold = ls_tdtype-tdtype.

      SELECT * FROM tmw_td_subla
        WHERE tdlangu = lv_langu
        AND tdtype = ls_tdtype-tdtype
        AND entnr = ls_tdtype-entnr
        AND tdsubla = '001'.
      ENDSELECT.
      IF sy-subrc = 4.


        ls_subla-tdlangu = lv_langu.
        ls_subla-tdsubla = '001'.
        ls_subla-psign = 'U'.
        ls_subla-tdtype = ls_tdtype-tdtype.

        IF NOT ls_subla-tdtype = lv_tdold2.
         SELECT max( entnr ) from tmw_td_subla INTO lv_maxEnt2
            WHERE tdlangu = lv_langu AND tdtype = ls_subla-tdtype.
        ENDIF.

        ADD 1 TO lv_maxEnt2.
        ls_subla-entnr = lv_maxEnt2.

        INSERT tmw_td_subla FROM ls_subla.

        lv_tdold2 = ls_subla-tdtype.

      ENDIF.
    ENDIF.


  ENDLOOP.


ENDFORM.