Отслеживание статуса импорта запросов на перенос по системному ландшафту

На авторство не претендую. Немного подправил.

Нашел где-то в интернетах.

Особенно полезна программа для ветвистых ландшафтов,.

*&---------------------------------------------------------------------*
*& Report  ZBC_REQUST_FLOW
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zbc_requst_flow.

*---------------------------------------------------------------------*
* Overview transport requests for all systems and clients             *
*---------------------------------------------------------------------*
* Updated 22-May-15  14h00
*---------------------------------------------------------------------*
* Macro definition
DEFINE mac_line.
  selection-screen begin of block b0&1.
  selection-screen begin of line.
  selection-screen position 1.
  parameters p_pgmid&1 type sctsobject-pgmid  modif id out.
  parameters p_objct&1 type sctsobject-object value check.
  selection-screen position 11.
  parameters p_objtx&1 type sctsobject-text visible length 19
                       lower case modif id 2d.
  selection-screen position 31.
  parameters p_objnm&1 type ty_objnam.
  selection-screen:
    pushbutton 77(4) v_90&1 user-command zd&1.              "#EC NEEDED
  selection-screen end of line.
  selection-screen end of block b0&1.
END-OF-DEFINITION.
*---------------------------------------------------------------------*
* Macro definition
DEFINE mac_selection_screen.

  at selection-screen on p_objct&1.

    perform f_selection_screen_object using p_objct&1
                                   changing p_pgmid&1
                                            p_objtx&1.

  at selection-screen on block b0&1.

    if sscrfields-ucomm = 'ZD&1'.
      clear : p_pgmid&1, p_objct&1, p_objnm&1, p_objtx&1,
              gt_where&1.
    endif.

    perform f_selection_screen using p_objnm&1
                            changing p_pgmid&1
                                     p_objct&1
                                     gt_where&1.

  at selection-screen on value-request for p_objnm&1.

    perform f_help_object_name using p_pgmid&1
                                     p_objct&1
                                     'P_OBJNM&1'
                                     'X'
                            changing p_objnm&1.

END-OF-DEFINITION.
DEFINE mac_sys.
  selection-screen begin of line.
  parameters p_&1 as checkbox.
  selection-screen comment 5(30) text_p&1 for field p_&1.
  selection-screen end of line.
END-OF-DEFINITION.
* Macro definition
DEFINE m_bdc_dynpro.
  clear ls_bdcdata.
  ls_bdcdata-program  = &1.
  ls_bdcdata-dynpro   = &2.
  ls_bdcdata-dynbegin = abap_true.
  append ls_bdcdata to lt_bdcdata.

  clear ls_bdcdata.
  ls_bdcdata-fnam     = 'BDC_OKCODE'.
  ls_bdcdata-fval     = &3.
  append ls_bdcdata to lt_bdcdata.
END-OF-DEFINITION.

DEFINE m_bdc_field.
  clear ls_bdcdata.
  ls_bdcdata-fnam = &1.
  ls_bdcdata-fval = &2.
  append ls_bdcdata to lt_bdcdata.
END-OF-DEFINITION.
*---------------------------------------------------------------------*
TABLES sscrfields.                     " Screen fields
*---------------------------------------------------------------------*
TYPE-POOLS slis.                       " Types for ALV
*---------------------------------------------------------------------*
TYPES:
  ty_trkorr     TYPE RANGE OF trkorr,
  ty_where_t    TYPE STANDARD TABLE OF char200,
  ty_objnam(43) TYPE c,
  BEGIN OF ty_e071.
        INCLUDE TYPE e071.
TYPES: checkbox  TYPE char1,
       as4date   TYPE as4date,
       as4time   TYPE as4time,
       timestamp TYPE tstamp.
TYPES END OF ty_e071.

TYPES ty_system TYPE char7.
TYPES tty_systems TYPE TABLE OF ty_system.

*---------------------------------------------------------------------*
DATA gt_tmstpalog TYPE tmstpalogs.
DATA gs_tmstpalog TYPE tmstpalog.
DATA gt_syslst    TYPE tmscsyslst_typ.
DATA gt_fieldcat  TYPE slis_t_fieldcat_alv.  " Field catalog
DATA gr_trkorr    TYPE ty_trkorr.
DATA gt_where1    TYPE ty_where_t.
DATA gt_where2    TYPE ty_where_t.
DATA gt_where3    TYPE ty_where_t.
DATA gt_where4    TYPE ty_where_t.
DATA gt_where5    TYPE ty_where_t.
DATA gt_e071      TYPE TABLE OF ty_e071.
DATA gt_object_texts TYPE tr_object_texts.
*---------------------------------------------------------------------*
FIELD-SYMBOLS
  <gt_data> TYPE STANDARD TABLE.       " Data to display
*---------------------------------------------------------------------*
CONSTANTS:
  c_20010101 TYPE datum VALUE '20010101',
  c_eb9      TYPE syucomm VALUE '&EB9',
  c_odn      TYPE syucomm VALUE '&ODN',
  c_oup      TYPE syucomm VALUE '&OUP',
  c_refresh  TYPE syucomm VALUE '&REFRESH',
  c_zsyst    TYPE rvari_vnam VALUE 'ZSYST',
  c_0000     TYPE tvarv_numb VALUE '0000',
  c_p        TYPE rsscr_kind VALUE 'P',
  c_trkorr   TYPE fieldname VALUE 'TRKORR',
  c_checkbox TYPE fieldname VALUE 'CHECKBOX',
  c_colortab TYPE fieldname VALUE 'COLORTAB',
  c_admin    TYPE char8 VALUE '_ADMIN',
  c_retcode  TYPE char8 VALUE '_RETCODE'.
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bl0 WITH FRAME TITLE text-bl0.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text_100 FOR FIELD p_date_b.
PARAMETERS p_date_b TYPE dats." OBLIGATORY.
SELECTION-SCREEN PUSHBUTTON 52(4) v_104 USER-COMMAND zinit. "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 57(4) v_100 USER-COMMAND datm7. "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 62(4) v_101 USER-COMMAND datm.  "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 67(4) v_102 USER-COMMAND datp.  "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 72(4) v_103 USER-COMMAND datp7. "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 77(4) v_105 USER-COMMAND dmax.  "#EC NEEDED
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text_101 FOR FIELD p_date_e.
PARAMETERS p_date_e TYPE dats "OBLIGATORY
  DEFAULT sy-datum.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(28) text_102 FOR FIELD s_trkorr.
SELECT-OPTIONS s_trkorr FOR gs_tmstpalog-trkorr VISIBLE LENGTH 10.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(28) text_103 FOR FIELD s_truser.
SELECT-OPTIONS s_truser FOR gs_tmstpalog-truser "DEFAULT sy-uname
                        MATCHCODE OBJECT user_addr.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(28) text_104 FOR FIELD s_korrdv.
SELECT-OPTIONS s_korrdv FOR gs_tmstpalog-korrdev.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(28) text_105 FOR FIELD s_trfnct.
SELECT-OPTIONS s_trfnct FOR gs_tmstpalog-trfunction.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK bl0.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
mac_line 1.
mac_line 2.
mac_line 3.
mac_line 4.
mac_line 5.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_ssobj AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_114 FOR FIELD p_ssobj.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK bl1.

SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-bl2.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_format AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_106 FOR FIELD p_format.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_nocolr AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_107 FOR FIELD p_nocolr.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_alvlst AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_108 FOR FIELD p_alvlst.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_iconrc AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_109 FOR FIELD p_iconrc.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_no_rc AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_110 FOR FIELD p_no_rc.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_nouser AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 5(30) text_111 FOR FIELD p_nouser.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_sysid AS CHECKBOX.
SELECTION-SCREEN COMMENT 5(30) text_112 FOR FIELD p_sysid.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_wrkb AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(30) text_113 FOR FIELD p_wrkb.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_debug TYPE boole-boole.
SELECTION-SCREEN COMMENT 5(30) text_115 FOR FIELD p_debug.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_bgmod TYPE boole-boole.
SELECTION-SCREEN COMMENT 5(30) text_116 FOR FIELD p_debug.
SELECTION-SCREEN END OF LINE.

PARAMETERS p_call   TYPE flag   NO-DISPLAY.
PARAMETERS p_trkorr TYPE trkorr NO-DISPLAY.

SELECTION-SCREEN END OF BLOCK bl2.

SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-bl3.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 02(4) v_200 USER-COMMAND zsel.  "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 10(4) v_201 USER-COMMAND zdesel. "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 18(4) v_202 USER-COMMAND ztvarv. "#EC NEEDED
SELECTION-SCREEN PUSHBUTTON 26(4) v_203 USER-COMMAND zmod.  "#EC NEEDED
SELECTION-SCREEN END OF LINE.
mac_sys 01.
mac_sys 02.
mac_sys 03.
mac_sys 04.
mac_sys 05.
mac_sys 06.
mac_sys 07.
mac_sys 08.
mac_sys 09.
mac_sys 10.
mac_sys 11.
mac_sys 12.
mac_sys 13.
mac_sys 14.
mac_sys 15.
mac_sys 16.
mac_sys 17.
mac_sys 18.
mac_sys 19.
mac_sys 20.
SELECTION-SCREEN END OF BLOCK bl3.

*---------------------------------------------------------------------*
LOAD-OF-PROGRAM.

* Get System list
  CALL FUNCTION 'TMS_CI_GET_SYSTEMLIST'
    EXPORTING
      iv_only_active              = abap_true
    TABLES
      tt_syslst                   = gt_syslst
    EXCEPTIONS
      tms_is_not_active           = 1
      invalid_ci_conf_with_domain = 2
      no_systems                  = 3
      OTHERS                      = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  SORT gt_syslst BY sysnam.

  PERFORM read_object_table CHANGING gt_object_texts.

  v_901 = v_902 = v_903 = v_904 = v_905 = '@11@'.

