antelio
12/11/2019 - 9:04 PM

ZRMM011 - Malote V2

*  &---------------------------------------------------------------------*
*  & Report  ZRMM010
*  &
*  &---------------------------------------------------------------------*
*  &
*  &
*  &---------------------------------------------------------------------*

  REPORT  zrmm011.

  TABLES: ekko, ekpo, ekbe, lfa1.
  TYPE-POOLS: slis, icon.

  TYPES : BEGIN OF ty_po,
    "Campos de Header
    bukrs        TYPE ekko-bukrs,  "Empresa
    ebeln        TYPE ekpo-ebeln,  "Número do Pedido
    attach_po     TYPE char4     ,  "Flag de anexo de Pedido de Compra
    bedat        TYPE ekko-bedat,  "Data do Pedido
    lifnr        TYPE ekko-lifnr,  "Número do Fornecedor
    name1        TYPE lfa1-name1,  "Nome do Fornecedor
    zterm_po     TYPE ekko-zterm,
    "Condição de Pagamento do Pedido de Compra
    ktokk        TYPE lfa1-ktokk,  "Grupo de Contas de Fornecedor

    "Campos de Item
    ebelp        TYPE ekpo-ebelp,  "Número do Item do Pedido
    mtart        TYPE ekpo-mtart,  "Tipo de Material
    matkl        TYPE ekpo-matkl,  "Grupo de Mercadoria
    matnr        TYPE ekpo-matnr,  "Número do Material
    txz01        TYPE ekpo-txz01,  "Texto Descritivo do Item
    menge_po       TYPE ekpo-menge,  "Quantidade do Pedido
    meins_po     TYPE ekpo-meins,  "Unidade Medida do Item do Pedido
*    balqty       TYPE ekpo-menge,
    netpr        TYPE ekpo-netpr,  "Preço Unitário do Item do Pedido
*    peinh        TYPE ekpo-peinh,
    werks        TYPE ekpo-werks,  "Centro do Item

    "EKBE (Histórico) - MIGO
    mblnr        TYPE mseg-mblnr,  "Documento de Material MIGO
    mjahr        TYPE mseg-mjahr,  "Ano do Documento de Material MIGO
    zeile        TYPE mseg-zeile,
    xblnr_migo   TYPE mkpf-xblnr,
    byref_migo   TYPE flag,
    bldat_migo      TYPE mkpf-bldat,
        "Data de Documento de Documento de Material MIGO
    cpudat_migo     TYPE mkpf-cpudt,
        "Data de Sistema para Data de Documento de Material MIGO
    attach_migo   TYPE char4     ,  "Flag de Anexos na MIGO
    menge_migo       TYPE mseg-menge,
    meins_migo       TYPE mseg-meins,

*  charg        TYPE mseg-charg,  "Lote de Material para Documento de
*  Material

    "EKBE (Histórico) - Folha de Serviço
    lblni        TYPE essr-lblni,  "Folha de Serviço
    xblnr_sheet  TYPE essr-xblnr,
    cpudt_sheet     TYPE essr-erdat,
    "Data de Criação da Folha de Serviço
    bldat_sheet  TYPE essr-bldat,  "Data de Documento da Folha de Serviço
    attach_sheet  TYPE char4     ,
    only_sheet TYPE flag,
    byref_sheet TYPE flag,

    dif_dias     TYPE i         ,  "Diferenças de Datas
    semaforo_sheet     TYPE icon_d    ,  "

    "EKBE (Histórico) - MIRO
    belnr_miro   TYPE rbkp-belnr,
    gjahr_miro   TYPE rbkp-gjahr,
    buzei_miro   TYPE rseg-buzei,
    bldat_miro        TYPE rbkp-bldat,
    xblnr_miro   TYPE rbkp-xblnr,
    xblnr6_miro   TYPE rbkp-xblnr,
    belnr_fi     TYPE bkpf-belnr,
    zterm_miro        TYPE rbkp-zterm,
    zfbdt_miro        TYPE rbkp-zfbdt,
    zterm_fi     TYPE bseg-zterm,
    attach_miro   TYPE char4     ,  "Flag de Anexo na MIRO
    only_miro TYPE flag,

    zterm   TYPE bseg-zterm,
    duedt_base TYPE datum,
    duedt        TYPE datum     ,
    split(4)     TYPE c         ,

    "Other Fields
    thick(10)    TYPE c         ,
    width(10)    TYPE c         ,
    length(10)   TYPE c         ,
    grade(10)    TYPE c         ,
    count        TYPE i,
    color_cell               TYPE lvc_t_scol,


  END OF ty_po.

  DATA: t_output TYPE TABLE OF ty_po.
  DATA: BEGIN OF t_ebeln OCCURS 0,
          ebeln TYPE ekpo-ebeln,
*          ebelp TYPE ekpo-ebelp,
        END OF t_ebeln.

  FIELD-SYMBOLS: <output> LIKE LINE OF t_output.

  DATA: g_save,
        g_exit,
        g_variant TYPE disvariant,
        gx_variant TYPE disvariant.

  DATA: w_ekko TYPE ekko,
        t_ekpo TYPE TABLE OF ekpo,
        t_ekkn TYPE TABLE OF ekkn,
        t_ekbe TYPE TABLE OF ekbe,
        t_ekbe_work TYPE TABLE OF ekbe,
        t_mseg TYPE TABLE OF mseg,
        v_mseg LIKE LINE OF t_mseg,
        t_essr TYPE TABLE OF essr,
        v_essr LIKE LINE OF t_essr,
        t_rbkp TYPE TABLE OF rbkp,
        t_rseg TYPE TABLE OF rseg,
        v_rseg LIKE LINE OF t_rseg,
        t_bkpf TYPE TABLE OF bkpf,
        t_bsik TYPE TABLE OF bsik.

  DATA: t_all_ekbe TYPE TABLE OF ekbe.

  SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
  SELECT-OPTIONS:
    s_badat FOR ekko-bedat OBLIGATORY NO-EXTENSION,
    s_bukrs FOR ekko-bukrs NO INTERVALS MEMORY ID buk,
    s_ekgrp FOR ekko-ekgrp NO INTERVALS,
    s_bsart FOR ekko-bsart,
    s_ebeln FOR ekko-ebeln NO-EXTENSION,
    s_ktokk FOR lfa1-ktokk NO INTERVALS.
  SELECTION-SCREEN:END OF BLOCK b1.

  SELECTION-SCREEN BEGIN OF BLOCK var.
  PARAMETERS: p_vari LIKE disvariant-variant.
  SELECTION-SCREEN END OF BLOCK var.


  DATA: "Dynpro Control
        lvc_layout  TYPE lvc_s_layo,
        lvc_t_fcat TYPE lvc_t_fcat,
        lvc_t_sort TYPE lvc_t_sort,
        lvc_w_layout TYPE lvc_s_layo,
        lvc_t_filter TYPE lvc_t_filt.

  DATA: lt_entry_sheet_green  TYPE RANGE OF i,
        lt_entry_sheet_yellow TYPE RANGE OF i,
        lt_entry_sheet_red    TYPE RANGE OF i.

  INITIALIZATION.

    DATA wa_indx TYPE indx.
    IF s_badat[] IS INITIAL.
      IMPORT s_badat[] FROM DATABASE indx(xy)
        TO wa_indx CLIENT sy-mandt
        ID 'ZMM011_DATE'.
    ENDIF.

    PERFORM select_tvarv:
      USING 'ENTRY_SHEET_GREEN'  CHANGING lt_entry_sheet_green,
      USING 'ENTRY_SHEET_YELLOW' CHANGING lt_entry_sheet_yellow,
      USING 'ENTRY_SHEET_RED'    CHANGING lt_entry_sheet_red   .



    g_save = 'A'.
    CLEAR g_variant.
    g_variant-report = sy-cprog.
*   Get default variant
    gx_variant = g_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
      EXPORTING
        i_save     = g_save
      CHANGING
        cs_variant = gx_variant
      EXCEPTIONS
        not_found  = 2.
    IF sy-subrc = 0.
      p_vari = gx_variant-variant.
    ENDIF.

  AT SELECTION-SCREEN.

    DATA wa_indx TYPE indx.
    IF s_badat[] IS NOT INITIAL.
      EXPORT s_badat[] TO DATABASE indx(xy)
        FROM wa_indx CLIENT sy-mandt
        ID 'ZMM011_DATE'.
    ENDIF.


*   Process on value request
  AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    g_save = 'A'.
    CLEAR g_variant.
    g_variant-report = sy-cprog.
*   Get default variant
    gx_variant = g_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      is_variant          = g_variant
      i_save              = g_save
*             it_default_fieldcat =
    IMPORTING
      e_exit              = g_exit
      es_variant          = gx_variant
    EXCEPTIONS
      not_found = 2.
    IF sy-subrc = 2.
      MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
      IF g_exit = space.
        p_vari = gx_variant-variant.
      ENDIF.
    ENDIF.

  END-OF-SELECTION.
    PERFORM output_report.

  START-OF-SELECTION.
    PERFORM get_documents.
    PERFORM get_ldb_data.
    PERFORM define_colors.
    PERFORM fill_fi_belnr.
    PERFORM fill_due_date.


