Función que permite obtener órdenes de transporte y su status según parámetros de selección indicados en las tablas titular, ordenes, con retorno en status_ordenes.
Elementos de Datos:
ZWDES_USUARIOS:
USUARIO ERNAM
ZWDES_ORDENES:
ORDEN TRKORR
ZWDES_STATUSORDENES:
ORDEN TRKORR
DESCRIPCION AS4TEXT
TITULAR ERNAM
TIPO TRCATEG
FECHA DATE
HORA TIME
IMPORT_DEV CHAR1
IMPORT_QAS CHAR1
IMPORT_PRD CHAR1
DEV_NO_LIB CHAR1
DESCRIPCION AS4TEXT
TITULAR ERNAM
TIPO TRCATEG
FECHA DATE
HORA TIME
IMPORT_DEV CHAR1
IMPORT_QAS CHAR1
IMPORT_PRD CHAR1
DEV_NO_LIB CHAR1
FUNCTION zpwd_050_busca_orden_transport.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_FECHA_DESDE) TYPE DATE OPTIONAL
*" VALUE(I_FECHA_HASTA) TYPE DATE OPTIONAL
*" VALUE(I_TIPO_ORDEN) TYPE CHAR2 OPTIONAL
*" VALUE(I_MANDANTE) TYPE CHAR4 DEFAULT 'LDQP'
*" TABLES
*" GT_TITULAR STRUCTURE ZWDES_USUARIOS OPTIONAL
*" GT_ORDENES STRUCTURE ZWDES_ORDENES OPTIONAL
*" GT_STATUS_ORDENES STRUCTURE ZWDES_STATUSORDENES OPTIONAL
*"----------------------------------------------------------------------
TYPES: BEGIN OF ordenes,
borrar TYPE c,
trkorr TYPE trkorr,
as4text TYPE as4text,
as4user TYPE as4user,
korrdev TYPE trcateg,
as4date TYPE as4date,
as4time TYPE as4time,
des TYPE icon_d,
tst TYPE icon_d,
prd TYPE icon_d,
v_des TYPE icon_d,
v_des_l TYPE icon_d,
v_tst TYPE icon_d,
v_prd TYPE icon_d,
END OF ordenes.
DATA t_itab TYPE TABLE OF ordenes WITH HEADER LINE.
DATA wa_titular TYPE zwdes_usuarios.
DATA wa_ordenes TYPE zwdes_ordenes.
DATA : BEGIN OF salida OCCURS 0.
INCLUDE STRUCTURE tstrfcofil.
DATA : END OF salida.
DATA : BEGIN OF t_des OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_des .
DATA : BEGIN OF t_tst OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_tst .
DATA : BEGIN OF t_prd OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_prd .
DATA : g_cursor(20).
DATA : v_tipo LIKE e070-trfunction.
RANGES: r_user FOR e070-as4user.
LOOP AT gt_titular INTO wa_titular.
r_user-low = wa_titular-usuario.
r_user-option = 'EQ'.
r_user-sign = 'I'.
APPEND r_user.
ENDLOOP.
RANGES: r_orden FOR e070-trkorr.
LOOP AT gt_ordenes INTO wa_ordenes.
r_orden-low = wa_ordenes-orden.
r_orden-option = 'EQ'.
r_orden-sign = 'I'.
APPEND r_orden.
ENDLOOP.
RANGES: r_fecha FOR e070-as4date.
IF i_fecha_desde IS NOT INITIAL AND i_fecha_hasta IS INITIAL.
r_fecha-low = i_fecha_desde.
r_fecha-high = '00000000'.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
IF i_fecha_desde IS INITIAL AND i_fecha_hasta IS NOT INITIAL.
r_fecha-low = '00000000'.
r_fecha-high = i_fecha_hasta.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
IF i_fecha_desde IS NOT INITIAL AND i_fecha_hasta IS NOT INITIAL.
r_fecha-low = i_fecha_desde.
r_fecha-high = i_fecha_hasta.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
"Tipo de Orde WORKBENCH o CUSTOMIZING
RANGES: r_tipo FOR e070-trfunction.
IF i_tipo_orden CA 'W'.
r_tipo-low = 'K'. "Orden Workbench
r_tipo-option = 'EQ'.
r_tipo-sign = 'I'.
APPEND r_tipo.
ENDIF.
IF i_tipo_orden CA 'C'.
r_tipo-low = 'W'. "Orden Customizong
r_tipo-option = 'EQ'.
r_tipo-sign = 'I'.
APPEND r_tipo.
ENDIF.
SELECT e070~trkorr e070~as4user e070~korrdev e070~as4date e070~as4time e07t~as4text
INTO CORRESPONDING FIELDS OF TABLE t_itab
FROM e070 INNER JOIN e07t ON e070~trkorr = e07t~trkorr
WHERE e070~as4user IN r_user
AND e070~trkorr IN r_orden
AND e070~trfunction IN r_tipo
AND e070~strkorr EQ ''
AND e070~as4date IN r_fecha.
LOOP AT t_itab.
CALL FUNCTION 'STRF_READ_COFILE'
EXPORTING
iv_dirtype = 'T'
iv_trkorr = t_itab-trkorr
iv_read_header = 'X'
TABLES
tt_cofi_lines = salida
EXCEPTIONS
wrong_call = 1
no_info_found = 2
OTHERS = 3.
SORT salida BY tarsystem : lineoffile DESCENDING.
LOOP AT salida.
CASE salida-tarsystem.
WHEN 'SFD'.
IF salida-function = 'E'.
FIND t_itab-trkorr IN TABLE t_des.
IF sy-subrc <> 0.
t_des-trkorr = t_itab-trkorr.
t_des-cod = salida-retcode.
COLLECT t_des.
t_itab-des = 'X'.
ENDIF.
ENDIF.
WHEN 'SFT'.
IF salida-function = 'I'.
FIND t_itab-trkorr IN TABLE t_tst.
IF sy-subrc <> 0.
t_tst-trkorr = t_itab-trkorr.
t_tst-cod = salida-retcode.
COLLECT t_tst.
t_itab-tst = 'X'.
ENDIF.
ENDIF.
WHEN 'SFP'.
IF salida-function = 'I'.
FIND t_itab-trkorr IN TABLE t_prd.
IF sy-subrc <> 0.
t_prd-trkorr = t_itab-trkorr.
t_prd-cod = salida-retcode.
COLLECT t_prd.
t_itab-prd = 'X'.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
*-- Marca orden No liberada --
IF t_itab-des = space AND
t_itab-tst = space AND
t_itab-prd = space.
t_itab-v_des = 'X'.
ENDIF.
*-- Marca orden liberada --
IF t_itab-des <> space AND
t_itab-tst = space AND
t_itab-prd = space.
t_itab-v_des_l = 'X'.
ENDIF.
*-- Marca orden en QAS --
IF t_itab-des <> space AND
t_itab-tst <> space AND
t_itab-prd = space.
t_itab-v_tst = 'X'.
ENDIF.
*-- Marca orden en PRD --
IF t_itab-des <> space AND
t_itab-tst <> space AND
t_itab-prd <> space.
t_itab-v_prd = 'X'.
ENDIF.
MODIFY t_itab.
DATA: v_des TYPE c,
v_des_l TYPE c,
v_tst TYPE c,
v_prd TYPE c.
"No Liberada DEV
IF i_mandante CA 'L'.
v_des = 'X'.
ENDIF.
"Liberada DEV
IF i_mandante CA 'D'.
v_des_l = 'X'.
ENDIF.
"Liberada QAS
IF i_mandante CA 'Q'.
v_tst = 'X'.
ENDIF.
"Liberada PRD
IF i_mandante CA 'P'.
v_prd = 'X'.
ENDIF.
IF v_des = 'X' AND t_itab-v_des = 'X'.
ELSEIF v_des_l = 'X' AND t_itab-v_des_l = 'X'.
ELSEIF v_tst = 'X' AND t_itab-v_tst = 'X'.
ELSEIF v_prd = 'X' AND t_itab-v_prd = 'X'.
ELSE.
DELETE t_itab.
ENDIF.
ENDLOOP.
LOOP AT t_itab.
gt_status_ordenes-orden = t_itab-trkorr.
gt_status_ordenes-descripcion = t_itab-as4text.
gt_status_ordenes-titular = t_itab-as4user.
gt_status_ordenes-tipo = t_itab-korrdev.
gt_status_ordenes-fecha = t_itab-as4date.
gt_status_ordenes-hora = t_itab-as4time.
gt_status_ordenes-import_dev = t_itab-des.
gt_status_ordenes-import_qas = t_itab-tst.
gt_status_ordenes-import_prd = t_itab-prd.
gt_status_ordenes-dev_no_lib = t_itab-v_des.
APPEND gt_status_ordenes.
ENDLOOP.
ENDFUNCTION.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_FECHA_DESDE) TYPE DATE OPTIONAL
*" VALUE(I_FECHA_HASTA) TYPE DATE OPTIONAL
*" VALUE(I_TIPO_ORDEN) TYPE CHAR2 OPTIONAL
*" VALUE(I_MANDANTE) TYPE CHAR4 DEFAULT 'LDQP'
*" TABLES
*" GT_TITULAR STRUCTURE ZWDES_USUARIOS OPTIONAL
*" GT_ORDENES STRUCTURE ZWDES_ORDENES OPTIONAL
*" GT_STATUS_ORDENES STRUCTURE ZWDES_STATUSORDENES OPTIONAL
*"----------------------------------------------------------------------
TYPES: BEGIN OF ordenes,
borrar TYPE c,
trkorr TYPE trkorr,
as4text TYPE as4text,
as4user TYPE as4user,
korrdev TYPE trcateg,
as4date TYPE as4date,
as4time TYPE as4time,
des TYPE icon_d,
tst TYPE icon_d,
prd TYPE icon_d,
v_des TYPE icon_d,
v_des_l TYPE icon_d,
v_tst TYPE icon_d,
v_prd TYPE icon_d,
END OF ordenes.
DATA t_itab TYPE TABLE OF ordenes WITH HEADER LINE.
DATA wa_titular TYPE zwdes_usuarios.
DATA wa_ordenes TYPE zwdes_ordenes.
DATA : BEGIN OF salida OCCURS 0.
INCLUDE STRUCTURE tstrfcofil.
DATA : END OF salida.
DATA : BEGIN OF t_des OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_des .
DATA : BEGIN OF t_tst OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_tst .
DATA : BEGIN OF t_prd OCCURS 0,
trkorr LIKE e070-trkorr,
cod(2) TYPE c,
status(3),
END OF t_prd .
DATA : g_cursor(20).
DATA : v_tipo LIKE e070-trfunction.
RANGES: r_user FOR e070-as4user.
LOOP AT gt_titular INTO wa_titular.
r_user-low = wa_titular-usuario.
r_user-option = 'EQ'.
r_user-sign = 'I'.
APPEND r_user.
ENDLOOP.
RANGES: r_orden FOR e070-trkorr.
LOOP AT gt_ordenes INTO wa_ordenes.
r_orden-low = wa_ordenes-orden.
r_orden-option = 'EQ'.
r_orden-sign = 'I'.
APPEND r_orden.
ENDLOOP.
RANGES: r_fecha FOR e070-as4date.
IF i_fecha_desde IS NOT INITIAL AND i_fecha_hasta IS INITIAL.
r_fecha-low = i_fecha_desde.
r_fecha-high = '00000000'.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
IF i_fecha_desde IS INITIAL AND i_fecha_hasta IS NOT INITIAL.
r_fecha-low = '00000000'.
r_fecha-high = i_fecha_hasta.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
IF i_fecha_desde IS NOT INITIAL AND i_fecha_hasta IS NOT INITIAL.
r_fecha-low = i_fecha_desde.
r_fecha-high = i_fecha_hasta.
r_fecha-option = 'BT'.
r_fecha-sign = 'I'.
APPEND r_fecha.
ENDIF.
"Tipo de Orde WORKBENCH o CUSTOMIZING
RANGES: r_tipo FOR e070-trfunction.
IF i_tipo_orden CA 'W'.
r_tipo-low = 'K'. "Orden Workbench
r_tipo-option = 'EQ'.
r_tipo-sign = 'I'.
APPEND r_tipo.
ENDIF.
IF i_tipo_orden CA 'C'.
r_tipo-low = 'W'. "Orden Customizong
r_tipo-option = 'EQ'.
r_tipo-sign = 'I'.
APPEND r_tipo.
ENDIF.
SELECT e070~trkorr e070~as4user e070~korrdev e070~as4date e070~as4time e07t~as4text
INTO CORRESPONDING FIELDS OF TABLE t_itab
FROM e070 INNER JOIN e07t ON e070~trkorr = e07t~trkorr
WHERE e070~as4user IN r_user
AND e070~trkorr IN r_orden
AND e070~trfunction IN r_tipo
AND e070~strkorr EQ ''
AND e070~as4date IN r_fecha.
LOOP AT t_itab.
CALL FUNCTION 'STRF_READ_COFILE'
EXPORTING
iv_dirtype = 'T'
iv_trkorr = t_itab-trkorr
iv_read_header = 'X'
TABLES
tt_cofi_lines = salida
EXCEPTIONS
wrong_call = 1
no_info_found = 2
OTHERS = 3.
SORT salida BY tarsystem : lineoffile DESCENDING.
LOOP AT salida.
CASE salida-tarsystem.
WHEN 'SFD'.
IF salida-function = 'E'.
FIND t_itab-trkorr IN TABLE t_des.
IF sy-subrc <> 0.
t_des-trkorr = t_itab-trkorr.
t_des-cod = salida-retcode.
COLLECT t_des.
t_itab-des = 'X'.
ENDIF.
ENDIF.
WHEN 'SFT'.
IF salida-function = 'I'.
FIND t_itab-trkorr IN TABLE t_tst.
IF sy-subrc <> 0.
t_tst-trkorr = t_itab-trkorr.
t_tst-cod = salida-retcode.
COLLECT t_tst.
t_itab-tst = 'X'.
ENDIF.
ENDIF.
WHEN 'SFP'.
IF salida-function = 'I'.
FIND t_itab-trkorr IN TABLE t_prd.
IF sy-subrc <> 0.
t_prd-trkorr = t_itab-trkorr.
t_prd-cod = salida-retcode.
COLLECT t_prd.
t_itab-prd = 'X'.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
*-- Marca orden No liberada --
IF t_itab-des = space AND
t_itab-tst = space AND
t_itab-prd = space.
t_itab-v_des = 'X'.
ENDIF.
*-- Marca orden liberada --
IF t_itab-des <> space AND
t_itab-tst = space AND
t_itab-prd = space.
t_itab-v_des_l = 'X'.
ENDIF.
*-- Marca orden en QAS --
IF t_itab-des <> space AND
t_itab-tst <> space AND
t_itab-prd = space.
t_itab-v_tst = 'X'.
ENDIF.
*-- Marca orden en PRD --
IF t_itab-des <> space AND
t_itab-tst <> space AND
t_itab-prd <> space.
t_itab-v_prd = 'X'.
ENDIF.
MODIFY t_itab.
DATA: v_des TYPE c,
v_des_l TYPE c,
v_tst TYPE c,
v_prd TYPE c.
"No Liberada DEV
IF i_mandante CA 'L'.
v_des = 'X'.
ENDIF.
"Liberada DEV
IF i_mandante CA 'D'.
v_des_l = 'X'.
ENDIF.
"Liberada QAS
IF i_mandante CA 'Q'.
v_tst = 'X'.
ENDIF.
"Liberada PRD
IF i_mandante CA 'P'.
v_prd = 'X'.
ENDIF.
IF v_des = 'X' AND t_itab-v_des = 'X'.
ELSEIF v_des_l = 'X' AND t_itab-v_des_l = 'X'.
ELSEIF v_tst = 'X' AND t_itab-v_tst = 'X'.
ELSEIF v_prd = 'X' AND t_itab-v_prd = 'X'.
ELSE.
DELETE t_itab.
ENDIF.
ENDLOOP.
LOOP AT t_itab.
gt_status_ordenes-orden = t_itab-trkorr.
gt_status_ordenes-descripcion = t_itab-as4text.
gt_status_ordenes-titular = t_itab-as4user.
gt_status_ordenes-tipo = t_itab-korrdev.
gt_status_ordenes-fecha = t_itab-as4date.
gt_status_ordenes-hora = t_itab-as4time.
gt_status_ordenes-import_dev = t_itab-des.
gt_status_ordenes-import_qas = t_itab-tst.
gt_status_ordenes-import_prd = t_itab-prd.
gt_status_ordenes-dev_no_lib = t_itab-v_des.
APPEND gt_status_ordenes.
ENDLOOP.
ENDFUNCTION.
No hay comentarios:
Publicar un comentario