*---------------------------------------------------------------------*
  mac_selection_screen 1.
  mac_selection_screen 2.
  mac_selection_screen 3.
  mac_selection_screen 4.
  mac_selection_screen 5.
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.

  IF sscrfields-ucomm = 'DATM'.
    SUBTRACT 1 FROM p_date_b.
    PERFORM f_datem CHANGING p_date_b.
  ELSEIF sscrfields-ucomm = 'DATM7'.
    SUBTRACT 7 FROM p_date_b.
    PERFORM f_datem CHANGING p_date_b.
  ELSEIF sscrfields-ucomm = 'DATP'.
    ADD 1 TO p_date_b.
    IF p_date_b > sy-datum.
      p_date_b = sy-datum.
    ENDIF.
    PERFORM f_datem CHANGING p_date_b.
  ELSEIF sscrfields-ucomm = 'DATP7'.
    ADD 7 TO p_date_b.
    IF p_date_b > sy-datum.
      p_date_b = sy-datum.
    ENDIF.
    PERFORM f_datem CHANGING p_date_b.
  ELSEIF sscrfields-ucomm = 'ZINIT'.
    p_sysid = abap_true.
    p_date_b = c_20010101.
  ELSEIF sscrfields-ucomm = 'DMAX'.
    p_date_e = sy-datum.
    p_date_b = sy-datum.
  ELSEIF sscrfields-ucomm = 'ZSEL'.
    PERFORM sel_desel USING 'X'.
  ELSEIF sscrfields-ucomm = 'ZDESEL'.
    PERFORM sel_desel USING ''.
  ELSEIF sscrfields-ucomm = 'ZTVARV'.
    PERFORM sel_tvarv.
  ELSEIF sscrfields-ucomm = 'ZMOD'.
    PERFORM mod_tvarv.
  ENDIF.

*---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

  IF p_date_b IS INITIAL.
    p_date_b = c_20010101."sy-datum - 30.
  ENDIF.

  PERFORM at_selection_screen_output.

*---------------------------------------------------------------------*
INITIALIZATION.

  PERFORM initialization.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* Stop for debugging if desired.
  IF p_debug NE space.
    SET EXTENDED CHECK OFF.
    BREAK-POINT.
    SET EXTENDED CHECK ON.
  ENDIF.

  IF p_call IS NOT INITIAL.
    DELETE gt_syslst WHERE sysnam(3) = 'ZLD' OR sysnam(3) = 'FRM'
                        OR sysnam(3) = 'TST'
                        OR sysnam(3) = 'DS0'.
  ENDIF.

  IF p_01 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p01(3). ENDIF.
  IF p_02 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p02(3). ENDIF.
  IF p_03 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p03(3). ENDIF.
  IF p_04 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p04(3). ENDIF.
  IF p_05 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p05(3). ENDIF.
  IF p_06 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p06(3). ENDIF.
  IF p_07 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p07(3). ENDIF.
  IF p_08 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p08(3). ENDIF.
  IF p_09 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p09(3). ENDIF.
  IF p_10 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p10(3). ENDIF.
  IF p_11 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p11(3). ENDIF.
  IF p_12 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p12(3). ENDIF.
  IF p_13 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p13(3). ENDIF.
  IF p_14 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p14(3). ENDIF.
  IF p_15 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p15(3). ENDIF.
  IF p_16 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p16(3). ENDIF.
  IF p_17 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p17(3). ENDIF.
  IF p_18 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p18(3). ENDIF.
  IF p_19 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p19(3). ENDIF.
  IF p_20 IS INITIAL. DELETE gt_syslst WHERE sysnam = text_p20(3). ENDIF.

  IF gt_syslst IS INITIAL.
    APPEND sy-sysid TO gt_syslst.
  ENDIF.

  PERFORM f_read.

*---------------------------------------------------------------------*
END-OF-SELECTION.

  IF p_alvlst IS INITIAL.
*   Switch List -> Grid
    SET PARAMETER ID 'SALV_SWITCH_TO_LIST' FIELD space.
  ELSE.
*   Switch Grid -> List
    SET PARAMETER ID 'SALV_SWITCH_TO_LIST' FIELD abap_true.
  ENDIF.

  PERFORM display_data.

*---------------------------------------------------------------------*
*      Form  f_read
*---------------------------------------------------------------------*
FORM f_read.

  LOOP AT s_trkorr.
    SHIFT s_trkorr-low LEFT DELETING LEADING space.
    s_trkorr-low = s_trkorr-low(10).
    SHIFT s_trkorr-high LEFT DELETING LEADING space.
    s_trkorr-high = s_trkorr-high(10).
    MODIFY s_trkorr.
  ENDLOOP.

  REFRESH gr_trkorr.
* Read object in requests
  PERFORM f_read_request USING gt_where1 space.
  PERFORM f_read_request USING gt_where2 space.
  PERFORM f_read_request USING gt_where3 space.
  PERFORM f_read_request USING gt_where4 space.
  PERFORM f_read_request USING gt_where5 space.
  PERFORM read_data.

ENDFORM.                               " F_READ
*---------------------------------------------------------------------*
*       Form  read_data
*---------------------------------------------------------------------*
FORM read_data.

  DEFINE m_component.
    clear ls_component.
    ls_component-name = &1.
    ls_component-type ?= cl_abap_elemdescr=>describe_by_name( &2 ).
    append ls_component to lt_component.
  END-OF-DEFINITION.

  DATA:
    l_system         TYPE ty_system,
    l_fname          TYPE fieldname,
    l_field          TYPE char20,
    lt_system        TYPE tty_systems,
    ls_tabcolor      TYPE lvc_s_scol,
    lt_tabcolor      TYPE lvc_t_scol,
    lp_table         TYPE REF TO data,      " Pointer to dynamic table
    ls_fieldcat      TYPE slis_fieldcat_alv,
    ls_tmstpalog     TYPE tmstpalog,
    lt_tmstpalog_tmp TYPE tmstpalogs,
    ls_e070          TYPE e070,
    lt_e070          TYPE SORTED TABLE OF e070 WITH UNIQUE KEY trkorr,
    lp_struct        TYPE REF TO data,
    ls_tmscsys       TYPE tmscsyslst,
    lr_trkorr        TYPE ty_trkorr,
    ls_trkorr        LIKE LINE OF gr_trkorr,
    l_low            TYPE tvarv-low,
    l_high           TYPE tvarv-high,
    l_str_tmp        TYPE string,
    l_syst           TYPE sysysid,
    lt_syst          TYPE TABLE OF sysysid,
    lt_syst_save     TYPE TABLE OF char7.

* RTTS Declarations.
  DATA:
    lo_struct_typ   TYPE REF TO cl_abap_datadescr,
    lo_dyntable_typ TYPE REF TO cl_abap_tabledescr,
    ls_component    TYPE cl_abap_structdescr=>component,
    lt_component    TYPE cl_abap_structdescr=>component_table.

  TYPES time     TYPE sy-uzeit.
  DATA: ls_ttzcu TYPE ttzcu,
        dat1     TYPE dats,
        dat2     TYPE dats,
        tim1     TYPE time,
        tim2     TYPE time,
        tz1      TYPE ttzz-tzone,
        tz2      TYPE ttzz-tzone.
  DATA: time_stamp1 TYPE timestamp.
  DATA: time_stamp2 TYPE timestamp.

  FIELD-SYMBOLS:
    <ls_header> TYPE any,
    <lv_field>  TYPE any.

  REFRESH: gt_tmstpalog, gt_fieldcat.

  IF p_sysid IS NOT INITIAL.
    DELETE gt_syslst WHERE sysnam <> sy-sysid.
  ENDIF.

  IF <gt_data> IS ASSIGNED.
    REFRESH <gt_data>.
  ENDIF.

  APPEND LINES OF gr_trkorr TO lr_trkorr.
  APPEND LINES OF s_trkorr  TO lr_trkorr.

  LOOP AT gt_syslst INTO ls_tmscsys.
    PERFORM get_transport USING ls_tmscsys-sysnam
                                p_date_b
                                p_date_e
                                lr_trkorr.
  ENDLOOP.

  DELETE gt_tmstpalog WHERE truser NOT IN s_truser
                         OR trfunction NOT IN s_trfnct.

  IF gt_tmstpalog[] IS NOT INITIAL.

    REFRESH lr_trkorr.
    LOOP AT gt_tmstpalog INTO ls_tmstpalog.
      ls_trkorr-sign = 'I'.
      ls_trkorr-option = 'EQ'.
      ls_trkorr-low = ls_tmstpalog-trkorr.
      APPEND ls_trkorr TO lr_trkorr.
    ENDLOOP.

    SORT lr_trkorr.
    DELETE ADJACENT DUPLICATES FROM lr_trkorr.

    IF NOT ( p_date_b = c_20010101 AND p_date_e = sy-datum ).
      REFRESH gt_tmstpalog.
      LOOP AT gt_syslst INTO ls_tmscsys.
        PERFORM get_transport USING ls_tmscsys-sysnam
                                    c_20010101
                                    sy-datum
                                    lr_trkorr.
      ENDLOOP.
    ENDIF.
  ENDIF.

  lt_tmstpalog_tmp[] = gt_tmstpalog[].
  SORT lt_tmstpalog_tmp BY trkorr.
  DELETE ADJACENT DUPLICATES FROM lt_tmstpalog_tmp COMPARING trkorr.

  IF lt_tmstpalog_tmp[] IS NOT INITIAL.
*   Lecture  en-tête ordres/tâches
    SELECT * FROM e070 INTO TABLE lt_e070
          FOR ALL ENTRIES IN lt_tmstpalog_tmp
            WHERE trkorr = lt_tmstpalog_tmp-trkorr
              AND korrdev IN s_korrdv.
  ENDIF.

  SORT gt_tmstpalog BY listname trcli trtime.

  LOOP AT gt_tmstpalog INTO ls_tmstpalog.
    READ TABLE lt_e070 WITH KEY trkorr = ls_tmstpalog-trkorr
                   TRANSPORTING NO FIELDS.
    CHECK sy-subrc IS NOT INITIAL.
    DELETE gt_tmstpalog.
  ENDLOOP.

  READ TABLE lt_e070 INDEX 1 INTO ls_e070.

  LOOP AT gt_tmstpalog INTO ls_tmstpalog WHERE listname(3) = sy-sysid.
    IF p_wrkb IS INITIAL.
      CONCATENATE ls_tmstpalog-listname(3) '_' ls_tmstpalog-trcli
             INTO l_system.
    ELSE.
      CONCATENATE ls_tmstpalog-listname(3) '_'
             INTO l_system.
    ENDIF.
    READ TABLE lt_system WITH TABLE KEY table_line = l_system
                      TRANSPORTING NO FIELDS.
    IF sy-subrc IS NOT INITIAL.
      APPEND l_system TO lt_system.
    ENDIF.
  ENDLOOP.

  LOOP AT gt_tmstpalog INTO ls_tmstpalog
                      WHERE listname(3) = ls_e070-tarsystem.
    IF p_wrkb IS INITIAL.
      CONCATENATE ls_tmstpalog-listname(3) '_' ls_tmstpalog-trcli
             INTO l_system.
    ELSE.
      CONCATENATE ls_tmstpalog-listname(3) '_'
             INTO l_system.
    ENDIF.
    READ TABLE lt_system WITH TABLE KEY table_line = l_system
                      TRANSPORTING NO FIELDS.
    IF sy-subrc IS NOT INITIAL.
      APPEND l_system TO lt_system.
    ENDIF.
  ENDLOOP.

  LOOP AT gt_tmstpalog INTO ls_tmstpalog
                      WHERE listname(3) <> sy-sysid
                        AND listname(3) <> ls_e070-tarsystem.
    IF p_wrkb IS INITIAL.
      CONCATENATE ls_tmstpalog-listname(3) '_' ls_tmstpalog-trcli
             INTO l_system.
    ELSE.
      CONCATENATE ls_tmstpalog-listname(3) '_'
             INTO l_system.
    ENDIF.
    READ TABLE lt_system WITH TABLE KEY table_line = l_system
                      TRANSPORTING NO FIELDS.
    IF sy-subrc IS NOT INITIAL.
      APPEND l_system TO lt_system.
    ENDIF.
  ENDLOOP.

  DELETE ADJACENT DUPLICATES FROM lt_system.