*  &---------------------------------------------------------------------*
*  &      Form  get_documents
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
  FORM get_documents .
    SELECT p~ebeln "p~ebelp
        FROM ekbe AS b
        INNER JOIN ekpo AS p
          ON p~mandt = b~mandt
            AND p~ebeln = b~ebeln
            AND p~ebelp = b~ebelp
        INNER JOIN ekko AS k
          ON k~mandt = p~mandt
            AND k~ebeln = p~ebeln
        INNER JOIN lfa1 AS l
          ON l~lifnr EQ k~lifnr
            AND l~mandt EQ k~mandt
        INTO  TABLE t_ebeln
        WHERE ( b~budat IN s_badat
        "EKBE-BUDAT Document Date Historial
              OR b~bldat IN s_badat
              "EKBE-BLDAT Posting Date Historial
              OR b~cpudt IN s_badat )
              "EKBE-CPUDT System Date Create Histoiral
          AND p~ebeln IN s_ebeln
          AND k~bsart IN s_bsart
          AND k~bukrs IN s_bukrs
          AND k~ekgrp IN s_ekgrp
          AND l~ktokk IN s_ktokk
          AND p~loekz NOT IN ('L', 'S').

    SORT t_ebeln BY ebeln."ebelp.
    DELETE ADJACENT DUPLICATES FROM t_ebeln COMPARING ALL FIELDS.

  ENDFORM.                    " GET_DOCUMENTS
*  &---------------------------------------------------------------------*
*  &      Form  GET_LDB_DATA
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM get_ldb_data .
    CHECK t_ebeln[] IS NOT INITIAL.

    DATA:
          t_callback TYPE TABLE OF ldbcb,
          t_selections TYPE TABLE OF rsparams.

    PERFORM prepare_ldb TABLES t_callback t_selections.

    CALL FUNCTION 'LDB_PROCESS'
    EXPORTING
      ldbname                           =  'ENM'
*       VARIANT                           =
*       EXPRESSIONS                       =
*       FIELD_SELECTION                   =
*       DYN_NODE_TYPES                    =
    TABLES
      callback                          = t_callback
      selections                        = t_selections
    EXCEPTIONS
      ldb_not_reentrant                 = 1
      ldb_incorrect                     = 2
      ldb_already_running               = 3
      ldb_error                         = 4
      ldb_selections_error              = 5
      ldb_selections_not_accepted       = 6
      variant_not_existent              = 7
      variant_obsolete                  = 8
      variant_error                     = 9
      free_selections_error             = 10
      callback_no_event                 = 11
      callback_node_duplicate           = 12
      callback_no_program               = 13
      callback_no_cbform                = 14
      dyn_node_no_type                  = 15
      dyn_node_invalid_type             = 16
      OTHERS                            = 17
      .
    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


  ENDFORM.                    " GET_LDB_DATA
*  &---------------------------------------------------------------------*
*  &      Form  PREPARE_LDB
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_CALLBACK  text
*        -->P_T_SELECTIONS  text
*  ----------------------------------------------------------------------*
  FORM prepare_ldb  TABLES   p_t_callback STRUCTURE ldbcb
                             p_t_selections STRUCTURE rsparams.

    DATA: callback_wa LIKE LINE OF p_t_callback,
          seltab_wa LIKE LINE OF p_t_selections.

    CLEAR: p_t_callback[], p_t_selections[].

    callback_wa-ldbnode     = 'EKKO'.
    callback_wa-get         = 'X'.
    callback_wa-get_late    = ' '.
    callback_wa-cb_prog     = sy-repid.
    callback_wa-cb_form     = 'CALLBACK_EKKO'.
    APPEND callback_wa TO p_t_callback.


    callback_wa-ldbnode     = 'EKPO'.
    callback_wa-get         = 'X'.
    callback_wa-get_late    = 'X'.
    callback_wa-cb_prog     = sy-repid.
    callback_wa-cb_form     = 'CALLBACK_EKPO'.
    APPEND callback_wa TO p_t_callback.

    callback_wa-ldbnode     = 'EKKN'.
    callback_wa-get         = 'X'.
    callback_wa-get_late    = ' '.
    callback_wa-cb_prog     = sy-repid.
    callback_wa-cb_form     = 'CALLBACK_EKKN'.
    APPEND callback_wa TO p_t_callback.

    callback_wa-ldbnode     = 'EKBE'.
    callback_wa-get         = 'X'.
    callback_wa-get_late    = ' '.
    callback_wa-cb_prog     = sy-repid.
    callback_wa-cb_form     = 'CALLBACK_EKBE'.
    APPEND callback_wa TO p_t_callback.

    seltab_wa-kind = 'S'.
    seltab_wa-selname = 'EN_EBELN'.
    seltab_wa-sign = 'I'.
    seltab_wa-option = 'EQ'.

    DATA: w_ebeln LIKE LINE OF t_ebeln.
    LOOP AT t_ebeln INTO w_ebeln.
      seltab_wa-low = w_ebeln-ebeln.
      APPEND seltab_wa TO p_t_selections.
    ENDLOOP.
  ENDFORM.                    " PREPARE_LDB



*  &---------------------------------------------------------------------*
*  &      Form  callback_ekko
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->NAME       text
*        -->WA         text
*        -->EVT        text
*        -->CHECK      text
*  ----------------------------------------------------------------------*
  FORM callback_ekko USING name  TYPE ldbn-ldbnode
        wa    TYPE ekko
        evt   TYPE c
        check TYPE c.
    CASE evt.
      WHEN 'G'.
        CLEAR: w_ekko.
        MOVE-CORRESPONDING wa TO w_ekko.
      WHEN 'L'.

    ENDCASE.
  ENDFORM.                    "callback_ekko

*  &---------------------------------------------------------------------*
*  &      Form  callback_ekPo
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->NAME       text
*        -->WA         text
*        -->EVT        text
*        -->CHECK      text
*  ----------------------------------------------------------------------*
  FORM callback_ekpo USING name  TYPE ldbn-ldbnode
        wa    TYPE ekpo
        evt   TYPE c
        check TYPE c.
    DATA: l_ekpo LIKE LINE OF t_ekpo.
    CASE evt.
      WHEN 'G'.
        CLEAR: t_ekpo[], t_ekkn[], t_mseg[],
               t_rseg[], t_rbkp[], t_bsik[],
               t_bkpf[], t_essr[], t_ekbe[].
        MOVE-CORRESPONDING wa TO l_ekpo.
        APPEND l_ekpo TO t_ekpo.
      WHEN 'L'.
        PERFORM build_data.
*        APPEND LINES OF t_ekbe_work TO t_all_ekbe.
    ENDCASE.
  ENDFORM.                    "callback_ekko

*  &---------------------------------------------------------------------*
*  &      Form  callback_ekkn
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->NAME       text
*        -->WA         text
*        -->EVT        text
*        -->CHECK      text
*  ----------------------------------------------------------------------*
  FORM callback_ekkn USING name  TYPE ldbn-ldbnode
        wa    TYPE ekkn
        evt   TYPE c
        check TYPE c.
    DATA: l_ekkn LIKE LINE OF t_ekkn.
    CASE evt.
      WHEN 'G'.
        MOVE-CORRESPONDING wa TO l_ekkn.
        APPEND l_ekkn TO t_ekkn.
      WHEN 'L'.
    ENDCASE.
  ENDFORM.                    "callback_ekko

*  &---------------------------------------------------------------------*
*  &      Form  callback_ekbe
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->NAME       text
*        -->WA         text
*        -->EVT        text
*        -->CHECK      text
*  ----------------------------------------------------------------------*
  FORM callback_ekbe USING name  TYPE ldbn-ldbnode
        wa    TYPE ekbe
        evt   TYPE c
        check TYPE c.
    DATA: l_ekbe LIKE LINE OF t_ekbe.
    CASE evt.
      WHEN 'G'.
        MOVE-CORRESPONDING wa TO l_ekbe.
        APPEND l_ekbe TO t_ekbe.
      WHEN 'L'.
    ENDCASE.
  ENDFORM.                    "callback_ekko
*  &---------------------------------------------------------------------*
*  &      Form  OUTPUT_REPORT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM output_report .

    PERFORM prepare_sort USING lvc_t_sort.
    PERFORM build_fcat.
    PERFORM prepare_fcat.
    PERFORM prepare_filter USING lvc_t_filter.
    PERFORM prepare_layout.
    PERFORM call_alv.

  ENDFORM.                    " OUTPUT_REPORT
*  &---------------------------------------------------------------------*
*  &      Form  PREPARE_SORT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_LVC_T_SORT  text
*  ----------------------------------------------------------------------*
  FORM prepare_sort  USING    p_lvc_t_sort.

  ENDFORM.                    " PREPARE_SORT
