REPORT z_xx_prg_ordenes.
CONSTANTS: c_vers TYPE string VALUE 'v1.21' ##NO_TEXT,
c_copyleft TYPE string VALUE 'CopyLeft 2023 Alex Bergonzini' ##NO_TEXT,
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[
*--[ 1.02 20230613 Anyadido split de ventanas + pasado SCID
*--[ 1.03 20230614 Ocultamos las columnas de SYS+RC todo en un SRC + BOTones
*--[ 1.04 20230614 Cambiado totalmente el motor de busqueda, ahora lo recupera todo bien.
*--[ + Navegacion al objeto + Un monton de nuevas funcionalidades
*--[ 1.05 20230616 + UP/DOWN Ordenes
*--[ 1.06 20230619 + Edicion de los objetos de las ordenes
*--[ 1.07 20230620 + Corregido BUG de ordenes solitarias
*--[ 1.08 20230621 + Corregido auto-tcode
*--[ 1.09 20230622 + Change username + TCODES + POPUP To Release
*--[ 1.10 20231102 + Gestion de versiones
*--[ 1.11 20231219 + Anyaadido cambio de propietario automatico
*--[ 1.12 20240103 + ALV Con contenido de claves R3TR-TABU/CDAT
*--[ 1.13 20240104 + Anyadido boton de borrado de objetos + maquillajes
*--[ 1.14 20240105 + Anyadimos objetos a las ordenes y correcciones
*--[ 1.15 20240201 + Anyadida funcionalidad de cambio de título
*--[ 1.16 20240205 + Anyadidos menus contextuales de raton
*--[ 1.17 20240312 + Anyadidos filtros basicos de WB - CUS
*--[ 1.18 20240315 + Versiones en las órdenes
*--[ 1.19 20240322 + Error en busqueda de objetos
*--[ 1.20 20240404 + Exportacion de las ordenes al clipboard + Transporte
*--[ 1.21 20240411 + Boton Documentacion
*--[
*--[ Revisar la funcion: TRINT_TDR_USER_COMMAND
*--[ ** NO DISCLAIMER ** NO WARRANTY ** NO CRY ** NO REGRETS **
*--[
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Translate me
C_There_can_be_only_one TYPE string VALUE 'Debes seleccionar 1' ##NO_TEXT,
c_quick_01 TYPE iconquick VALUE 'Liberar' ##NO_TEXT,
c_quick_02 TYPE iconquick VALUE 'Crear orden nueva' ##NO_TEXT,
c_quick_03 TYPE iconquick VALUE 'Fusionar.' ##NO_TEXT,
c_quick_04 TYPE iconquick VALUE 'Incluir objetos de otra orden' ##NO_TEXT,
c_quick_05 TYPE iconquick VALUE 'SE09 - Mis ordenes' ##NO_TEXT,
c_quick_06 TYPE iconquick VALUE 'Verificar pre-transporte' ##NO_TEXT,
c_quick_07 TYPE iconquick VALUE 'STMS Gestion del STMS' ##NO_TEXT,
c_quick_08 TYPE iconquick VALUE 'Bye Bye Bye' ##NO_TEXT,
c_quick_09 TYPE iconquick VALUE 'Borrar orden' ##NO_TEXT,
c_quick_10 TYPE iconquick VALUE 'Descargar orden' ##NO_TEXT,
c_quick_11 TYPE iconquick VALUE 'Subir orden' ##NO_TEXT,
c_quick_12 TYPE iconquick VALUE 'Cambiar titular' ##NO_TEXT,
c_quick_13 TYPE iconquick VALUE 'Refrescar' ##NO_TEXT,
c_quick_14 TYPE iconquick VALUE 'Verificacion' ##NO_TEXT,
c_quick_15 TYPE iconquick VALUE 'Anyadir tarea' ##NO_TEXT,
c_quick_16 TYPE iconquick VALUE 'Eliminar objeto' ##NO_TEXT,
c_quick_17 TYPE iconquick VALUE 'Anyadir objetos' ##NO_TEXT,
c_quick_18 TYPE iconquick VALUE 'Cambiar titulo' ##NO_TEXT,
c_quick_19 TYPE iconquick VALUE 'Enviar a Clipboard' ##NO_TEXT,
c_quick_20 TYPE iconquick VALUE 'Transportar' ##NO_TEXT,
c_quick_21 TYPE iconquick VALUE 'Extras' ##NO_TEXT,
c_quick_22 TYPE iconquick VALUE 'Documentacion' ##NO_TEXT,
C_avl_01 TYPE scrtext_l VALUE 'Tarea' ##NO_TEXT,
C_avl_02 TYPE scrtext_l VALUE 'Propietario' ##NO_TEXT,
C_avl_03 TYPE scrtext_l VALUE 'Nombre Propietario' ##NO_TEXT,
C_avl_04 TYPE scrtext_l VALUE 'ID' ##NO_TEXT,
C_avl_05 TYPE scrtext_l VALUE 'Tipo Objeto' ##NO_TEXT,
C_avl_06 TYPE scrtext_l VALUE 'Ultima version' ##NO_TEXT,
C_avl_07 TYPE scrtext_l VALUE 'en fecha' ##NO_TEXT,
C_avl_08 TYPE scrtext_l VALUE 'Objeto' ##NO_TEXT,
C_avl_09 TYPE scrtext_l VALUE 'Orden' ##NO_TEXT,
C_avl_10 TYPE scrtext_l VALUE 'LOG' ##NO_TEXT,
C_avl_11 TYPE scrtext_l VALUE 'Tipo' ##NO_TEXT,
C_avl_12 TYPE scrtext_l VALUE 'Sistema' ##NO_TEXT,
C_avl_13 TYPE scrtext_l VALUE 'Fecha' ##NO_TEXT,
C_avl_14 TYPE scrtext_l VALUE 'Hora' ##NO_TEXT,
C_avl_15 TYPE scrtext_l VALUE 'RC' ##NO_TEXT,
C_avl_16 TYPE scrtext_l VALUE 'Descripcion' ##NO_TEXT,
c_avl_17 TYPE scrtext_l VALUE 'G.Versiones' ##NO_TEXT,
c_avl_18 TYPE scrtext_l VALUE 'Clave' ##NO_TEXT,
c_avl_19 TYPE scrtext_l VALUE 'IMG' ##NO_TEXT,
c_avl_20 TYPE scrtext_l VALUE 'Pos.' ##NO_TEXT,
c_avl_21 TYPE scrtext_l VALUE 'Doc' ##NO_TEXT,
c_pop_01 TYPE scrtext_l VALUE 'En Dialogo' ##NO_TEXT,
c_pop_02 TYPE scrtext_l VALUE 'En Fondo' ##NO_TEXT,
c_pop_03 TYPE scrtext_l VALUE 'Mensaje confirmacion' ##NO_TEXT,
c_pop_04 TYPE scrtext_l VALUE 'Ver LOG' ##NO_TEXT,
c_pop_05 TYPE scrtext_l VALUE 'Simulacion' ##NO_TEXT,
c_mark_fields_01(22) VALUE 'Opciones de liberacion' ##NO_TEXT,
c_mark_fields_02(22) VALUE 'Bajo tu responsalidad' ##NO_TEXT,
c_msg_01 TYPE scrtext_l VALUE 'Tarea creada' ##NO_TEXT,
c_msg_02 TYPE scrtext_l VALUE 'Cambios realizados' ##NO_TEXT,
c_msg_03 TYPE scrtext_l VALUE 'Error, orden no permitida.' ##NO_TEXT,
c_msg_04 TYPE scrtext_l VALUE 'Datos exportados al clipboard' ##NO_TEXT,
c_msg_05 TYPE scrtext_l VALUE 'Máquina de destino' ##NO_TEXT,
c_main_tit TYPE tstct-ttext VALUE 'Gestion de ordenes de transporte' ##NO_TEXT,
C_scrfname TYPE scrfname VALUE 'CC_ALV_01' ##NO_TEXT,
c_tcodes TYPE string VALUE 'ZE09|ZSE09|ZE10|ZSE10|ZE01|ZSE01' ##NO_TEXT.
CLASS lcl_event_handler DEFINITION DEFERRED.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ INCLUDE Z_XX_I_ORDENES_TOP
TABLES: sscrfields. "<-- Para los botones en el PF-STATUS
TYPES: BEGIN OF ty_orden,
trkorr TYPE e071-trkorr,
as4user TYPE as4user,
as4user_TXT(80),
pgmid TYPE e071-pgmid,
object TYPE e071-object,
trkorr_v TYPE e071-trkorr,
fecha TYPE datum,
vers TYPE char6,
obj_name TYPE e071-obj_name,
END OF ty_orden,
BEGIN OF ty_sys,
sys(30) ,
END OF ty_sys,
*--[ Se puede hacer dinamico, pero es mas facil trabajar
*--[ de forma estatica.
BEGIN OF ty_Zxx_st_ordenes,
trkorr TYPE trkorr,
log TYPE char10,
doc TYPE char10,
orden TYPE trkorr,
tarea TYPE trkorr,
as4user TYPE as4user,
as4user_TXT(80),
trfunction TYPE trfunction,
trfunction_txt(30),
sys01 TYPE sysysid,
ico01 TYPE char10,
dat01 TYPE datum,
tim01 TYPE uzeit,
rc01 TYPE sysubrc,
sys02 TYPE sysysid,
ico02 TYPE char10,
dat02 TYPE datum,
tim02 TYPE uzeit,
rc02 TYPE sysubrc,
sys03 TYPE sysysid,
ico03 TYPE char10,
dat03 TYPE datum,
tim03 TYPE uzeit,
rc03 TYPE sysubrc,
sys04 TYPE sysysid,
ico04 TYPE char10,
dat04 TYPE datum,
tim04 TYPE uzeit,
rc04 TYPE sysubrc,
as4text TYPE as4text,
END OF ty_Zxx_st_ordenes,
BEGIN OF ty_release,
dialog(1),
fondo(1),
succes(1),
log(1),
simula(1),
END OF ty_release,
BEGIN OF ty_menu,
id TYPE sy-ucomm,
function TYPE ui_func,
text TYPE gui_text,
icon TYPE icon_d,
ftype TYPE cua_ftyp,
disabled TYPE cua_active,
hidden TYPE cua_active,
END OF ty_menu,
BEGIN OF ty_toolbar,
alv TYPE i,
orden TYPE i,
boton TYPE stb_button,
menu TYPE ty_menu,
END OF ty_toolbar,
BEGIN OF ty_alv,
grid TYPE REF TO cl_gui_alv_grid,
layout TYPE lvc_s_layo,
variant TYPE disvariant,
fcat TYPE lvc_t_fcat,
event TYPE REF TO lcl_event_handler,
END OF ty_alv.
DATA: t_menus TYPE STANDARD TABLE OF ty_toolbar,
s_menus LIKE LINE OF t_menus,
t_ALV TYPE STANDARD TABLE OF ty_alv,
g_ALV LIKE LINE OF t_ALV.
DATA: g_okcode TYPE sy-ucomm,
t_fcode TYPE TABLE OF sy-ucomm,
e_rc TYPE i,
index_rows TYPE lvc_t_row,
G_rele_param TYPE ty_release,
tt_system TYPE STANDARD TABLE OF tmscsys,
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Definiciones ALV
cc_01 TYPE REF TO cl_gui_custom_container,
cm_01 TYPE scrfname VALUE C_scrfname,
G_Split TYPE REF TO cl_gui_splitter_container,
G_Split_2 TYPE REF TO cl_gui_splitter_container,
t_tab_00 TYPE STANDARD TABLE OF ty_sys,
t_tab_01 TYPE STANDARD TABLE OF ty_Zxx_st_ordenes,
t_tab_03 TYPE STANDARD TABLE OF ty_Zxx_st_ordenes,
t_tab_02 TYPE STANDARD TABLE OF ty_orden,
l_tab_01 LIKE LINE OF t_tab_01,
dir_trans(1024),
gt_toolbar TYPE ui_functions.
CLASS lcl_event_handler DEFINITION FINAL.
PUBLIC SECTION .
DATA: p_id_list TYPE sysubrc,
g_row_id TYPE lvc_s_row.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object, " e_interactive,
handle_menu_button
FOR EVENT menu_button OF cl_gui_alv_grid
IMPORTING e_object e_ucomm,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm .
METHODS:handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id,
handle_context_menu
FOR EVENT context_menu_request OF cl_gui_alv_grid
IMPORTING e_object.
PRIVATE SECTION.
* DATA: lt_std_fcodes TYPE ui_functions,
* lt_own_fcodes TYPE ui_functions.
METHODS:
get_id_list.
ENDCLASS.
DATA: G_event_01 TYPE REF TO lcl_event_handler,
G_event_02 TYPE REF TO lcl_event_handler.
CLASS lcl_event_handler IMPLEMENTATION .
METHOD get_id_list.
p_id_list = 1.
IF me = t_alv[ 2 ]-event. p_id_list = 2. ENDIF.
ENDMETHOD.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ AVL
METHOD handle_hotspot_click.
me->get_id_list( ). PERFORM handle_hotspot USING e_row_id e_column_id me->p_id_list.
ENDMETHOD.
METHOD handle_toolbar.
me->get_id_list( ). PERFORM handle_toolbar USING e_object me->p_id_list.
ENDMETHOD .
METHOD handle_user_command .
me->get_id_list( ). PERFORM handle_user_command USING e_ucomm me->p_id_list CHANGING g_row_id.
ENDMETHOD.
METHOD handle_context_menu.
me->get_id_list( ). PERFORM handle_context_menu USING e_object CHANGING g_row_id.
ENDMETHOD.
METHOD handle_menu_button.
me->get_id_list( ). PERFORM handle_menu_button USING e_object e_ucomm me->p_id_list.
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ INCLUDE Z_XX_I_ORDENES_SEL.
TABLES: e071, e070, e07t.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
SELECT-OPTIONS: s_orden FOR e071-trkorr OBLIGATORY,
s_as4tex FOR e07t-as4text LOWER CASE,
s_obj FOR e071-obj_name,
s_user FOR e070-as4user,
s_date FOR e070-as4date.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_norel AS CHECKBOX DEFAULT abap_true,
p_rel AS CHECKBOX DEFAULT abap_true,
p_wb AS CHECKBOX DEFAULT abap_true,
p_cus AS CHECKBOX DEFAULT abap_true,
p_vers AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN SKIP 1.
*--[ Como no sirve la lectura de la cola de transporte, ya que pueden haber
*--[ m�s maquinas que no est�n en la capa de transporte y se transporte,
*--[ lo pongo a manija, para que el luser lo modifique (VER INITIALIZATION)
PARAMETERS: p_stms(30) OBLIGATORY. "<-- No sirve la cola de transportes... MEC!
SELECTION-SCREEN END OF BLOCK b01.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /01(40) g_vers.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 3.
SELECTION-SCREEN FUNCTION KEY 4.
SELECTION-SCREEN FUNCTION KEY 5.
*--[ Modules DYNPRO
MODULE pbo_0100 OUTPUT. PERFORM pbo_0100. ENDMODULE.
MODULE pai_0100 INPUT. PERFORM pai_0100. ENDMODULE.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ INCLUDE Z_XX_I_ORDENES_EVE.
AT SELECTION-SCREEN.
PERFORM eve_start_of_selection.
INITIALIZATION.
PERFORM eve_initialization.
START-OF-SELECTION.
PERFORM data_load.
END-OF-SELECTION.
PERFORM data_list.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ INCLUDE Z_XX_I_ORDENES_FRM2.
FORM data_list.
CALL SCREEN '0100'.
ENDFORM.
FORM eve_start_of_selection.
CASE sscrfields-ucomm.
WHEN 'FC01'. CALL TRANSACTION 'SE09'.
WHEN 'FC02'. PERFORM create_new_request IN PROGRAM rddm0001 USING 'KWTCEO'.
WHEN 'FC03'. PERFORM BUT_rename_owner.
ENDCASE.
ENDFORM.
FORM BUT_Re_version USING p_orden.
TYPES: BEGIN OF ty_e07t,
desc(55),
beg(1),
vers TYPE n LENGTH 3,
end(1),
END OF ty_e07t,
BEGIN OF ty_tot,
obj_name TYPE e071-obj_name,
num TYPE i,
END OF ty_tot.
DATA: l_txt TYPE ty_e07t,
t_tot TYPE STANDARD TABLE OF ty_tot,
l_tot LIKE LINE OF t_tot.
CHECK p_vers = abap_true.
CLEAR l_txt.
REFRESH t_tot.
l_txt-beg = '['. l_txt-end = ']'.
SELECT SINGLE as4text INTO @DATA(l_txt_old) FROM e07t
WHERE trkorr = @p_orden.
CHECK l_txt_old NP '*[+++]'.
l_txt-desc = l_txt_old.
DATA(l_desc_old) = |{ l_txt-desc }%|. "<-- Buscamos una anterior
DATA(l_desc_old_2) = |{ l_txt-desc }%[___]|.
DATA l_new TYPE string.
*--[ Evitamos las que no tienen numeración primero
SELECT a~as4text INTO l_new FROM e07t AS a
INNER JOIN e070 AS b
ON b~strkorr = a~trkorr
UP TO 1 ROWS
WHERE a~langu = sy-langu
AND a~as4text LIKE l_desc_old_2
AND a~trkorr NE p_orden
ORDER BY a~trkorr DESCENDING.
ENDSELECT.
IF l_new IS INITIAL.
*--[ Si es nueva, buscamos la última
SELECT a~as4text INTO l_new FROM e07t AS a
INNER JOIN e070 AS b
ON b~strkorr = a~trkorr
UP TO 1 ROWS
WHERE a~langu = sy-langu
AND a~as4text LIKE l_desc_old
AND a~trkorr NE p_orden
ORDER BY a~trkorr DESCENDING.
ENDSELECT.
ENDIF.
IF sy-subrc EQ 0 OR l_new IS NOT INITIAL.
IF l_new CP '*[+++]'.
l_txt = l_new.
l_txt-vers += 1.
ELSE.
l_txt-desc = l_new.
l_txt-vers = '001'.
ENDIF.
UPDATE e07t
SET as4text = l_txt
WHERE trkorr = p_orden
AND langu = sy-langu.
ELSE.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Buscamos a la antigua usanza
SELECT b~obj_name FROM e070 AS a
INNER JOIN e071 AS b
ON b~trkorr = a~trkorr
INTO CORRESPONDING FIELDS OF TABLE t_tot
WHERE a~strkorr = p_orden.
SORT t_tot. DELETE ADJACENT DUPLICATES FROM t_tot.
LOOP AT t_tot ASSIGNING FIELD-SYMBOL(<f_tot>).
SELECT COUNT( * ) INTO <f_tot>-num FROM e071 WHERE obj_name = <f_tot>-obj_name.
ENDLOOP.
SORT t_tot BY num DESCENDING.
TRY.
l_txt-vers = t_tot[ 1 ]-num.
UPDATE e07t
SET as4text = l_txt
WHERE trkorr = p_orden
AND langu = sy-langu.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDFORM.
FORM but_rename_owner.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Eliminamos la propiedad de la orden
SELECT a~trkorr, b~as4user FROM e070 AS a
INNER JOIN e070 AS b
ON b~sTRKORR = a~trkorr AND
b~as4user NE a~as4user
WHERE a~as4user = @sy-uname AND
a~trstatus IN ('D', 'L') AND
a~strkorr IS INITIAL
ORDER BY a~trkorr
INTO TABLE @DATA(t_0).
*--[ Eliminamos duplicados
LOOP AT t_0 INTO DATA(l_0).
DELETE t_0 WHERE trkorr = l_0-trkorr AND as4user NE l_0-as4user.
ENDLOOP.
*--[ Renombramos
LOOP AT t_0 INTO l_0.
PERFORM BUT_Re_version USING l_0-trkorr.
UPDATE e070
SET as4user = l_0-as4user
WHERE trkorr = l_0-trkorr.
AT LAST.
MESSAGE s398(00) WITH c_msg_02.
ENDAT.
ENDLOOP.
ENDFORM.
FORM eve_initialization.
g_vers = c_vers.
sscrfields-functxt_01 = |@10@ SE09|.
sscrfields-functxt_02 = |@0Y@ Orden|.
sscrfields-functxt_03 = |@4F@ Cambiar Propietario+Version|.
S_orden-sign = 'I'. S_orden-option = 'CP'. S_orden-low = sy-sysid && 'K*'. APPEND s_orden.
s_user-sign = 'I'. s_user-option = 'EQ'. s_user-low = sy-uname. APPEND s_user.
s_date-sign = 'I'. s_date-option = 'BT'. s_date-high = sy-datum.
* s_date-low = sy-datum - 30.
APPEND s_date.
p_rel = abap_false.
p_norel = abap_true.
*--[ Ver comentario en el par�metro
IF sy-host CP 'g*'.
P_stms = 'DS4>QS4>TS4>PS4'.
ELSE.
P_stms = 'DS4>IS4>PS4'.
ENDIF.
CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_QUEUE'
EXPORTING
iv_count_only = abap_true
iv_monitor = abap_true
iv_progress_min = 1
iv_progress_max = 100
iv_expiration_date = sy-datum
iv_allow_expired = abap_true
TABLES
tt_system = tt_system
EXCEPTIONS
read_config_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Who cares!
ENDIF.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS'
ID 'VALUE' FIELD dir_trans.
PERFORM eve_initialization_tcode. "Egg Drop
PERFORM cfg_toolbar_menu.
DO 3 TIMES. APPEND g_alv TO t_alv. ENDDO.
ENDFORM.
FORM eve_initialization_tcode.
DATA: l_tstct TYPE tstct.
SPLIT c_tcodes AT '|' INTO TABLE DATA(t_tcodes).
LOOP AT t_tcodes INTO DATA(l_di).
SELECT SINGLE * FROM tstct INTO CORRESPONDING FIELDS OF l_tstct
WHERE tcode = l_di.
CHECK sy-subrc NE 0.
l_tstct-tcode = l_di.
l_TSTCT-ttext = c_main_tit.
CALL FUNCTION 'RPY_TRANSACTION_INSERT'
EXPORTING
transaction = l_tstct-tcode
program = sy-repid
dynpro = '1000'
language = sy-langu
development_class = '$TMP'
transaction_type = 'R'
shorttext = l_TSTCT-ttext
professionel_user_transaction = abap_true
html_enabled = abap_true
java_enabled = abap_true
wingui_enabled = abap_true
EXCEPTIONS
cancelled = 1
already_exist = 2
permission_error = 3
name_not_allowed = 4
name_conflict = 5
illegal_type = 6
object_inconsistent = 7
db_access_error = 8
OTHERS = 9.
ENDLOOP.
ENDFORM.
FORM data_load.
DATA: t_cofile TYPE ctslg_cofile,
r_status TYPE RANGE OF e070-trstatus.
DATA(mi_i) = COND #( WHEN p_norel = abap_true THEN 'I' ELSE 'E' ).
r_status = VALUE #( ( sign = mi_i option = 'EQ' low = 'D' )
( sign = mi_i option = 'EQ' low = 'L' )
).
mi_i = COND #( WHEN p_rel = abap_true THEN 'I' ELSE 'E' ).
r_status = VALUE #( BASE r_status ( sign = mi_i option = 'EQ' low = 'O' )
( sign = mi_i option = 'EQ' low = 'R' )
( sign = mi_i option = 'EQ' low = 'N' )
).
REFRESH: t_tab_02, t_tab_00, t_tab_01.
SPLIT p_stms AT '>' INTO TABLE DATA(t_TS).
T_tab_00 = VALUE #( FOR ls IN t_ts ( sys = ls ) ).
*--[ Estamos en una b�quedas compleja, ya que la tabla E070, puede tener �rdenes y tareas
*--[ y las diferentes b�squedas de objeto, luser, descripci�n lo hacen complejo.
*--[ Puede (seguro) tener fallos
SELECT strkorr AS orden
trkorr AS tarea
as4user
as4date AS dat01
FROM e070 INTO CORRESPONDING FIELDS OF TABLE t_tab_01 ##TOO_MANY_ITAB_FIELDS
WHERE trkorr IN s_orden AND
strkorr NE e070-strkorr
AND trstaTus IN r_status.
*--[ Recuperamos todas las ordenes
SELECT trkorr AS orden
as4user
as4date AS dat01
FROM e070 APPENDING CORRESPONDING FIELDS OF TABLE t_tab_01 ##TOO_MANY_ITAB_FIELDS
WHERE trkorr IN s_orden AND
strkorr EQ e070-strkorr
AND trstaTus IN r_status.
*--[ Eliminamos �rdenes duplicadas
*--[ Nos cargamos las fechas
DELETE t_tab_01 WHERE as4user NOT IN s_user OR
dat01 NOT IN s_date.
SORT t_tab_01 BY tarea DESCENDING.
LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<fo>) WHERE tarea IS NOT INITIAL.
DELETE t_tab_01 WHERE orden = <fo>-orden AND tarea IS INITIAL.
ENDLOOP.
*--[ Añadimos todas las tareas de las �rdenes
IF lines( t_tab_01 ) > 0.
SELECT strkorr AS orden
trkorr AS tarea
as4user
as4date AS Dat01
FROM e070
INTO CORRESPONDING FIELDS OF TABLE t_tab_03
FOR ALL ENTRIES IN t_tab_01
WHERE strkorr = t_tab_01-orden AND trstaTus IN r_status.
*--[ Buscamos las �rdenes solitarias
SELECT trkorr AS orden,
as4user,
trfunction AS trfunction,
as4date AS Dat01 FROM e070
INTO TABLE @DATA(t_tab_04)
FOR ALL ENTRIES IN @t_tab_01
WHERE trkorr = @t_tab_01-orden AND trstaTus IN @r_status AND strkorr = @e070-trkorr.
LOOP AT t_tab_04 INTO DATA(l_4).
TRY.
DATA(l_lobo) = t_tab_03[ orden = l_4-orden ].
CATCH cx_root.
CLEAR l_tab_01.
MOVE-CORRESPONDING l_4 TO l_tab_01. APPEND l_tab_01 TO t_tab_03.
CONTINUE.
ENDTRY.
DELETE t_tab_04 WHERE orden = l_4-orden.
ENDLOOP.
SORT t_tab_03.
DELETE ADJACENT DUPLICATES FROM t_tab_03.
t_tab_01[] = t_tab_03[].
ENDIF.
SORT t_tab_01 BY trkorr ASCENDING.
DELETE ADJACENT DUPLICATES FROM t_tab_01.
REFRESH t_tab_03.
*--[ Buscamos objetos r�pido!
IF lines( s_obj ) > 0.
SELECT * FROM e071 INTO TABLE @DATA(t_objetos)
WHERE obj_name IN @s_obj.
ENDIF.
LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<f>).
AT FIRST.
SELECT domvalue_l AS value,
ddtext AS value_TXT
FROM dd07t
INTO TABLE @DATA(t_func)
WHERE domname = 'TRFUNCTION' AND
ddlanguage = @sy-langu.
LOOP AT t_func ASSIGNING FIELD-SYMBOL(<ftf>) WHERE value CA 'KWT'.
<ftf>-value_TXT = COND #( WHEN <ftf>-value = 'K' THEN 'WB' ELSE COND #( WHEN <ftf>-value = 'W' THEN 'CUS' ELSE 'TC' ) ).
ENDLOOP.
ENDAT.
READ TABLE t_tab_03 TRANSPORTING NO FIELDS WITH KEY orden = <f>-orden.
CHECK sy-subrc NE 0.
<f>-trkorr = <f>-orden.
IF <f>-as4text IS INITIAL.
SELECT SINGLE as4text INTO <f>-as4text FROM e07t
WHERE trkorr = <f>-trkorr
AND langu = sy-langu.
ENDIF.
IF <f>-as4text NOT IN s_as4tex.
DELETE t_tab_01 WHERE Orden = <f>-orden.
CONTINUE.
ENDIF.
*--[ Buscamos los objetos, va a ser muy lento
IF lines( s_obj ) > 0.
* SELECT single b~trkorr, b~strkorr FROM e071 AS a
* INNER JOIN e070 AS b
* ON b~trkorr = a~trkorr OR
* b~strkorr = a~trkorr
* INTO @data(t_aux)
* WHERE
* obj_name IN @s_obj and
* ( b~trkorr = @<f>-orden or
* b~Strkorr = @<f>-orden or
* b~trkorr = @<f>-tarea ).
LOOP AT t_objetos INTO DATA(l_objetos) WHERE trkorr = <f>-orden OR trkorr = <f>-tarea.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
DELETE t_tab_01 WHERE Orden = <f>-orden AND trkorr = <f>-tarea.
CONTINUE.
ENDIF.
ENDIF.
FREE t_cofile.
TRY.
CALL FUNCTION 'TR_READ_GLOBAL_INFO_OF_REQUEST'
EXPORTING
iv_trkorr = <f>-trkorr
IMPORTING
es_cofile = t_cofile
ev_user = <f>-as4user.
CATCH cx_root.
CONTINUE. "<-- Por si peta
ENDTRY.
IF <f>-as4user IS INITIAL.
SELECT SINGLE as4user as4date FROM e070 INTO (<f>-as4user, <f>-dat01)
WHERE trkorr = <f>-orden.
ENDIF.
PERFORM GET_USEr USING <f>-as4user CHANGING <f>-as4user_TXT.
LOOP AT t_COFILE-systems INTO DATA(l_dat).
READ TABLE t_tab_00 TRANSPORTING NO FIELDS WITH KEY sys = l_dat-SYStemid.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
*--[ Gloria a los field-symbols
DATA(l_val) = '<f>-SYS0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fSYS>).
l_val = '<f>-DAT0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fDAT>).
l_val = '<f>-TIM0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fTIM>).
l_val = '<f>-RC0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fRC>).
l_val = '<f>-ICO0' && sy-tabix. CONDENSE l_val NO-GAPS. ASSIGN (l_val) TO FIELD-SYMBOL(<fico>).
<fsys> = l_dat-SYStemid.
DATA(l_save) = abap_false.
LOOP AT l_dat-steps INTO DATA(l_steps).
CASE l_steps-stepid.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Esto seguramente se tendr� que ampliar
WHEN 'E'. l_save = abap_true.
WHEN 'G'. l_save = abap_true.
WHEN 'V'. l_save = abap_true.
ENDCASE.
CHECK l_save = abap_true.
*--[ Esto es para quedarnos con la �ltima entrada en tablas
DATA(l_lin) = lines( l_steps-actions ).
<fdat> = l_steps-actions[ l_lin ]-date.
<ftim> = l_steps-actions[ l_lin ]-time.
<fRC> = l_steps-actions[ l_lin ]-rc.
CASE <frc>.
WHEN 0. <fico> = icon_green_light.
WHEN 4. <fico> = icon_yellow_light.
WHEN 8. <fico> = icon_red_light.
WHEN OTHERS. <fico> = icon_cancel.
ENDCASE.
CLEAR l_save.
ENDLOOP.
ENDLOOP.
IF NOT <f>-ico01 IS INITIAL.
<f>-log = icon_display_text.
ENDIF.
*--[ No me queda mas remedio que buscar again
SELECT SINGLE trfunction INTO <f>-trfunction FROM e070
WHERE trkorr = <f>-trkorr.
<f>-trfunction_txt = t_func[ value = <f>-trfunction ]-value_txt.
IF p_wb NE abap_true. CHECK <f>-trfunction_txt NE 'WB'. ENDIF.
IF p_cus NE abap_true. CHECK <f>-trfunction_txt NE 'CUS'. ENDIF.
SELECT SINGLE dokversion INTO @DATA(l_doc) FROM dokhl
WHERE id = 'TA'
AND object = @<f>-trkorr
AND langu = @sy-langu
AND typ = 'T'.
IF sy-subrc EQ 0.
<f>-doc = icon_document.
ENDIF.
APPEND <f> TO t_tab_03.
ENDLOOP.
t_tab_01[] = t_tab_03[].
*--[ Las primeras serán las últimas
SORT t_tab_01 BY sys01 ASCENDING trfunction ASCENDING trkorr DESCENDING.
sy-pagno = lines( t_tab_01 ).
MESSAGE s580(00) WITH sy-pagno '' '' ''.
ENDFORM.
FORM pbo_0100.
SET PF-STATUS 'MAIN0100' EXCLUDING t_fcode.
SET TITLEBAR 'TIT01' WITH c_main_tit c_vers.
CHECK cc_01 IS INITIAL.
t_alv[ 1 ]-layout-sel_mode = 'A'.
t_alv[ 1 ]-layout-zebra = abap_true.
t_alv[ 1 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '1'.
t_alv[ 2 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '2'.
t_alv[ 3 ]-variant-report = sy-repid. t_alv[ 1 ]-variant-handle = '3'.
t_alv[ 3 ]-layout = t_alv[ 1 ]-layout.
t_alv[ 2 ]-layout = t_alv[ 1 ]-layout.
* t_alv[ 1 ]-layout-cwidth_opt = abap_true.
t_alv[ 2 ]-layout-cwidth_opt = abap_false.
cc_01 = NEW cl_gui_custom_container( container_name = cm_01 ).
G_SPlIT = NEW cl_gui_splitter_container( parent = cc_01
rows = 2
columns = 1 ).
G_SPlIT_2 = NEW cl_gui_splitter_container( parent = G_SPlIT->get_container( row = 2 column = 1 )
rows = 1
columns = 2 ).
t_alv[ 1 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split->get_container( row = 1 column = 1 ) ).
t_alv[ 2 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split_2->get_container( row = 1 column = 1 ) ).
t_alv[ 3 ]-grid = NEW cl_gui_alv_grid( i_parent = g_split_2->get_container( row = 1 column = 2 ) ).
g_split->set_row_height( id = 2 height = 0 ).
g_split_2->set_column_width( id = 2 width = 0 ).
PERFORM ALV_field_catalog.
PERFORM alv_remove_buttons.
t_alv[ 1 ]-grid->set_table_for_first_display(
EXPORTING
is_variant = t_alv[ 1 ]-variant
is_layout = t_alv[ 1 ]-layout
i_save = 'A'
it_toolbar_excluding = gt_toolbar
CHANGING
it_fieldcatalog = t_alv[ 1 ]-fcat "gt_field
it_outtab = t_tab_01 ).
t_alv[ 2 ]-grid->set_table_for_first_display(
EXPORTING
is_variant = t_alv[ 2 ]-variant
is_layout = t_alv[ 2 ]-layout
i_save = 'A'
it_toolbar_excluding = gt_toolbar
CHANGING
it_fieldcatalog = t_alv[ 2 ]-fcat "gt_field
it_outtab = t_tab_02 ).
t_alv[ 1 ]-event = NEW lcl_event_handler( ).
g_alv = t_alv[ 1 ].
SET HANDLER g_alv-event->handle_toolbar FOR t_alv[ 1 ]-grid.
SET HANDLER g_alv-event->handle_user_command FOR t_alv[ 1 ]-grid.
SET HANDLER g_alv-event->handle_menu_button FOR t_alv[ 1 ]-grid.
SET HANDLER g_alv-event->handle_hotspot_click FOR t_alv[ 1 ]-grid.
SET HANDLER g_alv-event->handle_context_menu FOR t_alv[ 1 ]-grid.
g_alv-grid->set_toolbar_interactive( ).
t_alv[ 2 ]-event = NEW lcl_event_handler( ).
g_alv = t_alv[ 2 ].
SET HANDLER g_alv-event->handle_toolbar FOR t_alv[ 2 ]-grid.
SET HANDLER g_alv-event->handle_user_command FOR t_alv[ 2 ]-grid.
SET HANDLER g_alv-event->handle_hotspot_click FOR t_alv[ 2 ]-grid.
g_alv-grid->set_toolbar_interactive( ).
ENDFORM.
FORM ALV_field_catalog.
"REFRESH: t_alv[ 1 ]-fcat, t_alv[ 2 ]-fcat.
t_alv[ 3 ]-fcat = VALUE #( ( fieldname = 'AS4POS' scrtext_l = C_avl_20 outputlen = 5 )
( fieldname = 'TABKEY' scrtext_l = C_avl_18 outputlen = 100 ) ).
t_alv[ 2 ]-fcat = VALUE #( ( fieldname = 'TRKORR' scrtext_l = C_avl_01 hotspot = abap_true )
( fieldname = 'AS4USER' scrtext_l = C_avl_02 )
( fieldname = 'AS4USER_TXT' scrtext_l = C_avl_03 )
( fieldname = 'PGMID' scrtext_l = C_avl_04 )
( fieldname = 'OBJECT' scrtext_l = C_avl_05 )
( fieldname = 'TRKORR_V' scrtext_l = C_avl_06 )
( fieldname = 'FECHA' scrtext_l = C_avl_07 )
( fieldname = 'VERS' scrtext_l = c_avl_17 icon = abap_true hotspot = abap_true )
( fieldname = 'OBJ_NAME' scrtext_l = C_avl_08 outputlen = 120 hotspot = abap_true )
).
t_alv[ 1 ]-fcat = VALUE #( ( fieldname = 'TRKORR' key = abap_true tabname = 'E070' hotspot = abap_true scrtext_l = C_avl_09 )
( 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 ) ) )
( fieldname = 'DOC' key = abap_true icon = abap_true hotspot = abap_true outputlen = 4 scrtext_l = C_avl_21 )
( fieldname = 'AS4USER' key = abap_true scrtext_l = C_avl_02 )
( fieldname = 'AS4USER_txt' key = abap_true scrtext_l = C_avl_03 )
( fieldname = 'TRFUNCTION' key = abap_true scrtext_l = C_avl_05 outputlen = 1 no_out = abap_true )
( fieldname = 'TRFUNCTION_TXT ' key = abap_true scrtext_l = C_avl_11 outputlen = 6 )
).
DATA: l_sysn TYPE n LENGTH 2.
DATA(l_no_out) = COND #( WHEN p_rel IS INITIAL AND NOT p_norel IS INITIAL THEN abap_true ELSE abap_false ).
DO lines( t_tab_00 ) TIMES.
l_sysn = sy-index.
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 )
( fieldname = 'ICO' && l_sysn icon = abap_true rollname = 'CHAR06' scrtext_l = t_tab_00[ l_sysn ] no_out = l_no_out )
( fieldname = 'DAT' && l_sysn rollname = 'DATUM' scrtext_l = C_avl_13 no_out = l_no_out )
( fieldname = 'TIM' && l_sysn rollname = 'UZEIT' scrtext_l = C_avl_14 no_out = l_no_out )
( fieldname = 'RC' && l_sysn rollname = 'SYSUBRC' scrtext_l = C_avl_15 no_out = l_no_out ) ).
ENDDO.
t_alv[ 1 ]-fcat = VALUE #( BASE t_alv[ 1 ]-fcat ( fieldname = 'AS4TEXT' outputlen = 60 scrtext_l = C_avl_16 ) ).
ENDFORM.
FORM alv_remove_buttons.
gt_toolbar = VALUE #( ( cl_gui_alv_grid=>mc_fg_edit )
( cl_gui_alv_grid=>mc_mb_subtot )
( cl_gui_alv_grid=>mc_mb_sum )
( cl_gui_alv_grid=>mc_fc_detail )
( cl_gui_alv_grid=>mc_fc_help )
( cl_gui_alv_grid=>mc_fc_html )
( cl_gui_alv_grid=>mc_fc_info )
( cl_gui_alv_grid=>mc_mb_view )
( cl_gui_alv_grid=>mc_fc_print )
).
ENDFORM.
FORM pai_0100.
CASE g_okcode.
WHEN 'BACK'. PERFORM but_exit_program.
ENDCASE.
ENDFORM.
FORM handle_context_menu USING e_object TYPE REF TO cl_ctmenu
CHANGING g_row_id TYPE lvc_s_row.
DATA: li_sel_col TYPE i.
DATA: lt_std_fcodes TYPE ui_functions,
lt_own_fcodes TYPE ui_functions.
PERFORM MENU_add_options USING e_object.
t_alv[ 1 ]-grid->get_current_cell( IMPORTING e_col = li_sel_col es_row_id = g_row_id ).
cl_gui_cfw=>flush( ).
e_object->hide_functions( EXPORTING fcodes = lt_std_fcodes ).
e_object->show_functions( EXPORTING fcodes = lt_own_fcodes ).
cl_gui_cfw=>flush( ).
ENDFORM.
FORM handle_user_command USING uv_ucomm TYPE sy-ucomm
p_list
CHANGING p_row_id TYPE lvc_s_row.
CASE p_list.
WHEN 1. t_alv[ 1 ]-grid->get_selected_rows( IMPORTING et_index_rows = index_rows ).
WHEN 2. t_alv[ 2 ]-grid->get_selected_rows( IMPORTING et_index_rows = index_rows ).
ENDCASE.
IF NOT p_row_id IS INITIAL AND lines( index_rows ) = 0.
REFRESH index_rows.
APPEND p_row_id TO index_rows.
ENDIF.
CASE uv_ucomm.
WHEN 'SE09' OR 'MC05'. CALL TRANSACTION 'SE09'.
WHEN 'MC02'. PERFORM but_newo.
WHEN 'MC04'. PERFORM but_incluir_orden.
WHEN 'MC01'. PERFORM but_liberar_orden.
* WHEN 'VIEW'. PERFORM BUT_ver_orden.
WHEN 'MC12'. PERFORM BUT_change_username.
WHEN 'MC09'. PERFORM but_delete.
WHEN 'MC03'. PERFORM but_merge.
WHEN 'MC15'. PERFORM but_add_task.
WHEN 'MC07'. CALL TRANSACTION 'STMS'.
WHEN 'MC14'. PERFORM but_codo_inspector.
WHEN 'VERL'. PERFORM BUT_ver_log.
WHEN 'MC10'. PERFORM BUT_download.
WHEN 'MC11'. PERFORM BUT_upload.
WHEN 'MC06'. PERFORM BUT_check_log.
WHEN 'MC13'. PERFORM but_refrescar.
WHEN 'MC08'. PERFORM BUT_exit_program.
WHEN 'MC16'. PERFORM BUT_delete_object.
WHEN 'MC17'. PERFORM BUT_add_objetcs.
WHEN 'MC18'. PERFORM BUT_tits. "<-- Te gusta y lo sabes! ;)
WHEN 'MC19'. PERFORM BUT_2_Clipboard.
WHEN 'MC20'. PERFORM BUT_Transportar.
WHEN 'MC22'. PERFORM but_documentacion.
ENDCASE.
CLEAR p_row_id.
ENDFORM.
FORM BUT_2_Clipboard.
DATA: t_data TYPE STANDARD TABLE OF char255,
l_s TYPE char255,
e_rc TYPE i.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
l_s = |{ <f>-trkorr } { <f>-as4user } { <f>-as4text }|.
APPEND l_s TO t_data.
AT LAST.
CALL METHOD cl_gui_frontend_services=>clipboard_export
EXPORTING
no_auth_check = abap_false
IMPORTING
data = t_data
CHANGING
rc = e_rc
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc EQ 0.
MESSAGE s398(00) WITH c_msg_04.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM.
FORM BUT_Transportar.
DATA: it_return TYPE STANDARD TABLE OF ddshretval.
*--[ Soporte al POPUP
TYPES: BEGIN OF ty_data_system,
sysnam TYPE tmssysnam,
systxt TYPE as4text,
END OF ty_data_system.
DATA:
t_data_system TYPE STANDARD TABLE OF ty_data_system,
l_data_system LIKE LINE OF t_data_system.
LOOP AT index_rows INTO DATA(l_rows).
AT FIRST.
LOOP AT tt_system INTO DATA(l_s).
l_data_system = CORRESPONDING #( l_s ).
APPEND l_data_system TO t_data_system.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'SYSNAM'
value_org = 'S'
window_title = c_msg_05 "'Máquina de destino'
TABLES
value_tab = t_data_system
return_tab = it_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc NE 0 OR lines( it_return ) = 0.
EXIT.
ENDIF.
DATA(l_sys) = it_return[ 1 ]-fieldval.
DATA(l_system) = tt_system[ sysnam = l_sys ].
ENDAT.
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
DATA: it_clients TYPE stms_clients.
it_clients = VALUE #( ( client = sy-mandt clitxt = 'Default' ) ).
*--[ Función de transporte
CALL FUNCTION 'TMS_UI_IMPORT_TR_REQUEST'
EXPORTING
iv_system = l_system-sysnam
iv_domain = l_system-domnam
iv_request = <f>-trkorr
iv_tarcli = '100'
iv_systxt = l_system-systxt
iv_reqtxt = <f>-as4text
iv_ctc_active = abap_false
iv_some_active = abap_true
iv_verbose = abap_false
iv_expert_mode = abap_false
iv_check_strategy = abap_true
* it_requests = lt_tr_requests
it_clients = it_clients
* it_all_requests = gs_disque-t_req_all
EXCEPTIONS
cancelled_by_user = 1
import_request_denied = 2
import_request_failed = 3
OTHERS = 99.
AT LAST.
PERFORM but_refrescar.
ENDAT.
ENDLOOP.
ENDFORM.
FORM BUT_tits.
DATA: t_fields TYPE STANDARD TABLE OF sval.
DATA(l_save) = abap_false.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
DATA(l_returncode) = abap_false.
t_fields = VALUE #( ( tabname = 'E07T' fieldname = 'AS4TEXT' value = <f>-as4text field_obl = abap_true ) ).
DATA(l_title) = |{ <f>-trkorr }-{ <f>-as4text }|.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
no_value_check = abap_true
popup_title = l_title
* START_COLUMN = '5'
* START_ROW = '5'
IMPORTING
returncode = l_returncode
TABLES
fields = t_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc EQ 0 AND l_returncode = abap_false.
DATA(l_d) = t_fields[ 1 ]-value.
IF l_d NE <f>-as4text.
<f>-as4text = l_d.
l_save = abap_true.
UPDATE e07t
SET as4text = l_d
WHERE trkorr = <f>-trkorr AND
langu = sy-langu.
ENDIF.
ENDIF.
ENDLOOP.
IF l_save = abap_true.
t_alv[ 1 ]-grid->refresh_table_display( ).
ENDIF.
ENDFORM.
FORM BUT_add_objetcs.
DATA: pv_exit(1),
l_is_request TYPE trwbo_request_header.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_02 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF l_is_request
WHERE trkorr = <f>-trkorr.
IF l_is_request-trfunction NA 'CDFKOPT'.
SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF l_is_request
WHERE trkorr = l_is_request-strkorr.
ENDIF.
l_is_request-clients_filled = abap_true.
CALL FUNCTION 'TR_SELECT_AND_APPEND_OBJECTS'
EXPORTING
is_request = l_is_request
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE s398(00) WITH c_msg_03 '' '' ''.
ENDIF.
AT LAST.
LOOP AT t_tab_01 INTO DATA(l_01) WHERE trkorr = l_is_request-tRKORR OR
trkorr = l_is_request-strkorr.
PERFORM data_load_02 USING sy-tabix.
EXIT.
ENDLOOP.
ENDAT.
ENDLOOP.
ENDFORM.
FORM but_codo_inspector.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
CALL FUNCTION 'TR_INSPECT_OBJECTS'
EXPORTING
iv_trkorr = <f>-trkorr
EXCEPTIONS
invalid_request = 1
OTHERS = 2.
ENDLOOP.
ENDFORM.
FORM but_add_task.
DATA: lv_username TYPE sy-uname.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
AT FIRST.
CALL FUNCTION 'TR_POPUP_INPUT_SAPUSER'
EXPORTING
iv_description = 'Crear tarea para el usuario'
iv_title = 'Añadir empleado'
CHANGING
cv_username = lv_username
EXCEPTIONS
action_aborted_by_user = 1
OTHERS = 2.
ENDAT.
CALL FUNCTION 'TRINT_INSERT_NEW_COMM'
EXPORTING
wi_kurztext = l_tab_01-as4text
wi_trfunction = abap_true "l_tab_01-trfunction
iv_username = lv_username
wi_strkorr = l_tab_01-trkorr
wi_client = sy-mandt
EXCEPTIONS
no_systemname = 1
no_systemtype = 2
no_authorization = 3
db_access_error = 4
file_access_error = 5
enqueue_error = 6
number_range_full = 7
invalid_input = 8
OTHERS = 9.
CHECK sy-subrc EQ 0.
MESSAGE s398(00) WITH c_msg_01 '' '' ''.
ENDLOOP.
ENDFORM.
FORM but_refrescar.
PERFORM data_load.
t_alv[ 1 ]-grid->refresh_table_display( ).
ENDFORM.
FORM BUT_change_username.
DATA: l_header TYPE trwbo_request_header,
l_flag(1).
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX l_rows-index.
CALL FUNCTION 'TRINT_CHANGE_USERNAME'
EXPORTING
wi_dialog = abap_true
wi_trkorr = <f>-trkorr
wi_user = e070-as4user
wi_start_column = 30
wi_start_row = 14
IMPORTING
es_request_header = l_header
EXCEPTIONS
already_released = 1
e070_update_error = 2
not_exist_e070 = 3
user_does_not_exist = 4
unallowed_user = 5
user_not_authorized = 6
wrong_client = 7
file_access_error = 8.
IF sy-subrc EQ 0.
SELECT SINGLE as4user INTO <f>-as4user FROM e070
WHERE trkorr = <f>-trkorr.
PERFORM get_user USING <f>-as4user CHANGING <f>-as4user_TXT.
l_flag = abap_true.
ENDIF.
AT LAST.
CHECK l_flag = abap_true.
t_alv[ 1 ]-grid->refresh_table_display( ).
ENDAT.
ENDLOOP.
ENDFORM.
FORM but_upload.
TYPES: BEGIN OF ty_files,
full_pc(1024),
full_sap(1024),
END OF ty_files.
DATA: t_tab_files TYPE filetable,
t_tab_save TYPE STANDARD TABLE OF ty_files,
l_tab_save LIKE LINE OF t_tab_save,
l_filename(1024),
dir_cofiles TYPE eps2filnam,
dir_data TYPE eps2filnam,
l_filepath(1024),
rc TYPE sysubrc.
DATA: l_path TYPE sapb-sappfad,
l_target TYPE sapb-sappfad.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
multiselection = abap_true
CHANGING
file_table = t_tab_files
rc = rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0 OR lines( t_tab_files ) <= 0.
EXIT.
ENDIF.
LOOP AT t_tab_files INTO DATA(l_files).
AT FIRST.
dir_cofiles = dir_trans && '/cofiles/'.
dir_data = dir_trans && '/data/'.
ENDAT.
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = l_files-filename
IMPORTING
stripped_name = l_filename
file_path = l_filepath
EXCEPTIONS
x_error = 1
OTHERS = 2.
IF sy-subrc EQ 0.
* l_tab_save-full_pc = l_files-filename.
* l_tab_save-full_sap = COND #( WHEN l_filename+0(1) CA 'RD' THEN dir_data && l_filename else dir_data && l_filename ).
*
* APPEND l_tab_save TO t_tab_save.
t_tab_save = VALUE #( BASE t_tab_save ( full_pc = l_files-filename
full_sap = COND #( WHEN l_filename+0(1) CA 'RD' THEN dir_data && l_filename ELSE dir_data && l_filename ) ) ).
ENDIF.
AT LAST.
LOOP AT t_tab_save INTO l_tab_save.
l_path = l_tab_save-full_pc.
l_target = l_tab_save-full_sap.
CALL FUNCTION 'ARCHIVFILE_CLIENT_TO_SERVER'
EXPORTING
path = l_path
targetpath = l_target
EXCEPTIONS
error_file = 99
OTHERS = 99.
ENDLOOP.
ENDAT.
ENDLOOP.
ENDFORM.
FORM BUT_download.
TYPES: BEGIN OF ty_files,
full(1024).
INCLUDE STRUCTURE eps2fili.
TYPES:
END OF ty_files.
DATA: dir_cofiles TYPE eps2filnam,
dir_data TYPE eps2filnam,
t_tab_cofiles TYPE STANDARD TABLE OF eps2fili,
t_tab_data TYPE STANDARD TABLE OF eps2fili,
t_tab_files TYPE STANDARD TABLE OF ty_files,
l_tab_files LIKE LINE OF t_tab_files,
l_str01 TYPE string,
l_str02 TYPE string,
l_str03 TYPE string.
LOOP AT index_rows INTO DATA(l_rows).
AT FIRST.
dir_cofiles = dir_trans && '/cofiles'.
dir_data = dir_trans && '/data'.
CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
EXPORTING
iv_dir_name = dir_cofiles
file_mask = '*.*'
TABLES
dir_list = t_tab_cofiles
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
EXPORTING
iv_dir_name = dir_data
file_mask = '*.*'
TABLES
dir_list = t_tab_data
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
ENDAT.
READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
DATA(l_num) = '*' && l_tab_01-trkorr+4 && '*'.
LOOP AT t_tab_cofiles INTO DATA(l_01) WHERE name CP l_num.
CLEAR l_tab_files.
MOVE-CORRESPONDING l_01 TO l_tab_files.
l_tab_files-full = dir_cofiles && '/' && l_01-name.
APPEND l_tab_files TO t_tab_files.
ENDLOOP.
LOOP AT t_tab_data INTO l_01 WHERE name CP l_num.
CLEAR l_tab_files.
MOVE-CORRESPONDING l_01 TO l_tab_files.
l_tab_files-full = dir_data && '/' && l_01-name.
APPEND l_tab_files TO t_tab_files.
ENDLOOP.
AT LAST.
LOOP AT t_tab_files INTO l_tab_files.
AT FIRST.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_file_name = 'ordenes.txt'
CHANGING
filename = l_str01
path = l_str02
fullpath = l_str03
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
IF sy-subrc <> 0 OR l_str02 IS INITIAL.
EXIT. "<-- Nada que descargar
ENDIF.
ENDAT.
*--[ Descargamos los ficheros
DATA: l_path TYPE sapb-sappfad,
l_target TYPE sapb-sappfad.
l_path = l_tab_files-full.
l_target = l_str02 && '\' && l_tab_files-name.
REPLACE ALL OCCURRENCES OF '//' IN l_target WITH '/'.
CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT'
EXPORTING
path = l_path
targetpath = l_target
EXCEPTIONS
error_file = 1
OTHERS = 2.
ENDLOOP.
ENDAT.
ENDLOOP.
ENDFORM.
FORM but_documentacion.
LOOP AT index_rows INTO DATA(l_rows).
PERFORM but_documentacion_WORK USING l_rows-index.
ENDLOOP.
ENDFORM.
FORM but_documentacion_WORK USING p_indice.
DATA: t_docu TYPE STANDARD TABLE OF tline,
l_docu LIKE LINE OF t_docu,
t_lines TYPE STANDARD TABLE OF char72,
s_lines LIKE LINE OF t_lines.
READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) INDEX p_indice.
REFRESH t_docu.
CALL FUNCTION 'TRINT_DOCU_INTERFACE'
EXPORTING
iv_object = <f>-trkorr
TABLES
tt_line = t_docu
EXCEPTIONS
error = 0.
LOOP AT t_docu INTO l_docu.
s_lines = l_docu-tdline .
APPEND s_lines TO t_lines.
ENDLOOP.
CALL FUNCTION 'TERM_CONTROL_EDIT'
EXPORTING
titel = |{ c_quick_22 }: { <f>-trkorr }|
langu = sy-langu
TABLES
textlines = t_lines
EXCEPTIONS
user_cancelled = 1
OTHERS = 2.
IF sy-subrc EQ 0.
IF lines( t_lines ) > 0.
REFRESH t_docu.
LOOP AT t_lines INTO s_lines.
l_docu-tdformat = '/'.
l_docu-tdline = s_lines.
APPEND l_docu TO t_docu.
ENDLOOP.
CALL FUNCTION 'TRINT_DOCU_INTERFACE'
EXPORTING
iv_action = 'M'
iv_modify_appending = ' '
iv_object = <f>-trkorr
TABLES
tt_line = t_docu
EXCEPTIONS
error = 0.
<f>-doc = icon_document.
ELSE.
CLEAR <f>-doc.
ENDIF.
ENDIF.
ENDFORM.
FORM but_delete.
DATA: lt_deleted_tasks TYPE cts_trkorrs.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
*--[ Eliminamos las tareas
SELECT * FROM e070 INTO TABLE @DATA(T_tareas)
WHERE Strkorr = @l_tab_01-trkorr AND
( trstatus = 'D' OR trstatus = 'L' ).
LOOP AT t_tareas INTO DATA(l_tareas).
CALL FUNCTION 'TR_DELETE_COMM'
EXPORTING
wi_dialog = abap_true
wi_trkorr = l_tareas-trkorr
IMPORTING
et_deleted_tasks = lt_deleted_tasks
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
REFRESH t_tareas.
*--[ Eliminamos la orden
SELECT * FROM e070 INTO TABLE T_tareas
WHERE Strkorr = l_tab_01-trkorr.
IF lines( t_tareas ) = 0.
CALL FUNCTION 'TR_DELETE_COMM'
EXPORTING
wi_dialog = abap_true
wi_trkorr = l_tab_01-trkorr
IMPORTING
et_deleted_tasks = lt_deleted_tasks
EXCEPTIONS
OTHERS = 1.
ENDIF.
REFRESH T_tareas.
SELECT SINGLE * FROM e070 INTO @DATA(l_o) WHERE trkorr = @l_tab_01-trkorr.
IF sy-subrc EQ 0.
DELETE t_tab_01 INDEX l_rows-index.
t_alv[ 1 ]-grid->REFRESH_table_display( ).
ENDIF.
ENDLOOP.
ENDFORM.
FORM but_liberar_orden_inc USING p_orden.
DATA: l_orden TYPE e070-trkorr,
es_request TYPE trwbo_request,
et_deleted_tasks TYPE trwbo_t_e070.
l_orden = p_orden.
CHECK NOT l_orden IS INITIAL.
CALL FUNCTION 'TR_RELEASE_REQUEST'
EXPORTING
iv_trkorr = l_orden
iv_dialog = G_rele_param-dialog
iv_as_background_job = G_rele_param-fondo
iv_success_message = G_rele_param-succes
iv_display_export_log = g_rele_param-log
iv_simulation = G_rele_param-simula
IMPORTING
es_request = es_request
et_deleted_tasks = et_deleted_tasks
EXCEPTIONS
OTHERS = 0.
ENDFORM.
FORM but_liberar_orden.
DATA: ev_exit(1).
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_01 INTO l_tab_01 INDEX l_rows-index.
SELECT * FROM e070 INTO TABLE @DATA(t_rele)
WHERE strkorr = @l_tab_01-trkorr
AND ( trstaTus = 'D' OR trstaTus = 'L' ).
LOOP AT t_rele INTO DATA(l_rele).
AT FIRST.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Reversionamos antes de liberar
if p_vers = abap_true.
PERFORM BUT_Re_version USING l_tab_01-trkorr.
endif.
UPDATE e070
SET as4user = sy-uname
WHERE trkorr = l_tab_01-trkorr.
PERFORM but_liberar_orden_param.
ENDAT.
UPDATE e070
SET as4user = sy-uname
WHERE trkorr = l_rele-trkorr.
PERFORM but_liberar_orden_inc USING l_rele-trkorr.
UPDATE e070
SET as4user = l_rele-as4user
WHERE trkorr = l_rele-trkorr.
AT LAST.
*--[ Devolvemos el luser original.
UPDATE e070
SET as4user = l_tab_01-as4user
WHERE trkorr = l_tab_01-trkorr.
ENDAT.
ENDLOOP.
*--[ Orden sin tareas
IF lines( t_rele ) = 0. PERFORM but_liberar_orden_param. ENDIF.
PERFORM but_liberar_orden_inc USING l_tab_01-trkorr.
UPDATE e070
SET as4user = l_tab_01-as4user
WHERE trkorr = l_tab_01-trkorr.
ev_exit = abap_true.
ENDLOOP.
CHECK Ev_exit = abap_true.
PERFORM but_refrescar.
ENDFORM.
FORM but_liberar_orden_param.
DATA: t_fields TYPE STANDARD TABLE OF mcs01,
t_marked_fields TYPE STANDARD TABLE OF mcs01.
IF G_rele_param IS INITIAL.
G_rele_param-dialog = g_rele_param-succes = G_rele_param-log = abap_true.
ENDIF.
t_fields = VALUE #( ( fieldname = 'DIALOG' scrtext_l = c_pop_01 )
( fieldname = 'FONDO' scrtext_l = c_pop_02 )
( fieldname = 'SUCCES' scrtext_l = c_pop_03 )
( fieldname = 'LOG' scrtext_l = c_pop_04 )
( fieldname = 'SIMULA' scrtext_l = c_pop_05 )
).
t_marked_fields = VALUE #( ( fieldname = 'DIALOG' ) ( fieldname = 'SUCCES' ) ( fieldname = 'LOG' ) ).
CALL FUNCTION 'MC_POPUP_TO_MARK_FIELDS'
EXPORTING
i_fields_marked = abap_false
i_field_number_min = 0
i_mark_by_table = abap_true
i_object_name_plural = ''
i_object_name_singular = ''
i_popup_title = c_mark_fields_01
i_textline = c_mark_fields_01
i_text_length = 50
TABLES
t_fields = t_fields
t_marked_fields = t_marked_fields
EXCEPTIONS
unvalid_text_length = 1
OTHERS = 2.
IF sy-subrc EQ 0.
LOOP AT t_marked_fields INTO DATA(l_f).
AT FIRST.
CLEAR g_rele_param.
ENDAT.
DATA(l_txt) = to_upper( 'G_rele_param-' && l_f-fieldname ).
ASSIGN (l_txt) TO FIELD-SYMBOL(<ff>).
CHECK sy-subrc EQ 0.
<ff> = abap_true.
ENDLOOP.
ENDIF.
ENDFORM.
FORM but_incluir_orden.
DATA: cv_exit(1).
IF lines( index_rows ) = 1.
READ TABLE t_tab_01 INTO l_tab_01 INDEX index_rows[ 1 ]-index.
PERFORM copy_object_list IN PROGRAM saplstrh
USING l_tab_01-trkorr abap_false
CHANGING cv_exit.
ELSE.
MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
ENDIF.
ENDFORM.
FORM but_merge.
DATA: ev_trkorr_from LIKE e070-trkorr,
es_request_to TYPE trwbo_request,
is_request_from TYPE trwbo_request.
IF lines( index_rows ) = 1.
READ TABLE t_tab_01 INTO l_tab_01 INDEX index_rows[ 1 ]-index.
SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF is_request_from-h
WHERE trkorr = l_tab_01-trkorr.
is_request_from-h-as4text = l_tab_01-as4text.
is_request_from-h-clients_filled =
is_request_from-objects_filled =
is_request_from-attributes_filled =
is_request_from-h-as4text_filled = abap_true.
is_request_from-h-client = sy-mandt.
CALL FUNCTION 'TR_MERGE_REQUESTS'
EXPORTING
is_request_from = is_request_from "
iv_request_choice = abap_true
iv_with_dialog = abap_true
IMPORTING
ev_trkorr_from = ev_trkorr_from
es_request_to = es_request_to
EXCEPTIONS
OTHERS = 7.
ELSE.
MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
ENDIF.
ENDFORM.
FORM but_newo.
IF lines( index_rows ) = 1.
READ TABLE t_tab_01 INTO l_tab_01 INDEX 1.
DATA: lt_users TYPE trwbo_users .
SELECT as4user AS user FROM e070
INTO CORRESPONDING FIELDS OF TABLE lt_users
WHERE strkorr = l_tab_01-trkorr.
SELECT SINGLE * FROM e070 INTO @DATA(l_e070)
WHERE trkorr = @l_tab_01-trkorr.
CALL FUNCTION 'TR_REQUEST_MODIFY'
EXPORTING
iv_action = 'CREA'
iv_new_request_type = l_tab_01-trfunction
iv_new_task_type = abap_true
iv_new_tarsystem = l_e070-tarsystem
iv_new_as4text = l_tab_01-as4text
it_users = lt_users
iv_new_repoid = ''
EXCEPTIONS
OTHERS = 1.
ELSE.
PERFORM create_new_request IN PROGRAM rddm0001 USING 'KWTCEO'.
ENDIF.
ENDFORM.
FORM handle_hotspot USING e_row_id TYPE lvc_s_row
e_column_id TYPE lvc_s_col
p_list.
CASE e_column_id.
WHEN 'DOC'.
PERFORM but_documentacion_WORK USING e_row_id-index.
t_alv[ 1 ]-grid->refresh_table_display( ).
WHEN 'LOG'.
READ TABLE t_tab_01 INTO DATA(l_01) INDEX e_row_id-index.
IF NOT l_01-log IS INITIAL.
SUBMIT rddprott AND RETURN
WITH pv_korr = l_01-trkorr.
ENDIF.
WHEN 'OBJ_NAME'.
READ TABLE t_tab_02 INTO DATA(l_02) INDEX e_row_id-index.
IF l_02-pgmid = 'R3TR' AND ( l_02-object = 'TABU' OR l_02-object CP '*DAT' ).
SELECT as4pos, tabkey FROM e071k INTO TABLE @DATA(T_tab_22)
WHERE trkorr = @l_02-trkorr
AND pgmid = @l_02-pgmid AND
( ( object = @l_02-object AND objname = @l_02-obj_name ) OR
( mastertype = @l_02-object AND mastername = @l_02-obj_name ) ).
IF sy-subrc EQ 0.
g_split_2->set_column_width( id = 2 width = 20 ).
t_alv[ 1 ]-layout-sel_mode = 'C'.
t_alv[ 3 ]-grid->set_table_for_first_display(
EXPORTING
is_variant = t_alv[ 3 ]-variant
is_layout = t_alv[ 3 ]-layout
i_save = 'A'
it_toolbar_excluding = gt_toolbar
CHANGING
it_fieldcatalog = t_alv[ 3 ]-fcat "gt_field
it_outtab = t_tab_22 ).
t_alv[ 3 ]-grid->refresh_table_display( ).
ENDIF.
ELSE.
g_split_2->set_column_width( id = 2 width = 0 ).
CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
EXPORTING
iv_pgmid = l_02-pgmid
iv_object = l_02-object
iv_obj_name = l_02-obj_name
iv_action = 'SHOW'
EXCEPTIONS
jump_not_possible = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
WHEN 'VERS'.
READ TABLE t_tab_02 INTO DATA(l_22) INDEX e_row_id-index.
DATA: object_type LIKE vrsd-objtype,
object_name LIKE vrsd-objname.
object_name = l_22-obj_name.
object_type = l_22-object.
CALL FUNCTION 'SVRS_DISPLAY_DIRECTORY_NEW'
EXPORTING
object_type = object_type
object_name = object_name
display = abap_true
compare = abap_true
compare_remote = abap_true
recall = abap_true
EXCEPTIONS
OTHERS = 2. "#EC FB_RC
WHEN 'TRKORR'.
IF p_list = 1.
g_split_2->set_column_width( id = 2 width = 0 ).
g_split->get_row_height( EXPORTING id = 2 IMPORTING result = e_rc ) .
IF e_rc = 0.
* g_split->SET_ROW_HEIGHT( id = 1 height = 60 ).
g_split->set_row_height( id = 2 height = 40 ).
ENDIF.
PERFORM data_load_02 USING e_row_id-index.
ELSEIF p_list = 2.
DATA(l_orden) = t_tab_02[ e_row_id-index ]-trkorr.
CALL FUNCTION 'TR_DISPLAY_REQUEST'
EXPORTING
i_trkorr = l_orden
i_operation = 'DISPLAY'.
ENDIF.
ENDCASE.
ENDFORM.
FORM data_load_02 USING p_index.
TRY.
DATA(l_orden) = t_tab_01[ p_index ]-trkorr.
DATA(l_user) = t_tab_01[ p_index ]-as4user.
CATCH cx_root.
EXIT.
ENDTRY.
SELECT * FROM e070 AS a
INNER JOIN e071 AS b
ON b~trkorr = a~trkorr
INTO CORRESPONDING FIELDS OF TABLE t_tab_02
WHERE a~trkorr = l_orden OR
a~strkorr = l_orden.
DELETE t_tab_02 WHERE pgmid EQ 'CORR'.
SORT t_tab_02 BY trkorr pgmid object obj_name.
DELETE ADJACENT DUPLICATES FROM t_tab_02 .
LOOP AT t_tab_02 ASSIGNING FIELD-SYMBOL(<g>).
<g>-vers = '@10@'.
PERFORM GET_USEr USING <g>-as4user CHANGING <g>-as4user_TXT.
SELECT SINGLE korrnum datum INTO (<g>-trkorr_v, <g>-fecha) FROM vrsd
WHERE objtype = <g>-object
AND objname = <g>-obj_name
AND versno = '00000'.
ENDLOOP.
*--[ Maquillamos columnas para hacerlo m�s bonito
t_alv[ 2 ]-grid->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = t_alv[ 2 ]-fcat ).
LOOP AT t_alv[ 2 ]-fcat ASSIGNING FIELD-SYMBOL(<fc>) WHERE no_out = abap_true.
<fc>-no_out = abap_false.
ENDLOOP.
DATA(col_03) = 1.
LOOP AT t_tab_02 ASSIGNING <g>.
IF <g>-trkorr_v IS INITIAL. DATA(col_01) = 1. ENDIF.
IF <g>-fecha IS INITIAL. DATA(col_02) = 1. ENDIF.
IF <g>-as4user NE l_user. CLEAR col_03. ENDIF.
ENDLOOP.
IF NOT col_01 IS INITIAL. t_alv[ 2 ]-fcat[ fieldname = 'TRKORR_V' ]-no_out = abap_true. ENDIF.
IF NOT col_03 IS INITIAL.
t_alv[ 2 ]-fcat[ fieldname = 'AS4USER' ]-no_out = abap_true.
t_alv[ 2 ]-fcat[ fieldname = 'AS4USER_TXT' ]-no_out = abap_true.
ENDIF.
IF NOT col_02 IS INITIAL.
t_alv[ 2 ]-fcat[ fieldname = 'FECHA' ]-no_out = abap_true.
* t_alv[ 2 ]-fcat[ fieldname = 'VERS']-no_out = abap_true.
ENDIF.
CLEAR: col_01, col_02.
t_alv[ 2 ]-grid->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = t_alv[ 2 ]-fcat ).
t_alv[ 2 ]-grid->refresh_table_display( ).
ENDFORM.
FORM handle_menu_button USING e_object TYPE REF TO cl_ctmenu
e_ucomm
p_list.
LOOP AT t_menus INTO DATA(Di) WHERE alv = p_list AND menu-id = e_ucomm.
e_object->add_function( fcode = di-menu-function
icon = di-menu-icon
text = di-menu-text ).
ENDLOOP.
ENDFORM.
FORM cfg_toolbar_menu.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ MENU ALV 001 Cabecera Principal
t_menus = VALUE #( BASE t_menus
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Definición de botones
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC13' " 'REFR' ##NO_TEXT
boton-icon = icon_refresh
boton-quickinfo = c_quick_13 ##NO_TEXT
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC14' "'CINS' ##NO_TEXT
boton-icon = icon_inspection_characteristic
boton-quickinfo = c_quick_14 ##NO_TEXT
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC01' "'FREE' ##NO_TEXT
boton-icon = icon_release
boton-quickinfo = c_quick_01 ##NO_TEXT
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC02' "'NEWO' ##NO_TEXT
boton-icon = '@0Y@' "icon_transport
boton-quickinfo = c_quick_02
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC03' "'MERG' ##NO_TEXT
boton-icon = icon_wd_custom_controller "icon_activity
boton-quickinfo = c_quick_03 ##NO_TEXT
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC04' "'INCL' ##NO_TEXT
boton-icon = icon_replace
boton-quickinfo = c_quick_04
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC09' "'DELE' ##NO_TEXT
boton-icon = icon_delete
boton-quickinfo = c_quick_09
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC12' "'LUSE'
boton-icon = icon_activity_group
boton-quickinfo = c_quick_12
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC15' "'ADDT'
boton-icon = icon_personnel_administration
boton-quickinfo = c_quick_15
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC18' "'TITS'
boton-icon = icon_rename
boton-quickinfo = c_quick_18
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC10' "'DOME'
boton-icon = icon_parameter_import
boton-quickinfo = c_quick_10
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC11' "'UPME'
boton-icon = ICON_PARAMETER_export
boton-quickinfo = c_quick_11
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC06' "'VERF' ##NO_TEXT
boton-icon = icon_check
boton-quickinfo = c_quick_06
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC19' "'BYEBYE' ##NO_TEXT
boton-icon = icon_system_copy
boton-text = 'Clipboard' ##NO_TEXT
boton-quickinfo = c_quick_19
boton-disabled = abap_false )
( alv = 1 orden = 10
boton-butn_type = 0
boton-function = 'MC20' "'BYEBYE' ##NO_TEXT
boton-icon = icon_transport
boton-text = 'Transportar' ##NO_TEXT
boton-quickinfo = c_quick_20
boton-disabled = abap_false )
( alv = 1 orden = 30
boton-butn_type = 0
boton-function = 'MC22' "'DELE' ##NO_TEXT
boton-icon = icon_document
boton-quickinfo = c_quick_22
boton-disabled = abap_false )
( alv = 1 orden = 999
boton-function = 'MC08' "'BYEBYE' ##NO_TEXT
boton-icon = icon_cancel
boton-text = 'Exit' ##NO_TEXT
boton-quickinfo = c_quick_08
boton-disabled = abap_false )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Definición de Menús
( alv = 1 orden = 998
boton-function = 'MN01' "'BYEBYE' ##NO_TEXT
boton-icon = icon_system_sap_menu
boton-text = c_quick_21 ##NO_TEXT
boton-quickinfo = c_quick_21
boton-butn_type = 2 "<-- Indica que es MENÚ
boton-disabled = abap_false )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Definición de SubMenús
( alv = 1 orden = 10
menu-id = 'MN01'
menu-function = 'MC05' "'BYEBYE' ##NO_TEXT
menu-icon = icon_transport
menu-text = c_quick_05 ##NO_TEXT
menu-disabled = abap_false )
( alv = 1 orden = 20
menu-id = 'MN01'
menu-function = 'MC07' "'BYEBYE' ##NO_TEXT
menu-icon = icon_system_stop_recording
menu-text = c_quick_07 ##NO_TEXT
menu-disabled = abap_false )
).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ MENU ALV 002 Detalle de las órdenes
t_menus = VALUE #( BASE t_menus ( alv = 2 orden = 20
boton-butn_type = 0
boton-function = 'MC16'
boton-icon = icon_delete
boton-text = ''
boton-quickinfo = c_quick_16
boton-disabled = abap_false )
( alv = 2 orden = 10
boton-butn_type = 0
boton-function = 'MC17'
boton-icon = icon_create
boton-text = ''
boton-quickinfo = c_quick_17
boton-disabled = abap_false )
).
*--[ Posible codificación para un futuro
*|ALV|ORDEN|TYPO|BOT|MENU|MENU_ID|FUNCTION|ICONO|TEXTO|QUICKINFO|DISABLE|
*1|1|0|X|||MC17|icon_create||c_quick_17||
SORT t_menus BY alv ASCENDING orden ASCENDING.
ENDFORM.
FORM handle_toolbar USING uo_object TYPE REF TO cl_alv_event_toolbar_set
p_list.
LOOP AT t_menus INTO DATA(di) WHERE alv = p_list AND boton IS NOT INITIAL.
APPEND di-boton TO uo_object->mt_toolbar.
ENDLOOP.
ENDFORM.
FORM BUT_ver_orden.
DATA: is_selection TYPE trwbo_selection.
IF lines( index_rows ) = 1.
is_selection-trkorrpattern = t_tab_01[ index_rows[ 1 ] ]-trkorr.
CALL FUNCTION 'TR_SEARCH_AND_DISPLAY_REQUESTS' ##FM_SUBRC_OK
EXPORTING
iv_username = '*'
is_selection = is_selection
iv_via_selscreen = abap_false
iv_cua_status = 'TDR_TOOL'
EXCEPTIONS
action_aborted_by_user = 1
OTHERS = 2.
ELSE.
MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
ENDIF.
ENDFORM.
FORM BUT_check_log.
RANGES: p_ori_tr FOR e070-trkorr.
IF lines( index_rows ) >= 1.
REFRESH p_ori_tr.
LOOP AT index_rows INTO DATA(l_i).
p_ori_tr = 'IEQ'.
p_ori_tr-low = t_tab_01[ l_i-index ]-trkorr. " l_tab_01-trkorr.
APPEND p_ori_tr.
AT LAST.
SUBMIT /sdf/cmo_tr_check AND RETURN
WITH p_source = 'DS4'
WITH p_dgp = abap_true
WITH p_target = '{PON AQUI EL DESTINO}' ##NO_TEXT
WITH p_ori_tr IN p_ori_tr
VIA SELECTION-SCREEN.
ENDAT.
ENDLOOP.
ELSE.
MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
ENDIF.
ENDFORM.
FORM BUT_ver_log.
IF lines( index_rows ) = 1.
READ TABLE t_tab_01 INTO l_tab_01 INDEX index_rows[ 1 ]-index.
SUBMIT rddprott AND RETURN WITH pv_korr = l_tab_01-trkorr.
ELSE.
MESSAGE s398(00) WITH C_There_can_be_only_one '' '' ''.
ENDIF.
ENDFORM.
FORM BUT_delete_object.
DATA: ls_object TYPE e071,
ls_request TYPE trwbo_request,
ls_line TYPE trwbo_s_e071.
SORT index_rows BY index DESCENDING.
LOOP AT index_rows INTO DATA(l_rows).
READ TABLE t_tab_02 INDEX l_rows-index INTO DATA(l_02).
SELECT SINGLE * FROM e071 INTO CORRESPONDING FIELDS OF ls_object
WHERE trkorr = l_02-trkorr
AND pgmid = l_02-pgmid
AND object = l_02-object
AND obj_name = l_02-obj_name.
ls_line = CORRESPONDING #( ls_object ).
ls_request-h = CORRESPONDING #( ls_object ).
APPEND ls_line TO ls_request-objects.
ls_request-objects_filled = abap_true.
CALL FUNCTION 'TRINT_DELETE_COMM_OBJECT_KEYS'
EXPORTING
is_e071_delete = ls_object
iv_dialog_flag = abap_true
CHANGING
cs_request = ls_request
EXCEPTIONS
r_user_cancelled = 1
r_user_didnt_confirm = 2
OTHERS = 3.
CHECK sy-subrc EQ 0.
DELETE t_tab_02 INDEX l_rows-index.
t_alv[ 2 ]-grid->refresh_table_display( ).
ENDLOOP.
ENDFORM.
FORM bUT_exit_program. " *--[ Destruir controladores y ALVs
cc_01->free( ).
FREE: cc_01.
CLEAR: cc_01, t_alv[ 1 ]-grid, t_alv[ 2 ]-grid, t_alv[ 3 ]-grid.
LEAVE TO SCREEN 0.
ENDFORM.
TYPES: BEGIN OF ty_users,
user TYPE xubname,
name(80),
END OF ty_users.
DATA: t_users TYPE STANDARD TABLE OF ty_users.
FORM get_user USING p_user CHANGING p_user_txt.
DATA l_user(80).
CHECK NOT p_user IS INITIAL.
TRY.
p_user_txt = t_users[ user = p_user ]-name.
CATCH cx_root.
SELECT SINGLE f~bname && ' ' && p~name_first && ' ' && p~name_last INTO @p_user_txt
FROM usr21 AS f INNER JOIN adrp AS p ON f~persnumber = p~persnumber
WHERE f~bname = @p_user.
REPLACE ALL OCCURRENCES OF p_user IN p_user_txt WITH ''.
CONDENSE p_user_txt.
IF p_user_txt IS INITIAL. p_user_txt = p_user. ENDIF.
t_users = VALUE #( BASE t_users ( user = p_user name = p_user_txt ) ).
ENDTRY.
ENDFORM.
FORM MENU_add_options USING p_e_object TYPE REF TO cl_ctmenu.
TYPES: BEGIN OF ty_tab,
text TYPE gui_text,
fcode TYPE ui_func,
END OF ty_tab.
DATA: l_num TYPE n LENGTH 2,
t_tab TYPE SORTED TABLE OF ty_tab WITH UNIQUE KEY text.
DO 99 TIMES.
l_num = sy-index.
DATA(l_quick) = |c_quick_{ l_num }|.
ASSIGN (l_quick) TO FIELD-SYMBOL(<f_quick>).
IF sy-subrc NE 0.
EXIT.
ENDIF.
t_tab = VALUE #( BASE t_tab ( fcode = |MC{ l_num }| text = <f_quick> ) ).
ENDDO.
LOOP AT t_tab INTO DATA(l_tab).
p_e_object->add_function( EXPORTING fcode = l_tab-fcode text = l_tab-text ).
ENDLOOP.
ENDFORM.