* Read System-Color in table TVARV
  SELECT SINGLE low high INTO (l_low, l_high) FROM tvarv
   WHERE name = c_zsyst AND numb = c_0000 AND type = c_p AND sign = ''.
  CONCATENATE l_low l_high INTO l_str_tmp.
  SPLIT l_str_tmp AT '/' INTO TABLE lt_syst.
  IF lt_syst[] IS NOT INITIAL.
    lt_syst_save = lt_system.
    REFRESH lt_system.
    LOOP AT lt_syst INTO l_syst.
      LOOP AT lt_syst_save INTO l_system.
        IF l_system(3) = l_syst(3).
          APPEND l_system TO lt_system.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

  m_component c_checkbox 'LVC_CHECKB'.

  IF p_nocolr IS INITIAL.
    m_component c_colortab 'LVC_T_SCOL'.
  ENDIF.

  m_component c_trkorr c_trkorr.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = c_trkorr.
  ls_fieldcat-ref_tabname = 'E070'.
  ls_fieldcat-hotspot = abap_true.
  ls_fieldcat-key = abap_true.
  APPEND ls_fieldcat TO gt_fieldcat.

  m_component 'AS4TEXT' 'AS4TEXT'.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'AS4TEXT'.
  ls_fieldcat-ref_tabname = 'TMSTPALOG'.
  ls_fieldcat-key = abap_true.
  APPEND ls_fieldcat TO gt_fieldcat.

  m_component 'TRFUNCTION' 'TRFUNCTION'.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'TRFUNCTION'.
  ls_fieldcat-rollname = 'TRFUNCTION'.
  APPEND ls_fieldcat TO gt_fieldcat.

  m_component 'KORRDEV' 'TRCATEG'.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'KORRDEV'.
  ls_fieldcat-rollname = 'TRCATEG'.
  APPEND ls_fieldcat TO gt_fieldcat.

  m_component 'AS4USER' 'TR_AS4USER'.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'AS4USER'.
  ls_fieldcat-ref_tabname = 'E070'.
  APPEND ls_fieldcat TO gt_fieldcat.

  LOOP AT lt_system INTO l_system.
*   For each line, a column is created in the fieldcatalog
*   Build Fieldcatalog
    IF p_format = abap_true.
      m_component l_system 'DATUM'.
    ELSE.
      m_component l_system 'TSTAMP'.
    ENDIF.

*   Build Fieldcatalog
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = l_system.
    IF p_format = abap_true.
*     ls_fieldcat-ref_fieldname = 'DATUM'.
*     ls_fieldcat-ref_tabname = 'SYST'.
      ls_fieldcat-rollname = 'DATUM'.
    ELSE.
      ls_fieldcat-ref_fieldname = 'TRTIME'.
      ls_fieldcat-ref_tabname = 'TMSTPALOG'.
*     ls_fieldcat-edit_mask = '==TSTPS'.
      ls_fieldcat-edit_mask = '==TSTLC'.
    ENDIF.
    ls_fieldcat-seltext_s = l_system.
    ls_fieldcat-seltext_m = l_system.
    ls_fieldcat-seltext_l = l_system.
    ls_fieldcat-just = 'C'.
    APPEND ls_fieldcat TO gt_fieldcat.

    IF p_no_rc IS INITIAL.
      CONCATENATE l_system c_retcode INTO l_fname.
      m_component l_fname 'TRRETCODE'.

      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname = l_fname.
      IF p_iconrc IS NOT INITIAL.
        ls_fieldcat-ref_fieldname = 'RETCODE'.
        ls_fieldcat-ref_tabname = 'TMSTPALOG'.
        ls_fieldcat-no_zero = abap_true.
      ELSE.
        ls_fieldcat-inttype = 'C'.
        ls_fieldcat-outputlen = 30.
        ls_fieldcat-icon = abap_true.
        ls_fieldcat-seltext_s = ls_fieldcat-seltext_m
                              = ls_fieldcat-seltext_l = 'RC'.
      ENDIF.
      APPEND ls_fieldcat TO gt_fieldcat.
    ENDIF.

    IF p_nouser IS INITIAL.
      CONCATENATE l_system c_admin INTO l_fname.

      m_component l_fname 'AS4USER'.

      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname = l_fname.
      ls_fieldcat-ref_fieldname = 'ADMIN'.
      ls_fieldcat-ref_tabname = 'TMSTPALOG'.
      APPEND ls_fieldcat TO gt_fieldcat.
    ENDIF.

  ENDLOOP.

  IF <gt_data> IS NOT ASSIGNED.
*   Create internal table
    lo_struct_typ  ?= cl_abap_structdescr=>create( p_components = lt_component ).
    lo_dyntable_typ = cl_abap_tabledescr=>create( p_line_type = lo_struct_typ ).

    CREATE DATA lp_table TYPE HANDLE lo_dyntable_typ.
    ASSIGN lp_table->* TO <gt_data>.
  ENDIF.

  IF <ls_header> IS NOT ASSIGNED.
*   Create structure = structure of the internal table
    CREATE DATA lp_struct LIKE LINE OF <gt_data>.
    ASSIGN lp_struct->* TO <ls_header>.
  ENDIF.

  IF p_nocolr IS INITIAL.
    LOOP AT gt_fieldcat INTO ls_fieldcat WHERE fieldname <> c_checkbox
                                           AND fieldname <> c_colortab.
      CLEAR ls_tabcolor.
      ls_tabcolor-fname = ls_fieldcat-fieldname.

      IF ls_tabcolor-fname+3(1) = '_'.
        IF lt_syst[] IS INITIAL.
          CASE ls_tabcolor-fname(3).
            WHEN ls_e070-tarsystem.
              ls_tabcolor-color-col = 5.
            WHEN sy-sysid.
              ls_tabcolor-color-col = 3.
            WHEN OTHERS.
              ls_tabcolor-color-col = 6.
          ENDCASE.
        ELSE.
          READ TABLE lt_syst
          WITH KEY table_line(3) = ls_tabcolor-fname(3) INTO l_syst.
          IF sy-subrc IS INITIAL AND l_syst+3(1) CA '123456'.
            ls_tabcolor-color-col = l_syst+3(1).
          ENDIF.
        ENDIF.
      ELSE.
        ls_tabcolor-color-col = 4.
      ENDIF.

      APPEND ls_tabcolor TO lt_tabcolor.
    ENDLOOP.
  ENDIF.

  IF p_wrkb IS INITIAL.
    SORT gt_tmstpalog BY trkorr listname trtime.
  ELSE.
    SORT gt_tmstpalog BY trkorr listname trtime DESCENDING.
    DELETE ADJACENT DUPLICATES FROM gt_tmstpalog COMPARING trkorr listname.
  ENDIF.

  SELECT SINGLE * FROM ttzcu INTO ls_ttzcu.
  tz1 = 'UTC'.
  tz2 = ls_ttzcu-tzonesys.

* Fill the internal to display <gt_data>
  LOOP AT lt_e070 INTO ls_e070.
    CLEAR <ls_header>.
    ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_header> TO <lv_field>.
    IF sy-subrc EQ 0.
      <lv_field> = ls_e070-as4user.
    ENDIF.

    LOOP AT gt_tmstpalog INTO ls_tmstpalog
                        WHERE trkorr = ls_e070-trkorr.

      MOVE-CORRESPONDING ls_tmstpalog TO <ls_header>.

      IF p_wrkb IS INITIAL.
        CONCATENATE ls_tmstpalog-listname(3) '_' ls_tmstpalog-trcli
               INTO l_system.
      ELSE.
        CONCATENATE ls_tmstpalog-listname(3) '_'
               INTO l_system.
      ENDIF.
      APPEND l_system TO lt_system.

      ASSIGN COMPONENT l_system OF STRUCTURE <ls_header> TO <lv_field>.
      IF sy-subrc EQ 0.
        time_stamp1 = ls_tmstpalog-trtime.
        CONVERT TIME STAMP time_stamp1
          TIME ZONE tz1
          INTO DATE dat1
          TIME tim1.
        CONVERT DATE dat1 TIME tim1
          INTO TIME STAMP time_stamp2
          TIME ZONE tz2.

        <lv_field> = time_stamp2.
*        <lv_field> = ls_tmstpalog-trtime.

      ENDIF.


      CONCATENATE l_system c_retcode INTO l_field.
      ASSIGN COMPONENT l_field OF STRUCTURE <ls_header> TO <lv_field>.
      IF sy-subrc IS INITIAL.
        IF p_iconrc IS NOT INITIAL.
          <lv_field> = ls_tmstpalog-retcode.
        ELSE.
          CASE ls_tmstpalog-retcode.
            WHEN 'INIT'.
              <lv_field> = icon_led_inactive.
            WHEN '0000'.
              <lv_field> = icon_led_green.
            WHEN '0004'.
              <lv_field> = icon_led_yellow.
            WHEN '0008'.
              <lv_field> = icon_led_red.
            WHEN OTHERS.
              <lv_field> = icon_alert.
          ENDCASE.
        ENDIF.
      ENDIF.

      CONCATENATE l_system c_admin INTO l_field.
      ASSIGN COMPONENT l_field OF STRUCTURE <ls_header> TO <lv_field>.
      IF sy-subrc IS INITIAL.
        <lv_field> = ls_tmstpalog-admin.
      ENDIF.

    ENDLOOP.

    ASSIGN COMPONENT 'KORRDEV' OF STRUCTURE <ls_header> TO <lv_field>.
    IF sy-subrc EQ 0.
      MOVE ls_e070-korrdev TO <lv_field>.
    ENDIF.

    IF p_nocolr IS INITIAL.
      ASSIGN COMPONENT c_colortab OF STRUCTURE <ls_header>
                                            TO <lv_field>.
      IF sy-subrc EQ 0.
        MOVE lt_tabcolor TO <lv_field>.
      ENDIF.
    ENDIF.

    APPEND <ls_header> TO <gt_data>.
  ENDLOOP.

  SORT lt_system.
  DELETE ADJACENT DUPLICATES FROM lt_system COMPARING ALL FIELDS.

  PERFORM check_transport_errors
    USING lt_system.

  IF p_trkorr IS NOT INITIAL.
    LOOP AT <gt_data> ASSIGNING <ls_header>.
      ASSIGN COMPONENT c_trkorr OF STRUCTURE <ls_header>
                    TO <lv_field>.
      CHECK sy-subrc IS INITIAL.
      CHECK <lv_field> = p_trkorr.
      ASSIGN COMPONENT c_checkbox OF STRUCTURE <ls_header>
                    TO <lv_field>.
      CHECK sy-subrc IS INITIAL.
      <lv_field> = abap_true.

      EXIT.                            " Exit Loop
    ENDLOOP.
  ENDIF.