*  &---------------------------------------------------------------------*
*  &      Form  BUILD_FCAT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM build_fcat .
    DATA: i TYPE i.

    REFRESH lvc_t_fcat.
    i = 1.     PERFORM buildfields USING i 'BUKRS' 'T_OUTPUT' 'Empresa' '' 0.
    i = i + 1. PERFORM buildfields USING i 'EBELN' 'T_OUTPUT' 'Pedido' ''  10.
    i = i + 1. PERFORM buildfields USING i 'LIFNR' 'T_OUTPUT'  'Número do Fornecedor' '' 0.
    i = i + 1. PERFORM buildfields USING i 'KTOKK' 'T_OUTPUT'  'Grp.Contas Fornecedor' '' 0.
    i = i + 1. PERFORM buildfields USING i 'NAME1' 'T_OUTPUT' 'Fornecedor'  '' 0.
    i = i + 1. PERFORM buildfields USING i 'ZTERM_PO' 'T_OUTPUT'  'C.Pag.Pedido' '' 0.
    i = i + 1. PERFORM buildfields USING i 'BEDAT'    'T_OUTPUT'  'Data do Pedido' '' 0.
    i = i + 1. PERFORM buildfields USING i 'EBELP'    'T_OUTPUT' 'Item' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ATTACH_PO' 'T_OUTPUT'   'Anexo Pedido' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MATNR'    'T_OUTPUT'  'Número do Material' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MATKL'    'T_OUTPUT'  'Grupo de Mercadorias' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MTART'    'T_OUTPUT'  'Tipo do Material' '' 0.
    i = i + 1. PERFORM buildfields USING i 'TXZ01'    'T_OUTPUT'  'Descrição do Material' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MENGE_PO'   'T_OUTPUT'  'Quantidade do Pedido' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MEINS_PO'    'T_OUTPUT'  'Unidade do Pedido' '' 0.
    i = i + 1. PERFORM buildfields USING i 'NETPR'    'T_OUTPUT' 'Preço' '' 0  .
    i = i + 1. PERFORM buildfields USING i 'WERKS'    'T_OUTPUT' 'Centro' '' 0  .
    i = i + 1. PERFORM buildfields USING i 'LBLNI'    'T_OUTPUT'  'Folha de Serviços' '' 0.
    i = i + 1. PERFORM buildfields USING i 'XBLNR_SHEET'    'T_OUTPUT'  'REF FS' '' 0.
    i = i + 1. PERFORM buildfields USING i 'CPUDT_SHEET' 'T_OUTPUT'  'Data Cria. de Serviços' '' 0.
    i = i + 1. PERFORM buildfields USING i 'BLDAT_SHEET' 'T_OUTPUT'  'DataDoc Folha' '' 0.
    i = i + 1. PERFORM buildfields USING i 'DIF_DIAS' 'T_OUTPUT' 'Diferença de Dias'      '' 0.
    i = i + 1. PERFORM buildfields USING i 'SEMAFORO_SHEET' 'T_OUTPUT' 'Status'   '' 0.
*    i = i + 1. PERFORM buildfields USING i 'PEINH'    'T_OUTPUT'   'Unidade de Preço' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ATTACH_SHEET' 'T_OUTPUT'   'Anexo-Folha' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MBLNR'    'T_OUTPUT' 'MIGO' ''  0  .
    i = i + 1. PERFORM buildfields USING i 'BLDAT_MIGO'  'T_OUTPUT' 'DtL MIGO'  '' 0.
    i = i + 1. PERFORM buildfields USING i 'CPUDAT_MIGO'  'T_OUTPUT' 'DtC MIGO'  '' 0.
    i = i + 1. PERFORM buildfields USING i 'XBLNR_MIGO'    'T_OUTPUT'  'REF MIGO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ATTACH_MIGO' 'T_OUTPUT'  'Anexo MIGO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MENGE_MIGO'     'T_OUTPUT'  'Quantidade MIGO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'MEINS_MIGO'     'T_OUTPUT'  'Unidade MIGO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'BELNR_MIRO'      'T_OUTPUT' 'MIRO' ''  0.
    i = i + 1. PERFORM buildfields USING i 'XBLNR_MIRO'    'T_OUTPUT'  'REF MIRO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ATTACH_MIRO' 'T_OUTPUT'  'Anexo-MIRO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'BLDAT_MIRO' 'T_OUTPUT' 'DtL MIRO' '' 0  .
    i = i + 1. PERFORM buildfields USING i 'BELNR_FI' 'T_OUTPUT' 'FI Doc' ''  0.
    i = i + 1. PERFORM buildfields USING i 'ZTERM_MIRO' 'T_OUTPUT' 'C.Pag.MIRO' ''  0.
    i = i + 1. PERFORM buildfields USING i 'SPLIT' 'T_OUTPUT' 'Parcel.' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ZFBDT_MIRO' 'T_OUTPUT' 'Dt.Base MIRO' '' 0.
    i = i + 1. PERFORM buildfields USING i 'DUEDT' 'T_OUTPUT' 'Dt.Pago' '' 0.
    i = i + 1. PERFORM buildfields USING i 'ZTERM_FI' 'T_OUTPUT'  'C.Pag.Contábil' '' 0.

*    DATA: t_slis_fcat TYPE slis_t_fieldcat_alv.
*
*    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
*    EXPORTING
*      i_program_name               = sy-cprog
*      i_internal_tabname           = 'T_OUTPUT'
*  *    i_structure_name             = 'T_OUTPUT'
*  *   I_CLIENT_NEVER_DISPLAY       = 'X'
*      i_inclname                   = sy-cprog
*  *   I_BYPASSING_BUFFER           =
*  *   I_BUFFER_ACTIVE              =
*    CHANGING
*      ct_fieldcat                  = t_slis_fcat
*    EXCEPTIONS
*      inconsistent_interface       = 1
*      program_error                = 2
*      OTHERS                       = 3.
*
*    CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
*    EXPORTING
*      it_fieldcat_alv       = t_slis_fcat
*  *   IT_SORT_ALV           =
*  *   IT_FILTER_ALV         =
*  *   IS_LAYOUT_ALV         =
*    IMPORTING
*      et_fieldcat_lvc       = lvc_t_fcat
*  *   ET_SORT_LVC           =
*  *   ET_FILTER_LVC         =
*  *   ES_LAYOUT_LVC         =
*    TABLES
*      it_data               = t_output
*  * EXCEPTIONS
*  *   IT_DATA_MISSING       = 1
*  *   OTHERS                = 2
*      .
*    IF sy-subrc <> 0.
*  * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*  *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.

  ENDFORM.                    " BUILD_FCAT


*  &---------------------------------------------------------------------*
*  &      Form  buildfields
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->VALUE(P_COL_POS)  text
*        -->VALUE(P_FLDNAME)  text
*        -->VALUE(P_TABNAME)  text
*        -->VALUE(P_REPTEXT)  text
*        -->VALUE(P_DO_SUM)   text
*        -->VALUE(P_LEN)      text
*  ----------------------------------------------------------------------*
  FORM buildfields  USING    value(p_col_pos) LIKE sy-cucol
        value(p_fldname) TYPE slis_fieldname
        value(p_tabname) TYPE slis_tabname
        value(p_reptext) LIKE dd03p-reptext
        value(p_do_sum) TYPE char1
        value(p_len) TYPE i.

    DATA: w_lvc_fcat LIKE LINE OF lvc_t_fcat.
    CLEAR w_lvc_fcat.
    w_lvc_fcat-col_pos = p_col_pos.
    w_lvc_fcat-fieldname = p_fldname.
    w_lvc_fcat-tabname = p_tabname.
    w_lvc_fcat-reptext = p_reptext.
    w_lvc_fcat-do_sum = p_do_sum.
    w_lvc_fcat-just = 'C'.
    IF p_len IS NOT INITIAL.
      w_lvc_fcat-intlen = p_len.
    ENDIF.
    APPEND w_lvc_fcat TO lvc_t_fcat.

  ENDFORM.                    " BUILDFIELDS
*  &---------------------------------------------------------------------*
*  &      Form  CALL_ALV
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM call_alv .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                =
*     I_BUFFER_ACTIVE                   =
      i_callback_program                = 'ZRMM011'
*     I_CALLBACK_PF_STATUS_SET          = ' '
      i_callback_user_command           = 'USER_COMMAND'
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
      is_layout_lvc                     = lvc_layout
      it_fieldcat_lvc                   = lvc_t_fcat
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS_LVC             =
*     IT_SORT_LVC                       =
*     IT_FILTER_LVC                     =
*     IT_HYPERLINK                      =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
      i_save                            = g_save
      is_variant                        = g_variant
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT_LVC                      =
*     IS_REPREP_ID_LVC                  =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 =
*     I_HTML_HEIGHT_END                 =
*     IT_ALV_GRAPHICS                   =
*     IT_EXCEPT_QINFO_LVC               =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          = t_output
*   EXCEPTIONS
*     PROGRAM_ERROR                     = 1
*     OTHERS                            = 2
      .
    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
*
*    CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
*      TABLES
*        table    = t_output
*      EXCEPTIONS
*        fb_error = 1
*        OTHERS   = 2.
*    IF sy-subrc <> 0.
**   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.

  ENDFORM.                    " CALL_ALV
*  &---------------------------------------------------------------------*
*  &      Form  PREPARE_FCAT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM prepare_fcat .

  ENDFORM.                    " PREPARE_FCAT
