abap FM:读取公司代码

Legge le info su Bukrs(dati di testata来自indirizzi codice fiscale / piva ecc ecc)con una sola chiamata fm

FM Company code read
CALL FUNCTION 'COMPANY_CODE_READ'
          EXPORTING
            i_bukrs = <accit>-bukrs
          IMPORTING
            e_t001  = l_t001.

abap FIEDLCAT:FORM中的CL_SALV示例

FIEDLCAT CL_SALV example in FORM
FORM f_create_fieldcat USING    p_tablename TYPE STANDARD TABLE
                       CHANGING pt_fieldcat TYPE lvc_t_fcat.

  FIELD-SYMBOLS <lfs_fieldcat> TYPE lvc_s_fcat.

  DATA: lo_columns      TYPE REF TO cl_salv_columns_table,
        lo_aggregations TYPE REF TO cl_salv_aggregations,
        lo_salv_table   TYPE REF TO cl_salv_table,
        lr_table        TYPE REF TO data.

  FIELD-SYMBOLS: <table>           TYPE STANDARD TABLE.

* create unprotected table from import data
  CREATE DATA lr_table LIKE p_tablename.
  ASSIGN lr_table->* TO <table>.

  TRY.
      cl_salv_table=>factory(
        EXPORTING
          list_display = abap_false
        IMPORTING
          r_salv_table = lo_salv_table
        CHANGING
          t_table      = <table> ).
    CATCH cx_salv_msg.                                  "#EC NO_HANDLER
  ENDTRY.

* get columns object (raw fieldcatalog)
  lo_columns  = lo_salv_table->get_columns( ).
* get aggregationss object (sorts)

  lo_aggregations = lo_salv_table->get_aggregations( ).

  pt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
                           r_columns             = lo_columns
                           r_aggregations        = lo_aggregations ).

ENDFORM.                    "f_create_fieldcat

abap SELECT:LEFT OUTER JOIN示例

Caso in cui una加入puòesrereusata in LEFT ... se non trovo descrizioni / testi prendo comunque i dati dalla tabella left。 <br/> <br/> L'estrazione non viene fermata来自nella inner

SELECT LEFT OUTER JOIN EXAMPLE
  SELECT cepc~prctr cepc~kokrs abtei khinr cepct~ltext
  FROM cepc LEFT OUTER JOIN cepct ON cepc~prctr = cepct~prctr
                              AND cepc~datbi = cepct~datbi
                              AND cepc~kokrs = cepct~kokrs
                              AND cepct~spras = sy-langu
  INTO CORRESPONDING FIELDS OF TABLE lt_cepc.

abap MACRO:RIEMPI RANGE DA TABELLA

MACRO RIEMPI RANGE DA TABELLA
DEFINE _get_range_from_table.

  LOOP AT &2 ASSIGNING <lfs_struct>.

    ASSIGN COMPONENT &3 OF STRUCTURE <lfs_struct> TO <lfs_field>.
    CHECK sy-subrc IS INITIAL.

    APPEND VALUE #( sign = 'I' option = 'EQ' low = <lfs_field> ) TO &1.

  ENDLOOP.

  SORT &1 BY low.
  DELETE ADJACENT DUPLICATES FROM &1 COMPARING low.

END-OF-DEFINITION.


ESEMPIO DI APPLICAZIONE

  _get_range_from_table lr_belnr lt_data 'BELNR'.
  _get_range_from_table lr_gjahr lt_data 'GJAHR'.
  _get_range_from_table lr_bukrs lt_data 'BUKRS'.
  _get_range_from_table lr_buzei lt_data 'BUZEI'.

abap 退出MIRO LMR1M001

EXIT_SAPLMRMP_010.abap
*&---------------------------------------------------------------------*
*&  Include           ZXM08U16
*&---------------------------------------------------------------------*

******************************************************
* Validar se a Nota Fiscal foi preenchida corretamente
*
*DATA: nf(10)    TYPE c,
*      nf_out(7) TYPE c.
*
*nf = e_trbkpv-xblnr.
*
*CALL FUNCTION 'ZLW_CHECK_NF'
*  EXPORTING
*    nf             = nf
*  EXCEPTIONS
*    invalid_format = 1
*    OTHERS         = 2.
*
*IF sy-subrc IS NOT INITIAL.
*  MESSAGE e021(zlw) WITH nf.
**   Nota Fiscal (&) não informada ou formato inválido. Formato: 0000000
*ENDIF.
*
*
*************************
** Tipos permitidos de Categoria de Nota Fiscal:
** EE - NF de Entrada para Estoque
** EC - NF de Entrada Conjugada (para Estoque + Serviço)
** ES - NF de Entrada de Serviço
** EL - NF de Entrada para NF Eletrônica do Munic. de SP
*IF e_trbkpv-j_1bnftype NE 'EE' AND
*   e_trbkpv-j_1bnftype NE 'EC' AND
*   e_trbkpv-j_1bnftype NE 'ES' AND
*   e_trbkpv-j_1bnftype NE 'EL' AND
*   e_trbkpv-blart EQ 'RE'.
*  MESSAGE e016(zmm) WITH e_trbkpv-j_1bnftype.
**   Categoria de Nota Fiscal (&) não é permitida. Use apenas EE,EC,ES ou EL.
*ENDIF.
*
*
*IF e_trbkpv-j_1bnftype EQ 'EE'. "Verifica se fornecedor pode usar  NF de Entrada em Estoque
*  PERFORM  check_valid_ee
*    TABLES e_trbkpv-h_rbws       "Tabela de impostos
*    USING  e_trbkpv-j_1bnftype   "Tipo de NF
*           e_trbkpv-lifnr        "Codigo do Fornecedor
*           e_trbkpv-bukrs.       "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'EC'. "Verif. se forn. pode usar NF Conjugada
*  PERFORM check_valid_ec
*    USING e_trbkpv-j_1bnftype   "Tipo de NF
*          e_trbkpv-lifnr        "Codigo do Fornecedor
*          e_trbkpv-bukrs.       "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'ES'. "Verif. se forn. pode usar NF Servico
*  PERFORM check_valid_es
*    USING e_trbkpv-j_1bnftype   "Tipo de NF
*          e_trbkpv-lifnr        "Codigo do Fornecedor
*          e_trbkpv-bukrs.       "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'EL'. "Vefir. se forn. pode usar NF Eletronica Munic. SP
*  PERFORM check_valid_el
*    USING e_trbkpv-j_1bnftype   "Tipo de NF
*          e_trbkpv-lifnr        "Codigo do Fornecedor
*          e_trbkpv-bukrs.       "Empresa
*ENDIF.
*
*
*IF e_trbkpv-j_1bnftype EQ 'EC' OR
*  e_trbkpv-j_1bnftype EQ 'ES'.
*
*  DATA: g_typ_nf LIKE bseg-xref1,
*        g_ser_nf LIKE bseg-xref2.
*
*  IMPORT g_typ_nf FROM MEMORY ID 'Z_NF_TYPE'.
*  IMPORT g_ser_nf FROM MEMORY ID 'Z_NF_SERIE'.
*
*  DATA: t_values TYPE TABLE OF setvalues.
*  CALL FUNCTION 'G_SET_TREE_IMPORT'
*    EXPORTING
*      setid                     = '0000TIPO_NF'
*    TABLES
*      set_values                = t_values
*    EXCEPTIONS
*      set_not_found             = 1
*      illegal_field_replacement = 2
*      illegal_table_replacement = 3
*      set_is_damaged            = 4
*      OTHERS                    = 5.
*  CHECK sy-subrc IS INITIAL.
*
*  IF g_typ_nf IS INITIAL OR g_ser_nf IS INITIAL.
*    MESSAGE e003(zlw).
**   Tipo Nota Fiscal e Série são de Preenchimento Obrigatório
*  ELSEIF g_typ_nf IS NOT INITIAL.
*
*    READ TABLE t_values WITH KEY FROM = g_typ_nf TRANSPORTING NO FIELDS.
*    IF sy-subrc IS NOT INITIAL.
*      MESSAGE e019(zlw).
**   Tipo Nota Fiscal e Série são de Preenchimento Obrigatório
*    ENDIF.
*  ENDIF.
*ENDIF.
*
*TYPE-POOLS: mmcr.
*
*DATA: tdrseg LIKE LINE OF  e_tdrseg,
*      bukrs TYPE bukrs.
*
*LOOP AT e_tdrseg INTO tdrseg.
*
*  IF tdrseg-ebeln IS NOT INITIAL.
*    SELECT SINGLE bukrs FROM ekko INTO bukrs
*      WHERE ebeln = tdrseg-ebeln.
*
*    CHECK sy-subrc IS INITIAL.
*    IF bukrs NE e_trbkpv-bukrs.
*      MESSAGE e033(zmm) WITH  e_trbkpv-bukrs  bukrs tdrseg-ebeln.
**   A Empresa da Fatura & diverge da Empresa & do Pedido de Compra &
*    ENDIF.
*
*  ENDIF.
*
*
*ENDLOOP.