ENDFORM.                               " READ_DATA
*---------------------------------------------------------------------*
*       Form  get_transport
*---------------------------------------------------------------------*
FORM get_transport USING u_tmssysnam TYPE tmssysnam
                         u_startdate TYPE dats
                         u_enddate   TYPE dats
                         ur_trkorr   TYPE ty_trkorr.

  DATA:
    l_exp  TYPE flag,
    lt_log TYPE tmstpalogs.

  DATA lt_syslst TYPE tmscsyslst_typ.

  IF u_tmssysnam = sy-sysid.
    l_exp = abap_true.
  ENDIF.

  CALL FUNCTION 'TMS_CI_GET_SYSTEMLIST'
    TABLES
      tt_syslst                   = lt_syslst
    EXCEPTIONS
      tms_is_not_active           = 1
      invalid_ci_conf_with_domain = 2
      no_systems                  = 3
      OTHERS                      = 4.

  READ TABLE lt_syslst ASSIGNING FIELD-SYMBOL(<fs_syslst>)
    WITH KEY sysnam = u_tmssysnam.
  CHECK sy-subrc EQ 0.

  CALL FUNCTION 'TMS_TM_GET_TRLIST'
    EXPORTING
      iv_system      = u_tmssysnam
      iv_domain      = <fs_syslst>-domnam
      iv_startdate   = u_startdate
      iv_starttime   = '000000'
      iv_enddate     = u_enddate
      iv_endtime     = '240000'
      iv_allcli      = abap_true
      iv_imports     = abap_true
      iv_exports     = l_exp
      iv_last_import = abap_true
    IMPORTING
      et_tmstpalog   = lt_log
    TABLES
      irt_requests   = ur_trkorr
    EXCEPTIONS
      alert          = 1
      OTHERS         = 2.

  APPEND LINES OF lt_log TO gt_tmstpalog.

ENDFORM.                               " GET_TRANSPORT
*---------------------------------------------------------------------*
*       Form  display_data
*---------------------------------------------------------------------*
FORM display_data.

  DATA:
    ls_layout     TYPE slis_layout_alv,
    ls_fieldcat   TYPE slis_fieldcat_alv,
    ls_event_exit TYPE slis_event_exit,
    lt_event_exit TYPE slis_t_event_exit,
    ls_print      TYPE slis_print_alv,
    ls_sort       TYPE slis_sortinfo_alv,
    lt_sort       TYPE slis_t_sortinfo_alv.

* IF p_alvlst IS INITIAL.
  ls_layout-box_fieldname = c_checkbox.
* ENDIF.
  ls_layout-colwidth_optimize = abap_true.
  ls_layout-group_change_edit = abap_true.
  ls_layout-allow_switch_to_list = abap_true.

  IF p_nocolr IS INITIAL.
    ls_layout-coltab_fieldname = c_colortab.
  ENDIF.

* Activate button
  CLEAR ls_event_exit.
  ls_event_exit-ucomm = c_eb9.         " More
  ls_event_exit-after = abap_true.
  APPEND ls_event_exit TO lt_event_exit.
  ls_event_exit-ucomm = c_odn.
  ls_event_exit-after = abap_true.
  APPEND ls_event_exit TO lt_event_exit.
  ls_event_exit-ucomm = c_oup.
  ls_event_exit-after = abap_true.
  APPEND ls_event_exit TO lt_event_exit.
  ls_event_exit-ucomm = c_refresh.     " Refresh
  ls_event_exit-after = abap_true.
  APPEND ls_event_exit TO lt_event_exit.

* Build Sort Table
  LOOP AT gt_fieldcat INTO ls_fieldcat WHERE fieldname(3) = sy-sysid.
    ls_sort-fieldname = ls_fieldcat-fieldname.
    APPEND ls_sort TO lt_sort.
    EXIT.
  ENDLOOP.
  IF sy-subrc IS NOT INITIAL.
    ls_sort-fieldname = c_trkorr.
    APPEND ls_sort TO lt_sort.
  ENDIF.

  IF ls_sort-fieldname IS NOT INITIAL.
    TRY.
        SORT <gt_data> BY (ls_sort-fieldname).
      CATCH cx_sy_dyn_table_ill_comp_val.
        MESSAGE 'Wrong column name!' TYPE 'I'.
    ENDTRY.
  ENDIF.

  PERFORM f_modify_color.

  ls_print-no_print_selinfos  = abap_true.   " Display no selection infos
  ls_print-no_print_listinfos = abap_true.   " Display no listinfos

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'PF_STATUS_SET'
      it_fieldcat              = gt_fieldcat
      it_sort                  = lt_sort
      is_layout                = ls_layout
      is_print                 = ls_print
      it_event_exit            = lt_event_exit
      i_save                   = 'A'
    TABLES
      t_outtab                 = <gt_data>.

ENDFORM.                               " DISPLAY_DATA
*---------------------------------------------------------------------*
*       Form  user_command
*---------------------------------------------------------------------*
FORM user_command USING u_ucomm     TYPE syucomm            "#EC CALLED
                        us_selfield TYPE slis_selfield.

  DATA:
*  lv_tcode   TYPE tcode,
    ls_sort    TYPE abap_sortorder,
    lt_sort    TYPE abap_sortorder_tab,
    ls_sortalv TYPE slis_sortinfo_alv,
    lt_sortalv TYPE slis_t_sortinfo_alv,
    lp_struct  TYPE REF TO data.

  FIELD-SYMBOLS:
    <ls_header> TYPE any,
    <lv_trkorr> TYPE any.

  CASE u_ucomm.
    WHEN '&IC1'.
*     Create structure = structure of the internal table
      CREATE DATA lp_struct LIKE LINE OF <gt_data>.
      ASSIGN lp_struct->* TO <ls_header>.
      READ TABLE <gt_data> ASSIGNING <ls_header>
                               INDEX us_selfield-tabindex.
      CHECK sy-subrc EQ 0.
      ASSIGN COMPONENT c_trkorr OF STRUCTURE <ls_header>
                    TO <lv_trkorr>.
      CHECK sy-subrc EQ 0.
      CASE us_selfield-fieldname.
        WHEN c_trkorr.
          CALL FUNCTION 'TR_PRESENT_REQUEST'
            EXPORTING
              iv_trkorr    = <lv_trkorr>
              iv_highlight = abap_true.
      ENDCASE.
    WHEN c_refresh.
      PERFORM f_read.

*     Read current ALV list information
      CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
        IMPORTING
          et_sort       = lt_sortalv
        EXCEPTIONS
          no_infos      = 1
          program_error = 2
          OTHERS        = 3.

      LOOP AT lt_sortalv INTO ls_sortalv.
        CLEAR ls_sort.
        ls_sort-name = ls_sortalv-fieldname.
        ls_sort-descending = ls_sortalv-down.
        APPEND ls_sort TO lt_sort.
      ENDLOOP.

      IF lt_sort IS NOT INITIAL.
        TRY.
            SORT <gt_data> BY (lt_sort).
          CATCH cx_sy_dyn_table_ill_comp_val.
            MESSAGE 'Wrong column name!' TYPE 'I'.
        ENDTRY.
      ENDIF.

      PERFORM f_modify_color.
      us_selfield-refresh = abap_true.
    WHEN c_eb9.
      CHECK p_bgmod EQ abap_false.
      PERFORM f_show_objects.
    WHEN c_oup OR c_odn.
      PERFORM f_modify_color.
  ENDCASE.

ENDFORM.                               " USER_COMMAND
*---------------------------------------------------------------------*
*       FORM PF_STATUS_SET                                            *
*---------------------------------------------------------------------*
FORM pf_status_set USING ut_extab TYPE slis_t_extab.        "#EC CALLED

* Display refresh button
  DELETE ut_extab WHERE fcode = c_refresh OR fcode = c_eb9.

  SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
      EXCLUDING ut_extab.

ENDFORM.                               " PF_STATUS_SET
*---------------------------------------------------------------------*
*      Form  at_selection_screen_output
*---------------------------------------------------------------------*
FORM at_selection_screen_output.

  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'OUT'.
        screen-input      = '0'.
      WHEN '2D'.
        screen-input      = '0'.
        screen-display_3d = '0'.
    ENDCASE.
    CASE screen-name.
      WHEN 'P_01' OR 'TEXT_P01'. IF text_p01 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_02' OR 'TEXT_P02'. IF text_p02 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_03' OR 'TEXT_P03'. IF text_p03 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_04' OR 'TEXT_P04'. IF text_p04 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_05' OR 'TEXT_P05'. IF text_p05 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_06' OR 'TEXT_P06'. IF text_p06 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_07' OR 'TEXT_P07'. IF text_p07 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_08' OR 'TEXT_P08'. IF text_p08 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_09' OR 'TEXT_P09'. IF text_p09 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_10' OR 'TEXT_P10'. IF text_p10 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_11' OR 'TEXT_P11'. IF text_p11 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_12' OR 'TEXT_P12'. IF text_p12 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_13' OR 'TEXT_P13'. IF text_p13 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_14' OR 'TEXT_P14'. IF text_p14 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_15' OR 'TEXT_P15'. IF text_p15 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_16' OR 'TEXT_P16'. IF text_p16 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_17' OR 'TEXT_P17'. IF text_p17 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_18' OR 'TEXT_P18'. IF text_p18 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_19' OR 'TEXT_P19'. IF text_p19 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'P_20' OR 'TEXT_P20'. IF text_p20 IS INITIAL. screen-invisible = '1'. ENDIF.
      WHEN 'V_202'.
        SELECT COUNT(*) FROM tvarv
         WHERE name = c_zsyst AND numb = c_0000 AND type = c_p.
        IF sy-subrc IS NOT INITIAL.
          screen-invisible = '1'.
        ENDIF.
      WHEN 'V_203'.
        IF sy-uname <> 'XXXXXX'.
          screen-invisible = '1'.
        ENDIF.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.