*  &---------------------------------------------------------------------*
*  &      Form  PREPARE_FILTER
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_LVC_T_FILTER  text
*  ----------------------------------------------------------------------*
  FORM prepare_filter  USING    p_lvc_t_filter.

  ENDFORM.                    " PREPARE_FILTER
*  &---------------------------------------------------------------------*
*  &      Form  GET_EKBE_DATA
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*        -->P_T_MSEG  text
*        -->P_T_ESSR  text
*        -->P_T_RBKP  text
*        -->P_T_RSEG  text
*        -->P_T_BSEG  text
*  ----------------------------------------------------------------------*
*  FORM get_ekbe_data  TABLES   tp_ekbe STRUCTURE ekbe "< IN
*                               tp_mseg STRUCTURE mseg "> OUT
*                               tp_essr STRUCTURE essr "> OUT
*                               "tp_rbkp STRUCTURE rbkp "> OU
*                               tp_rseg STRUCTURE rseg. "> OUT
*  *                             tp_bkpf STRUCTURE bkpf "> OUT
*  *                             tp_bsik STRUCTURE bsik."> OUT
*
*    CHECK tp_ekbe[] IS NOT INITIAL.
*    DATA: w_ekbe LIKE LINE OF tp_ekbe,
*          t_ekbe_copy LIKE TABLE OF w_ekbe.
*
*    t_ekbe_copy[] = tp_ekbe[].
*    DELETE t_ekbe_copy WHERE vgabe <> '1'.  " MIGO
*    IF t_ekbe_copy[] IS NOT INITIAL.
*      SELECT * INTO TABLE tp_mseg
*        FROM mseg
*        FOR ALL ENTRIES IN t_ekbe_copy
*        WHERE mblnr = t_ekbe_copy-belnr
*          AND mjahr = t_ekbe_copy-gjahr
*          AND zeile = t_ekbe_copy-buzei.
*    ENDIF.
*
*    READ TABLE tp_ekbe WITH KEY vgabe  = '2'. " MIRO
*    IF sy-subrc IS INITIAL.
*      READ TABLE tp_ekbe INDEX 1 INTO w_ekbe.
*      SELECT * INTO TABLE tp_rseg
*        FROM rseg
*        WHERE ebeln = w_ekbe-ebeln
*          AND ebelp = w_ekbe-ebelp.
*  *    IF tp_rseg[] IS NOT INITIAL.
*  *      SELECT * FROM rbkp INTO TABLE tp_rbkp
*  *        FOR ALL ENTRIES IN tp_rseg
*  *        WHERE belnr = tp_rseg-belnr
*  *          AND gjahr = tp_rseg-gjahr.
*  *    ENDIF.
*  *    IF tp_rbkp[] IS NOT INITIAL.
*  *      RANGES: r_awkey FOR bkpf-awkey.
*  *      DATA: w_awkey LIKE LINE OF r_awkey,
*  *            w_rbkp LIKE LINE OF tp_rbkp.
*  *      w_awkey-option = 'EQ'.
*  *      w_awkey-sign = 'I'.
*  *      LOOP AT tp_rbkp INTO w_rbkp.
*  *        CONCATENATE w_rbkp-belnr w_rbkp-gjahr INTO w_awkey-low.
*  *        APPEND w_awkey TO r_awkey.
*  *      ENDLOOP.
*  *      IF r_awkey[] IS NOT INITIAL.
*  *        SELECT * FROM bkpf INTO TABLE tp_bkpf
*  *          WHERE awkey IN r_awkey
*  *            AND bukrs IN s_bukrs
*  *            AND awtyp = 'RMRP'.
*  *        IF tp_bkpf[] IS NOT INITIAL.
*  *          SELECT * FROM bsik INTO TABLE tp_bsik
*  *            FOR ALL ENTRIES IN tp_bkpf
*  *            WHERE belnr = tp_bkpf-belnr
*  *              AND gjahr = tp_bkpf-gjahr
*  *              AND bukrs = tp_bkpf-bukrs.
*  *          SELECT * FROM bsak
*  *            APPENDING TABLE tp_bsik
*  *            FOR ALL ENTRIES IN tp_bkpf
*  *            WHERE belnr = tp_bkpf-belnr
*  *              AND gjahr = tp_bkpf-gjahr
*  *              AND bukrs = tp_bkpf-bukrs.
*  *        ENDIF.
*  *      ENDIF.
*  *    ENDIF.
*    ENDIF.
*
*    t_ekbe_copy[] = tp_ekbe[].
*    DELETE t_ekbe_copy WHERE vgabe <> '9'. " SHEET
*    IF t_ekbe_copy[] IS NOT INITIAL.
*      SELECT *
*        FROM essr
*        INTO TABLE tp_essr
*        FOR ALL ENTRIES IN t_ekbe_copy
*          WHERE lblni = t_ekbe_copy-belnr.
*    ENDIF.
*
*  ENDFORM.                    " GET_EKBE_DATA

*  &---------------------------------------------------------------------*
*  &      Form  REMOVE_EKBE_REVERSAL
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*  ----------------------------------------------------------------------*
  FORM remove_mseg_reversal
    TABLES p_t_ekbe STRUCTURE ekbe
    USING p_ekpo TYPE ekpo.

    DATA: l_ekbe TYPE ekbe,
          l_mseg TYPE mseg.
    CHECK p_t_ekbe[] IS NOT INITIAL.
    CHECK p_ekpo-pstyp <> '9'.

    LOOP AT t_ekbe INTO l_ekbe
      WHERE vgabe = '1' "MIGO
        AND shkzg = 'H'.
      IF l_ekbe-lfbnr IS NOT INITIAL.
        DELETE t_ekbe
          WHERE lfgja  = l_ekbe-lfgja
            AND lfbnr = l_ekbe-lfbnr
            AND lfpos = l_ekbe-lfpos
            AND vgabe = '1'.
        DELETE t_ekbe
          WHERE gjahr  = l_ekbe-gjahr
            AND belnr = l_ekbe-belnr
            AND buzei = l_ekbe-buzei
            AND vgabe = '1'.
      ELSE.
        SELECT SINGLE * FROM mseg INTO l_mseg
          WHERE mblnr = l_ekbe-belnr
            AND mjahr = l_ekbe-gjahr
            AND zeile = l_ekbe-buzei.
        CHECK sy-subrc IS INITIAL.
        CHECK l_mseg-smbln IS NOT INITIAL.
        DELETE t_ekbe
          WHERE gjahr  = l_mseg-sjahr
            AND belnr = l_mseg-smbln
            AND buzei = l_mseg-smblp
            AND vgabe = '1'.
        DELETE t_ekbe
          WHERE gjahr  = l_ekbe-gjahr
            AND belnr = l_ekbe-belnr
            AND buzei = l_ekbe-buzei
            AND vgabe = '1'.

      ENDIF.
    ENDLOOP.

    LOOP AT t_ekbe INTO l_ekbe
      WHERE vgabe = '2' "MIRO
        AND shkzg = 'H'..
      DELETE t_ekbe WHERE lfgja  = l_ekbe-lfgja
        AND lfbnr = l_ekbe-lfbnr AND lfpos = l_ekbe-lfpos.
    ENDLOOP.
  ENDFORM.                    " REMOVE_EKBE_REVERSAL

*  &---------------------------------------------------------------------*
*  &      Form  GET_EKBE_PERIOD
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*        -->P_T_EKBE_WORK  text
*  ----------------------------------------------------------------------*
  FORM get_ekbe_period  TABLES   p_t_ekbe STRUCTURE ekbe
                                   "Introduzir nome correto para <...>
                                 p_t_ekbe_work STRUCTURE ekbe.

    CLEAR p_t_ekbe_work[].
    CHECK p_t_ekbe[] IS NOT INITIAL.
    DATA: ekbe LIKE LINE OF p_t_ekbe.
    p_t_ekbe_work[] = p_t_ekbe[].
    LOOP AT p_t_ekbe INTO ekbe.
      IF NOT ( ekbe-bldat IN s_badat
         OR ekbe-cpudt IN s_badat
         OR ekbe-budat IN s_badat ).
        DELETE p_t_ekbe_work
          WHERE mandt = ekbe-mandt
            AND ebeln = ekbe-ebeln
            AND ebelp = ekbe-ebelp
            AND zekkn = ekbe-zekkn
            AND vgabe = ekbe-vgabe
            AND gjahr = ekbe-gjahr
            AND belnr = ekbe-belnr
            AND buzei = ekbe-buzei.
      ENDIF.
    ENDLOOP.
  ENDFORM.                    " GET_EKBE_PERIOD