* Check BLDAT vs BUDAT
* BUDAT = Post Date
* BLDAT = Document Date
*
* Rules:
* - BUDAT must be > BLDAT
* - BLDAT - BUDAT (days) must be < 90 days

IF e_trbkpv-bldat "Document Date ex: 20160110
  > e_trbkpv-budat. "Post Date   ex: 20160101

  MESSAGE e090(zmm).
*   Data de Lançamento não deve ser anterior a Data de Documento

ELSE.
  DATA: days TYPE i,
        days_limit TYPE i,
        si_value TYPE  zelsi_value.
  CALL FUNCTION 'ZFMSI_GET_VALUE'
    EXPORTING
      parameter         = 'MIRO_LIMIT'
    IMPORTING
      value             = si_value
    EXCEPTIONS
      invalid_parameter = 1
      invalid_logsys    = 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.
    days_limit = 90.
  ELSE.
    days_limit = si_value.
  ENDIF.

  days = e_trbkpv-budat - e_trbkpv-bldat.
  IF days > days_limit.
    MESSAGE e091(zmm) WITH days_limit.
*   Data de Documento não deve exceder 90 dias da Data de Lançamento

  ENDIF.
ENDIF.

" Entrar Condição de pagamento(Cond.pgto na Aba Pagamento),
" para tipo de operação Logística fatura(RD)
IF e_trbkpv-zterm IS INITIAL AND e_trbkpv-vgart EQ 'RD'.
  MESSAGE e101(zmm).
ENDIF.

IF e_trbkpv-vgart EQ 'RD'.
  IF e_trbkpv-zterm(1) = 'L' OR
     e_trbkpv-zterm(1) = 'P'.

    DATA: t_vtopis TYPE TABLE OF vtopis,
          w_vtopis LIKE LINE OF t_vtopis,
          w_t052 TYPE t052.

    CLEAR w_t052.
    CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
      EXPORTING
        i_zterm          = e_trbkpv-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                               = e_trbkpv-bldat
          budat                               = e_trbkpv-budat
          cpudt                               = e_trbkpv-cpudt
*           LANGUAGE                           = ' '
          terms_of_payment                    = e_trbkpv-zterm
*   COUNTRY                            = ' '
*   HOLDBACK                           = ' '
*   TOP_HOLDBACK_INFO                  =
*   DOCUMENT_CURRENCY                  = ' '
* IMPORTING
*   BASELINE_DATE                      =
*   PAYMENT_SPLIT                      =
*   ZFBDT                              =
        TABLES
          top_text_split                      = 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                               = e_trbkpv-bldat
         budat                               = e_trbkpv-budat
         cpudt                               = e_trbkpv-cpudt
*       LANGUAGE                            = ' '
          terms_of_payment                    = e_trbkpv-zterm
         wert                                = e_trbkpv-wwert
         waerk                               = e_trbkpv-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.

  ENDIF.
ENDIF.

abap AtualizaçãodeUsuárioscomdadosdeFuncionários

zrbc003.abap
*&---------------------------------------------------------------------*
*& Report  ZRBC003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zrbc003.

TABLES: usr01.
TYPE-POOLS: truxs.
SELECTION-SCREEN BEGIN OF BLOCK usr WITH FRAME .
PARAMETERS:
 p_bname LIKE usr01-bname DEFAULT '*'.
SELECTION-SCREEN END OF BLOCK usr.

SELECTION-SCREEN BEGIN OF BLOCK par WITH FRAME .
PARAMETERS: p_file TYPE  rlgrap-filename OBLIGATORY.
PARAMETERS: p_head TYPE char01 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK par.

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


TYPES: BEGIN OF ty_excel,
  col1(50) TYPE c, "Razão Social
  col2(50) TYPE c, "Nome Funcionário
  col3(14) TYPE c, "Data Admição
  col4(50) TYPE c, "Cargo
  col5(7) TYPE c,  "Centro de Custo
  col6(50) TYPE c, "Descrição Centro de Custo
  col7(60) TYPE c, "E-Mail
  col8(50) TYPE c, "Gestor Imediato
  col9(15) TYPE c, "CPF
END OF ty_excel.
DATA: t_excel TYPE STANDARD TABLE OF ty_excel,
      w_excel LIKE LINE OF t_excel.

DATA: it_raw TYPE truxs_t_text_data.


TYPE-POOLS: slis, sydes.

DATA: "Dynpro Control
      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: BEGIN OF t_output OCCURS 0,
  bname LIKE usr01,
  END OF t_output.

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

* At selection screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'P_FILE'
    IMPORTING
      file_name  = p_file.

INITIALIZATION.
  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.
* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  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.

START-OF-SELECTION.
  PERFORM load_excel.
  PERFORM load_users.


***********************************************************************
* END-OF-SELECTION.
END-OF-SELECTION.
  " For sample, Excel Data transfered to internal table is displayed with write
*  LOOP AT it_datatab INTO wa_datatab.
*    WRITE:/
*      wa_datatab-col1,
*      wa_datatab-col2,
*      wa_datatab-col3,
*      wa_datatab-col4,
*      wa_datatab-col5,
*      wa_datatab-col6,
*      wa_datatab-col7,
*      wa_datatab-col8,
*      wa_datatab-col9.
*  ENDLOOP.

*  CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
*    TABLES
*      table    = t_excel
*    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.
*&---------------------------------------------------------------------*
*&      Form  LOAD_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM load_excel .
  " Convert Excel Data to SAP internal Table Data
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
  EXPORTING
*     I_FIELD_SEPERATOR        =
    i_line_header            =  p_head
    i_tab_raw_data           =  it_raw       " WORK TABLE
    i_filename               =  p_file
  TABLES
    i_tab_converted_data     = t_excel[]  "ACTUAL DATA
  EXCEPTIONS
    conversion_failed        = 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.                    " LOAD_EXCEL
*&---------------------------------------------------------------------*
*&      Form  LOAD_USERS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM load_users .
  DATA: t_users TYPE TABLE OF  bapiusname,
        t_return TYPE TABLE OF bapiret2.
  CALL FUNCTION 'BAPI_USER_GETLIST'
   EXPORTING
*     MAX_ROWS              = 0
     with_username         = p_bname
*   IMPORTING
*     ROWS                  =
   TABLES
*     SELECTION_RANGE       =
*     SELECTION_EXP         =
     userlist              = t_users
     return                = t_return.

  DATA: w_user LIKE LINE OF t_users,
        w_output LIKE LINE OF t_output.
  CLEAR: t_output[].
  LOOP AT t_users INTO w_user.
    CLEAR w_output.
    w_output-bname = w_user-username.

    APPEND w_output TO t_output.
  ENDLOOP.

ENDFORM.                    " LOAD_USERS

abap ZMM006

zmm_po_hist.abap

*&---------------------------------------------------------------------&*
*&             Report ZMM_PO_MALOTE                                    &*
*&                                                                     &*
*----------------------------------------------------------------------&*

REPORT zmm_po_hist NO STANDARD PAGE HEADING MESSAGE-ID 00.

TYPE-POOLS: slis, icon.

TYPES : BEGIN OF ty_po,
  ebeln        TYPE ekpo-ebeln,
  ebelp        TYPE ekpo-ebelp,
  anexo_po     TYPE char4     ,
  bedat        TYPE ekko-bedat,
  mtart        TYPE ekpo-mtart,
  matkl        TYPE ekpo-matkl,
  matnr        TYPE ekpo-matnr,
  txz01        TYPE ekpo-txz01,
  lifnr        TYPE ekko-lifnr,
  name1        TYPE lfa1-name1,
  menge1       TYPE ekpo-menge,
  meins1       TYPE ekpo-meins,
  balqty       TYPE ekpo-menge,
  netpr        TYPE ekpo-netpr,
  peinh        TYPE ekpo-peinh,
  mblnr        TYPE mseg-mblnr,
  dt_migo      TYPE mkpf-bldat,
  dtc_migo     TYPE mkpf-cpudt,
  anexo_migo   TYPE char4     ,
  lblni        TYPE essr-lblni,
  dt_folha     TYPE essr-erdat,
  bldat_folha  TYPE essr-bldat,
  dif_dias     TYPE i         ,
  semaforo     TYPE icon_d    ,
  anexo_folha  TYPE char4     ,
  zeile        TYPE mseg-zeile,
  menge2       TYPE mseg-menge,
  meins2       TYPE mseg-meins,
  werks        TYPE mseg-werks,
  charg        TYPE mseg-charg,
  belnr        TYPE rbkp-belnr,
  anexo_miro   TYPE char4     ,
  bldat        TYPE rbkp-bldat,
  fi_belnr     TYPE bkpf-belnr,
  zterm        TYPE rbkp-zterm,
  zfbdt        TYPE rbkp-zfbdt,
  duedt        TYPE datum     ,
  split(4)     TYPE c         ,
  thick(10)    TYPE c         ,
  width(10)    TYPE c         ,
  length(10)   TYPE c         ,
  grade(10)    TYPE c         ,
  zterm_pedido TYPE ekko-zterm,
  zterm_fi     TYPE bseg-zterm,
  ktokk        TYPE lfa1-ktokk,
  bukrs        TYPE ekko-bukrs,
  mjahr        TYPE mkpf-mjahr,
  dt_doc_migo  TYPE mkpf-bldat,