ENDFORM.                               " AT_SELECTION_SCREEN_OUTPUT
*---------------------------------------------------------------------*
*      Form  f_selection_screen
*---------------------------------------------------------------------*
FORM f_selection_screen USING u_objnam TYPE ty_objnam
                     CHANGING u_pgmid  TYPE pgmid
                              u_object TYPE trobjtype
                              ut_where TYPE ty_where_t.

  DATA:
    l_temp1  TYPE char100,
    l_temp2  TYPE char100,
    l_temp3  TYPE char100,
    l_where  TYPE char200,
    lt_where TYPE ty_where_t.

  IF u_object IS INITIAL AND u_objnam IS NOT INITIAL.
    SELECT SINGLE pgmid object
             INTO (u_pgmid, u_object)
             FROM tadir
            WHERE obj_name = u_objnam.
  ENDIF.

  CHECK u_pgmid IS NOT INITIAL AND
        u_object IS NOT INITIAL AND
        u_objnam IS NOT INITIAL.

* Build dynamic where
  CONCATENATE '''' sy-sysid '%' '''' INTO l_where.
  CONCATENATE 'A~TRKORR LIKE ' l_where 'AND' INTO l_where
    SEPARATED BY space.
  APPEND l_where TO lt_where.

  APPEND '(' TO lt_where.

  CONCATENATE '''' u_pgmid '''' INTO l_temp1.
  CONCATENATE 'PGMID = ' l_temp1 'AND' INTO l_temp1
    SEPARATED BY space.

  CONCATENATE '''' u_object '''' INTO l_temp2.
  CONCATENATE 'OBJECT = ' l_temp2 'AND' INTO l_temp2
    SEPARATED BY space.

  CONCATENATE '''' u_objnam '''' INTO l_temp3.
  IF u_objnam CS '*'.
    TRANSLATE l_temp3 USING '*%'.
    CONCATENATE 'OBJ_NAME LIKE ' l_temp3 INTO l_temp3
      SEPARATED BY space.
  ELSEIF u_objnam CS '+'.
    TRANSLATE l_temp3 USING '+_'.
    CONCATENATE 'OBJ_NAME LIKE ' l_temp3 INTO l_temp3
      SEPARATED BY space.
  ELSE.
    CONCATENATE 'OBJ_NAME = ' l_temp3 INTO l_temp3
      SEPARATED BY space.
  ENDIF.

  CONCATENATE l_temp1 l_temp2 l_temp3 INTO l_where SEPARATED BY space.
  APPEND l_where TO lt_where.

  PERFORM f_subobject USING u_pgmid u_object u_objnam CHANGING lt_where.

  APPEND ')' TO lt_where.

* Read object in requests
  PERFORM f_read_request USING lt_where abap_true.

  ut_where[] = lt_where[].

ENDFORM.                               " F_SELECTION_SCREEN
*---------------------------------------------------------------------*
*      Form  F_HELP_OBJECT_NAME
*---------------------------------------------------------------------*
FORM f_help_object_name USING u_pgmid  TYPE pgmid
                              u_object TYPE trobjtype
                              u_field  TYPE fieldname
                              u_no_tmp TYPE flag
                     CHANGING u_objnam TYPE c.

  TYPES:
    BEGIN OF ty_values,
      object   TYPE trobjtype,
      obj_name TYPE sobj_name,
    END OF ty_values.

  DATA:
    l_dynprofld TYPE dynfnam,
    lt_where    TYPE ty_where_t,
    lt_values   TYPE TABLE OF ty_values,
    ls_return   TYPE ddshretval,
    lt_return   TYPE dmc_ddshretval_table,
    ls_dynpread TYPE dynpread,
    lt_dynpread TYPE TABLE OF dynpread,
    l_dynnum    TYPE sy-dynnr,
    l_progname  TYPE sy-repid,
    ls_condtab  TYPE hrcond,
    lt_condtab  TYPE TABLE OF hrcond.

  CHECK u_pgmid = 'R3TR'.

  l_progname = sy-cprog.
  l_dynnum   = sy-dynnr.

  ls_dynpread-fieldname = u_field.
  APPEND ls_dynpread TO lt_dynpread.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname             = l_progname
      dynumb             = l_dynnum
      translate_to_upper = abap_true
    TABLES
      dynpfields         = lt_dynpread.

  READ TABLE lt_dynpread INDEX 1 INTO ls_dynpread.

  ls_condtab-field = 'I'.
  ls_condtab-opera = 'EQ'.
  ls_condtab-field = 'PGMID'.
  ls_condtab-low  = 'R3TR'.
  APPEND ls_condtab TO lt_condtab.

  ls_condtab-opera = 'EQ'.
  ls_condtab-field = 'OBJECT'.
  ls_condtab-low  = u_object.
  APPEND ls_condtab TO lt_condtab.

  IF u_no_tmp = 'X'.
    ls_condtab-opera = 'NE'.
    ls_condtab-field = 'DEVCLASS'.
    ls_condtab-low  = '$TMP'.
    APPEND ls_condtab TO lt_condtab.
  ENDIF.

  IF ls_dynpread-fieldvalue CS '*' OR ls_dynpread-fieldvalue CS '+'.
    TRANSLATE ls_dynpread-fieldvalue USING '*%'.
    ls_condtab-opera = 'LK'.
    ls_condtab-field = 'OBJ_NAME'.
    ls_condtab-low  = ls_dynpread-fieldvalue.
    APPEND ls_condtab TO lt_condtab.
  ENDIF.

  CALL FUNCTION 'RH_DYNAMIC_WHERE_BUILD'
    EXPORTING
      dbtable         = 'TADIR'
    TABLES
      condtab         = lt_condtab
      where_clause    = lt_where
    EXCEPTIONS
      empty_condtab   = 1
      no_db_field     = 2
      unknown_db      = 3
      wrong_condition = 4
      OTHERS          = 5.

* Lecture de TADIR
  SELECT object obj_name
    INTO TABLE lt_values
      UP TO 500 ROWS
    FROM tadir
   WHERE (lt_where).

  l_dynprofld = u_field.

* F4 help
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = u_field
      dynpprog        = l_progname
      dynpnr          = l_dynnum
      dynprofield     = l_dynprofld
      value_org       = 'S'
    TABLES
      value_tab       = lt_values
      return_tab      = lt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CHECK lt_return[] IS NOT INITIAL.
  READ TABLE lt_return INDEX 1 INTO ls_return.
  u_objnam = ls_return-fieldval.

ENDFORM.                               " F_HELP_OBJECT_NAME
*---------------------------------------------------------------------*
*      Form  f_selection_screen_object
*---------------------------------------------------------------------*
FORM f_selection_screen_object USING u_object TYPE trobjtype
                            CHANGING u_pgmid  TYPE pgmid
                                     u_objtxt TYPE trtext.

  DATA ls_object_text TYPE ko100.

  CHECK u_object IS NOT INITIAL.

  READ TABLE gt_object_texts INTO ls_object_text
    WITH KEY object = u_object.
  IF sy-subrc <> 0.
*   Sélectionnez un type d'objet valide
    MESSAGE e870(tk).
  ELSE.
    u_pgmid = ls_object_text-pgmid.
    u_objtxt = ls_object_text-text.
  ENDIF.

ENDFORM.                               " F_SELECTION_SCREEN_OBJECT
*---------------------------------------------------------------------*
*      Form  READ_OBJECT_TABLE
*---------------------------------------------------------------------*
FORM read_object_table CHANGING ut_object_texts TYPE tr_object_texts.

  CHECK ut_object_texts[] IS INITIAL.

* Get Object Text
  CALL FUNCTION 'TR_OBJECT_TABLE'
    TABLES
      wt_object_text = ut_object_texts.

  DELETE ut_object_texts WHERE pgmid <> 'R3TR'
                           AND pgmid <> 'R3OB'
                           AND pgmid <> 'LIMU'
                           AND pgmid <> 'CORR'.

  SORT ut_object_texts BY pgmid object.

ENDFORM.                               " READ_OBJECT_TABLE
*---------------------------------------------------------------------*
*      Form  f_read_request
*---------------------------------------------------------------------*
FORM f_read_request USING ut_where TYPE ty_where_t
                          u_flag   TYPE xfeld.

  DATA:
    l_max     TYPE i,
    lr_trkorr TYPE ty_trkorr.

  FIELD-SYMBOLS
    <ls_trkorr> LIKE LINE OF lr_trkorr.

  CHECK ut_where[] IS NOT INITIAL.

  IF u_flag IS INITIAL.
    l_max = 1000000.
  ELSE.
    l_max = 1.
  ENDIF.

  SELECT a~trkorr AS low
    INTO CORRESPONDING FIELDS OF TABLE lr_trkorr
    FROM e071 AS a
    JOIN e070 AS b
      ON a~trkorr = b~trkorr
      UP TO l_max ROWS
   WHERE (ut_where)
     AND as4user IN s_truser
     AND as4date BETWEEN p_date_b AND p_date_e
     AND trfunction IN s_trfnct
     AND korrdev IN s_korrdv
     AND trstatus = 'R'
     AND strkorr = space.
  IF sy-subrc IS NOT INITIAL AND u_flag EQ abap_true.
    MESSAGE e208(00) WITH 'No requests found'(001).
  ENDIF.

  CHECK u_flag IS INITIAL.

  LOOP AT lr_trkorr ASSIGNING <ls_trkorr>.
    <ls_trkorr>-sign = 'I'.
    <ls_trkorr>-option = 'EQ'.
  ENDLOOP.

  APPEND LINES OF lr_trkorr TO gr_trkorr.

  SORT gr_trkorr.
  DELETE ADJACENT DUPLICATES FROM gr_trkorr.

ENDFORM.                               " F_READ_REQUEST
*---------------------------------------------------------------------*
*      Form  f_show_objects
*---------------------------------------------------------------------*
FORM f_show_objects.

  DATA:
    ls_layout   TYPE slis_layout_alv,
    lp_struct   TYPE REF TO data,
    lt_e071     TYPE TABLE OF ty_e071,
    lt_trkorr   TYPE TABLE OF trkorr,
    ls_sort     TYPE slis_sortinfo_alv,
    lt_sort     TYPE slis_t_sortinfo_alv,
    ls_fieldcat TYPE slis_fieldcat_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv. " Field catalog

  FIELD-SYMBOLS:
    <ls_header> TYPE any,
    <lv_field>  TYPE any.