*  &---------------------------------------------------------------------*
*  &      Form  REMOVE_ESSR_DELETED
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*        -->P_V_EKPO  text
*  ----------------------------------------------------------------------*
  FORM remove_essr_deleted_pending  TABLES   p_t_ekbe STRUCTURE ekbe
                            USING    p_v_ekpo TYPE ekpo.

    DATA: l_ekbe LIKE LINE OF p_t_ekbe,
          l_essr TYPE essr.
    LOOP AT p_t_ekbe INTO l_ekbe WHERE vgabe = '9'.
      SELECT SINGLE * FROM essr INTO l_essr
        WHERE lblni = l_ekbe-belnr.
      CHECK sy-subrc IS INITIAL.
      CHECK l_essr-loekz = 'X' . "OR
      "          l_essr-kzabn = ' '.  " Service Entry Sheet deleted.
      DELETE t_ekbe
        WHERE lfbnr = l_essr-lblni
          AND lfbnr IS NOT INITIAL
          AND vgabe <> '9'.
      DELETE t_ekbe
        WHERE belnr = l_essr-lblni
          AND vgabe = '9'.
    ENDLOOP.
  ENDFORM.                    " REMOVE_ESSR_DELETED


*  &---------------------------------------------------------------------*
*  &      Form  CLEAR_MSEG_ESSR
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*        -->P_V_EKPO  text
*  ----------------------------------------------------------------------*
  FORM clear_essr_mseg  TABLES   p_t_ekbe STRUCTURE ekbe
                        USING    p_v_ekpo TYPE ekpo.
    DATA: l_ekbe LIKE LINE OF p_t_ekbe,
          l_essr TYPE essr,
          lt_ekbe TYPE TABLE OF ekbe,
          l_ekbe_1 LIKE LINE OF lt_ekbe.
    LOOP AT p_t_ekbe INTO l_ekbe WHERE vgabe = '9'.
      SELECT SINGLE * FROM essr INTO l_essr
        WHERE lblni = l_ekbe-belnr.
      CHECK sy-subrc IS INITIAL.
      CHECK l_essr-kzabn = 'X'.
      lt_ekbe[] = t_ekbe[].
      DELETE lt_ekbe WHERE vgabe <> '1'. " Only MSEG
      DELETE lt_ekbe WHERE lfbnr <> l_ekbe-belnr. " Only MSEG with LBLNI
      SORT lt_ekbe BY gjahr DESCENDING belnr DESCENDING.
      READ TABLE lt_ekbe INDEX 1 INTO l_ekbe_1.
      DELETE t_ekbe
        WHERE lfbnr = l_ekbe-belnr
          AND NOT ( gjahr = l_ekbe_1-gjahr
           AND belnr = l_ekbe_1-belnr )
          AND lfbnr IS NOT INITIAL
          AND vgabe = '1'.

    ENDLOOP.
  ENDFORM.                    " CLEAR_MSEG_ESSR

*  &---------------------------------------------------------------------*
*  &      Form  BUILD_DATA
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*


*  &---------------------------------------------------------------------*
*  &      Form  CLEAR_RSEG_ESSR
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*        -->P_V_EKPO  text
*  ----------------------------------------------------------------------*
  FORM clear_rseg_reverse  TABLES   p_t_ekbe STRUCTURE ekbe
                        USING    p_v_ekpo TYPE ekpo.
    DATA: l_ekbe LIKE LINE OF p_t_ekbe,
          l_rbkp TYPE rbkp.

    LOOP AT p_t_ekbe INTO l_ekbe WHERE vgabe = '2'.
      SELECT SINGLE * FROM rbkp INTO l_rbkp
        WHERE belnr = l_ekbe-belnr
          AND gjahr = l_ekbe-gjahr.
      CHECK sy-subrc IS INITIAL.
      CHECK l_rbkp-stblg IS NOT INITIAL
        AND l_rbkp-stjah IS NOT INITIAL.
      DELETE t_ekbe
        WHERE belnr = l_ekbe-belnr
          AND gjahr = l_ekbe-gjahr
          AND vgabe = '2'.
      DELETE t_ekbe
        WHERE belnr = l_rbkp-stblg
          AND gjahr = l_rbkp-stjah
          AND vgabe = '2'.
    ENDLOOP.

  ENDFORM.                    " CLEAR_RSEG_ESSR

*  &---------------------------------------------------------------------*
*  &      Form  FIX_XBLNR_RKBP
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*  ----------------------------------------------------------------------*
  FORM fix_xblnr_rkbp  TABLES   p_t_ekbe STRUCTURE ekbe.
    FIELD-SYMBOLS: <ekbe> LIKE LINE OF p_t_ekbe.
    LOOP AT p_t_ekbe ASSIGNING <ekbe> WHERE vgabe = '2' AND xblnr IS INITIAL.
      SELECT SINGLE xblnr INTO <ekbe>-xblnr
        FROM rbkp
          WHERE belnr = <ekbe>-belnr
            AND gjahr = <ekbe>-gjahr.
      IF sy-subrc IS NOT INITIAL.
        CLEAR <ekbe>-xblnr.
      ENDIF.
    ENDLOOP.
  ENDFORM.                    " FIX_XBLNR_RKBP


*  &---------------------------------------------------------------------*
*  &      Form  FIX_XBLNR_ESSR
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_T_EKBE  text
*  ----------------------------------------------------------------------*
  FORM fix_xblnr_essr  TABLES   p_t_ekbe STRUCTURE ekbe.
    FIELD-SYMBOLS: <ekbe> LIKE LINE OF p_t_ekbe.
    LOOP AT p_t_ekbe ASSIGNING <ekbe> WHERE vgabe = '9' AND xblnr IS INITIAL.
      SELECT SINGLE xblnr INTO <ekbe>-xblnr
        FROM essr
          WHERE lblni = <ekbe>-belnr.
      IF sy-subrc IS NOT INITIAL.
        CLEAR <ekbe>-xblnr.
      ENDIF.
    ENDLOOP.

  ENDFORM.                    " FIX_XBLNR_ESSR

