ABAPZXXORDENES

Para conocer de un simple vistazo como y dónde están las órdenes, aún se tiene que optimizar esto

El dynpro 100, sólo tiene un CuCtr CC_ALV_01 y el G_OKCODE

El Estatus MAIN0100, sólo tiene el botón de BACK

  1. REPORT z_xx_prg_ordenes.
  2. CONSTANTS: c_vers                  TYPE string    VALUE 'v1.22'  ##NO_TEXT,
  3.            c_copyleft              TYPE string    VALUE 'CopyLeft 2023 Alex Bergonzini' ##NO_TEXT,
  4. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  5. *--[
  6. *--[ 1.02 20230613 Anyadido split de ventanas + pasado SCID
  7. *--[ 1.03 20230614 Ocultamos las columnas de SYS+RC todo en un SRC + BOTones
  8. *--[ 1.04 20230614 Cambiado totalmente el motor de busqueda, ahora lo recupera todo bien.
  9. *--[               + Navegacion al objeto + Un monton de nuevas funcionalidades
  10. *--[ 1.05 20230616 + UP/DOWN Ordenes
  11. *--[ 1.06 20230619 + Edicion de los objetos de las ordenes
  12. *--[ 1.07 20230620 + Corregido BUG de ordenes solitarias
  13. *--[ 1.08 20230621 + Corregido auto-tcode
  14. *--[ 1.09 20230622 + Change username + TCODES + POPUP To Release
  15. *--[ 1.10 20231102 + Gestion de versiones
  16. *--[ 1.11 20231219 + Anyaadido cambio de propietario automatico
  17. *--[ 1.12 20240103 + ALV Con contenido de claves R3TR-TABU/CDAT
  18. *--[ 1.13 20240104 + Anyadido boton de borrado de objetos + maquillajes
  19. *--[ 1.14 20240105 + Anyadimos objetos a las ordenes y correcciones
  20. *--[ 1.15 20240201 + Anyadida funcionalidad de cambio de título
  21. *--[ 1.16 20240205 + Anyadidos menus contextuales de raton
  22. *--[ 1.17 20240312 + Anyadidos filtros basicos de WB - CUS
  23. *--[ 1.18 20240315 + Versiones en las órdenes
  24. *--[ 1.19 20240322 + Error en busqueda de objetos
  25. *--[ 1.20 20240404 + Exportacion de las ordenes al clipboard + Transporte
  26. *--[ 1.21 20240411 + Boton Documentacion
  27. *--[ 1.22 20240508 + Desc de objecto + rendimiento + busca extensiva de FUNC
  28. *--[ Revisar la funcion: TRINT_TDR_USER_COMMAND
  29. *--[ ** NO DISCLAIMER ** NO WARRANTY ** NO CRY ** NO REGRETS **
  30. *--[
  31. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  32. *--[ Translate me
  33.            C_There_can_be_only_one TYPE string    VALUE 'Debes seleccionar 1' ##NO_TEXT,
  34.            c_quick_01              TYPE iconquick VALUE 'Liberar' ##NO_TEXT,
  35.            c_quick_02              TYPE iconquick VALUE 'Crear orden nueva' ##NO_TEXT,
  36.            c_quick_03              TYPE iconquick VALUE 'Fusionar.' ##NO_TEXT,
  37.            c_quick_04              TYPE iconquick VALUE 'Incluir objetos de otra orden' ##NO_TEXT,
  38.            c_quick_05              TYPE iconquick VALUE 'SE09 - Mis ordenes' ##NO_TEXT,
  39.            c_quick_06              TYPE iconquick VALUE 'Verificar pre-transporte' ##NO_TEXT,
  40.            c_quick_07              TYPE iconquick VALUE 'STMS Gestion del STMS' ##NO_TEXT,
  41.            c_quick_08              TYPE iconquick VALUE 'Bye Bye Bye' ##NO_TEXT,
  42.            c_quick_09              TYPE iconquick VALUE 'Borrar orden' ##NO_TEXT,
  43.            c_quick_10              TYPE iconquick VALUE 'Descargar orden' ##NO_TEXT,
  44.            c_quick_11              TYPE iconquick VALUE 'Subir orden' ##NO_TEXT,
  45.            c_quick_12              TYPE iconquick VALUE 'Cambiar titular' ##NO_TEXT,
  46.            c_quick_13              TYPE iconquick VALUE 'Refrescar' ##NO_TEXT,
  47.            c_quick_14              TYPE iconquick VALUE 'Verificacion' ##NO_TEXT,
  48.            c_quick_15              TYPE iconquick VALUE 'Anyadir tarea' ##NO_TEXT,
  49.            c_quick_16              TYPE iconquick VALUE 'Eliminar objeto' ##NO_TEXT,
  50.            c_quick_17              TYPE iconquick VALUE 'Anyadir objetos' ##NO_TEXT,
  51.            c_quick_18              TYPE iconquick VALUE 'Cambiar titulo' ##NO_TEXT,
  52.            c_quick_19              TYPE iconquick VALUE 'Enviar a Clipboard' ##NO_TEXT,
  53.            c_quick_20              TYPE iconquick VALUE 'Transportar' ##NO_TEXT,
  54.            c_quick_21              TYPE iconquick VALUE 'Extras' ##NO_TEXT,
  55.            c_quick_22              TYPE iconquick VALUE 'Documentacion' ##NO_TEXT,
  56.  
  57.            C_avl_01                TYPE scrtext_l VALUE 'Tarea' ##NO_TEXT,
  58.            C_avl_02                TYPE scrtext_l VALUE 'Propietario' ##NO_TEXT,
  59.            C_avl_03                TYPE scrtext_l VALUE 'Nombre Propietario' ##NO_TEXT,
  60.            C_avl_04                TYPE scrtext_l VALUE 'ID' ##NO_TEXT,
  61.            C_avl_05                TYPE scrtext_l VALUE 'Tipo Objeto' ##NO_TEXT,
  62.            C_avl_06                TYPE scrtext_l VALUE 'Ultima version' ##NO_TEXT,
  63.            C_avl_07                TYPE scrtext_l VALUE 'en fecha' ##NO_TEXT,
  64.            C_avl_08                TYPE scrtext_l VALUE 'Objeto' ##NO_TEXT,
  65.            C_avl_09                TYPE scrtext_l VALUE 'Orden' ##NO_TEXT,
  66.            C_avl_10                TYPE scrtext_l VALUE 'LOG' ##NO_TEXT,
  67.            C_avl_11                TYPE scrtext_l VALUE 'Tipo' ##NO_TEXT,
  68.            C_avl_12                TYPE scrtext_l VALUE 'Sistema' ##NO_TEXT,
  69.            C_avl_13                TYPE scrtext_l VALUE 'Fecha' ##NO_TEXT,
  70.            C_avl_14                TYPE scrtext_l VALUE 'Hora'  ##NO_TEXT,
  71.            C_avl_15                TYPE scrtext_l VALUE 'RC' ##NO_TEXT,
  72.            C_avl_16                TYPE scrtext_l VALUE 'Descripcion' ##NO_TEXT,
  73.            c_avl_17                TYPE scrtext_l VALUE 'G.Versiones' ##NO_TEXT,
  74.            c_avl_18                TYPE scrtext_l VALUE 'Clave' ##NO_TEXT,
  75.            c_avl_19                TYPE scrtext_l VALUE 'IMG' ##NO_TEXT,
  76.            c_avl_20                TYPE scrtext_l VALUE 'Pos.' ##NO_TEXT,
  77.            c_avl_21                TYPE scrtext_l VALUE 'Doc' ##NO_TEXT,
  78.            c_avl_22                TYPE scrtext_l VALUE 'Descripcion' ##NO_TEXT,
  79.  
  80.            c_pop_01                TYPE scrtext_l VALUE 'En Dialogo' ##NO_TEXT,
  81.            c_pop_02                TYPE scrtext_l VALUE 'En Fondo' ##NO_TEXT,
  82.            c_pop_03                TYPE scrtext_l VALUE 'Mensaje confirmacion' ##NO_TEXT,
  83.            c_pop_04                TYPE scrtext_l VALUE 'Ver LOG' ##NO_TEXT,
  84.            c_pop_05                TYPE scrtext_l VALUE 'Simulacion' ##NO_TEXT,
  85.  
  86.            c_mark_fields_01(22)    VALUE 'Opciones de liberacion' ##NO_TEXT,
  87.            c_mark_fields_02(22)    VALUE 'Bajo tu responsalidad' ##NO_TEXT,
  88.  
  89.            c_msg_01                TYPE scrtext_l VALUE 'Tarea creada' ##NO_TEXT,
  90.            c_msg_02                TYPE scrtext_l VALUE 'Cambios realizados' ##NO_TEXT,
  91.            c_msg_03                TYPE scrtext_l VALUE 'Error, orden no permitida.' ##NO_TEXT,
  92.            c_msg_04                TYPE scrtext_l VALUE 'Datos exportados al clipboard' ##NO_TEXT,
  93.            c_msg_05                TYPE scrtext_l VALUE 'Máquina de destino' ##NO_TEXT,
  94.  
  95.            c_main_tit              TYPE tstct-ttext VALUE 'Gestion de ordenes de transporte' ##NO_TEXT,
  96.            C_scrfname              TYPE scrfname    VALUE 'CC_ALV_01' ##NO_TEXT,
  97.            c_tcodes                TYPE string      VALUE 'ZE09|ZSE09|ZE10|ZSE10|ZE01|ZSE01' ##NO_TEXT.
  98.  
  99. CLASS lcl_event_handler DEFINITION DEFERRED.
  100.  
  101. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  102. *--[ INCLUDE Z_XX_I_ORDENES_TOP
  103. TABLES: sscrfields.  "<-- Para los botones en el PF-STATUS
  104.  
  105. TYPES: BEGIN OF ty_orden,
  106.          trkorr          TYPE e071-trkorr,
  107.          as4user         TYPE as4user,
  108.          as4user_TXT(80),
  109.          pgmid           TYPE e071-pgmid,
  110.          object          TYPE e071-object,
  111.          desc            TYPE c LENGTH 100,
  112.          trkorr_v        TYPE e071-trkorr,
  113.          fecha           TYPE datum,
  114.          vers            TYPE char6,
  115.          obj_name        TYPE e071-obj_name,
  116.        END OF ty_orden,
  117.  
  118.        BEGIN OF ty_sys,
  119.          sys(30) ,
  120.        END OF ty_sys,
  121.  
  122. *--[ Se puede hacer dinamico, pero es mas facil trabajar
  123. *--[ de forma estatica.
  124.        BEGIN OF ty_Zxx_st_ordenes,
  125.          trkorr             TYPE  trkorr,
  126.          log                TYPE char10,
  127.          doc                TYPE char10,
  128.          orden              TYPE  trkorr,
  129.          tarea              TYPE  trkorr,
  130.          as4user            TYPE  as4user,
  131.          as4user_TXT(80),
  132.          trfunction         TYPE trfunction,
  133.          trfunction_txt(30),
  134.          sys01              TYPE  sysysid,
  135.          ico01              TYPE  char10,
  136.          dat01              TYPE  datum,
  137.          tim01              TYPE  uzeit,
  138.          rc01               TYPE  sysubrc,
  139.          sys02              TYPE  sysysid,
  140.          ico02              TYPE  char10,
  141.          dat02              TYPE  datum,
  142.          tim02              TYPE  uzeit,
  143.          rc02               TYPE  sysubrc,
  144.          sys03              TYPE  sysysid,
  145.          ico03              TYPE  char10,
  146.          dat03              TYPE  datum,
  147.          tim03              TYPE  uzeit,
  148.          rc03               TYPE  sysubrc,
  149.          sys04              TYPE  sysysid,
  150.          ico04              TYPE  char10,
  151.          dat04              TYPE  datum,
  152.          tim04              TYPE  uzeit,
  153.          rc04               TYPE  sysubrc,
  154.          as4text            TYPE  as4text,
  155.        END OF ty_Zxx_st_ordenes,
  156.  
  157.        BEGIN OF ty_release,
  158.          dialog(1),
  159.          fondo(1),
  160.          succes(1),
  161.          log(1),
  162.          simula(1),
  163.        END OF ty_release,
  164.  
  165.  
  166.        BEGIN OF ty_menu,
  167.          id       TYPE sy-ucomm,
  168.          function TYPE ui_func,
  169.          text     TYPE gui_text,
  170.          icon     TYPE icon_d,
  171.          ftype    TYPE cua_ftyp,
  172.          disabled TYPE cua_active,
  173.          hidden   TYPE cua_active,
  174.        END OF ty_menu,
  175.  
  176.        BEGIN OF ty_toolbar,
  177.          alv   TYPE i,
  178.          orden TYPE i,
  179.          boton TYPE stb_button,
  180.          menu  TYPE ty_menu,
  181.        END OF ty_toolbar,
  182.  
  183.        BEGIN OF ty_alv,
  184.          grid    TYPE REF TO cl_gui_alv_grid,
  185.          layout  TYPE lvc_s_layo,
  186.          variant TYPE disvariant,
  187.          fcat    TYPE lvc_t_fcat,
  188.          event   TYPE REF TO lcl_event_handler,
  189.        END OF ty_alv.
  190.  
  191. DATA: t_menus         TYPE STANDARD TABLE OF ty_toolbar,
  192.       s_menus         LIKE LINE OF t_menus,
  193.  
  194.       st_system_types LIKE ko100  OCCURS 100,
  195.  
  196.       t_ALV           TYPE STANDARD TABLE OF ty_alv,
  197.       g_ALV           LIKE LINE OF t_ALV.
  198.  
  199. DATA: g_okcode        TYPE sy-ucomm,
  200.       t_fcode         TYPE TABLE OF sy-ucomm,
  201.       e_rc            TYPE i,
  202.       index_rows      TYPE lvc_t_row,
  203.       G_rele_param    TYPE ty_release,
  204.       tt_system       TYPE STANDARD TABLE OF tmscsys,
  205.  
  206. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  207. *--[ Definiciones ALV
  208.       cc_01           TYPE REF TO cl_gui_custom_container,
  209.  
  210.       cm_01           TYPE scrfname VALUE C_scrfname,
  211.  
  212.       G_Split         TYPE REF TO cl_gui_splitter_container,
  213.       G_Split_2       TYPE REF TO cl_gui_splitter_container,
  214.  
  215.       t_tab_00        TYPE STANDARD TABLE OF ty_sys,
  216.       t_tab_01        TYPE STANDARD TABLE OF ty_Zxx_st_ordenes,
  217.       t_tab_03        TYPE STANDARD TABLE OF ty_Zxx_st_ordenes,
  218.       t_tab_02        TYPE STANDARD TABLE OF ty_orden,
  219.       l_tab_01        LIKE LINE OF t_tab_01,
  220.  
  221.       dir_trans(1024),
  222.  
  223.       gt_toolbar      TYPE  ui_functions.
  224.  
  225.  
  226.  
  227. CLASS lcl_event_handler DEFINITION FINAL.
  228.   PUBLIC SECTION .
  229.  
  230.     DATA: p_id_list TYPE sysubrc,
  231.           g_row_id  TYPE lvc_s_row.
  232.  
  233.     METHODS:
  234.  
  235.       handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
  236.         IMPORTING e_object, " e_interactive,
  237.  
  238.       handle_menu_button
  239.         FOR EVENT menu_button OF cl_gui_alv_grid
  240.         IMPORTING e_object e_ucomm,
  241.  
  242.       handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
  243.         IMPORTING e_ucomm .
  244.  
  245.     METHODS:handle_hotspot_click
  246.       FOR EVENT hotspot_click OF cl_gui_alv_grid
  247.       IMPORTING e_row_id e_column_id,
  248.  
  249.       handle_context_menu
  250.         FOR EVENT context_menu_request OF cl_gui_alv_grid
  251.         IMPORTING e_object.
  252.  
  253.   PRIVATE SECTION.
  254.  
  255. *    DATA: lt_std_fcodes TYPE ui_functions,
  256. *          lt_own_fcodes TYPE ui_functions.
  257.  
  258.     METHODS:
  259.       get_id_list.
  260.  
  261. ENDCLASS.
  262.  
  263. DATA: G_event_01 TYPE REF TO lcl_event_handler,
  264.       G_event_02 TYPE REF TO lcl_event_handler.
  265.  
  266. CLASS lcl_event_handler IMPLEMENTATION .
  267.  
  268.   METHOD get_id_list.
  269.     p_id_list  = 1.
  270.     IF me = t_alv[ 2 ]-event. p_id_list = 2. ENDIF.
  271.   ENDMETHOD.
  272.  
  273. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  274. *--[ AVL
  275.   METHOD handle_hotspot_click.
  276.  
  277.     me->get_id_list( ). PERFORM handle_hotspot USING e_row_id e_column_id me->p_id_list.
  278.   ENDMETHOD.
  279.  
  280.   METHOD handle_toolbar.
  281.  
  282.     me->get_id_list( ). PERFORM handle_toolbar USING e_object me->p_id_list.
  283.   ENDMETHOD .
  284.  
  285.   METHOD handle_user_command .
  286.  
  287.     me->get_id_list( ). PERFORM handle_user_command USING e_ucomm me->p_id_list CHANGING g_row_id.
  288.  
  289.   ENDMETHOD.
  290.  
  291.   METHOD handle_context_menu.
  292.     me->get_id_list( ). PERFORM handle_context_menu USING e_object CHANGING g_row_id.
  293.   ENDMETHOD.
  294.  
  295.   METHOD handle_menu_button.
  296.     me->get_id_list( ).  PERFORM handle_menu_button USING e_object e_ucomm me->p_id_list.
  297.   ENDMETHOD.
  298.  
  299. ENDCLASS.
  300.  
  301. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  302. *--[ INCLUDE Z_XX_I_ORDENES_SEL.
  303.  
  304. TABLES: e071, e070, e07t, doktl.
  305. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
  306.   SELECT-OPTIONS: s_orden FOR e071-trkorr OBLIGATORY,
  307.  
  308.  
  309.                   s_obj    FOR e071-obj_name,
  310.                   s_user  FOR e070-as4user,
  311.                   s_date  FOR e070-as4date.
  312.   SELECTION-SCREEN SKIP 1.
  313.   SELECT-OPTIONS:
  314.                 s_as4tex FOR e07t-as4text LOWER CASE,
  315.                 s_DOKTXT FOR doktl-doktext LOWER CASE.
  316.   SELECTION-SCREEN SKIP 1.
  317.  
  318.   PARAMETERS: p_norel AS CHECKBOX DEFAULT abap_true,
  319.               p_rel   AS CHECKBOX DEFAULT abap_true,
  320.               p_wb    AS CHECKBOX DEFAULT abap_true,
  321.               p_cus   AS CHECKBOX DEFAULT abap_true,
  322.               p_vers  AS CHECKBOX DEFAULT abap_true.
  323.  
  324.   SELECTION-SCREEN SKIP 1.
  325. *--[ Como no sirve la lectura de la cola de transporte, ya que pueden haber
  326. *--[ m&#65533;s maquinas que no est&#65533;n en la capa de transporte y se transporte,
  327. *--[ lo pongo a manija, para que el luser lo modifique (VER INITIALIZATION)
  328.   PARAMETERS: p_stms(30) OBLIGATORY. "<-- No sirve la cola de transportes... MEC!
  329.  
  330. SELECTION-SCREEN END OF BLOCK b01.
  331. SELECTION-SCREEN SKIP 1.
  332.  
  333. SELECTION-SCREEN COMMENT /01(40) g_vers.
  334.  
  335. SELECTION-SCREEN FUNCTION KEY 1.
  336. SELECTION-SCREEN FUNCTION KEY 2.
  337. SELECTION-SCREEN FUNCTION KEY 3.
  338. SELECTION-SCREEN FUNCTION KEY 4.
  339. SELECTION-SCREEN FUNCTION KEY 5.
  340.  
  341. *--[ Modules DYNPRO
  342. MODULE pbo_0100 OUTPUT.  PERFORM pbo_0100. ENDMODULE.
  343. MODULE pai_0100 INPUT. PERFORM pai_0100. ENDMODULE.
  344.  
  345. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  346. *--[ INCLUDE Z_XX_I_ORDENES_EVE.
  347. AT SELECTION-SCREEN.
  348.   PERFORM eve_start_of_selection.
  349.  
  350. INITIALIZATION.
  351.   PERFORM eve_initialization.
  352.  
  353. START-OF-SELECTION.
  354.   PERFORM data_load.
  355.  
  356. END-OF-SELECTION.
  357.   PERFORM data_list.
  358.  
  359. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  360. *--[ INCLUDE Z_XX_I_ORDENES_FRM2.
  361. FORM data_list.
  362.   CALL SCREEN '0100'.
  363. ENDFORM.
  364.  
  365. FORM eve_start_of_selection.
  366.   CASE sscrfields-ucomm.
  367.     WHEN 'FC01'. CALL TRANSACTION 'SE09'.
  368.     WHEN 'FC02'. PERFORM create_new_request IN PROGRAM rddm0001 USING 'KWTCEO'.
  369.     WHEN 'FC03'. PERFORM BUT_rename_owner.
  370.   ENDCASE.
  371. ENDFORM.
  372.  
  373.  
  374. FORM BUT_Re_version USING p_orden.
  375.  
  376.   TYPES: BEGIN OF ty_e07t,
  377.            desc(55),
  378.            beg(1),
  379.            vers     TYPE n LENGTH 3,
  380.            end(1),
  381.          END OF ty_e07t,
  382.  
  383.          BEGIN OF ty_tot,
  384.            obj_name TYPE e071-obj_name,
  385.            num      TYPE i,
  386.          END OF ty_tot.
  387.  
  388.   DATA: l_txt TYPE ty_e07t,
  389.         t_tot TYPE STANDARD TABLE OF ty_tot,
  390.         l_tot LIKE LINE OF t_tot.
  391.   CHECK p_vers = abap_true.
  392.   CLEAR l_txt.
  393.   REFRESH t_tot.
  394.   l_txt-beg = '['. l_txt-end = ']'.
  395.  
  396.   SELECT SINGLE as4text INTO @DATA(l_txt_old) FROM e07t
  397.      WHERE trkorr = @p_orden.
  398.  
  399.   CHECK l_txt_old NP '*[+++]'.
  400.  
  401.   l_txt-desc = l_txt_old.
  402.  
  403.   DATA(l_desc_old) = |{ l_txt-desc }%|. "<-- Buscamos una anterior
  404.   DATA(l_desc_old_2) = |{ l_txt-desc }%[___]|.
  405.   DATA l_new TYPE string.
  406. *--[ Evitamos las que no tienen numeración primero
  407.   SELECT a~as4text INTO l_new     FROM e07t AS a
  408.     INNER JOIN e070 AS b
  409.     ON b~strkorr = a~trkorr
  410.  
  411.     UP TO 1 ROWS
  412.  
  413.     WHERE a~langu   = sy-langu
  414.       AND a~as4text LIKE l_desc_old_2
  415.       AND a~trkorr NE p_orden
  416.     ORDER BY a~trkorr DESCENDING.
  417.   ENDSELECT.
  418.   IF l_new IS INITIAL.
  419. *--[ Si es nueva, buscamos la última
  420.     SELECT a~as4text INTO l_new     FROM e07t AS a
  421.       INNER JOIN e070 AS b
  422.       ON b~strkorr = a~trkorr
  423.  
  424.       UP TO 1 ROWS
  425.  
  426.       WHERE a~langu   = sy-langu
  427.         AND a~as4text LIKE l_desc_old
  428.         AND a~trkorr NE p_orden
  429.       ORDER BY a~trkorr DESCENDING.
  430.     ENDSELECT.
  431.   ENDIF.
  432.  
  433.  
  434.   IF sy-subrc EQ 0 OR l_new IS NOT INITIAL.
  435.     IF l_new CP '*[+++]'.
  436.       l_txt = l_new.
  437.       l_txt-vers += 1.
  438.     ELSE.
  439.       l_txt-desc = l_new.
  440.       l_txt-vers = '001'.
  441.     ENDIF.
  442.  
  443.     UPDATE e07t
  444. SET as4text = l_txt
  445.  WHERE trkorr  = p_orden
  446.    AND langu   = sy-langu.
  447.  
  448.  
  449.   ELSE.
  450. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  451. *--[ Buscamos a la antigua usanza
  452.  
  453.     SELECT b~obj_name FROM e070 AS a
  454.       INNER JOIN e071 AS b
  455.       ON b~trkorr = a~trkorr
  456.       INTO CORRESPONDING FIELDS OF TABLE t_tot
  457.       WHERE a~strkorr   = p_orden.
  458.  
  459.     SORT t_tot. DELETE ADJACENT DUPLICATES FROM t_tot.
  460.  
  461.     LOOP AT t_tot ASSIGNING FIELD-SYMBOL(<f_tot>).
  462.  
  463.       SELECT COUNT( * ) INTO <f_tot>-num FROM e071   WHERE obj_name = <f_tot>-obj_name.
  464.  
  465.     ENDLOOP.
  466.  
  467.     SORT t_tot BY num DESCENDING.
  468.     TRY.
  469.         l_txt-vers = t_tot[ 1 ]-num.
  470.  
  471.         UPDATE e07t
  472.         SET as4text = l_txt
  473.           WHERE trkorr  = p_orden
  474.             AND langu   = sy-langu.
  475.       CATCH cx_root.
  476.     ENDTRY.
  477.  
  478.   ENDIF.
  479.  
  480. ENDFORM.
  481.  
  482. FORM but_rename_owner.
  483. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  484. *--[ Eliminamos la propiedad de la orden
  485.   SELECT a~trkorr, b~as4user FROM e070 AS a
  486.     INNER JOIN e070 AS b
  487.     ON b~sTRKORR = a~trkorr AND
  488.        b~as4user NE a~as4user
  489.           WHERE a~as4user = @sy-uname AND
  490.                a~trstatus IN ('D', 'L') AND
  491.                a~strkorr IS INITIAL
  492.     ORDER BY a~trkorr
  493.     INTO TABLE @DATA(t_0).
  494.  
  495. *--[ Eliminamos duplicados
  496.   LOOP AT t_0 INTO DATA(l_0).
  497.     DELETE t_0 WHERE trkorr = l_0-trkorr AND  as4user NE l_0-as4user.
  498.   ENDLOOP.
  499. *--[ Renombramos
  500.   LOOP AT t_0 INTO l_0.
  501.     PERFORM BUT_Re_version USING l_0-trkorr.
  502.     UPDATE e070
  503.     SET as4user = l_0-as4user
  504.       WHERE trkorr  = l_0-trkorr.
  505.     AT LAST.
  506.       MESSAGE s398(00) WITH c_msg_02.
  507.     ENDAT.
  508.   ENDLOOP.
  509. ENDFORM.
  510.  
  511. FORM eve_initialization.
  512.  
  513.   g_vers = c_vers.
  514.   sscrfields-functxt_01 = |@10@ SE09|.
  515.   sscrfields-functxt_02 = |@0Y@ Orden|.
  516.   sscrfields-functxt_03 = |@4F@ Cambiar Propietario+Version|.
  517.  
  518.   S_orden-sign = 'I'. S_orden-option = 'CP'. S_orden-low = sy-sysid && 'K*'. APPEND s_orden.
  519.   s_user-sign = 'I'.  s_user-option  = 'EQ'. s_user-low  = sy-uname. APPEND s_user.
  520.   s_date-sign = 'I'.  s_date-option  = 'BT'. s_date-low = sy-datum - 15. s_date-high = sy-datum.
  521. *  s_date-low = sy-datum - 30.
  522.   APPEND s_date.
  523.   p_rel = abap_false.
  524.   p_norel = abap_true.
  525.  
  526. *--[ Ver comentario en el par&#65533;metro
  527.   IF sy-host CP 'g*'.
  528.     P_stms = 'DS4>QS4>TS4>PS4'.
  529.   ELSE.
  530.     P_stms = 'DS4>IS4>PS4'.
  531.   ENDIF.
  532.  
  533.   CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_QUEUE'
  534.     EXPORTING
  535.       iv_count_only      = abap_true
  536.       iv_monitor         = abap_true
  537.       iv_progress_min    = 1
  538.       iv_progress_max    = 100
  539.       iv_expiration_date = sy-datum
  540.       iv_allow_expired   = abap_true
  541.     TABLES
  542.       tt_system          = tt_system
  543.     EXCEPTIONS
  544.       read_config_failed = 1
  545.       OTHERS             = 2.
  546.   IF sy-subrc <> 0.
  547. * Who cares!
  548.   ENDIF.
  549.  
  550.   CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'DIR_TRANS'
  551.                    ID 'VALUE' FIELD dir_trans.
  552.   PERFORM eve_initialization_tcode. "Egg Drop
  553.   PERFORM cfg_toolbar_menu.
  554.   DO 3 TIMES. APPEND g_alv TO t_alv. ENDDO.
  555.   PERFORM get_system_types IN PROGRAM sapltr_objects    TABLES st_system_types.
  556. ENDFORM.
  557.  
  558. FORM eve_initialization_tcode.
  559.   DATA: l_tstct  TYPE tstct.
  560.  
  561.   SPLIT c_tcodes AT '|' INTO TABLE DATA(t_tcodes).
  562.  
  563.   LOOP AT t_tcodes INTO DATA(l_di).
  564.     SELECT SINGLE * FROM tstct INTO CORRESPONDING FIELDS OF l_tstct
  565.          WHERE tcode = l_di.
  566.     CHECK sy-subrc NE 0.
  567.     l_tstct-tcode = l_di.
  568.     l_TSTCT-ttext = c_main_tit.
  569.     CALL FUNCTION 'RPY_TRANSACTION_INSERT'
  570.       EXPORTING
  571.         transaction                   = l_tstct-tcode
  572.         program                       = sy-repid
  573.         dynpro                        = '1000'
  574.         language                      = sy-langu
  575.         development_class             = '$TMP'
  576.         transaction_type              = 'R'
  577.         shorttext                     = l_TSTCT-ttext
  578.         professionel_user_transaction = abap_true
  579.         html_enabled                  = abap_true
  580.         java_enabled                  = abap_true
  581.         wingui_enabled                = abap_true
  582.       EXCEPTIONS
  583.         cancelled                     = 1
  584.         already_exist                 = 2
  585.         permission_error              = 3
  586.         name_not_allowed              = 4
  587.         name_conflict                 = 5
  588.         illegal_type                  = 6
  589.         object_inconsistent           = 7
  590.         db_access_error               = 8
  591.         OTHERS                        = 9.
  592.  
  593.   ENDLOOP.
  594. ENDFORM.
  595.  
  596. FORM data_load.
  597.   DATA: t_cofile TYPE ctslg_cofile,
  598.         r_status TYPE RANGE OF e070-trstatus.
  599.  
  600.   DATA(mi_i) = COND #( WHEN p_norel = abap_true THEN 'I' ELSE 'E' ).
  601.   r_status = VALUE #( ( sign = mi_i option = 'EQ' low = 'D' )
  602.                       ( sign = mi_i option = 'EQ' low = 'L' )
  603.                     ).
  604.  
  605.   mi_i = COND #( WHEN p_rel = abap_true THEN 'I' ELSE 'E' ).
  606.   r_status = VALUE #( BASE r_status ( sign = mi_i option = 'EQ' low = 'O' )
  607.                       ( sign = mi_i option = 'EQ' low = 'R' )
  608.                       ( sign = mi_i option = 'EQ' low = 'N' )
  609.                       ).
  610.  
  611.   REFRESH: t_tab_02, t_tab_00, t_tab_01.
  612.   SPLIT p_stms AT '>' INTO TABLE DATA(t_TS).
  613.   T_tab_00 = VALUE #( FOR ls IN t_ts ( sys = ls ) ).
  614.  
  615.  
  616. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  617. *--[ Filtramos primero por documentación
  618.   IF s_DOKTXT IS NOT INITIAL.
  619.     DATA(ss_orden) = s_orden[].
  620.     REFRESH s_orden.
  621.     SELECT object AS low,
  622.            'I' AS sign,
  623.            'EQ' AS option
  624.       FROM doktl
  625.      APPENDING CORRESPONDING FIELDS OF TABLE @s_orden
  626.       WHERE id = 'TA' AND
  627.             typ = 'T' AND
  628.             doktext IN @s_DOKTXT.
  629.     IF sy-subrc NE 0.
  630.       s_orden[] = ss_orden[].
  631.     ENDIF.
  632.  
  633.   ENDIF.
  634.  
  635.  
  636. *--[ Buscamos objetos r&#65533;pido!
  637.   IF lines( s_obj ) > 0.
  638.  
  639.  
  640. *--[ Si son funciones, buscamos algo más.
  641.     SELECT DISTINCT funcname FROM funct INTO TABLE @DATA(t_funct)
  642.       WHERE funcname IN @s_obj.
  643.     IF sy-subrc EQ 0 AND lines( t_funct ) > 0.
  644.       LOOP AT t_FUNCT INTO DATA(l_funct).
  645.         DATA: l_funcname  TYPE rs38l-name,
  646.               l_GROUP     TYPE rs38l-area,
  647.               l_INCLUDE   TYPE rs38l-include,
  648.               l_prg_group TYPE trdir-name.
  649.         l_FUNCNAME = l_funct-funcname.
  650.         CALL FUNCTION 'FUNCTION_EXISTS'
  651.           EXPORTING
  652.             funcname = l_funcname
  653.           IMPORTING
  654.             group    = l_group
  655.             include  = l_include
  656.           EXCEPTIONS
  657.             OTHERS   = 1.
  658.         IF sy-subrc EQ 0.
  659.           s_obj = 'IEQ'. S_obj-low =  l_include. APPEND s_obj.
  660.           s_obj = 'IEQ'. S_obj-low =  l_group. APPEND s_obj.
  661.  
  662.           CALL FUNCTION 'RS_PROGNAME_CONCATENATE'
  663.             EXPORTING
  664.               fugr_group          = l_group
  665.             IMPORTING
  666.               fugr_progname_group = l_prg_group
  667.             EXCEPTIONS
  668.               OTHERS              = 2.
  669.           IF sy-subrc EQ 0.
  670.             s_obj = 'IEQ'. S_obj-low =  l_prg_group. APPEND s_obj.
  671.           ENDIF.
  672.  
  673.         ENDIF.
  674.  
  675.       ENDLOOP.
  676.     ENDIF.
  677.  
  678.     SELECT * FROM e071 INTO TABLE @DATA(t_objetos)
  679.       WHERE  obj_name IN @s_obj.
  680.  
  681.     IF s_DOKTXT IS INITIAL.
  682.        refresh s_orden.
  683.     endif.
  684.  
  685.         SELECT trkorr as LOW ,
  686.                'I' as SIGN,
  687.                'EQ' as option
  688.            FROM e071 APPENDING CORRESPONDING FIELDS OF table @s_orden
  689.         WHERE  obj_name IN @s_obj.
  690.  
  691.  
  692.  
  693.   ENDIF.
  694.  
  695. *--[ Estamos en una b&#65533;quedas compleja, ya que la tabla E070, puede tener &#65533;rdenes y tareas
  696. *--[ y las diferentes b&#65533;squedas de objeto, luser, descripci&#65533;n lo hacen complejo.
  697. *--[ Puede (seguro) tener fallos
  698.   SELECT strkorr AS orden
  699.          trkorr  AS tarea
  700.          as4user
  701.          as4date AS dat01
  702.   FROM e070 INTO CORRESPONDING FIELDS OF TABLE t_tab_01 ##TOO_MANY_ITAB_FIELDS
  703.   WHERE trkorr IN s_orden AND
  704.         strkorr NE e070-strkorr
  705.         AND trstaTus IN r_status.
  706.  
  707.  
  708. *--[ Recuperamos todas las ordenes
  709.   SELECT trkorr  AS orden
  710.          as4user
  711.          as4date AS dat01
  712.   FROM e070 APPENDING CORRESPONDING FIELDS OF TABLE t_tab_01 ##TOO_MANY_ITAB_FIELDS
  713.   WHERE trkorr IN s_orden AND
  714.        strkorr EQ e070-strkorr
  715.        AND trstaTus IN r_status.
  716. *--[ Eliminamos &#65533;rdenes duplicadas
  717.  
  718. *--[ Nos cargamos las fechas
  719.   DELETE t_tab_01 WHERE as4user NOT IN s_user OR
  720.                         dat01 NOT IN s_date.
  721.  
  722.   SORT t_tab_01 BY tarea DESCENDING.
  723.  
  724.   LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<fo>) WHERE tarea IS NOT INITIAL.
  725.     DELETE t_tab_01 WHERE orden = <fo>-orden AND tarea IS INITIAL.
  726.   ENDLOOP.
  727.  
  728. *--[ A&#241;adimos todas las tareas de las &#65533;rdenes
  729.   IF lines( t_tab_01 ) > 0.
  730.     SELECT strkorr AS orden
  731.            trkorr AS tarea
  732.            as4user
  733.            as4date AS Dat01
  734.       FROM e070
  735.     INTO CORRESPONDING FIELDS OF TABLE t_tab_03
  736.     FOR ALL ENTRIES IN t_tab_01
  737.     WHERE strkorr = t_tab_01-orden AND trstaTus IN r_status.
  738.  
  739.  
  740. *--[ Buscamos las &#65533;rdenes solitarias
  741.     SELECT trkorr AS orden,
  742.            as4user,
  743.            trfunction AS trfunction,
  744.            as4date AS Dat01 FROM e070
  745.         INTO TABLE @DATA(t_tab_04)
  746.     FOR ALL ENTRIES IN @t_tab_01
  747.     WHERE trkorr = @t_tab_01-orden AND trstaTus IN @r_status AND strkorr = @e070-trkorr.
  748.     LOOP AT t_tab_04 INTO DATA(l_4).
  749.       TRY.
  750.           DATA(l_lobo) = t_tab_03[ orden = l_4-orden ].
  751.         CATCH cx_root.
  752.           CLEAR l_tab_01.
  753.           MOVE-CORRESPONDING l_4 TO l_tab_01. APPEND l_tab_01 TO t_tab_03.
  754.           CONTINUE.
  755.       ENDTRY.
  756.       DELETE t_tab_04 WHERE orden = l_4-orden.
  757.     ENDLOOP.
  758.  
  759.     SORT t_tab_03.
  760.     DELETE ADJACENT DUPLICATES FROM t_tab_03.
  761.  
  762.     t_tab_01[] = t_tab_03[].
  763.   ENDIF.
  764.  
  765.   SORT t_tab_01 BY trkorr ASCENDING.
  766.   DELETE ADJACENT DUPLICATES FROM t_tab_01.
  767.   REFRESH t_tab_03.
  768.  
  769.  
  770.   LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<f>).
  771.     AT FIRST.
  772.       SELECT domvalue_l AS value,
  773.              ddtext     AS value_TXT
  774.          FROM dd07t
  775.         INTO TABLE @DATA(t_func)
  776.           WHERE domname = 'TRFUNCTION' AND
  777.                 ddlanguage = @sy-langu.
  778.       LOOP AT t_func ASSIGNING FIELD-SYMBOL(<ftf>) WHERE value CA 'KWT'.
  779.         <ftf>-value_TXT = COND #( WHEN <ftf>-value = 'K' THEN 'WB' ELSE COND #( WHEN <ftf>-value = 'W' THEN 'CUS' ELSE 'TC' ) ).
  780.       ENDLOOP.
  781.     ENDAT.
  782.  
  783.     READ TABLE t_tab_03 TRANSPORTING NO FIELDS WITH KEY orden = <f>-orden.
  784.     CHECK sy-subrc NE 0.
  785.  
  786.     <f>-trkorr = <f>-orden.
  787.     IF <f>-as4text IS INITIAL.
  788.       SELECT SINGLE as4text INTO <f>-as4text FROM e07t
  789.       WHERE trkorr  = <f>-trkorr
  790.       AND langu   = sy-langu.
  791.     ENDIF.
  792.     IF <f>-as4text NOT IN s_as4tex.
  793.       DELETE t_tab_01 WHERE Orden = <f>-orden.
  794.       CONTINUE.
  795.     ENDIF.
  796.  
  797. *--[ Buscamos los objetos, va a ser muy lento
  798.     IF lines( s_obj ) > 0.
  799. *    SELECT single b~trkorr, b~strkorr FROM e071 AS a
  800. *      INNER JOIN e070 AS b
  801. *      ON b~trkorr = a~trkorr OR
  802. *         b~strkorr = a~trkorr
  803. *      INTO @data(t_aux)
  804. *    WHERE
  805. *      obj_name IN @s_obj and
  806. *      ( b~trkorr = @<f>-orden or
  807. *        b~Strkorr = @<f>-orden or
  808. *        b~trkorr = @<f>-tarea ).
  809.       LOOP AT t_objetos INTO DATA(l_objetos) WHERE trkorr = <f>-orden OR trkorr = <f>-tarea.
  810.         EXIT.
  811.       ENDLOOP.
  812.       IF sy-subrc NE 0.
  813.         DELETE t_tab_01 WHERE Orden = <f>-orden AND  trkorr = <f>-tarea.
  814.         CONTINUE.
  815.       ENDIF.
  816.     ENDIF.
  817.  
  818.     FREE t_cofile.
  819.     TRY.
  820.         CALL FUNCTION 'TR_READ_GLOBAL_INFO_OF_REQUEST'
  821.           EXPORTING
  822.             iv_trkorr = <f>-trkorr
  823.           IMPORTING
  824.             es_cofile = t_cofile
  825.             ev_user   = <f>-as4user.
  826.       CATCH cx_root.
  827.         CONTINUE. "<-- Por si peta
  828.     ENDTRY.
  829.  
  830.     IF <f>-as4user IS INITIAL.
  831.       SELECT SINGLE as4user as4date  FROM e070 INTO (<f>-as4user, <f>-dat01)
  832.         WHERE trkorr  = <f>-orden.
  833.  
  834.     ENDIF.
  835.  
  836.     PERFORM GET_USEr USING <f>-as4user CHANGING <f>-as4user_TXT.
  837.  
  838.     LOOP AT t_COFILE-systems INTO DATA(l_dat).
  839.  
  840.       READ TABLE t_tab_00 TRANSPORTING NO FIELDS WITH KEY sys = l_dat-SYStemid.
  841.       IF sy-subrc NE 0.
  842.         CONTINUE.
  843.       ENDIF.
  844. *--[ Gloria a los field-symbols
  845.       DATA(l_val) = '<f>-SYS0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fSYS>).
  846.       l_val = '<f>-DAT0' && sy-tabix.  CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fDAT>).
  847.       l_val = '<f>-TIM0' && sy-tabix.  CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fTIM>).
  848.       l_val = '<f>-RC0' && sy-tabix.  CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fRC>).
  849.       l_val = '<f>-ICO0' && sy-tabix.  CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fico>).
  850.  
  851.       <fsys> = l_dat-SYStemid.
  852.       DATA(l_save) = abap_false.
  853.       LOOP AT l_dat-steps INTO DATA(l_steps).
  854.         CASE l_steps-stepid.
  855. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  856. *--[ Esto seguramente se tendr&#65533; que ampliar
  857.           WHEN 'E'. l_save = abap_true.
  858.           WHEN 'G'. l_save = abap_true.
  859.           WHEN 'V'. l_save = abap_true.
  860.         ENDCASE.
  861.         CHECK l_save = abap_true.
  862. *--[ Esto es para quedarnos con la &#65533;ltima entrada en tablas
  863.         DATA(l_lin) = lines( l_steps-actions ).
  864.         <fdat> = l_steps-actions[ l_lin ]-date.
  865.         <ftim> = l_steps-actions[ l_lin ]-time.
  866.         <fRC>  = l_steps-actions[ l_lin ]-rc.
  867.         CASE <frc>.
  868.           WHEN 0.      <fico> = icon_green_light.
  869.           WHEN 4.      <fico> = icon_yellow_light.
  870.           WHEN 8.      <fico> = icon_red_light.
  871.           WHEN OTHERS. <fico> = icon_cancel.
  872.         ENDCASE.
  873.         CLEAR l_save.
  874.  
  875.       ENDLOOP.
  876.     ENDLOOP.
  877.     IF NOT <f>-ico01 IS INITIAL.
  878.       <f>-log = icon_display_text.
  879.     ENDIF.
  880.  
  881. *--[ No me queda mas remedio que buscar again
  882.     SELECT SINGLE trfunction INTO <f>-trfunction FROM e070
  883.       WHERE trkorr     = <f>-trkorr.
  884.  
  885.     <f>-trfunction_txt = t_func[ value = <f>-trfunction ]-value_txt.
  886.     IF p_wb NE abap_true. CHECK <f>-trfunction_txt NE 'WB'. ENDIF.
  887.     IF p_cus NE abap_true. CHECK <f>-trfunction_txt NE 'CUS'. ENDIF.
  888.     SELECT SINGLE dokversion INTO @DATA(l_doc) FROM dokhl
  889.       WHERE id     = 'TA'
  890.         AND object = @<f>-trkorr
  891.         AND langu  = @sy-langu
  892.         AND typ    = 'T'.
  893.     IF sy-subrc EQ 0.
  894.       <f>-doc = icon_document.
  895.     ENDIF.
  896.  
  897.  
  898.     APPEND <f> TO t_tab_03.
  899.   ENDLOOP.
  900.   t_tab_01[] = t_tab_03[].
  901. *--[ Las primeras serán las últimas
  902.   SORT t_tab_01 BY as4user ASCENDING sys01 ASCENDING trfunction ASCENDING trkorr DESCENDING.
  903.  
  904.   sy-pagno = lines( t_tab_01 ).
  905.   MESSAGE s580(00) WITH sy-pagno '' '' ''.
  906.  
  907. ENDFORM.
  908.  
  909. FORM pbo_0100.
  910.   SET PF-STATUS 'MAIN0100' EXCLUDING t_fcode.
  911.   SET TITLEBAR 'TIT01' WITH c_main_tit c_vers.
  912.  
  913.   CHECK cc_01 IS INITIAL.
  914.  
  915.   t_alv[ 1 ]-layout-sel_mode = 'A'.
  916.   t_alv[ 1 ]-layout-zebra = abap_true.
  917.   t_alv[ 1 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '1'.
  918.   t_alv[ 2 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '2'.
  919.   t_alv[ 3 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '3'.
  920.   t_alv[ 3 ]-layout = t_alv[ 1 ]-layout.
  921.   t_alv[ 2 ]-layout = t_alv[ 1 ]-layout.
  922. *    t_alv[ 1 ]-layout-cwidth_opt = abap_true.
  923.   t_alv[ 2 ]-layout-cwidth_opt = abap_false.
  924.  
  925.   cc_01 = NEW  cl_gui_custom_container( container_name = cm_01 ).
  926.  
  927.   G_SPlIT   = NEW cl_gui_splitter_container( parent = cc_01
  928.                                              rows = 2
  929.                                              columns = 1 ).
  930.   G_SPlIT_2 = NEW cl_gui_splitter_container( parent = G_SPlIT->get_container( row = 2 column = 1 )
  931.                                              rows = 1
  932.                                              columns = 2 ).
  933.  
  934.   t_alv[ 1 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split->get_container( row = 1 column = 1 ) ).
  935.   t_alv[ 2 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split_2->get_container( row = 1 column = 1 ) ).
  936.   t_alv[ 3 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split_2->get_container( row = 1 column = 2 ) ).
  937.  
  938.   g_split->set_row_height( id = 2 height = 0  ).
  939.   g_split_2->set_column_width( id = 2 width = 0  ).
  940.  
  941.   PERFORM ALV_field_catalog.
  942.  
  943.   PERFORM alv_remove_buttons.
  944.  
  945.   t_alv[ 1 ]-grid->set_table_for_first_display(
  946.     EXPORTING
  947.       is_variant           = t_alv[ 1 ]-variant
  948.       is_layout            = t_alv[ 1 ]-layout
  949.       i_save               = 'A'
  950.       it_toolbar_excluding = gt_toolbar
  951.     CHANGING
  952.       it_fieldcatalog      = t_alv[ 1 ]-fcat "gt_field
  953.       it_outtab            = t_tab_01 ).
  954.  
  955.  
  956.   t_alv[ 2 ]-grid->set_table_for_first_display(
  957.     EXPORTING
  958.       is_variant           = t_alv[ 2 ]-variant
  959.       is_layout            = t_alv[ 2 ]-layout
  960.       i_save               = 'A'
  961.       it_toolbar_excluding = gt_toolbar
  962.     CHANGING
  963.       it_fieldcatalog      = t_alv[ 2 ]-fcat "gt_field
  964.       it_outtab            = t_tab_02 ).
  965.  
  966.   t_alv[ 1 ]-event = NEW lcl_event_handler( ).
  967.   g_alv = t_alv[ 1 ].
  968.   SET HANDLER g_alv-event->handle_toolbar       FOR t_alv[ 1 ]-grid.
  969.   SET HANDLER g_alv-event->handle_user_command  FOR t_alv[ 1 ]-grid.
  970.   SET HANDLER g_alv-event->handle_menu_button   FOR t_alv[ 1 ]-grid.
  971.   SET HANDLER g_alv-event->handle_hotspot_click FOR t_alv[ 1 ]-grid.
  972.   SET HANDLER g_alv-event->handle_context_menu  FOR t_alv[ 1 ]-grid.
  973.   g_alv-grid->set_toolbar_interactive( ).
  974.  
  975.   t_alv[ 2 ]-event = NEW lcl_event_handler( ).
  976.   g_alv = t_alv[ 2 ].
  977.   SET HANDLER g_alv-event->handle_toolbar       FOR t_alv[ 2 ]-grid.
  978.   SET HANDLER g_alv-event->handle_user_command  FOR t_alv[ 2 ]-grid.
  979.   SET HANDLER g_alv-event->handle_hotspot_click FOR t_alv[ 2 ]-grid.
  980.   g_alv-grid->set_toolbar_interactive( ).
  981.  
  982. ENDFORM.
  983.  
  984. FORM ALV_field_catalog.
  985.   "REFRESH: t_alv[ 1 ]-fcat, t_alv[ 2 ]-fcat.
  986.  
  987.   t_alv[ 3 ]-fcat = VALUE #( ( fieldname = 'AS4POS'       scrtext_l = C_avl_20 outputlen = 5 )
  988.                        ( fieldname = 'TABKEY'       scrtext_l = C_avl_18 outputlen = 100 ) ).
  989.  
  990.   t_alv[ 2 ]-fcat = VALUE #( ( fieldname = 'TRKORR'       scrtext_l = C_avl_01  hotspot = abap_true )
  991.                        ( fieldname = 'AS4USER'      scrtext_l = C_avl_02 )
  992.                        ( fieldname = 'AS4USER_TXT'  scrtext_l = C_avl_03 )
  993.                        ( fieldname = 'PGMID'        scrtext_l = C_avl_04 )
  994.                        ( fieldname = 'OBJECT'       scrtext_l = C_avl_05 )
  995.                        ( fieldname = 'DESC'         scrtext_l = c_avl_22 )
  996.                        ( fieldname = 'TRKORR_V'     scrtext_l = C_avl_06 )
  997.                        ( fieldname = 'FECHA'        scrtext_l = C_avl_07  )
  998.                        ( fieldname = 'VERS'         scrtext_l = c_avl_17 icon = abap_true hotspot = abap_true )
  999.                        ( fieldname = 'OBJ_NAME'     scrtext_l = C_avl_08  outputlen = 120 hotspot = abap_true )
  1000.                       ).
  1001.   t_alv[ 1 ]-fcat = VALUE #( ( fieldname = 'TRKORR'      key = abap_true tabname   = 'E070' hotspot = abap_true  scrtext_l = C_avl_09   )
  1002.                        ( fieldname = 'LOG'         key = abap_true icon = abap_true hotspot = abap_true outputlen = 4 scrtext_l = C_avl_10 no_out = CONV #( COND #( WHEN p_rel = abap_false THEN abap_true ELSE abap_false ) ) )
  1003.                        ( fieldname = 'DOC'         key = abap_true icon = abap_true hotspot = abap_true outputlen = 4 scrtext_l = C_avl_21  )
  1004.                        ( fieldname = 'AS4USER'     key = abap_true scrtext_l = C_avl_02  )
  1005.                        ( fieldname = 'AS4USER_txt' key = abap_true scrtext_l = C_avl_03 )
  1006.                        ( fieldname = 'TRFUNCTION' key = abap_true scrtext_l = C_avl_05 outputlen = 1 no_out = abap_true )
  1007.                        ( fieldname = 'TRFUNCTION_TXT ' key = abap_true scrtext_l = C_avl_11 outputlen = 6 )
  1008.                      ).
  1009.   DATA: l_sysn TYPE n LENGTH 2.
  1010.   DATA(l_no_out) = COND #( WHEN p_rel IS INITIAL AND NOT p_norel IS INITIAL THEN abap_true ELSE abap_false ).
  1011.  
  1012.   DO lines( t_tab_00 ) TIMES.
  1013.     l_sysn = sy-index.
  1014.     t_alv[ 1 ]-fcat = VALUE #( BASE t_alv[ 1 ]-fcat ( fieldname = 'SYS' && l_sysn rollname = 'SYSYSID' no_out = abap_true scrtext_l = C_avl_12 outputlen = 3 )
  1015.                                         ( fieldname = 'ICO' && l_sysn icon = abap_true rollname = 'CHAR06'  scrtext_l = t_tab_00[ l_sysn ]  no_out = l_no_out )
  1016.                                         ( fieldname = 'DAT' && l_sysn rollname = 'DATUM' scrtext_l = C_avl_13   no_out = l_no_out )
  1017.                                         ( fieldname = 'TIM' && l_sysn rollname = 'UZEIT' scrtext_l = C_avl_14   no_out = l_no_out )
  1018.                                         ( fieldname = 'RC' && l_sysn rollname = 'SYSUBRC' scrtext_l = C_avl_15  no_out = l_no_out outputlen = 2 ) ).
  1019.   ENDDO.
  1020.  
  1021.   t_alv[ 1 ]-fcat = VALUE #( BASE t_alv[ 1 ]-fcat ( fieldname = 'AS4TEXT' outputlen = 60 scrtext_l = C_avl_16 ) ).
  1022.  
  1023. ENDFORM.
  1024.  
  1025. FORM alv_remove_buttons.
  1026.   gt_toolbar = VALUE #( ( cl_gui_alv_grid=>mc_fg_edit  )
  1027.                         ( cl_gui_alv_grid=>mc_mb_subtot  )
  1028.                         ( cl_gui_alv_grid=>mc_mb_sum )
  1029.                         ( cl_gui_alv_grid=>mc_fc_detail )
  1030.                         ( cl_gui_alv_grid=>mc_fc_help )
  1031.                         ( cl_gui_alv_grid=>mc_fc_html )
  1032.                         ( cl_gui_alv_grid=>mc_fc_info )
  1033.                         ( cl_gui_alv_grid=>mc_mb_view )
  1034.                         ( cl_gui_alv_grid=>mc_fc_print )
  1035.                       ).
  1036. ENDFORM.
  1037.  
  1038. FORM pai_0100.
  1039.   CASE g_okcode.
  1040.     WHEN 'BACK'. PERFORM but_exit_program.
  1041.   ENDCASE.
  1042. ENDFORM.
  1043.  
  1044. FORM handle_context_menu USING e_object TYPE REF TO cl_ctmenu
  1045.                          CHANGING g_row_id TYPE lvc_s_row.
  1046.   DATA: li_sel_col TYPE i.
  1047.   DATA: lt_std_fcodes TYPE ui_functions,
  1048.         lt_own_fcodes TYPE ui_functions.
  1049.  
  1050.   PERFORM MENU_add_options USING e_object.
  1051.  
  1052.   t_alv[ 1 ]-grid->get_current_cell(  IMPORTING e_col = li_sel_col es_row_id =  g_row_id  ).
  1053.   cl_gui_cfw=>flush( ).
  1054.  
  1055.   e_object->hide_functions( EXPORTING fcodes = lt_std_fcodes ).
  1056.   e_object->show_functions( EXPORTING fcodes = lt_own_fcodes ).
  1057.   cl_gui_cfw=>flush( ).
  1058.  
  1059. ENDFORM.
  1060.  
  1061. FORM handle_user_command USING uv_ucomm       TYPE sy-ucomm
  1062.                                p_list
  1063.                            CHANGING p_row_id TYPE lvc_s_row.
  1064.  
  1065.   CASE p_list.
  1066.     WHEN 1. t_alv[ 1 ]-grid->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  1067.     WHEN 2. t_alv[ 2 ]-grid->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  1068.   ENDCASE.
  1069.  
  1070.   IF NOT p_row_id IS INITIAL AND lines( index_rows ) = 0.
  1071.     REFRESH index_rows.
  1072.     APPEND p_row_id TO index_rows.
  1073.   ENDIF.
  1074.  
  1075.   CASE uv_ucomm.
  1076.     WHEN 'SE09' OR 'MC05'.   CALL TRANSACTION 'SE09'.
  1077.     WHEN 'MC02'.   PERFORM but_newo.
  1078.     WHEN 'MC04'.   PERFORM but_incluir_orden.
  1079.     WHEN 'MC01'.   PERFORM but_liberar_orden.
  1080. *    WHEN 'VIEW'.   PERFORM BUT_ver_orden.
  1081.     WHEN 'MC12'.   PERFORM BUT_change_username.
  1082.     WHEN 'MC09'.   PERFORM but_delete.
  1083.     WHEN 'MC03'.   PERFORM but_merge.
  1084.     WHEN 'MC15'.   PERFORM but_add_task.
  1085.     WHEN 'MC07'.   CALL TRANSACTION 'STMS'.
  1086.     WHEN 'MC14'.   PERFORM but_codo_inspector.
  1087.     WHEN 'VERL'.   PERFORM BUT_ver_log.
  1088.     WHEN 'MC10'.   PERFORM BUT_download.
  1089.     WHEN 'MC11'.   PERFORM BUT_upload.
  1090.     WHEN 'MC06'.   PERFORM BUT_check_log.
  1091.     WHEN 'MC13'.   PERFORM but_refrescar.
  1092.     WHEN 'MC08'. PERFORM BUT_exit_program.
  1093.     WHEN 'MC16'.   PERFORM BUT_delete_object.
  1094.     WHEN 'MC17'.  PERFORM BUT_add_objetcs.
  1095.     WHEN 'MC18'.   PERFORM BUT_tits. "<-- Te gusta y lo sabes! ;)
  1096.     WHEN 'MC19'.   PERFORM BUT_2_Clipboard.
  1097.     WHEN 'MC20'.   PERFORM BUT_Transportar.
  1098.     WHEN 'MC22'. PERFORM but_documentacion.
  1099.   ENDCASE.
  1100.   CLEAR p_row_id.
  1101.  
  1102. ENDFORM.
  1103.  
  1104. FORM BUT_2_Clipboard.
  1105.   DATA: t_data TYPE STANDARD TABLE OF char255,
  1106.         l_s    TYPE char255,
  1107.         e_rc   TYPE i.
  1108.   LOOP AT index_rows INTO DATA(l_rows).
  1109.     READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1110.     l_s = |{ <f>-trkorr } { <f>-as4user } { <f>-as4text }|.
  1111.     APPEND l_s TO t_data.
  1112.  
  1113.     AT LAST.
  1114.       CALL METHOD cl_gui_frontend_services=>clipboard_export
  1115.         EXPORTING
  1116.           no_auth_check        = abap_false
  1117.         IMPORTING
  1118.           data                 = t_data
  1119.         CHANGING
  1120.           rc                   = e_rc
  1121.         EXCEPTIONS
  1122.           cntl_error           = 1
  1123.           error_no_gui         = 2
  1124.           not_supported_by_gui = 3
  1125.           no_authority         = 4
  1126.           OTHERS               = 5.
  1127.       IF sy-subrc EQ 0.
  1128.         MESSAGE s398(00) WITH c_msg_04.
  1129.       ENDIF.
  1130.  
  1131.     ENDAT.
  1132.   ENDLOOP.
  1133.  
  1134. ENDFORM.
  1135.  
  1136. FORM BUT_Transportar.
  1137.   DATA: it_return TYPE STANDARD TABLE OF ddshretval.
  1138. *--[ Soporte al POPUP
  1139.   TYPES: BEGIN OF ty_data_system,
  1140.            sysnam TYPE tmssysnam,
  1141.            systxt TYPE as4text,
  1142.          END OF ty_data_system.
  1143.   DATA:
  1144.     t_data_system TYPE STANDARD TABLE OF ty_data_system,
  1145.     l_data_system LIKE LINE OF t_data_system.
  1146.  
  1147.   LOOP AT index_rows INTO DATA(l_rows).
  1148.     AT FIRST.
  1149.       LOOP AT tt_system INTO DATA(l_s).
  1150.         l_data_system = CORRESPONDING #( l_s ).
  1151.         APPEND l_data_system TO t_data_system.
  1152.       ENDLOOP.
  1153.       CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  1154.         EXPORTING
  1155.           retfield        = 'SYSNAM'
  1156.           value_org       = 'S'
  1157.           window_title    = c_msg_05 "'Máquina de destino'
  1158.         TABLES
  1159.           value_tab       = t_data_system
  1160.           return_tab      = it_return
  1161.         EXCEPTIONS
  1162.           parameter_error = 1
  1163.           no_values_found = 2
  1164.           OTHERS          = 3.
  1165.       IF sy-subrc NE 0 OR lines( it_return ) = 0.
  1166.         EXIT.
  1167.       ENDIF.
  1168.       DATA(l_sys) = it_return[ 1 ]-fieldval.
  1169.       DATA(l_system) = tt_system[ sysnam = l_sys ].
  1170.     ENDAT.
  1171.     READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1172.     DATA: it_clients TYPE stms_clients.
  1173.     it_clients = VALUE #( ( client = sy-mandt clitxt = 'Default' ) ).
  1174. *--[ Función de transporte
  1175.     CALL FUNCTION 'TMS_UI_IMPORT_TR_REQUEST'
  1176.       EXPORTING
  1177.         iv_system             = l_system-sysnam
  1178.         iv_domain             = l_system-domnam
  1179.         iv_request            = <f>-trkorr
  1180.         iv_tarcli             = '100'
  1181.         iv_systxt             = l_system-systxt
  1182.         iv_reqtxt             = <f>-as4text
  1183.         iv_ctc_active         = abap_false
  1184.         iv_some_active        = abap_true
  1185.         iv_verbose            = abap_false
  1186.         iv_expert_mode        = abap_false
  1187.         iv_check_strategy     = abap_true
  1188. *       it_requests           = lt_tr_requests
  1189.         it_clients            = it_clients
  1190. *       it_all_requests       = gs_disque-t_req_all
  1191.       EXCEPTIONS
  1192.         cancelled_by_user     = 1
  1193.         import_request_denied = 2
  1194.         import_request_failed = 3
  1195.         OTHERS                = 99.
  1196.  
  1197.     AT LAST.
  1198.       PERFORM but_refrescar.
  1199.     ENDAT.
  1200.   ENDLOOP.
  1201. ENDFORM.
  1202.  
  1203. FORM BUT_tits.
  1204.   DATA: t_fields TYPE STANDARD TABLE OF sval.
  1205.   DATA(l_save) = abap_false.
  1206.   LOOP AT index_rows INTO DATA(l_rows).
  1207.     READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1208.     DATA(l_returncode) = abap_false.
  1209.  
  1210.     t_fields = VALUE #( ( tabname = 'E07T' fieldname = 'AS4TEXT' value = <f>-as4text field_obl = abap_true ) ).
  1211.     DATA(l_title) = |{ <f>-trkorr }-{ <f>-as4text }|.
  1212.     CALL FUNCTION 'POPUP_GET_VALUES'
  1213.       EXPORTING
  1214.         no_value_check  = abap_true
  1215.         popup_title     = l_title
  1216. *       START_COLUMN    = '5'
  1217. *       START_ROW       = '5'
  1218.       IMPORTING
  1219.         returncode      = l_returncode
  1220.       TABLES
  1221.         fields          = t_fields
  1222.       EXCEPTIONS
  1223.         error_in_fields = 1
  1224.         OTHERS          = 2.
  1225.     IF sy-subrc EQ 0 AND l_returncode = abap_false.
  1226.       DATA(l_d) = t_fields[ 1 ]-value.
  1227.       IF l_d NE <f>-as4text.
  1228.         <f>-as4text = l_d.
  1229.         l_save = abap_true.
  1230.         UPDATE e07t
  1231.           SET as4text = l_d
  1232.           WHERE trkorr = <f>-trkorr AND
  1233.                  langu = sy-langu.
  1234.  
  1235.       ENDIF.
  1236.     ENDIF.
  1237.  
  1238.   ENDLOOP.
  1239.   IF l_save = abap_true.
  1240.     t_alv[ 1 ]-grid->refresh_table_display( ).
  1241.   ENDIF.
  1242. ENDFORM.
  1243.  
  1244. FORM BUT_add_objetcs.
  1245.   DATA: pv_exit(1),
  1246.         l_is_request TYPE trwbo_request_header.
  1247.   LOOP AT index_rows INTO DATA(l_rows).
  1248.     READ TABLE t_tab_02 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1249.     SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF l_is_request
  1250.       WHERE trkorr  = <f>-trkorr.
  1251.     IF l_is_request-trfunction NA 'CDFKOPT'.
  1252.       SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF l_is_request
  1253.         WHERE trkorr  = l_is_request-strkorr.
  1254.     ENDIF.
  1255.  
  1256.     l_is_request-clients_filled  = abap_true.
  1257.     CALL FUNCTION 'TR_SELECT_AND_APPEND_OBJECTS'
  1258.       EXPORTING
  1259.         is_request = l_is_request
  1260.       EXCEPTIONS
  1261.         OTHERS     = 1.
  1262.     IF sy-subrc NE 0.
  1263.       MESSAGE s398(00) WITH c_msg_03 '' '' ''.
  1264.     ENDIF.
  1265.  
  1266.     AT LAST.
  1267.       LOOP AT t_tab_01 INTO DATA(l_01) WHERE trkorr = l_is_request-tRKORR OR
  1268.                                           trkorr = l_is_request-strkorr.
  1269.         PERFORM data_load_02 USING sy-tabix.
  1270.         EXIT.
  1271.       ENDLOOP.
  1272.     ENDAT.
  1273.   ENDLOOP.
  1274. ENDFORM.
  1275.  
  1276. FORM but_codo_inspector.
  1277.   LOOP AT index_rows INTO DATA(l_rows).
  1278.     READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1279.  
  1280.     CALL FUNCTION 'TR_INSPECT_OBJECTS'
  1281.       EXPORTING
  1282.         iv_trkorr       = <f>-trkorr
  1283.       EXCEPTIONS
  1284.         invalid_request = 1
  1285.         OTHERS          = 2.
  1286.   ENDLOOP.
  1287. ENDFORM.
  1288.  
  1289. FORM but_add_task.
  1290.   DATA: lv_username TYPE sy-uname.
  1291.   LOOP AT index_rows INTO DATA(l_rows).
  1292.     READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
  1293.     AT FIRST.
  1294.       CALL FUNCTION 'TR_POPUP_INPUT_SAPUSER'
  1295.         EXPORTING
  1296.           iv_description         = 'Crear tarea para el usuario'
  1297.           iv_title               = 'A&#241;adir empleado'
  1298.         CHANGING
  1299.           cv_username            = lv_username
  1300.         EXCEPTIONS
  1301.           action_aborted_by_user = 1
  1302.           OTHERS                 = 2.
  1303.  
  1304.     ENDAT.
  1305.  
  1306.     CALL FUNCTION 'TRINT_INSERT_NEW_COMM'
  1307.       EXPORTING
  1308.         wi_kurztext       = l_tab_01-as4text
  1309.         wi_trfunction     = abap_true "l_tab_01-trfunction
  1310.         iv_username       = lv_username
  1311.         wi_strkorr        = l_tab_01-trkorr
  1312.         wi_client         = sy-mandt
  1313.       EXCEPTIONS
  1314.         no_systemname     = 1
  1315.         no_systemtype     = 2
  1316.         no_authorization  = 3
  1317.         db_access_error   = 4
  1318.         file_access_error = 5
  1319.         enqueue_error     = 6
  1320.         number_range_full = 7
  1321.         invalid_input     = 8
  1322.         OTHERS            = 9.
  1323.     CHECK sy-subrc EQ 0.
  1324.     MESSAGE s398(00) WITH c_msg_01 '' '' ''.
  1325.   ENDLOOP.
  1326. ENDFORM.
  1327.  
  1328. FORM but_refrescar.
  1329.   PERFORM data_load.
  1330.   t_alv[ 1 ]-grid->refresh_table_display( ).
  1331. ENDFORM.
  1332.  
  1333. FORM BUT_change_username.
  1334.   DATA: l_header  TYPE trwbo_request_header,
  1335.         l_flag(1).
  1336.   LOOP AT index_rows INTO DATA(l_rows).
  1337.     READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
  1338.  
  1339.     CALL FUNCTION 'TRINT_CHANGE_USERNAME'
  1340.       EXPORTING
  1341.         wi_dialog           = abap_true
  1342.         wi_trkorr           = <f>-trkorr
  1343.         wi_user             = e070-as4user
  1344.         wi_start_column     = 30
  1345.         wi_start_row        = 14
  1346.       IMPORTING
  1347.         es_request_header   = l_header
  1348.       EXCEPTIONS
  1349.         already_released    = 1
  1350.         e070_update_error   = 2
  1351.         not_exist_e070      = 3
  1352.         user_does_not_exist = 4
  1353.         unallowed_user      = 5
  1354.         user_not_authorized = 6
  1355.         wrong_client        = 7
  1356.         file_access_error   = 8.
  1357.     IF sy-subrc EQ 0.
  1358.       SELECT SINGLE as4user INTO <f>-as4user FROM e070
  1359.           WHERE trkorr = <f>-trkorr.
  1360.       PERFORM get_user USING <f>-as4user CHANGING <f>-as4user_TXT.
  1361.       l_flag = abap_true.
  1362.  
  1363.  
  1364.     ENDIF.
  1365.     AT LAST.
  1366.       CHECK l_flag = abap_true.
  1367.       t_alv[ 1 ]-grid->refresh_table_display( ).
  1368.     ENDAT.
  1369.   ENDLOOP.
  1370. ENDFORM.
  1371.  
  1372. FORM but_upload.
  1373.  
  1374.   TYPES: BEGIN OF ty_files,
  1375.            full_pc(1024),
  1376.            full_sap(1024),
  1377.          END OF ty_files.
  1378.  
  1379.   DATA: t_tab_files      TYPE filetable,
  1380.         t_tab_save       TYPE STANDARD TABLE OF ty_files,
  1381.         l_tab_save       LIKE LINE OF t_tab_save,
  1382.         l_filename(1024),
  1383.         dir_cofiles      TYPE eps2filnam,
  1384.         dir_data         TYPE eps2filnam,
  1385.         l_filepath(1024),
  1386.         rc               TYPE sysubrc.
  1387.   DATA: l_path   TYPE sapb-sappfad,
  1388.         l_target TYPE sapb-sappfad.
  1389.  
  1390.   CALL METHOD cl_gui_frontend_services=>file_open_dialog
  1391.     EXPORTING
  1392.       multiselection          = abap_true
  1393.     CHANGING
  1394.       file_table              = t_tab_files
  1395.       rc                      = rc
  1396.     EXCEPTIONS
  1397.       file_open_dialog_failed = 1
  1398.       cntl_error              = 2
  1399.       error_no_gui            = 3
  1400.       not_supported_by_gui    = 4
  1401.       OTHERS                  = 5.
  1402.   IF sy-subrc <> 0 OR lines( t_tab_files ) <= 0.
  1403.     EXIT.
  1404.   ENDIF.
  1405.  
  1406.   LOOP AT t_tab_files INTO DATA(l_files).
  1407.     AT FIRST.
  1408.       dir_cofiles = dir_trans && '/cofiles/'.
  1409.       dir_data    = dir_trans && '/data/'.
  1410.     ENDAT.
  1411.  
  1412.     CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
  1413.       EXPORTING
  1414.         full_name     = l_files-filename
  1415.       IMPORTING
  1416.         stripped_name = l_filename
  1417.         file_path     = l_filepath
  1418.       EXCEPTIONS
  1419.         x_error       = 1
  1420.         OTHERS        = 2.
  1421.     IF sy-subrc EQ 0.
  1422. *      l_tab_save-full_pc = l_files-filename.
  1423. *      l_tab_save-full_sap = COND #( WHEN l_filename+0(1) CA 'RD' THEN dir_data && l_filename else dir_data && l_filename ).
  1424. *
  1425. *      APPEND l_tab_save TO t_tab_save.
  1426.       t_tab_save = VALUE #( BASE t_tab_save ( full_pc = l_files-filename
  1427.                                               full_sap = COND #( WHEN l_filename+0(1) CA 'RD' THEN dir_data && l_filename ELSE dir_data && l_filename ) ) ).
  1428.  
  1429.     ENDIF.
  1430.     AT LAST.
  1431.       LOOP AT t_tab_save INTO l_tab_save.
  1432.         l_path = l_tab_save-full_pc.
  1433.         l_target = l_tab_save-full_sap.
  1434.         CALL FUNCTION 'ARCHIVFILE_CLIENT_TO_SERVER'
  1435.           EXPORTING
  1436.             path       = l_path
  1437.             targetpath = l_target
  1438.           EXCEPTIONS
  1439.             error_file = 99
  1440.             OTHERS     = 99.
  1441.       ENDLOOP.
  1442.     ENDAT.
  1443.   ENDLOOP.
  1444.  
  1445. ENDFORM.
  1446.  
  1447. FORM BUT_download.
  1448.   TYPES: BEGIN OF ty_files,
  1449.            full(1024).
  1450.            INCLUDE STRUCTURE eps2fili.
  1451.   TYPES:
  1452.          END OF ty_files.
  1453.  
  1454.   DATA: dir_cofiles   TYPE eps2filnam,
  1455.         dir_data      TYPE eps2filnam,
  1456.  
  1457.         t_tab_cofiles TYPE STANDARD TABLE OF eps2fili,
  1458.         t_tab_data    TYPE STANDARD TABLE OF eps2fili,
  1459.  
  1460.         t_tab_files   TYPE STANDARD TABLE OF ty_files,
  1461.         l_tab_files   LIKE LINE OF t_tab_files,
  1462.  
  1463.         l_str01       TYPE string,
  1464.         l_str02       TYPE string,
  1465.         l_str03       TYPE string.
  1466.  
  1467.   LOOP AT index_rows INTO DATA(l_rows).
  1468.     AT FIRST.
  1469.       dir_cofiles = dir_trans && '/cofiles'.
  1470.       dir_data    = dir_trans && '/data'.
  1471.  
  1472.       CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
  1473.         EXPORTING
  1474.           iv_dir_name            = dir_cofiles
  1475.           file_mask              = '*.*'
  1476.         TABLES
  1477.           dir_list               = t_tab_cofiles
  1478.         EXCEPTIONS
  1479.           invalid_eps_subdir     = 1
  1480.           sapgparam_failed       = 2
  1481.           build_directory_failed = 3
  1482.           no_authorization       = 4
  1483.           read_directory_failed  = 5
  1484.           too_many_read_errors   = 6
  1485.           empty_directory_list   = 7
  1486.           OTHERS                 = 8.
  1487.  
  1488.       CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
  1489.         EXPORTING
  1490.           iv_dir_name            = dir_data
  1491.           file_mask              = '*.*'
  1492.         TABLES
  1493.           dir_list               = t_tab_data
  1494.         EXCEPTIONS
  1495.           invalid_eps_subdir     = 1
  1496.           sapgparam_failed       = 2
  1497.           build_directory_failed = 3
  1498.           no_authorization       = 4
  1499.           read_directory_failed  = 5
  1500.           too_many_read_errors   = 6
  1501.           empty_directory_list   = 7
  1502.           OTHERS                 = 8.
  1503.  
  1504.     ENDAT.
  1505.     READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
  1506.     DATA(l_num) = '*' && l_tab_01-trkorr+4 && '*'.
  1507.  
  1508.     LOOP AT t_tab_cofiles INTO DATA(l_01) WHERE name CP l_num.
  1509.       CLEAR l_tab_files.
  1510.       MOVE-CORRESPONDING l_01 TO l_tab_files.
  1511.       l_tab_files-full = dir_cofiles && '/' && l_01-name.
  1512.       APPEND l_tab_files TO t_tab_files.
  1513.  
  1514.     ENDLOOP.
  1515.  
  1516.     LOOP AT t_tab_data INTO l_01 WHERE name CP l_num.
  1517.       CLEAR l_tab_files.
  1518.       MOVE-CORRESPONDING l_01 TO l_tab_files.
  1519.       l_tab_files-full = dir_data && '/' && l_01-name.
  1520.       APPEND l_tab_files TO t_tab_files.
  1521.  
  1522.     ENDLOOP.
  1523.  
  1524.     AT LAST.
  1525.       LOOP AT t_tab_files INTO l_tab_files.
  1526.         AT FIRST.
  1527.           CALL METHOD cl_gui_frontend_services=>file_save_dialog
  1528.             EXPORTING
  1529.               default_file_name         = 'ordenes.txt'
  1530.             CHANGING
  1531.               filename                  = l_str01
  1532.               path                      = l_str02
  1533.               fullpath                  = l_str03
  1534.             EXCEPTIONS
  1535.               cntl_error                = 1
  1536.               error_no_gui              = 2
  1537.               not_supported_by_gui      = 3
  1538.               invalid_default_file_name = 4
  1539.               OTHERS                    = 5.
  1540.           IF sy-subrc <> 0 OR l_str02 IS INITIAL.
  1541.             EXIT. "<-- Nada que descargar
  1542.           ENDIF.
  1543.  
  1544.         ENDAT.
  1545. *--[ Descargamos los ficheros
  1546.         DATA: l_path   TYPE sapb-sappfad,
  1547.               l_target TYPE sapb-sappfad.
  1548.  
  1549.         l_path = l_tab_files-full.
  1550.         l_target = l_str02 && '\' && l_tab_files-name.
  1551.         REPLACE ALL OCCURRENCES OF '//' IN l_target WITH '/'.
  1552.  
  1553.         CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT'
  1554.           EXPORTING
  1555.             path       = l_path
  1556.             targetpath = l_target
  1557.           EXCEPTIONS
  1558.             error_file = 1
  1559.             OTHERS     = 2.
  1560.  
  1561.       ENDLOOP.
  1562.  
  1563.     ENDAT.
  1564.  
  1565.   ENDLOOP.
  1566.  
  1567. ENDFORM.
  1568.  
  1569.  
  1570. FORM but_documentacion.
  1571.  
  1572.   LOOP AT index_rows INTO DATA(l_rows).
  1573.     PERFORM but_documentacion_WORK USING l_rows-index.
  1574.   ENDLOOP.
  1575. ENDFORM.
  1576.  
  1577. FORM but_documentacion_WORK USING p_indice.
  1578.  
  1579.   DATA: t_docu  TYPE STANDARD TABLE OF tline,
  1580.         l_docu  LIKE LINE OF t_docu,
  1581.         t_lines TYPE STANDARD TABLE OF char72,
  1582.         s_lines LIKE LINE OF t_lines.
  1583.  
  1584.   READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX p_indice.
  1585.   REFRESH t_docu.
  1586.   CALL FUNCTION 'TRINT_DOCU_INTERFACE'
  1587.     EXPORTING
  1588.       iv_object = <f>-trkorr
  1589.     TABLES
  1590.       tt_line   = t_docu
  1591.     EXCEPTIONS
  1592.       error     = 0.
  1593.   LOOP AT t_docu INTO l_docu.
  1594.  
  1595.     s_lines = l_docu-tdline .
  1596.     APPEND s_lines TO t_lines.
  1597.   ENDLOOP.
  1598.   CALL FUNCTION 'TERM_CONTROL_EDIT'
  1599.     EXPORTING
  1600.       titel          = |{ c_quick_22 }: { <f>-trkorr }|
  1601.       langu          = sy-langu
  1602.     TABLES
  1603.       textlines      = t_lines
  1604.     EXCEPTIONS
  1605.       user_cancelled = 1
  1606.       OTHERS         = 2.
  1607.   IF sy-subrc EQ 0.
  1608.     IF lines( t_lines ) > 0.
  1609.       REFRESH t_docu.
  1610.       LOOP AT t_lines INTO s_lines.
  1611.         l_docu-tdformat = '/'.
  1612.         l_docu-tdline = s_lines.
  1613.         APPEND l_docu TO t_docu.
  1614.       ENDLOOP.
  1615.       CALL FUNCTION 'TRINT_DOCU_INTERFACE'
  1616.         EXPORTING
  1617.           iv_action           = 'M'
  1618.           iv_modify_appending = ' '
  1619.           iv_object           = <f>-trkorr
  1620.         TABLES
  1621.           tt_line             = t_docu
  1622.         EXCEPTIONS
  1623.           error               = 0.
  1624.       <f>-doc = icon_document.
  1625.     ELSE.
  1626.       CLEAR <f>-doc.
  1627.     ENDIF.
  1628.   ENDIF.
  1629.  
  1630. ENDFORM.
  1631.  
  1632. FORM but_delete.
  1633.  
  1634.   DATA: lt_deleted_tasks TYPE cts_trkorrs.
  1635.  
  1636.   LOOP AT index_rows INTO DATA(l_rows).
  1637.     READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
  1638.  
  1639. *--[ Eliminamos las tareas
  1640.     SELECT * FROM e070 INTO TABLE @DATA(T_tareas)
  1641.            WHERE Strkorr = @l_tab_01-trkorr AND
  1642.                  ( trstatus = 'D' OR trstatus = 'L' ).
  1643.  
  1644.     LOOP AT t_tareas INTO DATA(l_tareas).
  1645.  
  1646.       CALL FUNCTION 'TR_DELETE_COMM'
  1647.         EXPORTING
  1648.           wi_dialog        = abap_true
  1649.           wi_trkorr        = l_tareas-trkorr
  1650.         IMPORTING
  1651.           et_deleted_tasks = lt_deleted_tasks
  1652.         EXCEPTIONS
  1653.           OTHERS           = 1.
  1654.  
  1655.  
  1656.     ENDLOOP.
  1657.     REFRESH t_tareas.
  1658. *--[ Eliminamos la orden
  1659.     SELECT * FROM e070 INTO TABLE T_tareas
  1660.            WHERE Strkorr = l_tab_01-trkorr.
  1661.     IF lines( t_tareas ) = 0.
  1662.       CALL FUNCTION 'TR_DELETE_COMM'
  1663.         EXPORTING
  1664.           wi_dialog        = abap_true
  1665.           wi_trkorr        = l_tab_01-trkorr
  1666.         IMPORTING
  1667.           et_deleted_tasks = lt_deleted_tasks
  1668.         EXCEPTIONS
  1669.           OTHERS           = 1.
  1670.     ENDIF.
  1671.     REFRESH T_tareas.
  1672.  
  1673.     SELECT SINGLE * FROM e070 INTO @DATA(l_o) WHERE trkorr = @l_tab_01-trkorr.
  1674.     IF sy-subrc EQ 0.
  1675.       DELETE t_tab_01 INDEX l_rows-index.
  1676.       t_alv[ 1 ]-grid->REFRESH_table_display( ).
  1677.     ENDIF.
  1678.   ENDLOOP.
  1679. ENDFORM.
  1680.  
  1681. FORM but_liberar_orden_inc USING p_orden.
  1682.   DATA: l_orden          TYPE e070-trkorr,
  1683.         es_request       TYPE  trwbo_request,
  1684.         et_deleted_tasks TYPE  trwbo_t_e070.
  1685.  
  1686.   l_orden = p_orden.
  1687.   CHECK NOT l_orden IS INITIAL.
  1688.   CALL FUNCTION 'TR_RELEASE_REQUEST'
  1689.     EXPORTING
  1690.       iv_trkorr             = l_orden
  1691.       iv_dialog             = G_rele_param-dialog
  1692.       iv_as_background_job  = G_rele_param-fondo
  1693.       iv_success_message    = G_rele_param-succes
  1694.       iv_display_export_log = g_rele_param-log
  1695.       iv_simulation         = G_rele_param-simula
  1696.     IMPORTING
  1697.       es_request            = es_request
  1698.       et_deleted_tasks      = et_deleted_tasks
  1699.     EXCEPTIONS
  1700.       OTHERS                = 0.
  1701. ENDFORM.
  1702.  
  1703. FORM but_liberar_orden.
  1704.   DATA: ev_exit(1).
  1705.   LOOP AT index_rows INTO DATA(l_rows).
  1706.     READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
  1707.     SELECT * FROM e070 INTO TABLE @DATA(t_rele)
  1708.       WHERE strkorr = @l_tab_01-trkorr
  1709.             AND ( trstaTus = 'D' OR trstaTus = 'L'  ).
  1710.  
  1711.     LOOP AT t_rele INTO DATA(l_rele).
  1712.       AT FIRST.
  1713. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1714. *--[ Reversionamos antes de liberar
  1715.         IF p_vers =  abap_true.
  1716.           PERFORM BUT_Re_version USING l_tab_01-trkorr.
  1717.         ENDIF.
  1718.         UPDATE e070
  1719.            SET as4user = sy-uname
  1720.             WHERE trkorr = l_tab_01-trkorr.
  1721.         PERFORM but_liberar_orden_param.
  1722.       ENDAT.
  1723.  
  1724.       UPDATE e070
  1725.          SET as4user = sy-uname
  1726.           WHERE trkorr = l_rele-trkorr.
  1727.       PERFORM but_liberar_orden_inc  USING l_rele-trkorr.
  1728.  
  1729.       UPDATE e070
  1730.          SET as4user = l_rele-as4user
  1731.           WHERE trkorr = l_rele-trkorr.
  1732.  
  1733.       AT LAST.
  1734. *--[ Devolvemos el luser original.
  1735.         UPDATE e070
  1736.            SET as4user = l_tab_01-as4user
  1737.             WHERE trkorr = l_tab_01-trkorr.
  1738.       ENDAT.
  1739.  
  1740.     ENDLOOP.
  1741.  
  1742. *--[ Orden sin tareas
  1743.     IF lines( t_rele ) = 0. PERFORM but_liberar_orden_param. ENDIF.
  1744.     PERFORM but_liberar_orden_inc  USING l_tab_01-trkorr.
  1745.     UPDATE e070
  1746.        SET as4user = l_tab_01-as4user
  1747.         WHERE trkorr = l_tab_01-trkorr.
  1748.     ev_exit = abap_true.
  1749.  
  1750.   ENDLOOP.
  1751.   CHECK Ev_exit = abap_true.
  1752.   PERFORM but_refrescar.
  1753. ENDFORM.
  1754.  
  1755. FORM but_liberar_orden_param.
  1756.   DATA: t_fields        TYPE STANDARD TABLE OF mcs01,
  1757.         t_marked_fields TYPE STANDARD TABLE OF mcs01.
  1758.  
  1759.  
  1760.   IF G_rele_param IS INITIAL.
  1761.     G_rele_param-dialog = g_rele_param-succes = G_rele_param-log = abap_true.
  1762.   ENDIF.
  1763.   t_fields = VALUE #( ( fieldname = 'DIALOG' scrtext_l = c_pop_01 )
  1764.                       ( fieldname = 'FONDO'  scrtext_l = c_pop_02 )
  1765.                       ( fieldname = 'SUCCES' scrtext_l = c_pop_03 )
  1766.                       ( fieldname = 'LOG'    scrtext_l = c_pop_04 )
  1767.                       ( fieldname = 'SIMULA' scrtext_l = c_pop_05 )
  1768.                      ).
  1769.   t_marked_fields = VALUE #( ( fieldname = 'DIALOG' ) ( fieldname = 'SUCCES' ) ( fieldname = 'LOG' ) ).
  1770.  
  1771.   CALL FUNCTION 'MC_POPUP_TO_MARK_FIELDS'
  1772.     EXPORTING
  1773.       i_fields_marked        = abap_false
  1774.       i_field_number_min     = 0
  1775.       i_mark_by_table        = abap_true
  1776.       i_object_name_plural   = ''
  1777.       i_object_name_singular = ''
  1778.       i_popup_title          = c_mark_fields_01
  1779.       i_textline             = c_mark_fields_01
  1780.       i_text_length          = 50
  1781.     TABLES
  1782.       t_fields               = t_fields
  1783.       t_marked_fields        = t_marked_fields
  1784.     EXCEPTIONS
  1785.       unvalid_text_length    = 1
  1786.       OTHERS                 = 2.
  1787.   IF sy-subrc EQ 0.
  1788.  
  1789.     LOOP AT t_marked_fields INTO DATA(l_f).
  1790.       AT FIRST.
  1791.         CLEAR g_rele_param.
  1792.       ENDAT.
  1793.       DATA(l_txt) = to_upper( 'G_rele_param-' && l_f-fieldname ).
  1794.       ASSIGN (l_txt) TO FIELD-SYMBOL(<ff>).
  1795.       CHECK sy-subrc EQ 0.
  1796.       <ff> = abap_true.
  1797.     ENDLOOP.
  1798.   ENDIF.
  1799.  
  1800. ENDFORM.
  1801.  
  1802. FORM but_incluir_orden.
  1803.   DATA: cv_exit(1).
  1804.   IF lines( index_rows ) = 1.
  1805.     READ TABLE t_tab_01 INTO l_tab_01 INDEX  index_rows[ 1 ]-index.
  1806.  
  1807.     PERFORM copy_object_list IN PROGRAM saplstrh
  1808.          USING l_tab_01-trkorr abap_false
  1809.                 CHANGING cv_exit.
  1810.  
  1811.   ELSE.
  1812.     MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
  1813.   ENDIF.
  1814. ENDFORM.
  1815.  
  1816. FORM but_merge.
  1817.   DATA: ev_trkorr_from  LIKE  e070-trkorr,
  1818.         es_request_to   TYPE  trwbo_request,
  1819.         is_request_from TYPE trwbo_request.
  1820.  
  1821.   IF lines( index_rows ) = 1.
  1822.     READ TABLE t_tab_01 INTO l_tab_01 INDEX index_rows[ 1 ]-index.
  1823.     SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF is_request_from-h
  1824.       WHERE trkorr = l_tab_01-trkorr.
  1825.  
  1826.     is_request_from-h-as4text = l_tab_01-as4text.
  1827.     is_request_from-h-clients_filled =
  1828.     is_request_from-objects_filled =
  1829.     is_request_from-attributes_filled =
  1830.     is_request_from-h-as4text_filled = abap_true.
  1831.     is_request_from-h-client = sy-mandt.
  1832.  
  1833.     CALL FUNCTION 'TR_MERGE_REQUESTS'
  1834.       EXPORTING
  1835.         is_request_from   = is_request_from "
  1836.         iv_request_choice = abap_true
  1837.         iv_with_dialog    = abap_true
  1838.       IMPORTING
  1839.         ev_trkorr_from    = ev_trkorr_from
  1840.         es_request_to     = es_request_to
  1841.       EXCEPTIONS
  1842.         OTHERS            = 7.
  1843.   ELSE.
  1844.     MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
  1845.   ENDIF.
  1846. ENDFORM.
  1847.  
  1848. FORM but_newo.
  1849.   IF lines( index_rows ) = 1.
  1850.     READ TABLE t_tab_01 INTO l_tab_01 INDEX 1.
  1851.  
  1852.     DATA: lt_users TYPE trwbo_users .
  1853.  
  1854.     SELECT as4user AS user FROM e070
  1855.       INTO CORRESPONDING FIELDS OF TABLE lt_users
  1856.       WHERE strkorr = l_tab_01-trkorr.
  1857.  
  1858.     SELECT SINGLE * FROM e070 INTO @DATA(l_e070)
  1859.         WHERE trkorr = @l_tab_01-trkorr.
  1860.  
  1861.     CALL FUNCTION 'TR_REQUEST_MODIFY'
  1862.       EXPORTING
  1863.         iv_action           = 'CREA'
  1864.         iv_new_request_type = l_tab_01-trfunction
  1865.         iv_new_task_type    = abap_true
  1866.         iv_new_tarsystem    = l_e070-tarsystem
  1867.         iv_new_as4text      = l_tab_01-as4text
  1868.         it_users            = lt_users
  1869.         iv_new_repoid       = ''
  1870.       EXCEPTIONS
  1871.         OTHERS              = 1.
  1872.  
  1873.   ELSE.
  1874.     PERFORM create_new_request IN PROGRAM rddm0001 USING 'KWTCEO'.
  1875.   ENDIF.
  1876. ENDFORM.
  1877.  
  1878. FORM handle_hotspot USING e_row_id  TYPE  lvc_s_row
  1879.                           e_column_id TYPE  lvc_s_col
  1880.                           p_list.
  1881.   CASE e_column_id.
  1882.  
  1883.     WHEN 'DOC'.
  1884.       PERFORM but_documentacion_WORK USING e_row_id-index.
  1885.       t_alv[ 1 ]-grid->refresh_table_display( ).
  1886.     WHEN 'LOG'.
  1887.       READ TABLE t_tab_01 INTO DATA(l_01) INDEX e_row_id-index.
  1888.       IF NOT l_01-log IS INITIAL.
  1889.         SUBMIT rddprott AND RETURN
  1890.              WITH pv_korr  = l_01-trkorr.
  1891.       ENDIF.
  1892.     WHEN 'OBJ_NAME'.
  1893.  
  1894.       READ TABLE t_tab_02 INTO DATA(l_02) INDEX e_row_id-index.
  1895.       IF l_02-pgmid = 'R3TR' AND ( l_02-object = 'TABU' OR l_02-object CP '*DAT' ).
  1896.  
  1897.         SELECT as4pos, tabkey  FROM e071k INTO TABLE @DATA(T_tab_22)
  1898.           WHERE trkorr  = @l_02-trkorr
  1899.             AND pgmid   = @l_02-pgmid AND
  1900.               ( ( object  = @l_02-object AND objname = @l_02-obj_name ) OR
  1901.                 ( mastertype  = @l_02-object AND mastername = @l_02-obj_name ) ).
  1902.  
  1903.         IF sy-subrc EQ 0.
  1904.           g_split_2->set_column_width( id = 2 width = 20 ).
  1905.           t_alv[ 1 ]-layout-sel_mode = 'C'.
  1906.           t_alv[ 3 ]-grid->set_table_for_first_display(
  1907.             EXPORTING
  1908.               is_variant           = t_alv[ 3 ]-variant
  1909.               is_layout            = t_alv[ 3 ]-layout
  1910.               i_save               = 'A'
  1911.               it_toolbar_excluding = gt_toolbar
  1912.             CHANGING
  1913.               it_fieldcatalog      = t_alv[ 3 ]-fcat "gt_field
  1914.               it_outtab            = t_tab_22 ).
  1915.  
  1916.           t_alv[ 3 ]-grid->refresh_table_display( ).
  1917.         ENDIF.
  1918.       ELSE.
  1919.         g_split_2->set_column_width( id = 2 width = 0 ).
  1920.         CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
  1921.           EXPORTING
  1922.             iv_pgmid          = l_02-pgmid
  1923.             iv_object         = l_02-object
  1924.             iv_obj_name       = l_02-obj_name
  1925.             iv_action         = 'SHOW'
  1926.           EXCEPTIONS
  1927.             jump_not_possible = 1
  1928.             OTHERS            = 2.
  1929.         IF sy-subrc <> 0.
  1930. * Implement suitable error handling here
  1931.         ENDIF.
  1932.       ENDIF.
  1933.     WHEN 'VERS'.
  1934.       READ TABLE t_tab_02 INTO DATA(l_22) INDEX e_row_id-index.
  1935.  
  1936.       DATA: object_type LIKE  vrsd-objtype,
  1937.             object_name LIKE  vrsd-objname.
  1938.       object_name = l_22-obj_name.
  1939.       object_type = l_22-object.
  1940.       CALL FUNCTION 'SVRS_DISPLAY_DIRECTORY_NEW'
  1941.         EXPORTING
  1942.           object_type    = object_type
  1943.           object_name    = object_name
  1944.           display        = abap_true
  1945.           compare        = abap_true
  1946.           compare_remote = abap_true
  1947.           recall         = abap_true
  1948.         EXCEPTIONS
  1949.           OTHERS         = 2. "#EC FB_RC
  1950.  
  1951.  
  1952.     WHEN 'TRKORR'.
  1953.       IF p_list = 1.
  1954.         g_split_2->set_column_width( id = 2 width = 0 ).
  1955.  
  1956.         g_split->get_row_height( EXPORTING id = 2 IMPORTING result = e_rc ) .
  1957.         IF e_rc = 0.
  1958. *           g_split->SET_ROW_HEIGHT( id = 1 height = 60  ).
  1959.           g_split->set_row_height( id = 2 height = 40  ).
  1960.         ENDIF.
  1961.         PERFORM data_load_02 USING e_row_id-index.
  1962.  
  1963.       ELSEIF p_list = 2.
  1964.         DATA(l_orden) = t_tab_02[ e_row_id-index ]-trkorr.
  1965.         CALL FUNCTION 'TR_DISPLAY_REQUEST'
  1966.           EXPORTING
  1967.             i_trkorr    = l_orden
  1968.             i_operation = 'DISPLAY'.
  1969.       ENDIF.
  1970.   ENDCASE.
  1971. ENDFORM.
  1972.  
  1973. FORM data_load_02 USING p_index.
  1974.   TRY.
  1975.       DATA(l_orden) = t_tab_01[ p_index ]-trkorr.
  1976.       DATA(l_user) = t_tab_01[ p_index ]-as4user.
  1977.     CATCH cx_root.
  1978.       EXIT.
  1979.   ENDTRY.
  1980.  
  1981.   SELECT * FROM e070 AS a
  1982.     INNER JOIN e071 AS b
  1983.     ON b~trkorr = a~trkorr
  1984.   INTO CORRESPONDING FIELDS OF TABLE t_tab_02
  1985.   WHERE a~trkorr  = l_orden OR
  1986.   a~strkorr = l_orden.
  1987.   DELETE t_tab_02 WHERE pgmid EQ 'CORR'.
  1988.   SORT t_tab_02 BY trkorr pgmid object obj_name.
  1989.   DELETE ADJACENT DUPLICATES FROM t_tab_02 .
  1990.   LOOP AT t_tab_02 ASSIGNING FIELD-SYMBOL(<g>).
  1991.     <g>-vers = '@10@'.
  1992.     TRY.
  1993.         <g>-desc = st_system_types[ pgmid = <g>-pgmid object = <g>-object ]-text.
  1994.       CATCH cx_root.
  1995.     ENDTRY.
  1996.  
  1997.  
  1998.     PERFORM GET_USEr USING <g>-as4user CHANGING <g>-as4user_TXT.
  1999.     SELECT SINGLE korrnum datum INTO (<g>-trkorr_v, <g>-fecha) FROM vrsd
  2000.       WHERE objtype = <g>-object
  2001.         AND objname = <g>-obj_name
  2002.         AND versno  = '00000'.
  2003.  
  2004.   ENDLOOP.
  2005. *--[ Maquillamos columnas para hacerlo m&#65533;s bonito
  2006.   t_alv[ 2 ]-grid->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = t_alv[ 2 ]-fcat ).
  2007.   LOOP AT t_alv[ 2 ]-fcat ASSIGNING FIELD-SYMBOL(<fc>) WHERE no_out = abap_true.
  2008.     <fc>-no_out = abap_false.
  2009.   ENDLOOP.
  2010.   DATA(col_03) = 1.
  2011.   LOOP AT t_tab_02 ASSIGNING <g>.
  2012.     IF <g>-trkorr_v IS INITIAL. DATA(col_01) = 1. ENDIF.
  2013.     IF <g>-fecha IS INITIAL. DATA(col_02) = 1. ENDIF.
  2014.     IF <g>-as4user NE l_user. CLEAR col_03. ENDIF.
  2015.   ENDLOOP.
  2016.   IF NOT col_01 IS INITIAL. t_alv[ 2 ]-fcat[ fieldname = 'TRKORR_V' ]-no_out = abap_true. ENDIF.
  2017.   IF NOT col_03 IS INITIAL.
  2018.     t_alv[ 2 ]-fcat[ fieldname = 'AS4USER' ]-no_out     =  abap_true.
  2019.     t_alv[ 2 ]-fcat[ fieldname = 'AS4USER_TXT' ]-no_out =  abap_true.
  2020.   ENDIF.
  2021.   IF NOT col_02 IS INITIAL.
  2022.     t_alv[ 2 ]-fcat[ fieldname = 'FECHA' ]-no_out = abap_true.
  2023. *           t_alv[ 2 ]-fcat[ fieldname = 'VERS']-no_out = abap_true.
  2024.   ENDIF.
  2025.   CLEAR: col_01, col_02.
  2026.   t_alv[ 2 ]-grid->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = t_alv[ 2 ]-fcat ).
  2027.   t_alv[ 2 ]-grid->refresh_table_display( ).
  2028. ENDFORM.
  2029.  
  2030.  
  2031. FORM handle_menu_button USING e_object TYPE REF TO cl_ctmenu
  2032.                           e_ucomm
  2033.                           p_list.
  2034.   LOOP AT t_menus INTO DATA(Di) WHERE alv = p_list AND menu-id = e_ucomm.
  2035.     e_object->add_function( fcode = di-menu-function
  2036.                             icon = di-menu-icon
  2037.                             text = di-menu-text ).
  2038.   ENDLOOP.
  2039.  
  2040. ENDFORM.
  2041.  
  2042. FORM cfg_toolbar_menu.
  2043.  
  2044. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2045. *--[ MENU ALV 001 Cabecera Principal
  2046.   t_menus = VALUE #( BASE t_menus
  2047.  
  2048. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2049. *--[ Definición de botones
  2050.                        ( alv = 1 orden = 10
  2051.                          boton-butn_type = 0
  2052.                          boton-function = 'MC13' " 'REFR' ##NO_TEXT
  2053.                          boton-icon     = icon_refresh
  2054.                          boton-quickinfo = c_quick_13 ##NO_TEXT
  2055.                          boton-disabled  = abap_false )
  2056.  
  2057.                        ( alv = 1 orden = 10
  2058.                          boton-butn_type = 0
  2059.                          boton-function = 'MC14' "'CINS' ##NO_TEXT
  2060.                          boton-icon     = icon_inspection_characteristic
  2061.                          boton-quickinfo = c_quick_14 ##NO_TEXT
  2062.                          boton-disabled  = abap_false )
  2063.  
  2064.                        ( alv = 1 orden = 10
  2065.                          boton-butn_type = 0
  2066.                          boton-function = 'MC01' "'FREE' ##NO_TEXT
  2067.                          boton-icon     = icon_release
  2068.                          boton-quickinfo = c_quick_01 ##NO_TEXT
  2069.                          boton-disabled  = abap_false )
  2070.  
  2071.                        ( alv = 1 orden = 10
  2072.                          boton-butn_type = 0
  2073.                          boton-function = 'MC02' "'NEWO' ##NO_TEXT
  2074.                          boton-icon     = '@0Y@' "icon_transport
  2075.                          boton-quickinfo = c_quick_02
  2076.                          boton-disabled  = abap_false )
  2077.  
  2078.                        ( alv = 1 orden = 10
  2079.                          boton-butn_type = 0
  2080.                          boton-function = 'MC03' "'MERG' ##NO_TEXT
  2081.                          boton-icon     = icon_wd_custom_controller "icon_activity
  2082.                          boton-quickinfo = c_quick_03 ##NO_TEXT
  2083.                          boton-disabled  = abap_false )
  2084.  
  2085.                        ( alv = 1 orden = 10
  2086.                          boton-butn_type = 0
  2087.                          boton-function = 'MC04' "'INCL' ##NO_TEXT
  2088.                          boton-icon     = icon_replace
  2089.                          boton-quickinfo = c_quick_04
  2090.                          boton-disabled  = abap_false )
  2091.  
  2092.                         ( alv = 1 orden = 10
  2093.                           boton-butn_type = 0
  2094.                           boton-function = 'MC09' "'DELE' ##NO_TEXT
  2095.                           boton-icon     = icon_delete
  2096.                           boton-quickinfo = c_quick_09
  2097.                           boton-disabled  = abap_false )
  2098.  
  2099.                         ( alv = 1 orden = 10
  2100.                           boton-butn_type = 0
  2101.                           boton-function = 'MC12' "'LUSE'
  2102.                           boton-icon     = icon_activity_group
  2103.                           boton-quickinfo = c_quick_12
  2104.                           boton-disabled  = abap_false )
  2105.  
  2106.                         ( alv = 1 orden = 10
  2107.                           boton-butn_type = 0
  2108.                           boton-function = 'MC15' "'ADDT'
  2109.                           boton-icon     = icon_personnel_administration
  2110.                           boton-quickinfo = c_quick_15
  2111.                           boton-disabled  = abap_false )
  2112.  
  2113.                         ( alv = 1 orden = 10
  2114.                           boton-butn_type = 0
  2115.                           boton-function = 'MC18' "'TITS'
  2116.                           boton-icon     = icon_rename
  2117.                           boton-quickinfo = c_quick_18
  2118.                           boton-disabled  = abap_false )
  2119.  
  2120.                         ( alv = 1 orden = 10
  2121.                           boton-butn_type = 0
  2122.                           boton-function = 'MC10' "'DOME'
  2123.                           boton-icon     = icon_parameter_import
  2124.                           boton-quickinfo = c_quick_10
  2125.                           boton-disabled  = abap_false )
  2126.  
  2127.                         ( alv = 1 orden = 10
  2128.                           boton-butn_type = 0
  2129.                           boton-function = 'MC11' "'UPME'
  2130.                           boton-icon     = ICON_PARAMETER_export
  2131.                           boton-quickinfo = c_quick_11
  2132.                           boton-disabled  = abap_false )
  2133.  
  2134.                         ( alv = 1 orden = 10
  2135.                           boton-butn_type = 0
  2136.                           boton-function = 'MC06' "'VERF' ##NO_TEXT
  2137.                           boton-icon     = icon_check
  2138.                           boton-quickinfo = c_quick_06
  2139.                           boton-disabled  = abap_false )
  2140.  
  2141.                         ( alv = 1 orden = 10
  2142.                           boton-butn_type = 0
  2143.                           boton-function = 'MC19' "'BYEBYE' ##NO_TEXT
  2144.                           boton-icon     = icon_system_copy
  2145.                           boton-text      = 'Clipboard' ##NO_TEXT
  2146.                           boton-quickinfo = c_quick_19
  2147.                           boton-disabled  = abap_false )
  2148.  
  2149.                         ( alv = 1 orden = 10
  2150.                           boton-butn_type = 0
  2151.                           boton-function = 'MC20' "'BYEBYE' ##NO_TEXT
  2152.                           boton-icon     =  icon_transport
  2153.                           boton-text      = 'Transportar' ##NO_TEXT
  2154.                           boton-quickinfo = c_quick_20
  2155.                           boton-disabled  = abap_false )
  2156.  
  2157.                         ( alv = 1 orden = 30
  2158.                           boton-butn_type = 0
  2159.                           boton-function = 'MC22' "'DELE' ##NO_TEXT
  2160.                           boton-icon     = icon_document
  2161.                           boton-quickinfo = c_quick_22
  2162.                           boton-disabled  = abap_false )
  2163.  
  2164.                         ( alv = 1 orden = 999
  2165.                           boton-function = 'MC08' "'BYEBYE' ##NO_TEXT
  2166.                           boton-icon     = icon_cancel
  2167.                           boton-text      = 'Exit' ##NO_TEXT
  2168.                           boton-quickinfo = c_quick_08
  2169.                           boton-disabled  = abap_false )
  2170.  
  2171.  
  2172.  
  2173. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2174. *--[ Definición de Menús
  2175.                         ( alv = 1 orden = 998
  2176.                           boton-function = 'MN01' "'BYEBYE' ##NO_TEXT
  2177.                           boton-icon     = icon_system_sap_menu
  2178.                           boton-text      = c_quick_21 ##NO_TEXT
  2179.                           boton-quickinfo = c_quick_21
  2180.                           boton-butn_type = 2 "<-- Indica que es MENÚ
  2181.                           boton-disabled  = abap_false )
  2182.  
  2183. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2184. *--[ Definición de SubMenús
  2185.                         ( alv = 1 orden = 10
  2186.                           menu-id = 'MN01'
  2187.                           menu-function = 'MC05' "'BYEBYE' ##NO_TEXT
  2188.                           menu-icon     = icon_transport
  2189.                           menu-text      = c_quick_05 ##NO_TEXT
  2190.                           menu-disabled  = abap_false )
  2191.  
  2192.                         ( alv = 1 orden = 20
  2193.                           menu-id = 'MN01'
  2194.                           menu-function = 'MC07' "'BYEBYE' ##NO_TEXT
  2195.                           menu-icon     = icon_system_stop_recording
  2196.                           menu-text      = c_quick_07 ##NO_TEXT
  2197.                           menu-disabled  = abap_false )
  2198.  
  2199.                    ).
  2200. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2201. *--[ MENU ALV 002 Detalle de las órdenes
  2202.   t_menus = VALUE #( BASE t_menus ( alv = 2 orden = 20
  2203.                                     boton-butn_type = 0
  2204.                                     boton-function = 'MC16'
  2205.                                     boton-icon = icon_delete
  2206.                                     boton-text = ''
  2207.                                     boton-quickinfo = c_quick_16
  2208.                                     boton-disabled  = abap_false )
  2209.  
  2210.                                   ( alv = 2 orden = 10
  2211.                                     boton-butn_type = 0
  2212.                                     boton-function = 'MC17'
  2213.                                     boton-icon = icon_create
  2214.                                     boton-text = ''
  2215.                                     boton-quickinfo = c_quick_17
  2216.                                     boton-disabled  = abap_false )
  2217.                    ).
  2218. *--[ Posible codificación para un futuro
  2219. *|ALV|ORDEN|TYPO|BOT|MENU|MENU_ID|FUNCTION|ICONO|TEXTO|QUICKINFO|DISABLE|
  2220. *1|1|0|X|||MC17|icon_create||c_quick_17||
  2221.  
  2222.   SORT t_menus BY alv ASCENDING orden ASCENDING.
  2223.  
  2224. ENDFORM.
  2225.  
  2226. FORM handle_toolbar USING uo_object TYPE REF TO cl_alv_event_toolbar_set
  2227.                           p_list.
  2228.  
  2229.   LOOP AT t_menus INTO DATA(di) WHERE alv = p_list AND boton IS NOT INITIAL.
  2230.     APPEND di-boton TO uo_object->mt_toolbar.
  2231.   ENDLOOP.
  2232.  
  2233. ENDFORM.
  2234.  
  2235. FORM BUT_ver_orden.
  2236.   DATA: is_selection TYPE trwbo_selection.
  2237.  
  2238.   IF lines( index_rows ) = 1.
  2239.     is_selection-trkorrpattern = t_tab_01[ index_rows[ 1 ] ]-trkorr.
  2240.     CALL FUNCTION 'TR_SEARCH_AND_DISPLAY_REQUESTS' ##FM_SUBRC_OK
  2241.       EXPORTING
  2242.         iv_username            = '*'
  2243.         is_selection           = is_selection
  2244.         iv_via_selscreen       = abap_false
  2245.         iv_cua_status          = 'TDR_TOOL'
  2246.       EXCEPTIONS
  2247.         action_aborted_by_user = 1
  2248.         OTHERS                 = 2.
  2249.   ELSE.
  2250.     MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
  2251.   ENDIF.
  2252. ENDFORM.
  2253.  
  2254. FORM BUT_check_log.
  2255.   RANGES: p_ori_tr FOR e070-trkorr.
  2256.  
  2257.   IF lines( index_rows ) >= 1.
  2258.     REFRESH p_ori_tr.
  2259.     LOOP AT index_rows INTO DATA(l_i).
  2260.       p_ori_tr = 'IEQ'.
  2261.       p_ori_tr-low = t_tab_01[ l_i-index ]-trkorr. " l_tab_01-trkorr.
  2262.       APPEND p_ori_tr.
  2263.       AT LAST.
  2264.         SUBMIT /sdf/cmo_tr_check AND RETURN
  2265.                WITH p_source = 'DS4'
  2266.                 WITH p_dgp  = abap_true
  2267.                WITH p_target = '{PON AQUI EL DESTINO}' ##NO_TEXT
  2268.                WITH p_ori_tr IN p_ori_tr
  2269.                VIA SELECTION-SCREEN.
  2270.       ENDAT.
  2271.     ENDLOOP.
  2272.   ELSE.
  2273.     MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
  2274.   ENDIF.
  2275. ENDFORM.
  2276.  
  2277. FORM BUT_ver_log.
  2278.   IF lines( index_rows ) = 1.
  2279.     READ TABLE t_tab_01 INTO l_tab_01 INDEX index_rows[ 1 ]-index.
  2280.     SUBMIT rddprott AND RETURN WITH pv_korr  = l_tab_01-trkorr.
  2281.   ELSE.
  2282.     MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
  2283.   ENDIF.
  2284. ENDFORM.
  2285.  
  2286.  
  2287. FORM BUT_delete_object.
  2288.   DATA: ls_object  TYPE e071,
  2289.         ls_request TYPE trwbo_request,
  2290.         ls_line    TYPE trwbo_s_e071.
  2291.  
  2292.   SORT index_rows BY index DESCENDING.
  2293.   LOOP AT index_rows INTO DATA(l_rows).
  2294.     READ TABLE t_tab_02 INDEX l_rows-index INTO DATA(l_02).
  2295.  
  2296.     SELECT SINGLE * FROM e071 INTO CORRESPONDING FIELDS OF ls_object
  2297.       WHERE trkorr   = l_02-trkorr
  2298.         AND pgmid    = l_02-pgmid
  2299.         AND object   = l_02-object
  2300.         AND obj_name = l_02-obj_name.
  2301.  
  2302.     ls_line      = CORRESPONDING #( ls_object ).
  2303.     ls_request-h = CORRESPONDING #( ls_object ).
  2304.     APPEND ls_line TO ls_request-objects.
  2305.     ls_request-objects_filled = abap_true.
  2306.  
  2307.     CALL FUNCTION 'TRINT_DELETE_COMM_OBJECT_KEYS'
  2308.       EXPORTING
  2309.         is_e071_delete       = ls_object
  2310.         iv_dialog_flag       = abap_true
  2311.       CHANGING
  2312.         cs_request           = ls_request
  2313.       EXCEPTIONS
  2314.         r_user_cancelled     = 1
  2315.         r_user_didnt_confirm = 2
  2316.         OTHERS               = 3.
  2317.     CHECK sy-subrc EQ 0.
  2318.     DELETE t_tab_02 INDEX l_rows-index.
  2319.     t_alv[ 2 ]-grid->refresh_table_display( ).
  2320.   ENDLOOP.
  2321. ENDFORM.
  2322.  
  2323. FORM bUT_exit_program. " *--[ Destruir controladores y ALVs
  2324.   cc_01->free( ).
  2325.   FREE: cc_01.
  2326.   CLEAR: cc_01, t_alv[ 1 ]-grid, t_alv[ 2 ]-grid, t_alv[ 3 ]-grid.
  2327.   LEAVE TO SCREEN 0.
  2328. ENDFORM.
  2329.  
  2330. TYPES: BEGIN OF ty_users,
  2331.          user     TYPE xubname,
  2332.          name(80),
  2333.        END OF ty_users.
  2334. DATA: t_users TYPE STANDARD TABLE OF ty_users.
  2335.  
  2336. FORM get_user USING p_user CHANGING p_user_txt.
  2337.   DATA l_user(80).
  2338.   CHECK NOT p_user IS INITIAL.
  2339.   TRY.
  2340.       p_user_txt = t_users[ user =  p_user ]-name.
  2341.     CATCH cx_root.
  2342.  
  2343.       SELECT SINGLE f~bname && ' ' && p~name_first && ' ' && p~name_last INTO @p_user_txt
  2344.       FROM usr21 AS f INNER JOIN adrp AS p ON f~persnumber = p~persnumber
  2345.       WHERE f~bname = @p_user.
  2346.       REPLACE ALL OCCURRENCES OF p_user IN p_user_txt WITH ''.
  2347.       CONDENSE p_user_txt.
  2348.       IF p_user_txt IS INITIAL. p_user_txt = p_user. ENDIF.
  2349.       t_users = VALUE #( BASE t_users ( user = p_user name = p_user_txt ) ).
  2350.  
  2351.   ENDTRY.
  2352.  
  2353. ENDFORM.
  2354.  
  2355. FORM MENU_add_options USING p_e_object TYPE REF TO cl_ctmenu.
  2356.  
  2357.   TYPES: BEGIN OF ty_tab,
  2358.            text  TYPE gui_text,
  2359.            fcode TYPE ui_func,
  2360.          END OF ty_tab.
  2361.   DATA: l_num TYPE n LENGTH 2,
  2362.         t_tab TYPE SORTED TABLE OF ty_tab WITH UNIQUE KEY text.
  2363.  
  2364.   DO 99 TIMES.
  2365.     l_num = sy-index.
  2366.     DATA(l_quick) = |c_quick_{ l_num }|.
  2367.     ASSIGN (l_quick) TO FIELD-SYMBOL(<f_quick>).
  2368.     IF sy-subrc NE 0.
  2369.       EXIT.
  2370.     ENDIF.
  2371.     t_tab = VALUE #( BASE t_tab ( fcode = |MC{ l_num }| text =  <f_quick> ) ).
  2372.   ENDDO.
  2373.  
  2374.   LOOP AT t_tab INTO DATA(l_tab).
  2375.     p_e_object->add_function( EXPORTING fcode = l_tab-fcode text  = l_tab-text ).
  2376.   ENDLOOP.
  2377.  
  2378. ENDFORM.