* Create structure = structure of the internal table
  CREATE DATA lp_struct LIKE LINE OF <gt_data>.
  ASSIGN lp_struct->* TO <ls_header>.

  LOOP AT <gt_data> ASSIGNING <ls_header>.
    ASSIGN COMPONENT c_checkbox OF STRUCTURE <ls_header>
                  TO <lv_field>.
    CHECK sy-subrc IS INITIAL.
    CHECK <lv_field> EQ abap_true.
    ASSIGN COMPONENT c_trkorr OF STRUCTURE <ls_header>
                  TO <lv_field>.
    CHECK sy-subrc IS INITIAL.
    APPEND <lv_field> TO lt_trkorr.
  ENDLOOP.

  CHECK lt_trkorr[] IS NOT INITIAL.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_e071
    FROM e071 AS a
    JOIN e070 AS b
      ON a~trkorr = b~trkorr
     FOR ALL ENTRIES IN lt_trkorr
   WHERE a~trkorr = lt_trkorr-table_line.

  DELETE lt_e071 WHERE pgmid = 'CORR' AND object <> 'MERG'.

  CHECK lt_e071 IS NOT INITIAL.

  gt_e071[] = lt_e071[].

  PERFORM delete_dupl.

* Build Sort Table
  ls_sort-up = abap_true.
  ls_sort-fieldname = 'TIMESTAMP'.
  APPEND ls_sort TO lt_sort.

  ls_sort-up = abap_true.
  ls_sort-fieldname = c_trkorr.
  APPEND ls_sort TO lt_sort.

  ls_layout-zebra = abap_true.
  ls_layout-colwidth_optimize = abap_true.
  ls_layout-group_change_edit = abap_true.
  ls_layout-allow_switch_to_list = abap_true.
  ls_layout-box_fieldname = c_checkbox.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'E071'
    CHANGING
      ct_fieldcat      = lt_fieldcat.

  ls_fieldcat-fieldname = 'TIMESTAMP'.
  ls_fieldcat-col_pos = 11.
* ls_fieldcat-edit_mask = '==TSTPS'.
  ls_fieldcat-edit_mask = '==TSTLC'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_user_command  = 'USER_COMMAND_2'
      i_callback_pf_status_set = 'PF_STATUS_SET'
      it_fieldcat              = lt_fieldcat
      it_sort                  = lt_sort
      is_layout                = ls_layout
    TABLES
      t_outtab                 = gt_e071.

ENDFORM.                               " F_SHOW_OBJECTS
*--------------------------------------------------------------------*
*       Form  user_command_2
*--------------------------------------------------------------------*
FORM user_command_2 USING u_ucomm     TYPE syucomm          "#EC CALLED
                          us_selfield TYPE slis_selfield.

  DATA:
    ls_e071    TYPE e071,
    ls_bdcdata TYPE bdcdata,
    lt_bdcdata TYPE TABLE OF bdcdata.

  CASE u_ucomm.
    WHEN '&IC1'.
      READ TABLE gt_e071 INTO ls_e071 INDEX us_selfield-tabindex.
      CHECK sy-subrc IS INITIAL.
      CASE us_selfield-fieldname.
        WHEN c_trkorr.
          CALL FUNCTION 'TR_PRESENT_REQUEST'
            EXPORTING
              iv_trkorr    = ls_e071-trkorr
              iv_highlight = abap_true.
        WHEN 'ACTIVITY'.
          IF ls_e071-activity IS NOT INITIAL.
            CALL FUNCTION 'TR_SHOW_ACTIVITY'
              EXPORTING
                iv_activity = ls_e071-activity.
          ENDIF.
        WHEN OTHERS.
          CASE ls_e071-object.
            WHEN 'FORM'.
*             SAPscript form
              SET PARAMETER ID 'TXF' FIELD ls_e071-obj_name.
              SET PARAMETER ID 'TXL' FIELD 'FR'.
              CALL TRANSACTION 'SE71' USING lt_bdcdata MODE 'A'.
            WHEN 'SSFO'.
              SELECT SINGLE formname
                INTO ls_e071-obj_name
                FROM stxfadm
               WHERE formname = ls_e071-obj_name
                 AND formtype = space.
              IF sy-subrc IS INITIAL.
*               SAP Smart Forms: Name of a Smart Form
                SET PARAMETER ID 'SSFNAME' FIELD ls_e071-obj_name.
*               SAP Smart Forms
                CALL TRANSACTION 'SMARTFORMS'.
              ELSE.
                m_bdc_dynpro 'SAPMSSFO' '0100' '=RB'.
                m_bdc_field  'RB_TX'  abap_true.
                m_bdc_dynpro 'SAPMSSFO' '0100' '/00'.
                m_bdc_field  'SSFSCREEN-TNAME' ls_e071-obj_name.
                CALL TRANSACTION 'SMARTFORMS' USING lt_bdcdata MODE 'E'.
              ENDIF.
            WHEN 'SSST'.
*             SAP Smart Forms: Name of a Smart Style
              SET PARAMETER ID 'SSFSTYLE' FIELD ls_e071-obj_name.
              m_bdc_dynpro 'SAPMSSFO' '0100' '/00'.
              m_bdc_field  'RB_ST'  abap_true.
              CALL TRANSACTION 'SMARTFORMS' USING lt_bdcdata MODE 'E'.
            WHEN 'AQBG'. " query user group
              SET PARAMETER ID 'AQW' FIELD 'G'. " global
              SET PARAMETER ID 'AQB' FIELD ls_e071-obj_name.
              CALL TRANSACTION 'SQ03'.
            WHEN 'AQQU'. " query
              SET PARAMETER ID 'AQW' FIELD 'G'. " global
              SET PARAMETER ID 'AQB' FIELD ls_e071-obj_name(12). " user group
              SET PARAMETER ID 'AQQ' FIELD ls_e071-obj_name+12.
              CALL TRANSACTION 'SQ01'.
            WHEN 'AQSG'. " query info set
              SET PARAMETER ID 'AQW' FIELD 'G'. " global
              SET PARAMETER ID 'AQS' FIELD ls_e071-obj_name.
              CALL TRANSACTION 'SQ02'.
            WHEN 'SCVI'. " screen variant
              SET PARAMETER ID 'TCD' FIELD ls_e071-obj_name.
              SET PARAMETER ID 'STV' FIELD space.
              CALL TRANSACTION 'SHD0'.
            WHEN 'STVI'.
              SET PARAMETER ID 'SCRVAR' FIELD space.
              SET PARAMETER ID 'STV' FIELD ls_e071-obj_name.
              CALL TRANSACTION 'SHD0'.
            WHEN 'CMOD'.
              PERFORM show_cmod USING ls_e071-obj_name(40).
            WHEN OTHERS.
              CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
                EXPORTING
                  iv_pgmid          = ls_e071-pgmid
                  iv_object         = ls_e071-object
                  iv_obj_name       = ls_e071-obj_name
                EXCEPTIONS
                  jump_not_possible = 1
                  OTHERS            = 2.
              IF sy-subrc <> 0.
                MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
              ENDIF.
          ENDCASE.
      ENDCASE.
  ENDCASE.

ENDFORM.                               " USER_COMMAND_2
*---------------------------------------------------------------------*
*      Form SHOW_CMOD
*---------------------------------------------------------------------*
FORM show_cmod USING u_name TYPE sobj_name.

  DATA l_modname TYPE modsap-name.

  l_modname = u_name.

  CALL FUNCTION 'MOD_KUN_MEMBERSCRN'
    EXPORTING
      message = abap_true
      mode    = 'SHOM'
      modname = l_modname.

ENDFORM.                               " SHOW_CMOD
*---------------------------------------------------------------------*
*      Form  F_DATEM
*---------------------------------------------------------------------*
FORM f_datem CHANGING u_date TYPE datum.

  CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
    EXPORTING
      correct_option               = '-'
      date                         = u_date
      factory_calendar_id          = 'Z1' "'FR'
    IMPORTING
      date                         = u_date
    EXCEPTIONS
      calendar_buffer_not_loadable = 1
      correct_option_invalid       = 2
      date_after_range             = 3
      date_before_range            = 4
      date_invalid                 = 5
      factory_calendar_not_found   = 6
      OTHERS                       = 7.
  IF sy-subrc IS NOT INITIAL AND sy-msgid IS NOT INITIAL
  AND sy-subrc <> 6.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                               " F_DATEM
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_trkorr-low.

  PERFORM f_value_request_trkorr CHANGING s_trkorr-low.

*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_trkorr-high.

  PERFORM f_value_request_trkorr CHANGING s_trkorr-high.

*---------------------------------------------------------------------*
*       Form  f_value_request_trkorr
*---------------------------------------------------------------------*
*      <--PV_TRKORR  text
*---------------------------------------------------------------------*
FORM f_value_request_trkorr CHANGING pv_trkorr TYPE trkorr.

  CALL FUNCTION 'TR_F4_REQUESTS'
    EXPORTING
      iv_trkorr_pattern   = pv_trkorr
      iv_trstatus         = 'R'
    IMPORTING
      ev_selected_request = pv_trkorr.

ENDFORM.                               "F_VALUE_REQUEST_TRKORR
*---------------------------------------------------------------------*
*      Form  f_modify_color
*---------------------------------------------------------------------*
FORM f_modify_color.

  DATA lv_int TYPE i.

  FIELD-SYMBOLS:
    <ls_header> TYPE any,
    <ls_color>  TYPE lvc_s_scol,
    <lt_color>  TYPE lvc_t_scol.

  LOOP AT <gt_data> ASSIGNING <ls_header>.

    ASSIGN COMPONENT c_colortab OF STRUCTURE <ls_header>
                                          TO <lt_color>.
    CHECK <lt_color> IS ASSIGNED.
    LOOP AT <lt_color> ASSIGNING <ls_color>.
      <ls_color>-color-int = lv_int.
    ENDLOOP.
    IF lv_int = 1.
      lv_int = 0.
    ELSE.
      lv_int = 1.
    ENDIF.



  ENDLOOP.