*  &---------------------------------------------------------------------*
*  &      Form  build_data
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
  FORM build_data .
    DATA: v_ekko TYPE ekko,
          v_ekpo TYPE ekpo,
          v_ekkn TYPE ekkn,
          v_ekbe TYPE ekbe,
          i_ekkn TYPE i,
          v_kostl_name TYPE bapi0012_5-name,
          v_asset_detail TYPE bapi1022_2,
          v_kokrs TYPE kokrs.

    v_ekko = w_ekko.
    READ TABLE t_ekpo INDEX 1 INTO v_ekpo.

    CHECK v_ekpo-loekz IS INITIAL.
    " Verify Purchase Order Item is Valid (not deleted, not bloqued)

    DATA: v_output LIKE LINE OF t_output.

    PERFORM clear_rseg_reverse
      TABLES t_ekbe
      USING v_ekpo.

    IF v_ekpo-pstyp = '9'.  "Services
      PERFORM remove_essr_deleted_pending
        TABLES t_ekbe
        USING v_ekpo.
      PERFORM clear_essr_mseg
        TABLES t_ekbe
        USING v_ekpo.
    ELSE.
      PERFORM remove_mseg_reversal
        TABLES t_ekbe
        USING v_ekpo.
    ENDIF.

    PERFORM fix_xblnr_rkbp
      TABLES t_ekbe.
    PERFORM fix_xblnr_essr
      TABLES t_ekbe.

    "work tables by date: migo, miro, ml81n
    PERFORM get_ekbe_period
      TABLES t_ekbe t_ekbe_work.

    CHECK t_ekbe_work[] IS NOT INITIAL.
    CLEAR: v_output.
    PERFORM fill_output_ekpo USING v_output v_ekko v_ekpo.

    DATA: v_ekbe_miro LIKE LINE OF t_ekbe,
          v_ekbe_migo LIKE LINE OF t_ekbe,
          v_ekbe_sheet LIKE LINE OF t_ekbe.

    LOOP AT t_ekbe_work INTO v_ekbe_miro WHERE vgabe = '2'. " 2 = MIRO
      " Check if not inserted
      READ TABLE t_output TRANSPORTING NO FIELDS WITH KEY
          ebeln = v_ekbe_miro-ebeln
          ebelp = v_ekbe_miro-ebelp
          belnr_miro = v_ekbe_miro-belnr
          gjahr_miro = v_ekbe_miro-gjahr.
      CHECK sy-subrc IS NOT INITIAL.

      PERFORM fill_output_miro USING v_output v_ekbe_miro.
      v_output-only_miro = 'X'.
      " MIRO --> MIGO
      IF v_ekbe_miro-lfbnr IS NOT INITIAL AND
         v_ekbe_miro-lfgja IS NOT INITIAL AND
         v_ekbe_miro-lfpos IS NOT INITIAL. " REF to MIGO
        READ TABLE t_ekbe INTO v_ekbe_migo WITH KEY
          ebeln = v_ekbe_miro-ebeln
          ebelp = v_ekbe_miro-ebelp
          vgabe = '1'  " 1 = MIGO
          belnr = v_ekbe_miro-lfbnr
          gjahr = v_ekbe_miro-lfgja.
        IF sy-subrc IS INITIAL.
          PERFORM fill_output_migo USING v_output v_ekbe_migo.
          CLEAR v_output-only_miro.
          APPEND v_output TO t_output.
        ELSE.
          READ TABLE t_ekbe INTO v_ekbe_migo WITH KEY
            ebeln = v_ekbe_miro-ebeln
            ebelp = v_ekbe_miro-ebelp
            vgabe = '1'  " 1 = MIGO
            lfbnr = v_ekbe_miro-lfbnr
            lfgja = v_ekbe_miro-lfgja
            lfpos = v_ekbe_miro-lfpos..
          IF sy-subrc IS INITIAL.
            PERFORM fill_output_migo USING v_output v_ekbe_migo.
            CLEAR v_output-only_miro.
            READ TABLE t_ekbe INTO v_ekbe_sheet WITH KEY
              ebeln = v_ekbe_miro-ebeln
              ebelp = v_ekbe_miro-ebelp
              vgabe = '9'
              belnr = v_ekbe_miro-lfbnr.
            IF sy-subrc IS INITIAL.
              PERFORM fill_output_sheet USING v_output v_ekbe_sheet.
            ENDIF.
            APPEND v_output TO t_output.
          ENDIF.
        ENDIF.
      ELSEIF " MIRO --> SHEET
           v_ekbe_miro-lfbnr IS NOT INITIAL AND
           v_ekbe_miro-lfgja IS NOT INITIAL AND
           v_ekbe_miro-lfpos IS INITIAL. " REF to SERVICE ENTRY SHEET
        READ TABLE t_ekbe INTO v_ekbe_sheet WITH KEY
          ebeln = v_ekbe_miro-ebeln
          ebelp = v_ekbe_miro-ebelp
          vgabe = '9'
          belnr = v_ekbe_miro-lfbnr.
        IF sy-subrc IS INITIAL.
          PERFORM fill_output_sheet USING v_output v_ekbe_sheet.
          READ TABLE t_ekbe INTO v_ekbe_migo WITH KEY
              ebeln = v_ekbe_sheet-ebeln
              ebelp = v_ekbe_sheet-ebelp
              vgabe = '1'
              lfbnr = v_ekbe_sheet-belnr.
          IF sy-subrc IS INITIAL.
            PERFORM fill_output_migo USING v_output v_ekbe_migo.
          ENDIF.
        ENDIF.
        APPEND v_output TO t_output.
        CLEAR v_output-only_miro.
      ENDIF.
      IF v_output-only_miro IS NOT INITIAL.
        APPEND v_output TO t_output.
      ENDIF.
    ENDLOOP.


    LOOP AT t_ekbe_work INTO v_ekbe_sheet WHERE vgabe = '9'.
      " Check if not inserted
      READ TABLE t_output TRANSPORTING NO FIELDS WITH KEY
          ebeln = v_ekbe_sheet-ebeln
          ebelp = v_ekbe_sheet-ebelp
          lblni = v_ekbe_sheet-belnr.

      CHECK sy-subrc IS NOT INITIAL.
      CLEAR: v_output.
      PERFORM fill_output_ekpo USING v_output v_ekko v_ekpo.
      PERFORM fill_output_sheet USING v_output v_ekbe_sheet.
      v_output-only_sheet = 'X'.
      READ TABLE t_ekbe INTO v_ekbe_migo WITH KEY
          ebeln = v_ekbe_sheet-ebeln
          ebelp = v_ekbe_sheet-ebelp
          vgabe = '1'
          lfbnr = v_ekbe_sheet-belnr.
      IF sy-subrc IS INITIAL.
        PERFORM fill_output_migo USING v_output v_ekbe_migo.
        CLEAR v_output-only_sheet.
        APPEND v_output TO t_output.
      ENDIF.

      IF v_output-only_sheet IS NOT INITIAL AND v_ekbe_sheet-xblnr IS NOT INITIAL.
        READ TABLE t_output ASSIGNING <output>
          WITH KEY ebeln = v_ekbe_sheet-ebeln
            ebelp = v_ekbe_sheet-ebelp
            xblnr_miro = v_ekbe_sheet-xblnr.
        IF sy-subrc IS INITIAL AND <output>-belnr_miro IS NOT INITIAL.
          <output>-byref_sheet = 'X'.
          PERFORM fill_output_sheet USING <output> v_ekbe_sheet.
        ELSE.
          APPEND v_output TO t_output.
        ENDIF.
      ELSEIF v_output-only_sheet IS NOT INITIAL.
        APPEND v_output TO t_output.
      ENDIF.
    ENDLOOP.

    LOOP AT t_ekbe_work INTO v_ekbe_migo WHERE vgabe = '1'.
      READ TABLE t_output TRANSPORTING NO FIELDS WITH KEY
          ebeln = v_ekbe_migo-ebeln
          ebelp = v_ekbe_migo-ebelp
          mjahr = v_ekbe_migo-gjahr
          mblnr = v_ekbe_migo-belnr
          zeile = v_ekbe_migo-buzei.
      CHECK sy-subrc IS NOT INITIAL.
      CLEAR: v_output.
      PERFORM fill_output_ekpo USING v_output v_ekko v_ekpo.
      PERFORM fill_output_migo USING v_output v_ekbe_migo.

      READ TABLE t_output ASSIGNING <output>
        WITH KEY ebeln = v_ekbe_migo-ebeln
          ebelp = v_ekbe_migo-ebelp
          xblnr_miro = v_ekbe_migo-xblnr.
      IF <output> IS ASSIGNED.
        PERFORM fill_output_migo USING <output> v_ekbe_migo.
      ELSE.
        READ TABLE t_output ASSIGNING <output>
          WITH KEY ebeln = v_ekbe_migo-ebeln
            ebelp = v_ekbe_migo-ebelp
            xblnr_sheet = v_ekbe_migo-xblnr.
        IF <output> IS ASSIGNED.
          PERFORM fill_output_migo USING <output> v_ekbe_migo.
        ELSE.
          READ TABLE t_output ASSIGNING <output>
            WITH KEY ebeln = v_ekbe_migo-ebeln
              ebelp = v_ekbe_migo-ebelp
              xblnr6_miro = v_ekbe_migo-xblnr.
          IF <output> IS ASSIGNED.
            PERFORM fill_output_migo USING <output> v_ekbe_migo.
          ELSE.
            APPEND v_output TO t_output.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDLOOP.
  ENDFORM.                    " BUILD_DATA
*  &---------------------------------------------------------------------*
*  &      Form  FILL_OUTPUT_EKPO
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_V_OUTPUT  text
*        -->P_V_EKKO  text
*        -->P_V_EKPO  text
*  ----------------------------------------------------------------------*
  FORM fill_output_ekpo  USING    p_v_output TYPE ty_po
                                  p_v_ekko TYPE ekko
                                  p_v_ekpo TYPE ekpo.

    p_v_output-bukrs = p_v_ekko-bukrs.
    p_v_output-ebeln = p_v_ekko-ebeln.
    p_v_output-ebelp = p_v_ekpo-ebelp.
    p_v_output-bedat = p_v_ekko-bedat.
    p_v_output-mtart = p_v_ekpo-mtart.
    p_v_output-matkl = p_v_ekpo-matkl.
    p_v_output-matnr = p_v_ekpo-matnr.
    p_v_output-txz01 = p_v_ekpo-txz01.
    p_v_output-lifnr        = p_v_ekko-lifnr.
    SELECT SINGLE name1 ktokk FROM lfa1
      INTO (p_v_output-name1, p_v_output-ktokk)
      WHERE lifnr = p_v_ekko-lifnr.
    p_v_output-menge_po = p_v_ekpo-menge.
    p_v_output-meins_po = p_v_ekpo-meins.
*    p_v_output-balqty = p_v_ekpo-menge.
    p_v_output-netpr = p_v_ekpo-netpr.
*    p_v_output-peinh = p_v_ekpo-peinh.
    p_v_output-werks = p_v_ekpo-werks.
    p_v_output-zterm_po = p_v_ekko-zterm.

    DATA: v_srgbtbrel TYPE srgbtbrel.
    MOVE p_v_output-ebeln TO v_srgbtbrel-instid_a.

    PERFORM check_attachment USING v_srgbtbrel-instid_a 'BUS2012  ' p_v_output-attach_po.

    p_v_output-count = 1.
  ENDFORM.                    " FILL_OUTPUT_EKPO
*  &---------------------------------------------------------------------*
*  &      Form  FILL_OUTPUT_MIRO
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_V_OUTPUT  text
*        -->P_V_EKBE_MIRO  text
*  ----------------------------------------------------------------------*
  FORM fill_output_miro  USING    p_v_output TYPE ty_po
                                  p_v_ekbe_miro TYPE ekbe.


    p_v_output-belnr_miro = p_v_ekbe_miro-belnr.
    p_v_output-gjahr_miro = p_v_ekbe_miro-gjahr.
    p_v_output-buzei_miro = p_v_ekbe_miro-buzei.
    p_v_output-bldat_miro = p_v_ekbe_miro-budat.
    p_v_output-xblnr_miro = p_v_ekbe_miro-xblnr.

    DATA: l_len_xblnr TYPE i.
    l_len_xblnr = STRLEN( p_v_ekbe_miro-xblnr ).
    IF l_len_xblnr > 6.
      l_len_xblnr = l_len_xblnr - 6.
      p_v_output-xblnr6_miro = p_v_ekbe_miro-xblnr+l_len_xblnr(6).
    ENDIF.


    DATA: v_rbkp TYPE rbkp.

    SELECT SINGLE * FROM rbkp
      INTO v_rbkp
      WHERE belnr = p_v_output-belnr_miro
        AND gjahr = p_v_output-gjahr_miro.
    IF sy-subrc IS INITIAL.
      p_v_output-zterm_miro = v_rbkp-zterm.
    ENDIF.



    DATA: v_srgbtbrel TYPE srgbtbrel.
    CONCATENATE p_v_output-belnr_miro p_v_output-gjahr_miro INTO v_srgbtbrel-instid_a.
    PERFORM check_attachment USING v_srgbtbrel-instid_a 'BUS2081' p_v_output-attach_miro.



  ENDFORM.                    " FILL_OUTPUT_MIRO