END OF ty_po.

TYPES : BEGIN OF ty_ekko,
  ebeln TYPE ekko-ebeln,
  lifnr TYPE ekko-lifnr,
  bedat TYPE ekko-bedat,
  zterm TYPE ekko-zterm,
  bukrs TYPE ekko-bukrs,
END OF ty_ekko.

TYPES : BEGIN OF ty_ekpo,
  ebeln TYPE ekpo-ebeln,
  ebelp TYPE ekpo-ebelp,
  matnr TYPE ekpo-matnr,
  txz01 TYPE ekpo-txz01,
  menge TYPE ekpo-menge,
  meins TYPE ekpo-meins,
  netpr TYPE ekpo-netpr,
  peinh TYPE ekpo-peinh,
  banfn TYPE ekpo-banfn,
  bnfpo TYPE ekpo-bnfpo,
  mtart TYPE ekpo-mtart,
END OF ty_ekpo.

TYPES : BEGIN OF ty_eban,
  banfn TYPE eban-banfn,
  bnfpo TYPE eban-bnfpo,
  matnr TYPE eban-matnr,
  menge TYPE eban-menge,
  meins TYPE eban-meins,
END OF ty_eban.

TYPES : BEGIN OF ty_ekbe,
  ebeln TYPE ekbe-ebeln,
  ebelp TYPE ekbe-ebelp,
  belnr TYPE ekbe-belnr,
  gjahr TYPE ekbe-gjahr,
  buzei TYPE ekbe-buzei,
  matnr TYPE ekbe-matnr,
END OF ty_ekbe.

TYPES : BEGIN OF ty_mseg,
  mblnr TYPE mseg-mblnr,
  mjahr TYPE mseg-mjahr,
  zeile TYPE mseg-zeile,
  menge TYPE mseg-menge,
  meins TYPE mseg-meins,
  ebeln TYPE mseg-ebeln,
  ebelp TYPE mseg-ebelp,
  matnr TYPE mseg-matnr,
  werks TYPE mseg-werks,
  charg TYPE mseg-charg,
END OF ty_mseg.

TYPES : BEGIN OF ty_rbkp,
  belnr TYPE rbkp-belnr,
  gjahr TYPE rbkp-gjahr,
  bldat TYPE rbkp-bldat,
  stblg TYPE rbkp-stblg,
  zterm TYPE rbkp-zterm,
  zfbdt TYPE rbkp-zfbdt,
  budat TYPE rbkp-budat,
  cpudt TYPE rbkp-cpudt,
END OF ty_rbkp.

TYPES : BEGIN OF ty_rseg,
  belnr TYPE rseg-belnr,
  gjahr TYPE rseg-gjahr,
  ebeln TYPE rseg-ebeln,
  ebelp TYPE rseg-ebelp,
  xblnr TYPE rseg-xblnr,
  lfbnr TYPE rseg-lfbnr,
  lfgja TYPE rseg-lfgja,
  lfpos TYPE rseg-lfpos,
END OF ty_rseg.

TYPES : BEGIN OF ty_lfa1,
  lifnr TYPE lfa1-lifnr,
  ktokk TYPE lfa1-ktokk,
END OF ty_lfa1.

DATA: it_po TYPE STANDARD TABLE OF ty_po,
      it_ekko TYPE STANDARD TABLE OF ty_ekko,
      it_ekpo TYPE TABLE OF ekpo,
      it_eban TYPE STANDARD TABLE OF ty_eban,
      it_mseg TYPE STANDARD TABLE OF ty_mseg,
      it_rbkp TYPE STANDARD TABLE OF ty_rbkp,
      it_rseg TYPE STANDARD TABLE OF ty_rseg,
      it_ekbe TYPE STANDARD TABLE OF ekbe,
      it_essr TYPE TABLE OF essr,
      it_ekbe_migo TYPE TABLE OF ekbe,
      it_mkpf TYPE TABLE OF mkpf,
      it_srgbtbrel TYPE TABLE OF srgbtbrel,
      it_lfa1 TYPE TABLE OF ty_lfa1.

DATA: wa_ekbe_migo TYPE ekbe,
      wa_ekbe_migo2 TYPE ekbe,
      wa_srgbtbrel TYPE srgbtbrel,
      wa_ekbe TYPE ekbe,
      wa_mkpf TYPE mkpf,
      wa_essr TYPE essr,
      wa_po TYPE ty_po,
      wa_ekko TYPE ty_ekko,
      wa_ekpo TYPE ekpo,
      wa_eban TYPE ty_eban,
      wa_mseg TYPE ty_mseg,
      wa_rbkp TYPE ty_rbkp,
      wa_rseg TYPE ty_rseg,
      wa_lfa1 TYPE ty_lfa1,
      wa_t052 TYPE t052.

DATA: it_fcat TYPE slis_t_fieldcat_alv,
      it_lshead TYPE slis_t_listheader,
      it_sort TYPE slis_t_sortinfo_alv,
      wa_fcat TYPE slis_fieldcat_alv,
      wa_lshead TYPE slis_listheader,
      wa_layout TYPE slis_layout_alv,
      wa_sort TYPE slis_sortinfo_alv.

DATA: it_cl_data LIKE TABLE OF clobjdat,
      wa_cl_data LIKE clobjdat.

DATA: c_ekgrp TYPE eban-ekgrp,
      c_badat TYPE eban-badat,
      c_bsart TYPE ekko-bsart,
      c_bukrs TYPE ekko-bukrs,
      c_ebeln TYPE ekko-ebeln,
      c_ktokk TYPE lfa1-ktokk,
      c_grmenge TYPE mseg-erfmg,
      c_low(10) TYPE c,
      c_high(10) TYPE c,
      c_date TYPE string.

DATA: lw_object TYPE sibflporb.


DATA: BEGIN OF t_ebeln_ebelp OCCURS 0,
  ebeln TYPE ekpo-ebeln,
  ebelp TYPE ekpo-ebelp,
END OF t_ebeln_ebelp.



DATA: w_t001w TYPE t001w,
      w_t001k TYPE t001k,
      t_bseg TYPE TABLE OF bseg,
      w_bseg TYPE bseg.


SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_badat FOR c_badat OBLIGATORY,
s_bukrs FOR c_bukrs,
s_ekgrp FOR c_ekgrp,
s_bsart FOR c_bsart,
s_ebeln FOR c_ebeln,
s_ktokk FOR c_ktokk NO INTERVALS.
SELECTION-SCREEN:END OF BLOCK b1.

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 'ZMM006_DATE'.
  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 'ZMM006_DATE'.
  ENDIF.

START-OF-SELECTION.

  PERFORM getdocuments.
  PERFORM getdata.
  PERFORM process_clear_mseg.
  PERFORM setdata.
  PERFORM set_vendor_name.
  PERFORM set_duedt_migo.
  PERFORM fieldcat.
  PERFORM display.

*&---------------------------------------------------------------------*
*&      Form  GETDOCUMENTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM getdocuments .

*  SELECT p~ebeln p~ebelp FROM ekpo AS p
*    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
*    INTO TABLE t_ebeln_ebelp
*    WHERE ( k~aedat IN s_badat
*            OR k~bedat IN s_badat )
*      AND p~ebeln IN s_ebeln
*      AND p~loekz <> 'L'
*      AND k~bukrs IN s_bukrs
*      AND k~ekgrp IN s_ekgrp
*      AND k~bsart IN s_bsart
*    AND l~ktokk IN s_ktokk.
*
*  SELECT p~ebeln p~ebelp
*    FROM ekpo AS p
*    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
*    APPENDING TABLE t_ebeln_ebelp
*    WHERE p~aedat IN s_badat
*      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 <> 'L'.
*
*  SELECT p~ebeln p~ebelp
*  FROM eket AS t
*  INNER JOIN ekpo AS p
*  ON p~mandt = t~mandt
*  AND p~ebeln = t~ebeln
*  AND p~ebelp = t~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
*  APPENDING TABLE t_ebeln_ebelp
*  WHERE t~eindt IN s_badat
*  AND p~ebeln IN s_ebeln
*  AND k~bukrs IN s_bukrs
*  AND k~ekgrp IN s_ekgrp
*  AND k~bsart IN s_bsart
*  AND l~ktokk IN s_ktokk
*  AND p~loekz <> 'L'.

  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
