FuBa VIEW_MAINTENCE_CALL – SM30 Pflege Tabelle

Dieses Programm zeigt den Absprung in die Tabellenpflege per SM30 für Pushbuttons.

Kern ist der FuBa VIEW_MAINTENANCE_CALL.

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

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.