*  &---------------------------------------------------------------------*
*  &      Form  FILL_OUTPUT_MIGO
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_V_OUTPUT  text
*        -->P_E_EKBE_MIGO  text
*  ----------------------------------------------------------------------*
  FORM fill_output_migo  USING    p_v_output TYPE ty_po
                                  p_v_ekbe_migo TYPE ekbe.

    p_v_output-mjahr = p_v_ekbe_migo-gjahr.
    p_v_output-mblnr = p_v_ekbe_migo-belnr.
    p_v_output-zeile = p_v_ekbe_migo-buzei..
    p_v_output-xblnr_migo = p_v_ekbe_migo-xblnr.

    DATA: v_mkpf TYPE mkpf.
    SELECT SINGLE * FROM mkpf INTO v_mkpf
      WHERE mblnr = p_v_output-mblnr
        AND mjahr = p_v_output-mjahr.
    IF sy-subrc IS INITIAL.
      p_v_output-bldat_migo = v_mkpf-bldat.
      p_v_output-cpudat_migo = v_mkpf-cpudt.
    ENDIF.


    DATA: v_srgbtbrel TYPE srgbtbrel.
    CONCATENATE p_v_output-mblnr p_v_output-mjahr INTO v_srgbtbrel-instid_a.

    PERFORM check_attachment USING v_srgbtbrel-instid_a 'BUS2017' p_v_output-attach_migo.


  ENDFORM.                    " FILL_OUTPUT_MIGO
*  &---------------------------------------------------------------------*
*  &      Form  FILL_OUTPUT_SHEET
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_V_OUTPUT  text
*        -->P_V_EKBE_SHEET  text
*  ----------------------------------------------------------------------*
  FORM fill_output_sheet  USING    p_v_output TYPE ty_po
                                   p_v_ekbe_sheet TYPE ekbe.
    p_v_output-lblni = p_v_ekbe_sheet-belnr.
    p_v_output-xblnr_sheet = p_v_ekbe_sheet-xblnr.

    SELECT SINGLE * FROM essr INTO v_essr WHERE lblni = p_v_output-lblni.
    CHECK sy-subrc IS INITIAL.

    p_v_output-cpudt_sheet = v_essr-erdat.
    p_v_output-bldat_sheet = v_essr-bldat.

    IF v_essr-kzabn IS NOT INITIAL.
      p_v_output-semaforo_sheet = icon_green_light.
    ELSE.
      p_v_output-dif_dias = sy-datum - p_v_output-cpudt_sheet.
      IF p_v_output-dif_dias   IN lt_entry_sheet_green .
        p_v_output-semaforo_sheet = icon_green_light.
      ENDIF.
      IF p_v_output-dif_dias   IN lt_entry_sheet_yellow.
        p_v_output-semaforo_sheet = icon_yellow_light.
      ENDIF.
      IF p_v_output-dif_dias   IN lt_entry_sheet_red   .
        p_v_output-semaforo_sheet = icon_red_light.
      ENDIF.
    ENDIF.

    DATA: v_srgbtbrel TYPE srgbtbrel.
    MOVE p_v_output-lblni TO v_srgbtbrel-instid_a.

    PERFORM check_attachment USING v_srgbtbrel-instid_a 'BUS2091' p_v_output-attach_sheet.

  ENDFORM.                    " FILL_OUTPUT_SHEET



*  &---------------------------------------------------------------------*
*  &      Form  select_tvarv
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->PV_NAME    text
*        -->CT_TABLE   text
*  ----------------------------------------------------------------------*
  FORM select_tvarv
  USING pv_name TYPE rvari_vnam
  CHANGING ct_table TYPE STANDARD TABLE.

    TYPES:
    BEGIN OF ts_tvarvc_entry,
      sign   TYPE c LENGTH 01,
      option TYPE c LENGTH 02,
      low    TYPE tvarv_val  ,
      high   TYPE tvarv_val  ,
    END   OF ts_tvarvc_entry,
    tt_tvarvc_entry TYPE STANDARD TABLE OF ts_tvarvc_entry
    WITH DEFAULT KEY.
    DATA: lt_tvarvc TYPE tt_tvarvc_entry.

*   Declaração dos ponteiros locais
    FIELD-SYMBOLS:
    <fs_tvarvc> LIKE LINE OF lt_tvarvc,
    <fs_table>  TYPE ANY.

    SELECT sign opti AS option low high
    FROM tvarvc
    INTO TABLE lt_tvarvc
    WHERE name EQ pv_name.
    LOOP AT lt_tvarvc ASSIGNING <fs_tvarvc>.
      INSERT INITIAL LINE INTO TABLE ct_table ASSIGNING <fs_table>.
      MOVE-CORRESPONDING <fs_tvarvc> TO <fs_table>.
    ENDLOOP.
  ENDFORM.                    "select_tvarv
*  &---------------------------------------------------------------------*
*  &      Form  CHECK_ATTACHMENT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_V_SRGBTBREL_INSTID_A  text
*        -->P_3077   text
*        -->P_P_V_OUTPUT_ATTACH_MIGO  text
*  ----------------------------------------------------------------------*
  FORM check_attachment  USING    p_instid_a
                                  value(p_bustype)
                                  p_attach.

    CLEAR p_attach.
    DATA: v_instid_a TYPE srgbtbrel-instid_a.

    SELECT instid_a
      INTO v_instid_a
      FROM srgbtbrel
      WHERE typeid_a = p_bustype
        AND instid_a = p_instid_a.
    ENDSELECT.
    IF sy-subrc IS INITIAL.
      p_attach =  icon_attachment.
    ENDIF.




*  BKPF  E  Accounting document  Accounting document
*  BSEG  E  Accounting Document Line Item  Acctng Doc.Line Item
*  BUS0012  E Cost Center Cost Center
*  BUS2081  E Incoming Invoice  Incoming Invoice
*  BUS2091  E Service entry sheet Entry sheet
*  BUS2105  E Purchase requisition  Purchase requisition
*  BUS2143  E Nota Fiscal Nota Fiscal
*  BUS2012  E Purchase Order  Purchase Order
*  BUS2014  E Purchase contract Purchase contract
*  BUS2017  E Goods Movement  Goods Movement
*  LFA1 E Vendor  Vendor

  ENDFORM.                    " CHECK_ATTACHMENT


*  &---------------------------------------------------------------------*
*  &      Form  user_command
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->UCOMM      text
*        -->SELFIELD   text
*  ----------------------------------------------------------------------*
  FORM user_command USING ucomm    LIKE sy-ucomm
        selfield TYPE slis_selfield.


    DATA: gd_repid LIKE sy-repid,
          ref_grid TYPE REF TO cl_gui_alv_grid,
          wa_output LIKE LINE OF t_output,
          lw_object TYPE sibflporb,
          vl_subrc TYPE sy-subrc.

    IF ref_grid IS INITIAL.
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = ref_grid.
    ENDIF.

    IF NOT ref_grid IS INITIAL.
      CALL METHOD ref_grid->check_changed_data .
    ENDIF.

    CASE ucomm.
      WHEN '&IC1'.
        CASE selfield-sel_tab_field.
          WHEN 'T_OUTPUT-EBELN'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            SET PARAMETER ID : 'BES' FIELD wa_output-ebeln.
            CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
          WHEN 'T_OUTPUT-LBLNI' OR 'T_OUTPUT-XBLNR_SHEET'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            SET PARAMETER ID : 'LBL' FIELD wa_output-lblni.
            CALL TRANSACTION 'ML81N' AND SKIP FIRST SCREEN.
          WHEN 'T_OUTPUT-MBLNR' OR 'T_OUTPUT-XBLNR_MIGO'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            CALL FUNCTION 'MIGO_DIALOG'
              EXPORTING
                i_action            = 'A04'
                i_refdoc            = 'R02'
                i_notree            = 'X'
                i_skip_first_screen = 'X'
                i_deadend           = 'X'
                i_okcode            = 'OK_GO'
                i_mblnr             = wa_output-mblnr
              EXCEPTIONS
                illegal_combination = 1
                OTHERS              = 2.
            IF sy-subrc <> 0.
            ENDIF.
          WHEN 'T_OUTPUT-BELNR_MIRO'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            SET PARAMETER ID :
            'RBN' FIELD wa_output-belnr_miro,
            'GJR' FIELD wa_output-bldat_miro(8).
            CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
          WHEN 'T_OUTPUT-ATTACH_MIGO'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            CONCATENATE wa_output-mblnr wa_output-bldat_migo(4) INTO lw_object-instid.
            lw_object-typeid = 'BUS2017'.
            lw_object-catid = 'BO'.
            CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
              EXPORTING
                is_object = lw_object.
          WHEN 'T_OUTPUT-ATTACH_MIRO'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            CLEAR: lw_object.
            CONCATENATE wa_output-belnr_miro wa_output-bldat_miro(4) INTO lw_object-instid.
            lw_object-typeid = 'BUS2081'.
            lw_object-catid = 'BO'.
            CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
              EXPORTING
                is_object = lw_object.
          WHEN 'T_OUTPUT-ATTACH_SHEET'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            CLEAR: lw_object.
            MOVE wa_output-lblni TO lw_object-instid.
            lw_object-typeid = 'BUS2091'.
            lw_object-catid = 'BO'.
            CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
              EXPORTING
                is_object = lw_object.
          WHEN 'T_OUTPUT-ATTACH_PO'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            CLEAR: lw_object.
            MOVE wa_output-ebeln TO lw_object-instid.
            lw_object-typeid = 'BUS2012'.
            lw_object-catid = 'BO'.
            CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
              EXPORTING
                is_object = lw_object.
          WHEN 'T_OUTPUT-BELNR_FI'.
            READ TABLE t_output INTO wa_output INDEX selfield-tabindex.
            SET PARAMETER ID 'BLN' FIELD wa_output-belnr_fi.
            SET PARAMETER ID 'BUK' FIELD wa_output-bukrs.
            SET PARAMETER ID 'GJR' FIELD wa_output-bldat_miro(8).
            CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
        ENDCASE.
    ENDCASE.
  ENDFORM.                    "user_command