*      APPENDING TABLE t_ebeln_ebelp
    INTO TABLE t_ebeln_ebelp
    WHERE ( b~budat IN s_badat
            OR b~bldat IN s_badat )
    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 <> 'L'.

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

ENDFORM.                    " GETDOCUMENTS
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
FORM getdata.
  CHECK t_ebeln_ebelp[] IS NOT INITIAL.
**--> Seleciona os Itens dos Pedidos de Compras
  SELECT *
  FROM ekpo INTO TABLE it_ekpo
  FOR ALL ENTRIES IN t_ebeln_ebelp
  WHERE ebeln = t_ebeln_ebelp-ebeln
  AND ebelp = t_ebeln_ebelp-ebelp.

  IF it_ekpo[] IS NOT INITIAL.
    SELECT ebeln lifnr bedat zterm bukrs
      FROM ekko INTO TABLE it_ekko
      FOR ALL ENTRIES IN it_ekpo
      WHERE ebeln = it_ekpo-ebeln.
    SELECT *
      FROM ekbe INTO TABLE it_ekbe
      FOR ALL ENTRIES IN it_ekpo
      WHERE ebeln = it_ekpo-ebeln
        AND ebelp = it_ekpo-ebelp.
    SELECT belnr gjahr ebeln ebelp xblnr lfbnr lfgja lfpos
      FROM rseg
      INTO TABLE it_rseg
      FOR ALL ENTRIES IN it_ekpo
      WHERE ebeln = it_ekpo-ebeln
        AND ebelp = it_ekpo-ebelp.
  ENDIF.

  IF it_ekbe[] IS NOT INITIAL.
    DATA: it_ekbe_essr LIKE it_ekbe.

    it_ekbe_essr[] = it_ekbe[].
    DELETE it_ekbe_essr WHERE vgabe <> '9'.
    SELECT *
      FROM essr
      INTO TABLE it_essr
      FOR ALL ENTRIES IN it_ekbe_essr
      WHERE lblni = it_ekbe_essr-belnr.
    SELECT mblnr mjahr zeile menge meins ebeln
           ebelp matnr werks charg
      FROM mseg
      INTO TABLE it_mseg
      FOR ALL ENTRIES IN it_ekbe
      WHERE mblnr = it_ekbe-belnr
        AND mjahr = it_ekbe-gjahr
        AND zeile = it_ekbe-buzei.
    SELECT *
      FROM mkpf
      INTO TABLE it_mkpf
      FOR ALL ENTRIES IN it_mseg
      WHERE mblnr = it_mseg-mblnr
        AND mjahr = it_mseg-mjahr.

    FREE it_ekbe_essr.
  ENDIF.


  IF it_rseg[] IS NOT INITIAL.
    SELECT belnr gjahr budat stblg zterm zfbdt budat cpudt
      FROM rbkp
      INTO TABLE it_rbkp
      FOR ALL ENTRIES IN it_rseg
      WHERE belnr = it_rseg-belnr
        AND gjahr = it_rseg-gjahr.
  ENDIF.

  IF it_ekko[] IS NOT INITIAL.
    SELECT lifnr ktokk
      FROM lfa1 INTO TABLE it_lfa1
      FOR ALL ENTRIES IN it_ekko
      WHERE lifnr EQ it_ekko-lifnr.
    SORT it_lfa1 BY lifnr.
  ENDIF.

**--> Seleciona os Anexos
  SELECT * FROM srgbtbrel
    INTO TABLE it_srgbtbrel.
**--> Move o histórico das MIGOS para tabela auxiliar.
  MOVE it_ekbe[] TO it_ekbe_migo[].
  DELETE it_ekbe_migo[] WHERE bewtp <> 'E'.

**--> Trata estornos da MIRO
  DATA: vl_tabix TYPE sy-tabix.

  DELETE it_rbkp[] WHERE stblg IS NOT INITIAL.
  LOOP AT it_rseg INTO wa_rseg.
    vl_tabix = sy-tabix.
    READ TABLE it_rbkp WITH KEY belnr = wa_rseg-belnr
    gjahr = wa_rseg-gjahr
    TRANSPORTING NO FIELDS.
    IF sy-subrc <> 0.
      CLEAR wa_rseg.
      MODIFY it_rseg FROM wa_rseg INDEX vl_tabix.
    ENDIF.
    CLEAR: wa_rseg.
  ENDLOOP.

  DELETE it_rseg[] WHERE belnr IS INITIAL.

ENDFORM.                    " GETDATA
*&---------------------------------------------------------------------*
*&      Form  select_tvarv
*&---------------------------------------------------------------------*
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  SETDATA
*&---------------------------------------------------------------------*
FORM setdata.

  DATA: w_t052 TYPE t052,
        w_bkpf TYPE bkpf,
        v_awkey TYPE bkpf-awkey.

* Declaração dos ranges locais
  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.

**--> Monta dados do ALV.
  DATA: vl_instid TYPE srgbtbrel-instid_a.

  CLEAR wa_po.

**--> Parametrizações de Semáforo
  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   .

  DELETE it_ekbe[] WHERE bewtp = 'Q'.

  SORT it_ekbe_migo BY ebeln ebelp lfbnr bwart.

***--> Itens do Histórico de Pedido por Folha de Serviço.
  LOOP AT it_ekbe INTO wa_ekbe.
    READ TABLE it_ekpo INTO wa_ekpo
    WITH KEY ebeln = wa_ekbe-ebeln
    ebelp = wa_ekbe-ebelp.
    CHECK sy-subrc IS INITIAL.
***---> Move dados do Pedido de Compras.
    MOVE-CORRESPONDING wa_ekpo TO wa_po.
    MOVE:
    wa_ekpo-menge TO wa_po-menge1,
    wa_ekpo-meins TO wa_po-meins1.

***--> Quebra o relatório em Folha de Serviços.
    READ TABLE it_essr INTO wa_essr
    WITH KEY lblni = wa_ekbe-lfbnr.

    IF sy-subrc = 0.
*--> Descarta as Folhas de Serviço Estornadas.
      CHECK wa_essr-loekz <> 'X'.

***--> Não quebra o relatório por MIGO.
      CHECK wa_ekbe-bewtp = 'D'.

**--> Move os dados da Folha de Serviços.
      MOVE:
      wa_essr-lblni TO wa_po-lblni,
      wa_essr-erdat TO wa_po-dt_folha,
      wa_essr-bldat TO wa_po-bldat_folha.
      IF wa_essr-kzabn IS NOT INITIAL.
        wa_po-semaforo = icon_green_light.
      ELSE.
        IF wa_po-dt_folha GT '00010101'.
          wa_po-dif_dias = sy-datum - wa_po-dt_folha.
          IF wa_po-dif_dias   IN lt_entry_sheet_green .
            wa_po-semaforo = icon_green_light.
          ENDIF.
          IF wa_po-dif_dias   IN lt_entry_sheet_yellow.
            wa_po-semaforo = icon_yellow_light.
          ENDIF.
          IF wa_po-dif_dias   IN lt_entry_sheet_red   .
            wa_po-semaforo = icon_red_light.
          ENDIF.
        ENDIF.
      ENDIF.
**--> Move anexo Anexo Folha de Serviços.
      READ TABLE it_srgbtbrel INTO wa_srgbtbrel
      WITH KEY instid_a = wa_essr-lblni.
      IF sy-subrc = 0.
        MOVE icon_attachment TO wa_po-anexo_folha.
      ENDIF.
    ENDIF.

*** Move anexo do Pedido de Compras.
    READ TABLE it_srgbtbrel INTO wa_srgbtbrel
    WITH KEY instid_a = wa_po-ebeln.
    IF sy-subrc = 0.
      MOVE icon_attachment TO wa_po-anexo_po.
    ENDIF.

**--> Encontra respectiva MIGO da Folha.
    CLEAR wa_mseg.
    IF wa_ekbe-lfbnr IS NOT INITIAL.
      READ TABLE it_ekbe_migo INTO wa_ekbe_migo
      WITH KEY lfbnr = wa_ekbe-lfbnr
      bewtp = 'E'.
    ELSE.
      READ TABLE it_ekbe_migo INTO wa_ekbe_migo
      WITH KEY belnr = wa_ekbe-ebeln
      gjahr = wa_ekbe-gjahr
      buzei = wa_ekbe-buzei.

    ENDIF.

    IF sy-subrc = 0.
      LOOP AT it_mseg INTO wa_mseg
      WHERE mblnr = wa_ekbe_migo-belnr.
        c_grmenge = c_grmenge + wa_mseg-menge.
      ENDLOOP.
    ENDIF.