ENDFORM.                               " F_MODIFY_COLOR
*---------------------------------------------------------------------*
*      Form  INITIALIZATION
*---------------------------------------------------------------------*
FORM initialization.

  DATA ls_syslst TYPE tmscsyslst.

  v_100 = '@0G@'.
  v_101 = '@0D@'.
  v_102 = '@0E@'.
  v_103 = '@0F@'.
  v_104 = '@0B@'.
  v_105 = '@0C@'.
  v_200 = '@4B@'.
  v_201 = '@4D@'.
  v_202 = '@7D@'.
  text_100 = 'Start date'(100).
  text_101 = 'End date'(101).
  text_102 = 'Transport Requests'(102).
  text_103 = 'Owner of the Request'(103).
  text_104 = 'Request Category'(104).
  text_105 = 'Type of request'(105).
  text_106 = 'Date DD.MM.YYYY'(106).
  text_107 = 'No Color'(107).
  text_108 = 'ALV List'(108).
  text_109 = 'No icon for return code'(109).
  text_110 = 'No return code'(110).
  text_111 = 'No User'(111).
  CONCATENATE sy-sysid 'only' INTO text_112 SEPARATED BY space.
  text_113 = 'No client'.
  text_114 = 'With sub-objects'.
  text_115 = 'Debug'.
  text_116 = 'Background Mode'.

  DO.
    READ TABLE gt_syslst INTO ls_syslst INDEX sy-index.
    IF sy-subrc IS NOT INITIAL.EXIT.ENDIF.
    CASE sy-tabix.
      WHEN 1.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p01. p_01 = 'X'.
      WHEN 2.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p02. p_02 = 'X'.
      WHEN 3.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p03. p_03 = 'X'.
      WHEN 4.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p04. p_04 = 'X'.
      WHEN 5.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p05. p_05 = 'X'.
      WHEN 6.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p06. p_06 = 'X'.
      WHEN 7.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p07. p_07 = 'X'.
      WHEN 8.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p08. p_08 = 'X'.
      WHEN 9.  CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p09. p_09 = 'X'.
      WHEN 10. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p10. p_10 = 'X'.
      WHEN 11. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p11. p_11 = 'X'.
      WHEN 12. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p12. p_12 = 'X'.
      WHEN 13. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p13. p_13 = 'X'.
      WHEN 14. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p14. p_14 = 'X'.
      WHEN 15. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p15. p_15 = 'X'.
      WHEN 16. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p16. p_16 = 'X'.
      WHEN 17. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p17. p_17 = 'X'.
      WHEN 18. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p18. p_18 = 'X'.
      WHEN 19. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p19. p_19 = 'X'.
      WHEN 20. CONCATENATE ls_syslst-sysnam '-' ls_syslst-systxt INTO text_p20. p_20 = 'X'.
    ENDCASE.
  ENDDO.

  PERFORM sel_tvarv.

ENDFORM.                               " INITIALIZATION
*---------------------------------------------------------------------*
*      Form  F_SUBOBJECT
*---------------------------------------------------------------------*
FORM f_subobject USING u_pgmid  TYPE pgmid
                       u_object TYPE trobjtype
                       u_objnam TYPE ty_objnam
              CHANGING ut_where TYPE ty_where_t.

  DATA:
    l_temp1 TYPE char100,
    l_temp2 TYPE char100,
    l_temp3 TYPE char100,
    l_where TYPE char200,
    ls_e071 TYPE e071,
    ls_vrso TYPE vrso,
    lt_vrso TYPE TABLE OF vrso.

  CHECK p_ssobj  IS NOT INITIAL AND
        u_pgmid  IS NOT INITIAL AND
        u_object IS NOT INITIAL AND
        u_objnam IS NOT INITIAL AND
        u_objnam NS '*+'.

  ls_e071-pgmid = 'R3TR'.
  ls_e071-object = u_object.
  ls_e071-obj_name = u_objnam.

  CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ'
    EXPORTING
      e071_obj        = ls_e071
    TABLES
      obj_tab         = lt_vrso
    EXCEPTIONS
      not_versionable = 1
      OTHERS          = 2.

  CHECK sy-subrc IS INITIAL.

  LOOP AT lt_vrso INTO ls_vrso.
    MOVE 'OR ( PGMID = ''LIMU'' AND' TO l_temp1.

    CONCATENATE '''' ls_vrso-objtype '''' INTO l_temp2.
    CONCATENATE 'OBJECT = ' l_temp2 'AND' INTO l_temp2
      SEPARATED BY space.

    CONCATENATE '''' ls_vrso-objname '''' INTO l_temp3.
    IF ls_vrso-objname CS '*'.
      TRANSLATE l_temp3 USING '*%'.
      CONCATENATE 'OBJ_NAME LIKE ' l_temp3 ')' INTO l_temp3
        SEPARATED BY space.
    ELSEIF ls_vrso-objname CS '+'.
      TRANSLATE l_temp3 USING '+_'.
      CONCATENATE 'OBJ_NAME LIKE ' l_temp3 ')' INTO l_temp3
        SEPARATED BY space.
    ELSE.
      CONCATENATE 'OBJ_NAME = ' l_temp3 ')' INTO l_temp3
        SEPARATED BY space.
    ENDIF.

    CONCATENATE l_temp1 l_temp2 l_temp3 INTO l_where SEPARATED BY space.
    APPEND l_where TO ut_where.
  ENDLOOP.

ENDFORM.                               " F_SUBOBJECT
*---------------------------------------------------------------------*
*      Form  SEL_DESEL
*---------------------------------------------------------------------*
FORM sel_desel USING pv_flag TYPE flag.

  DATA ls_syslst TYPE tmscsyslst.

  DO.
    READ TABLE gt_syslst INTO ls_syslst INDEX sy-index.
    IF sy-subrc IS NOT INITIAL.EXIT.ENDIF.
    CASE sy-tabix.
      WHEN  1. IF text_p01 IS NOT INITIAL. p_01 = pv_flag. ENDIF.
      WHEN  2. IF text_p02 IS NOT INITIAL. p_02 = pv_flag. ENDIF.
      WHEN  3. IF text_p03 IS NOT INITIAL. p_03 = pv_flag. ENDIF.
      WHEN  4. IF text_p04 IS NOT INITIAL. p_04 = pv_flag. ENDIF.
      WHEN  5. IF text_p05 IS NOT INITIAL. p_05 = pv_flag. ENDIF.
      WHEN  6. IF text_p06 IS NOT INITIAL. p_06 = pv_flag. ENDIF.
      WHEN  7. IF text_p07 IS NOT INITIAL. p_07 = pv_flag. ENDIF.
      WHEN  8. IF text_p08 IS NOT INITIAL. p_08 = pv_flag. ENDIF.
      WHEN  9. IF text_p09 IS NOT INITIAL. p_09 = pv_flag. ENDIF.
      WHEN 10. IF text_p10 IS NOT INITIAL. p_10 = pv_flag. ENDIF.
      WHEN 11. IF text_p11 IS NOT INITIAL. p_11 = pv_flag. ENDIF.
      WHEN 12. IF text_p12 IS NOT INITIAL. p_12 = pv_flag. ENDIF.
      WHEN 13. IF text_p13 IS NOT INITIAL. p_13 = pv_flag. ENDIF.
      WHEN 14. IF text_p14 IS NOT INITIAL. p_14 = pv_flag. ENDIF.
      WHEN 15. IF text_p15 IS NOT INITIAL. p_15 = pv_flag. ENDIF.
      WHEN 16. IF text_p16 IS NOT INITIAL. p_16 = pv_flag. ENDIF.
      WHEN 17. IF text_p17 IS NOT INITIAL. p_17 = pv_flag. ENDIF.
      WHEN 18. IF text_p18 IS NOT INITIAL. p_18 = pv_flag. ENDIF.
      WHEN 19. IF text_p19 IS NOT INITIAL. p_19 = pv_flag. ENDIF.
      WHEN 20. IF text_p20 IS NOT INITIAL. p_20 = pv_flag. ENDIF.
    ENDCASE.
  ENDDO.

ENDFORM.                               " SEL_DESEL
*---------------------------------------------------------------------*
*      Form  DELETE_DUPL
*---------------------------------------------------------------------*
FORM delete_dupl.

  DATA:
    ls_e071  TYPE e071,
    ls_e071s TYPE ty_e071,
    ls_vrso  TYPE vrso,
    lt_vrso  TYPE TABLE OF vrso.

  LOOP AT gt_e071 INTO ls_e071s.
    CONCATENATE ls_e071s-as4date ls_e071s-as4time INTO ls_e071s-timestamp.
    MODIFY gt_e071 FROM ls_e071s.
  ENDLOOP.

  CHECK lines( gt_e071 ) > 1.

  SORT gt_e071 BY timestamp DESCENDING.

  LOOP AT gt_e071 INTO ls_e071s.
    DELETE gt_e071 WHERE trkorr <> ls_e071s-trkorr
                     AND timestamp < ls_e071s-timestamp
                     AND pgmid = ls_e071s-pgmid
                     AND object = ls_e071s-object
                     AND obj_name = ls_e071s-obj_name.
  ENDLOOP.

  LOOP AT gt_e071 INTO ls_e071s WHERE pgmid = 'R3TR'.
    CLEAR : ls_e071, lt_vrso.
    ls_e071-pgmid = 'R3TR'.
    ls_e071-object = ls_e071s-object.
    ls_e071-obj_name = ls_e071s-obj_name.

    CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ'
      EXPORTING
        e071_obj        = ls_e071
      TABLES
        obj_tab         = lt_vrso
      EXCEPTIONS
        not_versionable = 1
        OTHERS          = 2.
    CHECK sy-subrc IS INITIAL.

    LOOP AT lt_vrso INTO ls_vrso.
      DELETE gt_e071 WHERE trkorr <> ls_e071s-trkorr
                       AND timestamp < ls_e071s-timestamp
                       AND object = ls_vrso-objtype
                       AND obj_name = ls_vrso-objname.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                               " DELETE_DUPL
*---------------------------------------------------------------------*
*      Form  SEL_TVARV
*---------------------------------------------------------------------*
FORM sel_tvarv.

  DATA:
    l_low     TYPE tvarv_val,
    l_high    TYPE tvarv_val,
    l_str_tmp TYPE char100,
    l_syst    TYPE char7,
    lt_syst   TYPE TABLE OF char7.