*  &---------------------------------------------------------------------*
*  &      Form  DEFINE_COLORS
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM define_colors .

    TYPES: BEGIN OF ty_ekpo,
      ebeln TYPE ty_po-ebeln,
      ebelp TYPE ty_po-ebelp,
      count TYPE i,
      END OF ty_ekpo.

    DATA: t_count_ekpo TYPE TABLE OF ty_ekpo,
          w_count_ekpo LIKE LINE OF t_count_ekpo.

    FIELD-SYMBOLS: <output> LIKE LINE OF t_output.
    LOOP AT t_output ASSIGNING <output>.
      CLEAR w_count_ekpo.
      w_count_ekpo-ebeln = <output>-ebeln.
      w_count_ekpo-ebelp = <output>-ebelp.
      w_count_ekpo-count = <output>-count.
      COLLECT w_count_ekpo INTO t_count_ekpo.
    ENDLOOP.

    DELETE t_count_ekpo WHERE count = 1.

    LOOP AT t_count_ekpo INTO w_count_ekpo.
      PERFORM define_color_red USING w_count_ekpo-ebeln w_count_ekpo-ebelp.
    ENDLOOP.
  ENDFORM.                    " DEFINE_COLORS
*  &---------------------------------------------------------------------*
*  &      Form  DEFINE_COLOR_RED
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*        -->P_W_COUNT_EKPO_EBELN  text
*        -->P_W_COUNT_EKPO_EBELP  text
*  ----------------------------------------------------------------------*
  FORM define_color_red  USING    p_ekpo_ebeln TYPE ebeln
                                  p_ekpo_ebelp TYPE ebelp.

    DATA: it_color   TYPE TABLE          OF lvc_s_scol,
          wa_color    TYPE lvc_s_scol.

    CLEAR it_color[].

    MOVE 'EBELN' TO wa_color-fname.
    MOVE '6'         TO wa_color-color-col.
    MOVE '1'         TO wa_color-color-int.
    MOVE '1'         TO wa_color-color-inv.
    APPEND wa_color TO it_color.

    MOVE 'EBELP' TO wa_color-fname.
    MOVE '6'         TO wa_color-color-col.
    MOVE '1'         TO wa_color-color-int.
    MOVE '1'         TO wa_color-color-inv.
    APPEND wa_color TO it_color.


    FIELD-SYMBOLS: <output> LIKE LINE OF t_output.
    LOOP AT t_output ASSIGNING <output>
      WHERE ebeln = p_ekpo_ebeln AND ebelp = p_ekpo_ebelp.
      <output>-color_cell[] = it_color[].
    ENDLOOP.
  ENDFORM.                    " DEFINE_COLOR_RED
*  &---------------------------------------------------------------------*
*  &      Form  PREPARE_LAYOUT
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM prepare_layout .
    MOVE 'COLOR_CELL' TO lvc_layout-ctab_fname.
  ENDFORM.                    " PREPARE_LAYOUT
*  &---------------------------------------------------------------------*
*  &      Form  FILL_FI_BELNR
*  &---------------------------------------------------------------------*
*         text
*  ----------------------------------------------------------------------*
*    -->  p1        text
*    <--  p2        text
*  ----------------------------------------------------------------------*
  FORM fill_fi_belnr .

    FIELD-SYMBOLS: <output> LIKE LINE OF t_output.
    DATA: v_awkey TYPE bkpf-awkey,
          w_bkpf TYPE bkpf.

    LOOP AT t_output ASSIGNING <output> WHERE belnr_miro IS NOT INITIAL.
      CONCATENATE <output>-belnr_miro <output>-gjahr_miro        INTO v_awkey .

      SELECT SINGLE *
        FROM bkpf
        INTO w_bkpf
        WHERE awkey =  v_awkey.
      IF sy-subrc IS INITIAL.
        <output>-belnr_fi = w_bkpf-belnr.
*        <output>-zterm_fi = w_bkpf-zterm.
      ENDIF.
    ENDLOOP.
  ENDFORM.                    " FILL_FI_BELNR
*&---------------------------------------------------------------------*
*&      Form  FILL_DUE_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
  FORM fill_due_date .
    FIELD-SYMBOLS: <output> LIKE LINE OF t_output.

    " Due Date Priority
    " 1. MIRO
    " 2. FI_DOCUMENT
    " 3. MIGO + PO ZTERM
    " 4. ESSR + PO ZTERM
    DATA:
          w_t052 TYPE t052,
              t_vtopis TYPE TABLE OF vtopis,
              w_vtopis LIKE LINE OF t_vtopis.


    LOOP AT t_output ASSIGNING <output>.
      IF <output>-zterm_miro IS NOT INITIAL.
        <output>-zterm = <output>-zterm_miro.
      ELSEIF <output>-zterm_fi IS NOT INITIAL.
        <output>-zterm = <output>-zterm_fi.
      ELSEIF <output>-mblnr IS NOT INITIAL.
        <output>-zterm = <output>-zterm_po.
      ELSEIF <output>-lblni IS NOT INITIAL.
        <output>-zterm = <output>-zterm_po.
      ELSE.
        <output>-zterm = <output>-zterm_po.
      ENDIF.


      CLEAR w_t052.
      CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
        EXPORTING
          i_zterm          = <output>-zterm
        IMPORTING
          e_t052           = w_t052
        EXCEPTIONS
          terms_of_payment = 1
          conditions       = 2
          OTHERS           = 3.

      IF w_t052-xsplt IS INITIAL.
        CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'
          EXPORTING
            bldat                               = <output>-duedt_base
            budat                               = <output>-duedt_base
            cpudt                               = <output>-duedt_base
*           LANGUAGE                           = ' '
            terms_of_payment                    = <output>-zterm
*           COUNTRY                            = ' '
*           HOLDBACK                           = ' '
*           TOP_HOLDBACK_INFO                  =
*           DOCUMENT_CURRENCY                  = ' '
*         IMPORTING
*           BASELINE_DATE                      =
*           PAYMENT_SPLIT                      =
*           ZFBDT                              =
        TABLES
          top_text                      = t_vtopis
        EXCEPTIONS
          terms_of_payment_not_in_t052       = 1
          OTHERS                             = 2
          .
        IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

      ELSE.
        CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT_SPLI'
        EXPORTING
          bldat                               = <output>-duedt_base
          budat                               = <output>-duedt_base
          cpudt                               = <output>-duedt_base
*       LANGUAGE                            = ' '
          terms_of_payment                    = <output>-zterm
*          wert                                = v_rbkp-rmwwr
*          waerk                               = v_rbkp-waers
*       FKDAT                               = 00000000
*       SKFBT                               = 00000000
*       I_COMPANY_CODE                      =
*       I_COUNTRY                           =
*     IMPORTING
*       BASELINE_DATE                       =
        TABLES
          top_text_split                      = t_vtopis
        EXCEPTIONS
          terms_of_payment_not_in_t052        = 1
          terms_of_payment_not_in_t052s       = 2
          OTHERS                              = 3
          .
        IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.

*      IF t_vtopis[] IS NOT INITIAL.
*        SORT t_vtopis BY hdatum.
*        READ TABLE t_vtopis INDEX 1 INTO w_vtopis.
*        IF w_vtopis-hdatum < sy-datum.
*          MESSAGE e149(f5) WITH w_vtopis-hdatum.
**   Vencimento líquido a & situa-se no passado
*        ENDIF.
*      ENDIF.

    ENDLOOP.
  ENDFORM.                    " FILL_DUE_DATE