**--> Encontra respectiva MIGO da Folha.
    CLEAR wa_mseg.
    IF wa_ekbe-lfbnr IS NOT INITIAL.
      READ TABLE it_ekbe_migo
      INTO wa_ekbe_migo
      WITH KEY lfbnr = wa_ekbe-lfbnr
      bewtp = 'E'.
      IF sy-subrc IS INITIAL.
        READ TABLE it_mseg
        INTO wa_mseg
        WITH KEY mblnr = wa_ekbe_migo-belnr
        mjahr = wa_ekbe_migo-gjahr
        zeile = wa_ekbe_migo-buzei.
        IF sy-subrc IS NOT INITIAL.
          CLEAR wa_mseg.
        ENDIF.
      ENDIF.

    ELSE.
      READ TABLE it_mseg
      INTO wa_mseg
      WITH KEY mblnr = wa_ekbe-belnr
      mjahr = wa_ekbe-gjahr
      zeile = wa_ekbe-buzei.
      IF sy-subrc IS NOT INITIAL.
        CLEAR wa_mseg.
      ENDIF.

    ENDIF.
    IF sy-subrc IS INITIAL.
      MOVE:
      wa_mseg-mblnr TO wa_po-mblnr,
      wa_mseg-mjahr TO wa_po-mjahr,
      wa_ekbe-menge TO wa_po-menge2,
      wa_mseg-meins TO wa_po-meins2,
      wa_mseg-werks TO wa_po-werks,
      wa_mseg-charg TO wa_po-charg.

      CONCATENATE wa_mseg-mblnr wa_mseg-mjahr INTO vl_instid.
      READ TABLE it_srgbtbrel INTO wa_srgbtbrel
      WITH KEY instid_a = vl_instid.
      IF sy-subrc = 0.
        MOVE icon_attachment TO wa_po-anexo_migo.
      ENDIF.
      CLEAR: vl_instid.

      READ TABLE it_mkpf INTO wa_mkpf
      WITH KEY mblnr = wa_mseg-mblnr
      mjahr = wa_mseg-mjahr.
      IF sy-subrc = 0.
        wa_po-dt_migo = wa_mkpf-budat.
        wa_po-dt_doc_migo = wa_mkpf-bldat.
        wa_po-dtc_migo = wa_mkpf-cpudt.
      ENDIF.
    ENDIF.

    wa_po-balqty = wa_eban-menge - c_grmenge.

    CLEAR : wa_rseg, wa_rbkp.
**--> Move dados da MIRO

    CLEAR wa_mseg.
    IF wa_ekbe-lfbnr IS NOT INITIAL.
      READ TABLE it_ekbe_migo
      INTO wa_ekbe_migo
      WITH KEY lfbnr = wa_ekbe-lfbnr
      bewtp = 'E'.
      IF sy-subrc IS INITIAL.
        READ TABLE it_mseg
        INTO wa_mseg
        WITH KEY mblnr = wa_ekbe_migo-belnr
        mjahr = wa_ekbe_migo-gjahr
        zeile = wa_ekbe_migo-buzei.
        IF sy-subrc IS NOT INITIAL.
          CLEAR wa_mseg.
        ENDIF.
      ENDIF.

    ELSE.
      READ TABLE it_mseg
      INTO wa_mseg
      WITH KEY mblnr = wa_ekbe-belnr
      mjahr = wa_ekbe-gjahr
      zeile = wa_ekbe-buzei.
      IF sy-subrc IS NOT INITIAL.
        CLEAR wa_mseg.
      ENDIF.
    ENDIF.

    IF wa_ekbe-lfbnr IS NOT INITIAL.
      READ TABLE it_rseg
        INTO wa_rseg
        WITH KEY lfbnr = wa_ekbe-lfbnr
                 lfgja = wa_ekbe-lfgja
                 lfpos = wa_ekbe-lfpos.
    ELSE.
      READ TABLE it_rseg
        INTO wa_rseg
        WITH KEY ebeln = wa_mseg-ebeln
                 ebelp = wa_mseg-ebelp.
    ENDIF.
    IF sy-subrc = 0.
      READ TABLE it_rbkp INTO wa_rbkp
        WITH KEY belnr = wa_rseg-belnr
        gjahr = wa_rseg-gjahr.
      IF sy-subrc EQ 0.
        IF wa_rbkp-stblg IS INITIAL.
          MOVE:
            wa_rbkp-belnr TO wa_po-belnr,
            wa_rbkp-zterm TO wa_po-zterm,
            wa_rbkp-zfbdt TO wa_po-zfbdt,
            wa_rbkp-bldat TO wa_po-bldat.

          CALL FUNCTION 'FI_FIND_PAYMENT_CONDITIONS'
            EXPORTING
              i_zterm = wa_rbkp-zterm
              i_bldat = wa_rbkp-bldat
              i_budat = wa_rbkp-budat
              i_cpudt = wa_rbkp-cpudt
              i_zfbdt = wa_rbkp-zfbdt
            IMPORTING
              e_t052  = w_t052.

          CONCATENATE wa_rbkp-belnr wa_rbkp-bldat(4)
            INTO v_awkey .

          SELECT SINGLE *
            FROM bkpf
            INTO w_bkpf
            WHERE awkey =  v_awkey.
          IF sy-subrc IS INITIAL.
            wa_po-fi_belnr = w_bkpf-belnr.
          ENDIF.

          IF w_t052-xsplt = 'X'.
            wa_po-split = 'PARC'.
          ENDIF.

          SELECT SINGLE * FROM t001w INTO w_t001w WHERE werks = wa_po-werks.
          SELECT SINGLE * FROM t001k INTO w_t001k WHERE bwkey = w_t001w-bwkey.

          CALL FUNCTION 'FI_DOCUMENT_READ'
            EXPORTING
              i_bukrs     = w_t001k-bukrs
              i_belnr     = wa_po-fi_belnr
              i_gjahr     = wa_rbkp-bldat(4)
            TABLES
              t_bseg      = t_bseg
            EXCEPTIONS
              wrong_input = 1
              not_found   = 2
              OTHERS      = 3.
          IF sy-subrc IS INITIAL.
            DELETE t_bseg WHERE koart <> 'K'.
            SORT t_bseg BY fdtag.
            READ TABLE t_bseg INDEX 1 INTO w_bseg.
            wa_po-duedt    = w_bseg-fdtag.
            wa_po-zterm_fi = w_bseg-zterm.
          ENDIF.

*** Move anexo da MIRO
          CONCATENATE wa_rbkp-belnr wa_rbkp-bldat(4) INTO vl_instid.
          READ TABLE it_srgbtbrel INTO wa_srgbtbrel
            WITH KEY instid_a = vl_instid.

          IF sy-subrc = 0.
            MOVE icon_attachment TO wa_po-anexo_miro.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.

    CLEAR vl_instid.

**--> Seleciona os dados de cabeçalho do Pedido de Compras
    CLEAR wa_ekko.

    READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_ekbe-ebeln.
    IF sy-subrc EQ 0.
      MOVE: wa_ekko-lifnr TO wa_po-lifnr,
      wa_ekko-bedat TO wa_po-bedat,
      wa_ekko-zterm TO wa_po-zterm_pedido,
      wa_ekko-bukrs TO wa_po-bukrs.

      CLEAR wa_lfa1.
      READ TABLE it_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekko-lifnr BINARY SEARCH.
      IF sy-subrc IS INITIAL.
        MOVE wa_lfa1-ktokk TO wa_po-ktokk.
      ENDIF.
    ENDIF.

    IF   wa_po-lblni        IS NOT INITIAL
    AND wa_po-mblnr        IS INITIAL
    AND wa_po-zterm_pedido IS NOT INITIAL.

      CLEAR wa_t052.
      CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
        EXPORTING
          i_zterm          = wa_po-zterm_pedido
        IMPORTING
          e_t052           = wa_t052
        EXCEPTIONS
          terms_of_payment = 1
          conditions       = 2
          OTHERS           = 3.
      IF sy-subrc IS INITIAL.
        wa_po-duedt = wa_po-bldat_folha + wa_t052-ztag1.
      ENDIF.
    ENDIF.

    APPEND wa_po TO it_po.
    CLEAR: wa_po, wa_ekpo, wa_mseg.

  ENDLOOP.