* Read System-Color in table TVARV
  SELECT SINGLE low high INTO (l_low, l_high) FROM tvarv
   WHERE name = c_zsyst AND numb = c_0000 AND type = c_p AND sign = ''.
  CONCATENATE l_low l_high INTO l_str_tmp.
  SPLIT l_str_tmp AT '/' INTO TABLE lt_syst.

  CHECK lt_syst IS NOT INITIAL.

  PERFORM sel_desel USING space.

  LOOP AT lt_syst INTO l_syst.
    READ TABLE gt_syslst WITH KEY sysnam = l_syst(3) TRANSPORTING NO FIELDS.
    CASE sy-tabix.
      WHEN  1. IF text_p01 IS NOT INITIAL. p_01 = 'X'. ENDIF.
      WHEN  2. IF text_p02 IS NOT INITIAL. p_02 = 'X'. ENDIF.
      WHEN  3. IF text_p03 IS NOT INITIAL. p_03 = 'X'. ENDIF.
      WHEN  4. IF text_p04 IS NOT INITIAL. p_04 = 'X'. ENDIF.
      WHEN  5. IF text_p05 IS NOT INITIAL. p_05 = 'X'. ENDIF.
      WHEN  6. IF text_p06 IS NOT INITIAL. p_06 = 'X'. ENDIF.
      WHEN  7. IF text_p07 IS NOT INITIAL. p_07 = 'X'. ENDIF.
      WHEN  8. IF text_p08 IS NOT INITIAL. p_08 = 'X'. ENDIF.
      WHEN  9. IF text_p09 IS NOT INITIAL. p_09 = 'X'. ENDIF.
      WHEN 10. IF text_p10 IS NOT INITIAL. p_10 = 'X'. ENDIF.
      WHEN 11. IF text_p11 IS NOT INITIAL. p_11 = 'X'. ENDIF.
      WHEN 12. IF text_p12 IS NOT INITIAL. p_12 = 'X'. ENDIF.
      WHEN 13. IF text_p13 IS NOT INITIAL. p_13 = 'X'. ENDIF.
      WHEN 14. IF text_p14 IS NOT INITIAL. p_14 = 'X'. ENDIF.
      WHEN 15. IF text_p15 IS NOT INITIAL. p_15 = 'X'. ENDIF.
      WHEN 16. IF text_p16 IS NOT INITIAL. p_16 = 'X'. ENDIF.
      WHEN 17. IF text_p16 IS NOT INITIAL. p_17 = 'X'. ENDIF.
      WHEN 18. IF text_p16 IS NOT INITIAL. p_18 = 'X'. ENDIF.
      WHEN 19. IF text_p16 IS NOT INITIAL. p_19 = 'X'. ENDIF.
      WHEN 20. IF text_p16 IS NOT INITIAL. p_20 = 'X'. ENDIF.
    ENDCASE.
  ENDLOOP.

ENDFORM.                               " SEL_TVARV
*---------------------------------------------------------------------*
*      Form  MOD_TVARV
*---------------------------------------------------------------------*
FORM mod_tvarv.

  DATA:
    ls_tvarv  TYPE tvarv,
    ls_seltab TYPE rsparams,
    lt_seltab TYPE TABLE OF rsparams.

  SELECT SINGLE * INTO ls_tvarv FROM tvarv
   WHERE name = c_zsyst AND numb = c_0000 AND type = c_p.
  IF sy-subrc IS NOT INITIAL.
    ls_tvarv-name = c_zsyst.
    ls_tvarv-type = c_p.
    ls_tvarv-low = sy-sysid.
    INSERT tvarv FROM ls_tvarv.
  ENDIF.

  ls_seltab-selname = 'I1'.
  ls_seltab-kind    = c_p.
  ls_seltab-sign    = 'I'.
  ls_seltab-option  = 'EQ'.
  ls_seltab-low     = c_zsyst.
  APPEND ls_seltab TO lt_seltab.

  CALL FUNCTION 'RSDU_CALL_SE16'
    EXPORTING
      i_tablename = 'TVARV'
    TABLES
      i_t_seltab  = lt_seltab.

ENDFORM.                               " MOD_TVARV
* Text element
*001  No requests found
*100  Start date
*101  End date
*102  Transport Requests
*103  Owner of the Request
*104  Request Category
*105  Type of request
*106  Date DD.MM.YYYY
*107  No Color
*108  ALV List
*109  No icon for return code
*110  No return code
*111  No User
*113  No client detail

*BL0  Parameters
*BL1  Objects
*BL2  Options
***************** END OF PROGRAM Z_ALV_OVERVIEW_REQUEST ***************
*&---------------------------------------------------------------------*
*&      Form  CHECK_TRANSPORT_ERRORS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_transport_errors
  USING it_systems TYPE tty_systems.

  DATA lv_have_ok_status    TYPE flag.
  DATA lv_have_init_status  TYPE flag.
  DATA lv_have_error_status TYPE flag.

  LOOP AT <gt_data> ASSIGNING FIELD-SYMBOL(<ls_header>).
    lv_have_ok_status    = abap_false.
    lv_have_error_status = abap_false.
    lv_have_init_status  = abap_false.

    IF lines( it_systems ) LT lines( gt_syslst ).
      PERFORM send_alarm
        USING <ls_header>.
    ENDIF.

    LOOP AT it_systems ASSIGNING FIELD-SYMBOL(<ff_system>).
*    LOOP AT gt_syslst ASSIGNING FIELD-SYMBOL(<ff_system>).
      ASSIGN COMPONENT <ff_system> && '_RETCODE' OF STRUCTURE <ls_header>
        TO FIELD-SYMBOL(<ff_retcode>).
      CHECK sy-subrc EQ 0.
      ASSIGN COMPONENT <ff_system> OF STRUCTURE <ls_header>
        TO FIELD-SYMBOL(<ff_system_time>).
      CHECK sy-subrc EQ 0.

      IF ( <ff_retcode> EQ space
        OR <ff_retcode> EQ '0000'
        OR <ff_retcode> EQ '0004'
        OR <ff_retcode> EQ icon_led_green
        OR <ff_retcode> EQ icon_led_yellow )
        AND <ff_system_time> IS NOT INITIAL.
        lv_have_ok_status = abap_true.
      ELSEIF ( <ff_retcode> EQ '0008'
        OR <ff_retcode> EQ '0012'
        OR <ff_retcode> EQ icon_led_red )
        AND <ff_system_time> IS NOT INITIAL.
        lv_have_error_status = abap_true.
      ELSEIF (  <ff_retcode> EQ space
            OR <ff_retcode> EQ 'INIT'
            OR <ff_retcode> EQ '0000'
            OR <ff_retcode> EQ icon_led_inactive )
        AND <ff_system_time> IS INITIAL.
*        AND <ff_system_time> EQ 0.
        lv_have_init_status = abap_true.
      ENDIF.

      IF "lv_have_ok_status EQ abap_true
        lv_have_error_status EQ abap_true.
        EXIT.
      ENDIF.

      IF lv_have_init_status EQ abap_true
      AND ( lv_have_ok_status EQ abap_true
       OR lv_have_error_status EQ abap_true ).
        EXIT.
      ENDIF.
    ENDLOOP.

    IF "lv_have_ok_status EQ abap_true
      lv_have_error_status EQ abap_true.
      " Отправить сообщение автору запроса
      PERFORM send_alarm
        USING <ls_header>.
    ENDIF.

    IF lv_have_init_status EQ abap_true
      AND ( lv_have_ok_status EQ abap_true
       OR lv_have_error_status EQ abap_true ).
      PERFORM send_alarm
        USING <ls_header>.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " CHECK_TRANSPORT_ERRORS
*&---------------------------------------------------------------------*
*&      Form  SEND_ALARM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_<LS_HEADER>  text
*----------------------------------------------------------------------*
FORM send_alarm
  USING is_header TYPE any.

  CHECK p_bgmod EQ abap_true.

  ASSIGN COMPONENT 'TRKORR' OF STRUCTURE is_header TO FIELD-SYMBOL(<ff_trkorr>).
  CHECK sy-subrc EQ 0.

* Message body and subject
  DATA:  lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL.
  DATA: lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL. "document object
  DATA : i_text TYPE bcsy_text. "Table for body
  DATA : w_text LIKE LINE OF i_text. "work area for message body

  DATA lt_requests_h TYPE  trwbo_request_headers.

  CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
    EXPORTING
      iv_trkorr          = <ff_trkorr>
    IMPORTING
      et_request_headers = lt_requests_h
    EXCEPTIONS
      invalid_input      = 1
      OTHERS             = 2.

  DATA lt_recipients TYPE TABLE OF sy-uname.

  LOOP AT lt_requests_h ASSIGNING FIELD-SYMBOL(<fs_requests_h>).
    READ TABLE lt_recipients TRANSPORTING NO FIELDS
      WITH KEY table_line = <fs_requests_h>-as4user.
    IF sy-subrc NE 0.
      APPEND INITIAL LINE TO lt_recipients ASSIGNING FIELD-SYMBOL(<fs_recipient>).
      <fs_recipient> = <fs_requests_h>-as4user.
    ENDIF.
  ENDLOOP.


  CLASS cl_bcs DEFINITION LOAD.
  lo_send_request = cl_bcs=>create_persistent( ).

*Set body
  w_text-line = `Просьба проверить журнал переноса запроса ` && <ff_trkorr>.
  APPEND w_text TO i_text.
  CLEAR w_text.
  w_text-line = 'Запрос импортирован в один из продуктивов с ошибками или импортирован не во все продуктивы'.
  APPEND w_text TO i_text.
  CLEAR w_text.
*Create Email document
  lo_document = cl_document_bcs=>create_document( "create document
  i_type = 'TXT' "Type of document HTM, TXT etc
  i_text =  i_text "email body internal table
  i_subject = `Транспорт запроса `  && <ff_trkorr> ). "email subject here p_sub input parameter

* Pass the document to send request
  lo_send_request->set_document( lo_document ).

*Set Sender
  DATA: lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL.
  TRY.
      lo_sender = cl_sapuser_bcs=>create( sy-uname ). "sender is the logged in user
* Set sender to send request
      lo_send_request->set_sender(
        EXPORTING
           i_sender = lo_sender ).
*    CATCH CX_ADDRESS_BCS.
****Catch exception here
  ENDTRY.

**Set recipient
  DATA: lo_recipient TYPE REF TO if_recipient_bcs VALUE IS INITIAL.
  lo_recipient = cl_sapuser_bcs=>create( i_user = 'YUGOV_AS' ).
  TRY.
      lo_send_request->add_recipient(
          EXPORTING
          i_recipient = lo_recipient
          i_express = 'X' ).
  ENDTRY.

  LOOP AT lt_recipients ASSIGNING <fs_recipient>.
    lo_recipient = cl_sapuser_bcs=>create( i_user = <fs_recipient> ).

    TRY.
        lo_send_request->add_recipient(
            EXPORTING
            i_recipient = lo_recipient
            i_express = 'X' ).
    ENDTRY.
  ENDLOOP.

*Set immediate sending
  TRY.
      CALL METHOD lo_send_request->set_send_immediately
        EXPORTING
          i_send_immediately = 'X'.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
  ENDTRY.


  TRY.
** Send email
      lo_send_request->send(
        EXPORTING
          i_with_error_screen = 'X' ).
      COMMIT WORK.
*      IF sy-subrc = 0.
*        WRITE :/ 'Mail sent successfully'.
*      ENDIF.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
  ENDTRY.

ENDFORM.                    " SEND_ALARM