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