ENDFORM.                    " SETDATA
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fieldcat .

  DATA: i TYPE i.

  REFRESH it_fcat.

  i = 1.     PERFORM buildfields USING i 'EBELN'    'IT_PO' 'Pedido' '' 10.
  i = i + 1. PERFORM buildfields USING i 'EBELP'    'IT_PO' 'Item' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ANEXO_PO' 'IT_PO' 'Anexo-PO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'BEDAT'    'IT_PO' 'Data do Pedido' '' 0.
  i = i + 1. PERFORM buildfields USING i 'LBLNI'    'IT_PO' 'Folha de Serviços' '' 0.
  i = i + 1. PERFORM buildfields USING i 'DT_FOLHA' 'IT_PO' 'Data Cria. de Serviços' '' 0.
  i = i + 1. PERFORM buildfields USING i 'BLDAT_FOLHA' 'IT_PO' 'DataDoc Folha' '' 0.
  i = i + 1. PERFORM buildfields USING i 'DIF_DIAS' 'IT_PO' 'Diferença de Dias'      '' 0.
  i = i + 1. PERFORM buildfields USING i 'SEMAFORO' 'IT_PO' 'Status'                 '' 0.
  i = i + 1. PERFORM buildfields USING i 'MTART'    'IT_PO' 'Tipo do Material' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MATKL'    'IT_PO' 'Grupo de Mercadorias' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MATNR'    'IT_PO' 'Número do Material' '' 0.
  i = i + 1. PERFORM buildfields USING i 'TXZ01'    'IT_PO' 'Descrição do Material' '' 0.
  i = i + 1. PERFORM buildfields USING i 'LIFNR'    'IT_PO' 'Número do Fornecedor' '' 0.
  i = i + 1. PERFORM buildfields USING i 'NAME1'    'IT_PO' 'Fornecedor' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MENGE1'   'IT_PO' 'Quantidade do Pedido' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MEINS'    'IT_PO' 'Unidade do Pedido' '' 0.
  i = i + 1. PERFORM buildfields USING i 'NETPR'    'IT_PO' 'Preço' '' 0.
  i = i + 1. PERFORM buildfields USING i 'PEINH'    'IT_PO' 'Unidade de Preço' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ANEXO_FOLHA' 'IT_PO' 'Anexo-Folha' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MBLNR'    'IT_PO' 'MIGO' ''  0.
  i = i + 1. PERFORM buildfields USING i 'DT_MIGO'  'IT_PO' 'DtL MIGO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'DTC_MIGO'  'IT_PO' 'DtC MIGO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ANEXO_MIGO' 'IT_PO' 'Anexo-MIGO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MENGE2'     'IT_PO' 'Quantidade MIGO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'MEINS2'     'IT_PO' 'Unidade MIGO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'BELNR'      'IT_PO' 'MIRO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ANEXO_MIRO' 'IT_PO' 'Anexo-MIRO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'BLDAT' 'IT_PO' 'DtL MIRO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'FI_BELNR' 'IT_PO' 'FI Doc' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ZTERM' 'IT_PO' 'C.Pag.MIRO' '' 0.
  i = i + 1. PERFORM buildfields USING i 'SPLIT' 'IT_PO' 'Parcel.' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ZFBDT' 'IT_PO' 'Dt.Base' '' 0.
  i = i + 1. PERFORM buildfields USING i 'DUEDT' 'IT_PO' 'Dt.Pago' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ZTERM_PEDIDO' 'IT_PO' 'C.Pag.Pedido' '' 0.
  i = i + 1. PERFORM buildfields USING i 'ZTERM_FI' 'IT_PO' 'C.Pag.Contábil' '' 0.
  i = i + 1. PERFORM buildfields USING i 'KTOKK' 'IT_PO' 'Grp.Contas Fornecedor' '' 0.
  i = i + 1. PERFORM buildfields USING i 'BUKRS' 'IT_PO' 'Empresa' '' 0.

ENDFORM.                    " FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  BUILDFIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0449   text
*      -->P_0450   text
*      -->P_0451   text
*      -->P_0452   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.

  CLEAR wa_fcat.
  wa_fcat-col_pos = p_col_pos.
  wa_fcat-fieldname = p_fldname.
  wa_fcat-tabname = p_tabname.
  wa_fcat-reptext_ddic = p_reptext.
  wa_fcat-do_sum = p_do_sum.
  wa_fcat-just = 'C'.
  IF p_len IS NOT INITIAL.
    wa_fcat-intlen = p_len.
  ENDIF.
  APPEND wa_fcat TO it_fcat.

ENDFORM.                    " BUILDFIELDS
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
FORM display.

  CLEAR wa_layout.
  wa_layout-zebra = 'X'.
  wa_layout-colwidth_optimize = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_bypassing_buffer       = 'X'
      i_callback_program       = sy-cprog
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_top_of_page   = 'TOP_OF_PAGE'
      i_background_id          = 'ALV_BACKGROUND'
      is_layout                = wa_layout
      it_fieldcat              = it_fcat
      i_callback_pf_status_set = 'ZSTATUS'
      i_save                   = 'A'
    TABLES
      t_outtab                 = it_po[]
    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.

ENDFORM.                    " DISPLAY

*&---------------------------------------------------------------------*
*&      Form  zstatus
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM zstatus USING extab TYPE slis_t_extab.                 "#EC CALLED
  SET PF-STATUS 'ZSTATUS'.
  REFRESH extab[].
ENDFORM.                    " zstatus

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_of_page.                                           "#EC *

  REFRESH it_lshead.
  CLEAR wa_lshead.

  WRITE: s_badat-low TO c_low DD/MM/YYYY,s_badat-high TO c_high DD/MM/YYYY.
  IF s_badat-high IS INITIAL.
    CONCATENATE 'De' c_low INTO c_date SEPARATED BY space.
  ELSE.
    CONCATENATE 'Datado de' c_low 'e' c_high INTO c_date SEPARATED BY space.
  ENDIF.

  wa_lshead-typ = 'H'.
  wa_lshead-info = 'Rastreabilidade de Pedidos'.
  APPEND wa_lshead TO it_lshead.

  wa_lshead-typ = 'S'.
  wa_lshead-info = c_date.
  APPEND wa_lshead TO it_lshead.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_lshead.

ENDFORM.                    "top_of_page
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1072   text
*      -->P_1073   text
*      -->P_1074   text
*----------------------------------------------------------------------*
FORM build_sort  USING    value(p_fldname) TYPE slis_fieldname
      value(p_spos) LIKE alvdynp-sortpos
      value(p_up) LIKE alvdynp-sortup.

  wa_sort-fieldname = p_fldname.
  wa_sort-spos = p_spos.
  wa_sort-up = p_up.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.

