antelio
8/6/2019 - 3:49 PM

ZRMM009 - CAPEX

*&---------------------------------------------------------------------*
*& 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