Etiquetas

20111212

ABAP Tips: Leer Ordenes de Transporte y Status

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

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.


No hay comentarios:

Publicar un comentario