ENDFORM.                    " BUILD_SORT
*&---------------------------------------------------------------------*
*&      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,
        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 'IT_PO-EBELN'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          SET PARAMETER ID : 'BES' FIELD wa_po-ebeln.
          CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
        WHEN 'IT_PO-LBLNI'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          SET PARAMETER ID : 'LBL' FIELD wa_po-lblni.
          CALL TRANSACTION 'ML81N' AND SKIP FIRST SCREEN.
        WHEN 'IT_PO-MBLNR'.
          READ TABLE it_po INTO wa_po 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_po-mblnr
            EXCEPTIONS
              illegal_combination = 1
              OTHERS              = 2.
          IF sy-subrc <> 0.
          ENDIF.
        WHEN 'IT_PO-BELNR'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          SET PARAMETER ID :
          'RBN' FIELD wa_po-belnr,
          'GJR' FIELD wa_po-bldat(8).
          CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
        WHEN 'IT_PO-ANEXO_MIGO'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          CONCATENATE wa_po-mblnr wa_po-dt_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 'IT_PO-ANEXO_MIRO'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          CLEAR: lw_object.
          CONCATENATE wa_po-belnr wa_po-bldat(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 'IT_PO-ANEXO_FOLHA'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          CLEAR: lw_object.
          MOVE wa_po-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 'IT_PO-ANEXO_PO'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          CLEAR: lw_object.
          MOVE wa_po-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 'IT_PO-FI_BELNR'.
          READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
          SET PARAMETER ID 'BLN' FIELD wa_po-fi_belnr.
          SELECT SINGLE * FROM t001w INTO w_t001w WHERE werks = wa_po-werks.
          SELECT SINGLE * FROM t001k INTO w_t001k WHERE bwkey = w_t001w-bwkey.
          SET PARAMETER ID 'BUK' FIELD w_t001k-bukrs.
          SET PARAMETER ID 'GJR' FIELD wa_po-bldat(8).
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Form  CLEAR_MSEG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_clear_mseg .
  DATA: v_mseg TYPE mseg.
  LOOP AT it_mseg INTO wa_mseg.
    SELECT SINGLE * FROM mseg
      INTO v_mseg
      WHERE sjahr = wa_mseg-mjahr
      AND smbln = wa_mseg-mblnr
      AND smblp = wa_mseg-zeile.
    IF sy-subrc IS INITIAL.
      DELETE it_mseg
        WHERE mblnr = wa_mseg-mblnr
          AND mjahr = wa_mseg-mjahr
          AND zeile = wa_mseg-zeile.
      DELETE it_mseg
        WHERE mblnr = v_mseg-mblnr
          AND mjahr = v_mseg-mjahr
          AND zeile = v_mseg-zeile.
      DELETE it_ekbe
        WHERE belnr = wa_mseg-mblnr
          AND gjahr = wa_mseg-mjahr
          AND buzei = wa_mseg-zeile.
      DELETE it_ekbe
        WHERE belnr = v_mseg-mblnr
          AND gjahr = v_mseg-mjahr
          AND buzei = v_mseg-zeile.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " CLEAR_MSEG
*&---------------------------------------------------------------------*
*&      Form  SET_VENDOR_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_vendor_name .
  FIELD-SYMBOLS: <po> LIKE LINE OF it_po .
  LOOP AT it_po ASSIGNING <po>.
    CHECK <po>-lifnr IS NOT INITIAL.
    SELECT SINGLE name1 FROM lfa1
    INTO <po>-name1 WHERE lifnr = <po>-lifnr.
    IF sy-subrc IS NOT INITIAL.
      CLEAR <po>-name1.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " SET_VENDOR_NAME
*&---------------------------------------------------------------------*
*&      Form  SET_ZFBDT_MIGO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_duedt_migo .
  FIELD-SYMBOLS: <po> LIKE LINE OF it_po .
  LOOP AT it_po ASSIGNING <po>.
    CHECK <po>-duedt IS INITIAL.
    CHECK <po>-mblnr IS NOT INITIAL.
    CHECK <po>-zterm_pedido IS NOT INITIAL.
    CLEAR wa_t052.
    CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
      EXPORTING
        i_zterm          = <po>-zterm_pedido
      IMPORTING
        e_t052           = wa_t052
      EXCEPTIONS
        terms_of_payment = 1
        conditions       = 2
        OTHERS           = 3.

    <po>-duedt = <po>-dt_doc_migo + wa_t052-ztag1.
  ENDLOOP.
ENDFORM.                    " SET_ZFBDT_MIGO

abap ZRMM009 - 资本支出

zrmm009.abap
*&---------------------------------------------------------------------*
*& Report  ZRMM009
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zrmm009.

TYPE-POOLS : abap, slis, icon.
TABLES: ekko, ekpo, ekkn.

SELECTION-SCREEN BEGIN OF BLOCK par WITH FRAME .
PARAMETERS:
  p_ekorg TYPE ekorg DEFAULT 'OCLW'.
SELECT-OPTIONS:
  s_bukrs FOR ekko-bukrs,
  s_datum FOR ekko-bedat,
  s_lifnr FOR ekko-lifnr,
  s_ebeln FOR ekko-ebeln.
SELECTION-SCREEN END OF BLOCK par.

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

DATA: r_ebeln TYPE RANGE OF ebeln.

DATA:
      BEGIN OF t_output OCCURS 0,
        ekorg LIKE ekko-ekorg,  " Organização de Compras
        bukrs LIKE ekko-bukrs,  " Empresa
        bsart LIKE ekko-bsart,  " Tipo de Pedido de Compra
        ebeln LIKE ekko-ebeln,  " Número do Pedido de Compra
        ebelp LIKE ekpo-ebelp,  " Item do Pedido de Compra
        lifnr LIKE ekko-lifnr,  " Nümero do Fornecedor
        name1 LIKE lfa1-name1,  " Nome do Fornecedor
        zterm LIKE ekko-zterm,  " Condição de Pagamento
        aedat LIKE ekko-aedat,  " Data de Criação do Doc Compras
        ernam LIKE ekko-ernam,  " Usuário que Criou Doc de Compras
        loekz LIKE ekpo-loekz,  " Status de Bloq/Eliminação
        knttp LIKE ekpo-knttp,  " Classificação Contábil do Item
        matnr LIKE ekpo-matnr,  " Código de Material
        matkl LIKE ekpo-matkl,  " Grupo de Mercadorias
        txz01 LIKE ekpo-txz01,  " Texto do Item do Item
        menge LIKE ekpo-menge,  " Quantidade do Item
        meins LIKE ekpo-meins,
        " Unidade de Medida para Quantidade do Item
        netwr LIKE ekpo-netwr,  " Valor Unitário
        waers LIKE ekko-waers,  " Moeda do Pedido de Compra
        werks LIKE ekpo-werks,  " Centro
        kostl LIKE csks-kostl,  " Centro de Custo
        anln1 LIKE anla-anln1,  " Número de Imobilizado
        anln2 LIKE anla-anln2,  " Sub Número de Imobilizado
        cost_descr TYPE char15,
        " Descrição de Imobilizado ou Centro de Custo
      END OF t_output.


TYPE-POOLS: slis, sydes.

DATA: "Dynpro Control
      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: t_fcat TYPE slis_t_fieldcat_alv.
*DATA: w_slis_layout_alv TYPE slis_layout_alv.
*DATA: t_sort TYPE slis_t_sortinfo_alv.
*DATA: t_filter TYPE slis_t_filter_alv.

DATA: w_ekko TYPE ekko,
      t_ekpo TYPE TABLE OF ekpo,
      t_ekkn TYPE TABLE OF ekkn,
      t_ekbe TYPE TABLE OF ekbe.

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

INITIALIZATION.
  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.
* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  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.

START-OF-SELECTION.
  PERFORM select_data.

END-OF-SELECTION.
  PERFORM process_data.
  PERFORM output_report.
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_data .

  IF s_ebeln[] IS INITIAL.
    PERFORM get_ebeln_by_date TABLES r_ebeln.
  ELSE.
    r_ebeln[] = s_ebeln[].
  ENDIF.
  CHECK r_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.                    " SELECT_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_data .

ENDFORM.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      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 call_alv.

ENDFORM.                    " OUTPUT_REPORT
*&---------------------------------------------------------------------*
*&      Form  BUILD_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_FCAT  text
*----------------------------------------------------------------------*
FORM build_fcat.

  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  PREPARE_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_FCAT  text
*----------------------------------------------------------------------*
FORM prepare_fcat.
  DATA: w_lvc_fcat LIKE LINE OF lvc_t_fcat.
  PERFORM get_lvc_fcat_dtel
    USING 'T_OUTPUT' 'COST_DESCR' 'CHAR15'
          'Descrição Custo' w_lvc_fcat.
  w_lvc_fcat-col_pos = LINES( lvc_t_fcat ) + 1.
  APPEND w_lvc_fcat TO lvc_t_fcat.
ENDFORM.                    " PREPARE_FCAT
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FILTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_FILTER  text
*----------------------------------------------------------------------*
FORM prepare_filter  USING    p_t_filter.

ENDFORM.                    " PREPARE_FILTER
*&---------------------------------------------------------------------*
*&      Form  PREPARE_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_SORT  text
*----------------------------------------------------------------------*
FORM prepare_sort  USING    p_t_sort.

ENDFORM.                    " PREPARE_SORT
*&---------------------------------------------------------------------*
*&      Form  PREPARE_LDB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_CALLBACK  text
*      -->P_T_SELECTIONS  text
*----------------------------------------------------------------------*
FORM prepare_ldb  TABLES   p_t_callback STRUCTURE ldbcb
                             "Introduzir nome correto para <...>
                           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'.

  DATA: w_ebeln LIKE LINE OF r_ebeln.
  LOOP AT r_ebeln INTO w_ebeln.
    w_ebeln-sign = 'I'.
    w_ebeln-option = 'EQ'.
    MOVE-CORRESPONDING w_ebeln TO seltab_wa.
    APPEND seltab_wa TO p_t_selections.
  ENDLOOP.

ENDFORM.                    " PREPARE_LDB
*&---------------------------------------------------------------------*
*&      Form  GET_EBELN_BY_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_R_EBELN  text
*----------------------------------------------------------------------*
FORM get_ebeln_by_date  TABLES   p_r_ebeln LIKE r_ebeln.
  "Introduzir nome correto para <...>.

  SELECT ebeln AS low FROM ekbe
    INTO CORRESPONDING FIELDS OF TABLE p_r_ebeln
    WHERE budat IN s_datum
      AND vgabe = '2'. " 2 = MIRO

  SELECT ebeln AS low
    FROM ekko
    APPENDING CORRESPONDING FIELDS OF TABLE p_r_ebeln
    WHERE aedat IN s_datum.

  SELECT ebeln AS low
    FROM eket
    APPENDING CORRESPONDING FIELDS OF TABLE p_r_ebeln
    WHERE eindt IN s_datum.

  SORT p_r_ebeln BY low.
  DELETE ADJACENT DUPLICATES FROM p_r_ebeln COMPARING low.

  DATA: w_ebeln LIKE LINE OF p_r_ebeln.
  w_ebeln-sign = 'I'.
  w_ebeln-option = 'EQ'.
  MODIFY TABLE p_r_ebeln FROM w_ebeln TRANSPORTING sign option.

ENDFORM.                    " GET_EBELN_BY_DATE

*&---------------------------------------------------------------------*
*&      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_ekbe[], t_ekkn[].
      MOVE-CORRESPONDING wa TO l_ekpo.
      APPEND l_ekpo TO t_ekpo.
    WHEN 'L'.
      PERFORM build_data.
  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  BUILD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_data .
*
*        ekorg LIKE ekko-ekorg,  " Organização de Compras
*        bukrs LIKE ekko-bukrs,  " Empresa
*        bsart LIKE ekko-bsart,  " Tipo de Pedido de Compra
*        ebeln LIKE ekko-ebeln,  " Número do Pedido de Compra
*        ebelp LIKE ekpo-ebelp,  " Item do Pedido de Compra
*        lifnr LIKE ekko-lifnr,  " Nümero do Fornecedor
*        name1 LIKE lfa1-name1,  " Nome do Fornecedor
*        zterm LIKE ekko-zterm,  " Condição de Pagamento
*        aedat LIKE ekko-aedat,
*         " Data de Criação do Documento de Compras
*        ernam LIKE ekko-ernam,
  " Usuário que Criou Documento de Compras
*        loekz LIKE ekpo-loekz,  " Status de Bloq/Eliminação
*        knttp LIKE ekpo-knttp,  " Classificação Contábil do Item
*        matnr LIKE ekpo-matnr,  " Código de Material
*        matkl LIKE ekpo-matkl,  " Grupo de Mercadorias
*        txz01 LIKE ekpo-txz01,  " Texto do Item do Item
*        menge LIKE ekpo-menge,  " Quantidade do Item
*        meins LIKE ekpo-meins,
*          " Unidade de Medida para Quantidade do Item
*        netwr LIKE ekpo-netwr,  " Valor Unitário
*        waers LIKE ekko-waers,  " Moeda do Pedido de Compra
*        werks LIKE ekpo-werks,  " Centro
*        kostl LIKE csks-kostl,  " Centro de Custo
*        anln1 LIKE anla-anln1,  " Número de Imobilizado
*        anln2 LIKE anla-anln2,  " Sub Número de Imobilizado
*cost_descr TYPE char15, " Descrição de Imobilizado ou Centro de Custo
  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.


  DATA: v_output LIKE LINE OF t_output.
  CLEAR: v_output, t_output[].

  CALL FUNCTION 'KOKRS_GET_FROM_BUKRS'
    EXPORTING
      i_bukrs        = v_ekko-bukrs
    IMPORTING
      e_kokrs        = v_kokrs
    EXCEPTIONS
      no_kokrs_found = 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.

  v_output-ekorg = v_ekko-ekorg.
  v_output-bukrs = v_ekko-bukrs.
  v_output-bsart = v_ekko-bsart.
  v_output-ebeln = v_ekko-ebeln.
  v_output-ebelp = v_ekpo-ebelp.
  v_output-lifnr = v_ekko-lifnr.
  SELECT SINGLE name1 FROM lfa1
    INTO v_output-name1
    WHERE lifnr = v_output-lifnr.
  v_output-zterm = v_ekko-zterm.
  v_output-aedat = v_ekko-aedat.
  v_output-ernam = v_ekko-ernam.
  v_output-loekz = v_ekpo-loekz.
  v_output-knttp = v_ekpo-knttp.
  v_output-matnr = v_ekpo-matnr.
  v_output-matkl = v_ekpo-matkl.
  v_output-txz01 = v_ekpo-txz01.
  v_output-menge = v_ekpo-menge.
  v_output-meins = v_ekpo-meins.
  v_output-netwr = v_ekpo-netwr.
  v_output-werks = v_ekpo-werks.
  DESCRIBE TABLE t_ekkn LINES i_ekkn.
  IF i_ekkn = 0.
    IF v_output-knttp = ' '.
      v_output-cost_descr = 'ESTOQUE'.
    ENDIF.
    APPEND v_output TO t_output.
  ELSEIF i_ekkn = 1.
    READ TABLE t_ekkn INDEX 1 INTO v_ekkn.
    CASE v_output-knttp.
      WHEN 'K'.
        v_output-kostl = v_ekkn-kostl.
        CALL FUNCTION 'BAPI_COSTCENTER_GETDETAIL'
          EXPORTING
            controllingarea        = v_kokrs
            costcenter             = v_output-kostl
*             DATE                   = SY-DATUM
         IMPORTING
           name                   = v_kostl_name
*             DESCRIPTION            =
*             PERSON_IN_CHARGE       =
*             ADDRESS                =
*             COMMUNICATION          =
*             RETURN                 =
                  .
        v_output-cost_descr = v_kostl_name.

      WHEN 'A'.
        v_output-anln1 = v_ekkn-anln1.
        v_output-anln2 = v_ekkn-anln2.
        CALL FUNCTION 'BAPI_FIXEDASSET_GETDETAIL'
          EXPORTING
            companycode                   = v_output-bukrs
            asset                         = v_output-anln1
            subnumber                     = '0000'
*             EVALUATION_DATE               = '00000000'
         IMPORTING
           basic_data                    = v_asset_detail
*             ORGANIZATIONAL_DATA           =
*             SPECIAL_CLASSIFICATIONS       =
*             RETURN                        =
                  .
        v_output-cost_descr = v_asset_detail-descript.

        APPEND v_output TO t_output.

      WHEN OTHERS.
        " Do nothing
    ENDCASE.
    APPEND v_output TO t_output.
  ELSE.
    "TODO
    APPEND v_output TO t_output.
  ENDIF.

ENDFORM.                    " BUILD_DATA
*&---------------------------------------------------------------------*
*&      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                = ' '
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_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                     =
   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.

ENDFORM.                    " CALL_ALV
*&---------------------------------------------------------------------*
*&      Form  GET_LVC_FCAT_DTEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0519   text
*      -->P_0520   text
*      -->P_0521   text
*      -->P_W_LVC_FCAT  text
*----------------------------------------------------------------------*
FORM get_lvc_fcat_dtel  USING    value(p_table)
                                 value(p_column)
                                 value(p_dtel)
                                 value(p_title)
                                 p_fcat TYPE lvc_s_fcat.

  DATA: dd_x031l_table TYPE dd_x031l_table,
        x031l TYPE x031l,
        ref_cl_abap_elemdescr TYPE REF TO cl_abap_elemdescr.

  ref_cl_abap_elemdescr ?=
  cl_abap_typedescr=>describe_by_name( p_dtel ).
  dd_x031l_table = ref_cl_abap_elemdescr->get_ddic_object( ).
  READ TABLE dd_x031l_table INDEX 1 INTO x031l.
  CASE ref_cl_abap_elemdescr->type_kind.
    WHEN 'C'.
      p_fcat-datatype = 'CHAR'.
    WHEN 'N'.
      p_fcat-datatype = 'NUMC'.
    WHEN 'D'.
      p_fcat-datatype = 'DATE'.
    WHEN 'P'.
      p_fcat-datatype = 'PACK'.
    WHEN OTHERS.
      p_fcat-datatype = ref_cl_abap_elemdescr->type_kind.
  ENDCASE.

  p_fcat-inttype = ref_cl_abap_elemdescr->type_kind.
  p_fcat-intlen = ref_cl_abap_elemdescr->length.
  p_fcat-decimals = ref_cl_abap_elemdescr->decimals.
  p_fcat-reptext = p_title.
  p_fcat-fieldname = p_column.
  p_fcat-tabname = p_table.

ENDFORM.                    " GET_LVC_FCAT_DTEL

abap 加入:ESEMPIO KNA1 / KNB1 ECC CUSTOMER MASTER

Esempio di estrazione con加入每个dati客户

JOIN ESEMPIO KNA1_KNB1 ECC CUSTOMER MASTER
  SELECT a~kunnr, a~name1, a~land1, a~regio, a~ort01,
         a~pstlz, a~stras, a~stceg, a~stcd1, a~lifnr,
         a~brsch, a~vbund, a~ktokd, b~bukrs, b~zterm,
         b~zwels, b~zahls, b~knrze, b~altkn, b~vlibb,
         b~verdt, c~mansp
    FROM kna1 AS a
    INNER JOIN knb1 AS b ON a~kunnr EQ b~kunnr
    LEFT  JOIN knb5 AS c ON c~kunnr EQ b~kunnr
                        AND c~bukrs EQ b~bukrs
    INTO TABLE @DATA(lt_kna1_knb1_knb5)
    WHERE a~kunnr IN @s_kunnr
    AND   b~bukrs EQ @p_bukrs.

abap 加入:ESEMPIO选择lfa1 / lfb1 / lfm1 VENDOR MASTER

加入每个tabella供应商大师的di esempio

JOIN ESEMPIO select lfa1_lfb1_lfm1 VENDOR MASTER
  SELECT a~lifnr, a~name1, a~land1, a~regio, a~ort01,
         a~pstlz, a~stras, a~stceg, a~stcd1, a~kunnr,
         a~vbund, a~ktokk, b~bukrs, b~zterm, b~zwels,
         b~zahls, b~lnrze, b~altkn, c~ekorg, c~zterm AS zterm2
    FROM lfa1 AS a
    INNER JOIN lfb1 AS  b ON a~lifnr EQ b~lifnr
    LEFT  JOIN lfm1 AS  c ON a~lifnr EQ c~lifnr
    INNER JOIN t024e AS d ON ( d~bukrs EQ @p_bukrs
                          OR   d~bukrs EQ @space )
                         AND   c~ekorg EQ d~ekorg
    INTO TABLE @DATA(lt_lfa1)
    WHERE a~lifnr IN @s_lifnr
    AND   b~bukrs EQ @p_bukrs.