'REUSE_ALV_VARIANT_DEFAULT_GET'

Hi,
Good Morning.
I am new to abap. Pls clarify the following doubt.
We can directly use variants by creating in se38 then what is the use of the function  'REUSE_ALV_VARIANT_DEFAULT_GET'
Thanks in advance.
Regards,
Shilpa

     Work area For variant
       w_variant TYPE disvariant,
     Work area For variant
       w_variant1 TYPE disvariant,
*Global Variables
DATA: w_repid TYPE sy-repid.                   "Report ID
SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE text-020.
PARAMETERS: p_varnt TYPE slis_vari.                 " Variant
SELECTION-SCREEN: END OF BLOCK b3.
INITIALIZATION
INITIALIZATION.
  w_repid = sy-repid.
To variant initialize
  PERFORM sub_variant_int.
AT SELECTION-SCREEN ON VALUE-REQUEST
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varnt.
Display List of Variants on pressing F4
  PERFORM sub_f4_for_variant.
AT SELECTION-SCREEN
AT SELECTION-SCREEN.
For check variant
  PERFORM sub_check_variant.
*&      Form  sub_variant_int
      text
FORM sub_variant_int .
  CLEAR w_variant.
  w_variant-report = w_repid.
Determine the default Variant
  PERFORM sub_get_default_variant.
ENDFORM.                    " sub_variant_int
*&      Form  sub_check_variant
      To check variant
FORM sub_check_variant.
  IF NOT p_varnt IS INITIAL.
    CLEAR w_variant1.
    MOVE w_variant TO w_variant1.
    MOVE p_varnt TO w_variant1-variant.
  This function module for check the variant exist
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
      EXPORTING
        i_save     = c_save
      CHANGING
        cs_variant = w_variant1.
    w_variant = w_variant1.
  ENDIF.
ENDFORM.                    " SUB_CHECK_VARIANT
*&      Form  sub_f4_for_variant
  Display List of Variants on pressing F4
FORM sub_f4_for_variant .
Local declaration
  DATA: l_exit(1)              TYPE c.         "ALV exit
This function module for displaying list of Variants on pressing F4
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      is_variant    = w_variant
      i_save        = c_save
    IMPORTING
      e_exit        = l_exit
      es_variant    = w_variant1
    EXCEPTIONS
      not_found     = 1
      program_error = 2.
  IF sy-subrc <> 2 AND l_exit IS INITIAL.
    p_varnt = w_variant1-variant.
  ENDIF.
ENDFORM.                    " sub_f4_for_variant
*&      Form  sub_get_default_variant
This subroutine is used to determine the default ALV Variant and
assign it to the parameter P_VARINT.
FORM sub_get_default_variant .
  w_variant1 = w_variant.
This function module to get the default variant
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
      i_save        = c_save
    CHANGING
      cs_variant    = w_variant1
    EXCEPTIONS
      wrong_input   = 1
      not_found     = 2
      program_error = 3
      OTHERS        = 4.
  IF sy-subrc = 0.
    p_varnt = w_variant1-variant.
  ENDIF.
ENDFORM.                    " sub_get_default_variant
thanks,
Murali

Similar Messages

  • In ALV report doubt

    Hi Expart,
    In ALV report ,what is the work of
    1) REUSE_ALV_VARIANT_DEFAULT_GET function module
    2) SLIS_LAYOUT_ALV
    Regards
    Bhabani

    Hi,
    1.SELECTING THE VARIANTS FOR INITIAL LIST DISPLAY (DEFAULT VARIANT)
    The variants in the list display can be both user-specific and general. The user can programmatically set the initial (default) variant for list display.
    The default variant can be found using the function module 'REUSE_ALV_VARIANT_DEFAULT_GET'.
    Sample code:
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save     = variant save condition ( A=all, U = user-specific )
           CHANGING
                cs_variant = internal table containing the program name (and the default variant---optional )
           EXCEPTIONS
                not_found  = 2.
    2.A layout is build for the report output list description USING the internal table declared above (I_LAYOUT).
    Output list description structure.
         The parameters are described under the following heads:
    •     Display options
    •     Exceptions
    •     Totals
    •     Interaction
    •     Detail screen
    •     Display variants (only for hierarchical-sequential lists)
    •     Color
    •     Other
    The layout table is of type slis_layout_alv_spec and has the following fields:
    Reward,if useful.
    Thanks,
    Chandu

  • When clic in the field "i_ekpo-ebeln" tab exit in report ALV

    Good Afternoon! *********************************************************
    Coloquei all the code, I believe for better clarification. When clico in the field i_ekpo-ebeln in the report is called transaction ME23 c/o GRID this functioning normally, but with the reports List and Hierarquico it does not happen the same and it prints in the baseboard the message "Invalid Function". when standard use buttons, functions of course.
    obs.: I had that to create a SET Pf-status for each type of report pos I wanted that when clicar in the field box and clicar in the button "TO PRINT REPORT" it printed sapscript. How I make to solve such problem?
    Att, Carlos Eduardo.
    REPORT ztreino NO STANDARD PAGE HEADING LINE-SIZE 220.
    ************************declarações*********************
    DATA: BEGIN OF y_ekko OCCURS 0,
            ebeln TYPE ekko-ebeln,  "Nº documento de compra
            bukrs TYPE ekko-bukrs,  "Empresa
            bsart TYPE ekko-bsart,  "Documento de compra
            loekz TYPE ekko-loekz,  "Código de eliminação
            aedat TYPE ekko-aedat,  "Data de criação do registro
            ernam TYPE ekko-ernam,  "Nome do responsável que criou o objeto
            lifnr TYPE ekko-lifnr,  "Nº conta do fornecedor
            ekgrp TYPE ekko-ekgrp,  "Grupo de compradores
            waers TYPE ekko-waers,  "Chave da moeda
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekko,
          BEGIN OF y_ekpo OCCURS 0,
            ebeln TYPE ekpo-ebeln,  "Nº documento de compra
            ebelp TYPE ekpo-ebelp,  "Nº item do documento de compra
            loekz TYPE ekpo-loekz,  "Código de eliminação
            txz01 TYPE ekpo-txz01,  "Texto breve
            matnr TYPE ekpo-matnr,  "Nº material
            bukrs TYPE ekpo-bukrs,  "Empresa
            werks TYPE ekpo-werks,  "Centro
            menge TYPE ekpo-menge,  "Quantidade do pedido
            netpr TYPE ekpo-netpr,  "Preço líquido no documento de compra
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekpo.
    *início seleção de dados
    SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP.
                                    *Nº documento de compra
    SELECT-OPTIONS : s_ebeln FOR ekko-ebeln NO INTERVALS OBLIGATORY,
                     s_bukrs FOR ekko-bukrs OBLIGATORY,  "Empresa
                     s_bsart FOR ekko-bsart.  "Documento de compra
    SELECTION-SCREEN END OF BLOCK bl1.
    SELECTION-SCREEN END OF BLOCK bl2.
    **fim da seleção de dados----
    **início da variante
    SELECTION-SCREEN BEGIN OF BLOCK bl4 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-002.
    PARAMETERS : p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK bl3.
    SELECTION-SCREEN END OF BLOCK bl4.
    ***fim variante -
    ***início modo relatório
    SELECTION-SCREEN BEGIN OF BLOCK bl5 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl6 WITH FRAME TITLE text-003.
    SELECTION-SCREEN SKIP.
      PARAMETERS : rb1 RADIOBUTTON GROUP TIPO DEFAULT 'X',
                   rb2 RADIOBUTTON GROUP TIPO,
                   rb3 RADIOBUTTON GROUP TIPO.
    SELECTION-SCREEN END OF BLOCK bl6.
    SELECTION-SCREEN END OF BLOCK bl5.
    ****fim modo relatório
    *******início da opção de download
    Dados do arquivo texto de saída.
    SELECTION-SCREEN BEGIN OF BLOCK bl9 WITH FRAME TITLE text-004.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-005.
    PARAMETERS: p_gerar  AS CHECKBOX.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-006.
    PARAMETERS: p_dir  LIKE rlgrap-filename DEFAULT 'c:'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-007.
    PARAMETERS: p_arq  LIKE rlgrap-filename DEFAULT 'nota-geral.txt'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK bl9.
    DATA :
          i_ekko  LIKE     y_ekko OCCURS 0 WITH HEADER LINE,
          i_ekpo  LIKE     y_ekpo OCCURS 0 WITH HEADER LINE.
         i_tabsaida LIKE  y_saida OCCURS 0 WITH HEADER LINE.
    *********************Fim Declarações*******************************
    *********************Declarações ALV*******************************
    TYPE-POOLS : slis.
    DATA :
           s_layout    TYPE  slis_layout_alv,
           t_sort      TYPE  slis_t_sortinfo_alv WITH HEADER LINE,
           t_fieldcat  TYPE  slis_t_fieldcat_alv WITH HEADER LINE,
           s_grupos    TYPE  slis_t_sp_group_alv WITH HEADER LINE,
           s_keyinfo   TYPE  slis_keyinfo_alv,
           extab       TYPE  slis_t_extab.
    DATA :
           variant_exit(1) TYPE  c,
           def_variant(1)  TYPE  c,
           s_print      TYPE  slis_print_alv,
           s_top        TYPE  slis_t_listheader,
           variante     TYPE  disvariant,
           def_variante TYPE  disvariant,
           v_repid      LIKE  sy-repid,
    *------pega a data que esta rodando a transação
           v_datasaida(10)  TYPE C,
    *------para saber quantos Pedidos na EKKO
           v_exibe      TYPE I,
           s_selfield type slis_selfield,
           v_ucomm like sy-ucomm.
    **********************Fim declarações ALV*************************
                   Contants para Sapscript e declarações                 *
    TABLES: ITCPO.
    CONSTANTS:  c_on(1)  TYPE  C  VALUE  'X',    "Parâmetro para o Sapscript
                c_off(1) TYPE  C  VALUE  ''.     "Parâmetro para o Sapscript
    Data:
          v_element(15) TYPE C,  "Elemento de texto do Sap Script
          v_type(15)    TYPE C,  "BODY
          v_window(15)  TYPE C,  "Janela
          flag          TYPE I,  "Uma condição para impressão do sapscript
          resp          TYPE C,  "resposta para confirmação do download tab
          zlen          TYPE I,  "Para verificar o um diretório válido
    Para a função WS_DOWNLOAD só em declarar as variaveis deste tipo já *
    seria o bastante para passar o caminho para a função
    TABLES : ekko, ekpo.
                       initialization                                    *
    INITIALIZATION.
      PERFORM zf_verifica_variante.
                   at selection-screen on value-request                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM zf_busca_variante_existente.
                 at seletion-screen                                      *
    AT SELECTION-SCREEN.
      PERFORM zf_valida_variante.
    validar os campo antes de fazer download do arquivo
      PERFORM zf_trata_parametros_gerar_arqu.
                start-of-selection                                       *
    START-OF-SELECTION.
      PERFORM zf_seleciona_dados.
                       Criando ALV                                       *
      PERFORM zf_alv.
    *&      Form  zf_verifica_variante
          text
    -->  Verifica se a variante selecionada é existente
    FORM zf_verifica_variante.
      CLEAR variante.
      v_repid = sy-repid.
      variante-report = v_repid.
    Buscar variante default
      def_variante = variante.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save        = 'A'
           CHANGING
                cs_variant    = def_variante
           EXCEPTIONS
                wrong_input   = 1
                not_found     = 2
                program_error = 3
                OTHERS        = 4.
      IF sy-subrc EQ 0.
        p_vari = def_variante-variant.
      ENDIF.
    ENDFORM.                    " zf_verifica_variante
    *&      Form  zf_busca_variante_existente
    *-       text
    *-  --> Vai buscar a variante existente
    FORM zf_busca_variante_existente.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = variante      " Report com as
                i_save              = 'A'           " Variantes Salvas
                i_tabname_header    = 'I_EKPO'      " Tabela interna saida
                it_default_fieldcat = t_fieldcat[]  " Tabela de formatação
                i_display_via_grid  = 'X'  " Dispara POPUP em ALV
           IMPORTING
                e_exit           = variant_exit  " Se não existir variante X
                es_variant       = def_variante     " Variante default
           EXCEPTIONS
                not_found           = 1
                program_error       = 2
                OTHERS              = 3.
      IF sy-subrc = 2.
          MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF variant_exit = space.
          p_vari = def_variante-variant. " Recebe variante escolhida
        ENDIF.
      ENDIF.
    ENDFORM.                    " zf_busca_variante_existente
    *-&      Form  zf_valida_variante
    *-       text
    *-  -->  Verifica se a variante digitada é válida.
    FORM zf_valida_variante.
      IF NOT p_vari IS INITIAL.
        variante             =     def_variante.    "nome do report
        def_variante-variant =     p_vari.          "nome que foi digitado
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  i_save     = 'A'
             CHANGING
                  cs_variant = def_variante
                  variante   = def_variante.
      ELSE.
        clear variante.
        variante-report = v_repid.
      ENDIF.
    ENDFORM.                    " zf_valida_variante
    -&      Form  zf_seleciona_dados
    *-       text
    -->  Seleciona os dados da ekko e ekpo
    FORM zf_seleciona_dados.
      SELECT ebeln
           bukrs
           bsart
           loekz
           aedat
           ernam
           lifnr
           ekgrp
           waers
            FROM ekko
            INTO TABLE i_ekko
            WHERE
                 ( ebeln IN s_ebeln AND
                   bsart EQ 'NB' ).
    SORT I_EKKO ASCENDING.
      IF sy-subrc EQ 0.
        SELECT ebeln
               ebelp
               loekz
               txz01
               matnr
               bukrs
               werks
               menge
               netpr
                FROM ekpo
                INTO TABLE i_ekpo
                FOR ALL ENTRIES IN i_ekko
                WHERE
                     ( ebeln EQ i_ekko-ebeln ).
      ENDIF.
    SORT I_EKPO ASCENDING.
    Para exibir no topo do relatório no grid
    DESCRIBE TABLE I_EKKO LINES v_exibe.
    ENDFORM.                    " zf_seleciona_dados
    *-&      Form  zf_ALV
    *-       text
    -->  Opções de alv
    FORM zf_alv.
    IF rb1 = 'X'.
              PERFORM zf_gri.
    ENDIF.
    IF rb2 = 'X'.
              PERFORM ZF_HIERARQUICO.
    ENDIF.
    IF rb3  =  'X'.
              PERFORM ZF_LIST.
    ENDIF.
    ENDFORM.                    " zf_ALV
    *&      Form  zf_gri
    *-       text
    *-  -->  Seqüência para gerar o alv grid
    FORM zf_gri.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      PERFORM zf_top  USING  s_top.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    ENDFORM.                    " zf_gri
    *-&      Form  zf_layout
    *-       text
    -->  cria o layout do alv
    FORM zf_layout.
      s_layout-box_tabname          = 'I_EKPO'.
      s_layout-box_fieldname        = 'BOX'.
      s_layout-get_selinfos         =  'X'.
      s_layout-detail_popup         =  'X'.
      s_layout-detail_initial_lines =  'X'.
      s_layout-zebra                =  'X'.
      s_layout-colwidth_optimize    =  'X'.
    ENDFORM.                    " zf_layout
    *-&      Form  zf_ordena_campos
    *-       text
    -->  Ordenação dos campos
    FORM zf_ordena_campos.
      CLEAR t_sort.
      t_sort-spos      =  '1'.          "prioridade de ordenação
      t_sort-fieldname =  'EBELN'.      "campo da tab int. de saida
      t_sort-tabname   =  'I_EKPO'.     "tab inter de saida
      t_sort-up        =  'X'.          "ordenação do maior para o menor
      APPEND t_sort.
    ENDFORM.                    " zf_ordena_campos
    *-&      Form  zf_monta_campos_alv
          text
    -->  è passado os campos de acordo com a ordem de exibição inicial
    FORM zf_monta_campos_alv.
    IF rb2  =  'X'.
      CLEAR t_FIELDCAT.
      t_FIELDCAT-FIELDNAME      =  'BOX'.
      t_FIELDCAT-TABNAME        =  'I_EKKO'.
      t_FIELDCAT-CHECKBOX       =  'X'.
      t_FIELDCAT-INPUT          =  'X'.
      APPEND t_FIELDCAT.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BUKRS'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BUKRS'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BSART'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BSART'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'AEDAT'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'AEDAT'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'ERNAM'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'ERNAM'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'LIFNR'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'LIFNR'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EKGRP'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EKGRP'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
    ENDIF.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-key            =  'X'.
      t_fieldcat-Hotspot        =  'X'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      T_fieldcat-fieldname     = 'EBELP'.
      T_fieldcat-tabname       = 'I_EKPO'.
      T_fieldcat-ref_fieldname = 'EBELP'.
      T_fieldcat-ref_tabname   = 'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MATNR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MATNR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'WERKS'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'WERKS'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MENGE'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MENGE'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'NETPR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'NETPR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-do_sum         =  'X'. "totalizar campo
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'TXZ01'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'TXZ01'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
    ENDFORM.                    " zf_monta_campos_alv
    *-&      Form  zf_top
    *-       text
    *-  --> Cria o texto de cabeçalho do ALV, passando por parametro o
    --> p_S_TOP para s_top
    FORM zf_top USING p_s_top  TYPE slis_t_listheader.
      DATA: ls_line  TYPE  slis_listheader.
      CLEAR  ls_line.
      ls_line-typ  =  'H'.
      ls_line-info  =  'Relatório de Compras por Classificação Contábil'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Parametros Seleção '.
      ls_line-info  = '- Documento de compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Empresa'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Tip.doc.compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Total Pedido'.
      ls_line-info  = v_exibe.
      APPEND ls_line  TO  p_s_top.
    início Formatar a data
      CALL FUNCTION 'DATUMSAUFBEREITUNG'
       EXPORTING
         IDATE                 = SY-DATUM
       IMPORTING
         TDAT8                 = v_datasaida.
    Fim Formatar a data
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Data da execução'.
      ls_line-info  = v_datasaida.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Usuário'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'A'.
      ls_line-info  = sy-uname.
      APPEND ls_line  TO  p_s_top.
    ENDFORM.                    " zf_top
    *-&      Form  zf_print
    *-       text
    *-  -->  Parametros de Impressão para o ALV
    FORM zf_print.
      s_print-no_print_selinfos     =  'N'.
      s_print-no_print_listinfos    =  'N'.
    ENDFORM.                    " zf_print
    *-&      Form  zf_imprime_alv
    *-       text
    *-  -->  Imprime o ALV c/ seu parametros
    FORM zf_imprime_alv.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         I_CALLBACK_PF_STATUS_SET          = 'ZSET_PF_STATUS'
         I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         i_callback_program                = v_repid
         i_callback_top_of_page            = 'TOP_OF_PAGE'
         is_layout                         =  s_layout
         it_fieldcat                       =  t_fieldcat[]
        IT_EXCLUDING                      =
         IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         it_sort                           = t_sort[]
        IT_FILTER                         =
        IS_SEL_HIDE                       =
         i_default                         = 'X'
         i_save                            = 'A'
         is_variant                        = variante
        IT_EVENTS                         =
        IT_EVENT_EXIT                     =
         IS_PRINT                          = S_PRINT
        IS_REPREP_ID                      =
         I_SCREEN_START_COLUMN             = 0
         I_SCREEN_START_LINE               = 0
         I_SCREEN_END_COLUMN               = 0
         I_SCREEN_END_LINE                 = 0
        IT_ALV_GRAPHICS                   =
        IT_ADD_FIELDCAT                   =
        IT_HYPERLINK                      =
        I_HTML_HEIGHT_TOP                 =
        I_HTML_HEIGHT_END                 =
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER           =
        ES_EXIT_CAUSED_BY_USER            =
        TABLES
          t_outtab                          = I_EKPO
       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.                    " zf_imprime_alv
    *-&      Form  zf_top-of-page
    *-       text
    -->  Cabeçalho ALV
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                it_list_commentary       = s_top
                i_logo                   = 'CARLOS_LOGO3'.
      I_END_OF_LIST_GRID       = .
    ENDFORM.                    " zf_top-of-page
    *-&      Form  ZF_HIERARQUICO
    *-       text
    *-  -->  RELATÓRIO HIERÁQUICO
    form ZF_HIERARQUICO.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_hierarquico_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_HIERARQUICO
    *-&      Form  zf_grupo
         text
    -->  Não é fundamental a criação de grupos de campos, mas facilita
    ao usuário na hora de escolher os campos de exibição após o clique do
    botão MODIFICAR LAYOUT . Vários campos da fieldcat podem ser
    definidos para um mesmo grupo de campo.
    form zf_grupo.
    MOVE:'Moeda' TO S_GRUPOS-SP_GROUP,
         'Campos moeda' TO S_GRUPOS-TEXT.
         APPEND S_GRUPOS.
    endform.                    " zf_grupo
    *&      Form  zf_imprime_hierarquico_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_hierarquico_alv.
    Vamos definir as ligações entre as tabelas para as quebras no momento
    da impressão.
      s_keyinfo-header01  =  'EBELN'.
      s_keyinfo-item01    =  'EBELN'.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         I_CALLBACK_PF_STATUS_SET          = 'ZF_SET_PF_STATUS_HIERARQ'
          I_CALLBACK_PROGRAM                = v_repid
          IS_LAYOUT                         = S_LAYOUT
          IT_FIELDCAT                       = T_FIELDCAT[]
          IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         IT_SORT                        =
         IT_FILTER                      =
    -    Parâmetro p/executar sempre com a variante default
          I_DEFAULT                         = 'X'
    -                     Se é possível salvar as variantes
          I_SAVE                            = 'A'
    -                          Nome da variante selecionada
          IS_VARIANT                        = VARIANTE
         IT_EVENTS                      =
         IT_EVENT_EXIT                  =
          i_tabname_header                  = 'I_EKKO'
          i_tabname_item                    = 'I_EKPO'
         I_STRUCTURE_NAME_HEADER        =
         I_STRUCTURE_NAME_ITEM          =
          is_keyinfo                        = S_KEYINFO
          IS_PRINT                          = S_PRINT
         IS_REPREP_ID                   =
         I_BUFFER_ACTIVE                =
         I_BYPASSING_BUFFER             =
      IMPORTING
         E_EXIT_CAUSED_BY_CALLER        =
         ES_EXIT_CAUSED_BY_USER         =
        tables
          t_outtab_header                   = I_EKKO
          t_outtab_item                     = I_EKPO.
    endform.                    " zf_imprime_hierarquico_alv
    *&      Form  ZF_LIST
          text
    -->  p1        text
    <--  p2        text
    form ZF_LIST.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
          PERFORM zf_imprime_list_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_LIST
    *&      Form  zf_imprime_list_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_list_alv.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
          I_CALLBACK_PF_STATUS_SET       = 'ZF_SET_PF_STATUS_LIST'
          I_CALLBACK_USER_COMMAND        = 'ZF_USER_COMMAND'
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
         I_CALLBACK_PROGRAM             = v_repid
         I_STRUCTURE_NAME               = 'I_EKPO'
         IS_LAYOUT                      = S_LAYOUT
         IT_FIELDCAT                    = T_FIELDCAT[]
        IT_EXCLUDING                   =
         IT_SPECIAL_GROUPS              = S_GRUPOS[]
         IT_SORT                        = T_SORT[]
        IT_FILTER                      =
        IS_SEL_HIDE                    =
         I_DEFAULT                      = 'X'
         I_SAVE                         = 'A'
         IS_VARIANT                     = VARIANTE
        IT_EVENTS                      =
        IT_EVENT_EXIT                  =
         IS_PRINT                       = S_PRINT
        IS_REPREP_ID                   =
         I_SCREEN_START_COLUMN          = 0
         I_SCREEN_START_LINE            = 0
         I_SCREEN_END_COLUMN            = 0
         I_SCREEN_END_LINE              = 0
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
        TABLES
          t_outtab                       = I_EKPO.
    endform.                    " zf_imprime_list_alv
    *&      Form  zf_user_command
          text
    -->  p1        text
    <--  p2        text
    form zf_user_command using p_v_ucomm like SY-UCOMM
                               p_s_selfield type slis_selfield.
    *---tratamento de impressão do Sapscript----
    CASE p_v_ucomm.
      FLAG = 0.
         WHEN 'IMPRIMIR' OR 'PRINT'.
             LOOP AT i_ekpo.
                  IF NOT i_ekpo-BOX IS INITIAL.
                    FLAG = FLAG + 1.
                  ENDIF.
            ENDLOOP.
    se tiver selecionado apenas uma box
            IF flag EQ 1.
                IF p_gerar EQ 'X'.
    *-----perform para confirmação de download
                  PERFORM zf_popup_to_confirm.
                ENDIF.
    *------chama o form para imprimir o sapscript
                  PERFORM zf_sapscript.
            ENDIF.
    box estiver vazia
            IF flag EQ 0.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma BOX
                                          "referente ao pedido de compras.
               STOP.
            ENDIF.
    "estiver selecionado + de uma box
            IF flag GT 1.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma
                                         "BOX referente ao pedido de compra.
               STOP.
            ENDIF.
    ENDCASE.
    CASE p_s_selfield-sel_tab_field.
    *observe na exibição do relatório(hierarquico) que temos o EKKO-EBELN
    ficaria  melhor visualmente, a utilização de clicar no mesmo
         WHEN 'I_EKPO-EBELN'. "tab de saida
               SET PARAMETER ID 'BES' FIELD p_s_selfield-VALUE.
               CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
    ENDCASE.
    endform.                    " zf_user_command
    *&      Form  ZSET_PF_STATUS
          text
         -->P_EXTAB  text
    form ZSET_PF_STATUS using    p_extab.
      set pf-status 'BOTOES' EXCLUDING extab.
    endform.                    " ZSET_PF_STATUS
    *&      Form  zf_sapscript
          text
    -->  p1        text
    <--  p2        text
    form zf_sapscript.
    --carregar a ITCPO----
      PERFORM zf_itcpo.
    ----chamar a função Open_form
      PERFORM zf_open_form.
    *----buscar o fornecedor e seus dados
    LOOP AT I_ekko.
            v_element  =  'CABPRIN'.
            v_type     =  'BODY'.
            v_window   =  'JANCABEC'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    ENDLOOP.
    *----buscar o documento de compra selecionado
    LOOP AT i_ekpo.
        IF i_ekpo-BOX = 'X'.
            v_element  =  'MAIN'.
            v_type     =  'BODY'.
            v_window   =  'MAIN'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    *---o comando EXIT é para que somente quando 1 registro for selecionado
    no relatório e a verificação da igualdade acontecer faz que saia do
    Loop
        EXIT.
        ENDIF.
    ENDLOOP.
      PERFORM zf_close_form.
    endform.                    " zf_sapscript
    *&      Form  zf_itcpo
          text
    -->  p1        text
    <--  p2        text
    form zf_itcpo.
    *Parâmetros para impressão da tabela ITCPO
    ITCPO-TDCOPIES   = 1.           "Quantidade de cópias
    ITCPO-TDPAGESLCT = ''.          "Seleção de páginas
    ITCPO-TDPROGRAM  = SY-REPID.    "Captura o nome do programa
    ITCPO-TDIMMED    = c_on.        "Saída imediata do relatório
    ITCPO-TDPREVIEW  = c_on.        "Exibição prévia do relatório
    ITCPO-TDDEST     = 'LOCL'.      "SPOOL: dispositivo de saída
    ITCPO-TDFAXUSER  = SY-UNAME.    "Usuário logado naquele momento
    ITCPO-TDSENDDATE = SY-DATUM.    "Data de envio desejada
    ITCPO-TDSENDTIME = SY-UZEIT.    "Hora envio desejada
    ITCPO-TDNEWID    = c_on.        "Nova ordem SPOOL
    ITCPO-TDARMOD    = c_on.       "IMPRIMIR: modo de arquivamento
    ITCPO-TDTITLE    = 'Relatório de Compras por Classificação Contábil'.
    endform.                    " zf_itcpo
    *&      Form  zf_open_form

    Boa Tarde Carlos,
    Welcome to the SDN Forums. SDN gets it's power from the large community throughout the world. To harvest that power of knowledge we have settled on one language for posts here which is English.
    Clearly English is not your first language, but don't be afraid, I would vouch that for most of the participant here on SDN English is the second language.
    As it is for me. I am just lucky, that I am living in the States long enough that German colleagues start to look at me strangely when I talk to them in German, because it doesn't totally sound right anymore
    So we are very forgiving her in SDNland regarding grammar and spelling (although not as much anymore in the Weblogs), we even provide a spell checker.
    Please post your question again in English.
    If people don't understand you they will ask you about the things that they don't understand and you can then clarify.
    Try it out. Your chance of an excellent responds is way higher.
    Boa sorte, Mark.

  • List of materials inventory - using ALV

    REPORT Z_LIST_MATERIALS.
    TYPE-POOLS: SLIS.
    TABLES:MARC, MARD, VBAP, LIPS, EKPO, VBFA, EKBE, MARM, VBBE, MARA, MBEW.
    SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_WERKS FOR MARC-WERKS, " Plant
                    S_MATNR FOR MARC-MATNR, " Material
                    S_MTART FOR MARA-MTART. " Material Type
    SELECTION-SCREEN END OF BLOCK SEL.
    PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT. " ALV Variant
    CONSTANTS: FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
    DATA: BEGIN OF INV OCCURS 100,
            WERKS LIKE MARD-WERKS, " Plant
            MATNR LIKE MARD-MATNR, " Material
            MTART LIKE MARA-MTART, " Material Type
            STPRS LIKE MBEW-STPRS, " Standard Price
            AVAIL LIKE MARD-LABST, " Available
            LABST LIKE MARD-LABST, " Unrestricted use
            INSME LIKE MARD-INSME, " Quality Inspection
            RETME LIKE MARD-RETME, " Returns
            TRANS LIKE MARC-UMLMC, " Stock in transit (calculated)
            UMLMC LIKE MARC-UMLMC, " Stock Transfer (plant)
            UMLME LIKE MARD-UMLME, " Transfer (SLoc)
            WESBS LIKE EKBE-WESBS, " GR Blocked Stock
            TRAME LIKE MARC-TRAME, " Stock in transit
            SPEME LIKE MARD-SPEME, " Blocked
            KWMENG LIKE VBAP-KWMENG, " Sales orders
            LFIMG LIKE LIPS-LFIMG, " Scheduled for Delivery
            MENGE LIKE EKPO-MENGE, " Open Purch. Orders
            VALUE LIKE MBEW-SALK3, " Stock Value (Calculated)
            MEINS LIKE MARA-MEINS, " Unit of measure
          END OF INV.
    DATA: FIELDTAB TYPE SLIS_T_FIELDCAT_ALV,
          HEADING  TYPE SLIS_T_LISTHEADER,
          LAYOUT   TYPE SLIS_LAYOUT_ALV,
          EVENTS   TYPE SLIS_T_EVENT,
          REPNAME  LIKE SY-REPID,
          F2CODE   LIKE SY-UCOMM VALUE  '&ETA',
          G_SAVE(1) TYPE C,
          G_EXIT(1) TYPE C,
          G_VARIANT LIKE DISVARIANT,
          GX_VARIANT LIKE DISVARIANT.
    INITIALIZATION.
      REPNAME = SY-REPID.
      PERFORM INITIALIZE_FIELDCAT USING FIELDTAB[].
      PERFORM BUILD_EVENTTAB USING EVENTS[].
      PERFORM BUILD_COMMENT USING HEADING[].
      PERFORM INITIALIZE_VARIANT.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
      PERFORM F4_FOR_VARIANT.
    AT SELECTION-SCREEN.
      PERFORM PAI_OF_SELECTION_SCREEN.
    START-OF-SELECTION.
      PERFORM GET_MARD.
      PERFORM GET_UNIT_OF_MEASURE.
      PERFORM GET_MARC.
      PERFORM GET_EKPO.
      PERFORM GET_LIPS.
      PERFORM GET_VBAP.
      PERFORM GET_OPEN.
      PERFORM GET_PRICE.
    END-OF-SELECTION.
      PERFORM BUILD_LAYOUT USING LAYOUT.
      PERFORM WRITE_OUTPUT.
    *&      Form  INITIALIZE_FIELDCAT
          text
         -->P_FIELDTAB[]  text                                           *
    FORM INITIALIZE_FIELDCAT USING P_FIELDTAB TYPE SLIS_T_FIELDCAT_ALV.
      DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    fixed columns (obligatory)
      CLEAR L_FIELDCAT.
      L_FIELDCAT-TABNAME    = 'INV'.
      L_FIELDCAT-FIX_COLUMN = 'X'.
      L_FIELDCAT-NO_OUT     = 'O'.
      L_FIELDCAT-FIELDNAME  = 'WERKS'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME  = 'MATNR'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
    totalized columns
      CLEAR L_FIELDCAT.
      L_FIELDCAT-TABNAME   = 'INV'.
      L_FIELDCAT-SP_GROUP  = 'A'.
      L_FIELDCAT-DO_SUM    = 'X'.
      L_FIELDCAT-FIELDNAME = 'LABST'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'INSME'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'RETME'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'UMLME'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'WESBS'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'SPEME'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
    columns with different description
      L_FIELDCAT-FIELDNAME = 'KWMENG'.
      L_FIELDCAT-SELTEXT_M = 'Sales Orders'.
      L_FIELDCAT-SELTEXT_S = 'Sales Or'.
      L_FIELDCAT-SELTEXT_L = 'Sales Orders Qty'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'LFIMG'.
      L_FIELDCAT-SELTEXT_M = 'Sched. Delivery'.
      L_FIELDCAT-SELTEXT_S = 'Schd. Del'.
      L_FIELDCAT-SELTEXT_L = 'Scheduled for Delivery'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'TRANS'.
      L_FIELDCAT-SELTEXT_M = 'Stk. in transit'.
      L_FIELDCAT-SELTEXT_S = 'Stk. trns'.
      L_FIELDCAT-SELTEXT_L = 'Stock in transit (sum)'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'AVAIL'.
      L_FIELDCAT-SELTEXT_M = 'Available'.
      L_FIELDCAT-SELTEXT_S = 'Avail.'.
      L_FIELDCAT-SELTEXT_L = 'Stock Available'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'MENGE'.
      L_FIELDCAT-SELTEXT_M = 'Open Orders'.
      L_FIELDCAT-SELTEXT_S = 'Open Ord'.
      L_FIELDCAT-SELTEXT_L = 'Open Purchase Orders'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
    columns not displayed
      CLEAR L_FIELDCAT.
      L_FIELDCAT-TABNAME   = 'INV'.
      L_FIELDCAT-SP_GROUP  = 'A'.
      L_FIELDCAT-NO_OUT    = 'X'.
      L_FIELDCAT-FIELDNAME = 'MEINS'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'UMLMC'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'TRAME'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'STPRS'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
      L_FIELDCAT-FIELDNAME = 'VALUE'.
      APPEND L_FIELDCAT TO P_FIELDTAB.
    ENDFORM.                               " INITIALIZE_FIELDCAT
    *&      Form  BUILD_EVENTTAB
          text
         -->P_EVENTS[]  text                                             *
    FORM BUILD_EVENTTAB USING P_EVENTS TYPE SLIS_T_EVENT.
      DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                I_LIST_TYPE = 0
           IMPORTING
                ET_EVENTS   = P_EVENTS.
      READ TABLE P_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                               INTO LS_EVENT.
      IF SY-SUBRC = 0.
        MOVE FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
        APPEND LS_EVENT TO P_EVENTS.
      ENDIF.
    ENDFORM.                               " BUILD_EVENTTAB
    *&      Form  BUILD_COMMENT
          text
         -->P_HEADING[]  text                                            *
    FORM BUILD_COMMENT USING P_HEADING TYPE SLIS_T_LISTHEADER.
      DATA: HLINE TYPE SLIS_LISTHEADER,
            TEXT(60) TYPE C,
            SEP(20) TYPE C.
      CLEAR: HLINE, TEXT.
      HLINE-TYP  = 'H'.
      WRITE: TEXT-101 TO TEXT+23.
      HLINE-INFO = TEXT.
      APPEND HLINE TO P_HEADING.
      CLEAR TEXT.
      WRITE: 'User: ' TO TEXT,
             SY-UNAME TO TEXT+6,
             'Date: ' TO TEXT+25,
             SY-DATUM TO TEXT+31,
             'Page: ' TO TEXT+50,
             SY-PAGNO TO TEXT+56.
      HLINE-INFO = TEXT.
      APPEND HLINE TO P_HEADING.
    ENDFORM.                    " BUILD_COMMENT
          FORM TOP_OF_PAGE                                              *
    FORM TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                IT_LIST_COMMENTARY = HEADING.
    ENDFORM.
    *&      Form  INITIALIZE_VARIANT
          text
    FORM INITIALIZE_VARIANT.
      G_SAVE = 'A'.
      CLEAR G_VARIANT.
      G_VARIANT-REPORT = REPNAME.
      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.
    ENDFORM.                               " INITIALIZE_VARIANT
    *&      Form  F4_FOR_VARIANT
          text
    FORM F4_FOR_VARIANT.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                IS_VARIANT = G_VARIANT
                I_SAVE     = G_SAVE
           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.
    ENDFORM.                               " F4_FOR_VARIANT
    *&      Form  PAI_OF_SELECTION_SCREEN
          text
    FORM PAI_OF_SELECTION_SCREEN.
      IF NOT P_VARI IS INITIAL.
        MOVE G_VARIANT TO GX_VARIANT.
        MOVE P_VARI TO GX_VARIANT-VARIANT.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  I_SAVE     = G_SAVE
             CHANGING
                  CS_VARIANT = GX_VARIANT.
        G_VARIANT = GX_VARIANT.
      ELSE.
        PERFORM INITIALIZE_VARIANT.
      ENDIF.
    ENDFORM.                               " PAI_OF_SELECTION_SCREEN
    *&      Form  GET_MARD
          text
    FORM GET_MARD.
      SELECT MATNR WERKS LABST INSME RETME UMLME SPEME
             FROM MARD
             INTO CORRESPONDING FIELDS OF INV
             WHERE MATNR IN S_MATNR
             AND   WERKS IN S_WERKS.
        COLLECT INV.
      ENDSELECT.
      PERFORM FILTER_BY_MATERIAL_TYPE.
    ENDFORM.                               " GET_MARD
    *&      Form  FILTER_BY_MATERIAL_TYPE
          text
    FORM FILTER_BY_MATERIAL_TYPE.
      LOOP AT INV.
        CLEAR INV-MTART.
        SELECT SINGLE MTART
               INTO INV-MTART
               FROM MARA
               WHERE MATNR EQ INV-MATNR
               AND   MTART IN S_MTART.
        IF SY-SUBRC EQ 0.
          MODIFY INV.
        ELSE.
          DELETE INV.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " FILTER_BY_MATERIAL_TYPE
    *&      Form  GET_MARC
          text
    FORM GET_MARC.
      LOOP AT INV.
        SELECT SINGLE UMLMC TRAME
               FROM MARC
               INTO CORRESPONDING FIELDS OF INV
               WHERE MATNR EQ INV-MATNR
               AND   WERKS EQ INV-WERKS.
        IF SY-SUBRC EQ 0.
          INV-TRANS = INV-UMLMC + INV-TRAME.
          MODIFY INV.
        ENDIF.
      ENDLOOP.
    ENDFORM.                               " GET_MARC
    *&      Form  GET_EKPO
          text
    FORM GET_EKPO.
      DATA: WESBS LIKE INV-WESBS,
            SHKZG LIKE EKBE-SHKZG,
            MEINS LIKE EKPO-MEINS,
            LMEIN LIKE EKPO-LMEIN.
      LOOP AT INV.
        CLEAR: WESBS, SHKZG, MEINS, LMEIN.
        SELECT YWESBS YSHKZG XMEINS XLMEIN
               INTO (WESBS, SHKZG, MEINS, LMEIN)
               FROM EKPO AS X JOIN EKBE AS Y
               ON   XEBELN = YEBELN
               AND  XEBELP = YEBELP
               WHERE X~MATNR EQ INV-MATNR
               AND   X~WERKS EQ INV-WERKS
               AND   X~LOEKZ NE 'L'.
          IF SHKZG EQ 'H'.
            MULTIPLY WESBS BY -1.
          ENDIF.
          IF MEINS NE LMEIN.
            PERFORM CONVERT_UNIT_OF_MEASURE CHANGING INV-MATNR MEINS WESBS.
          ENDIF.
          ADD WESBS TO INV-WESBS.
        ENDSELECT.
        MODIFY INV.
      ENDLOOP.
    ENDFORM.                               " GET_EKPO
    *&      Form  GET_LIPS
          text
    FORM GET_LIPS.
      DATA: LFIMG LIKE INV-LFIMG.
      LOOP AT INV.
        CLEAR: LFIMG, INV-LFIMG.
        SELECT OMENG
               INTO LFIMG
               FROM VBBE
               WHERE MATNR EQ INV-MATNR
               AND   WERKS EQ INV-WERKS
               AND   VBTYP EQ 'J'.
          ADD LFIMG TO INV-LFIMG.
        ENDSELECT.
        MODIFY INV.
      ENDLOOP.
    ENDFORM.                               " GET_LIPS
    *&      Form  GET_VBAP
          text
    FORM GET_VBAP.
      DATA: KWMENG LIKE INV-KWMENG.
      LOOP AT INV.
        CLEAR: KWMENG, INV-KWMENG.
        SELECT OMENG
               INTO KWMENG
               FROM VBBE
               WHERE MATNR EQ INV-MATNR
               AND   WERKS EQ INV-WERKS
               AND   VBTYP EQ 'C'.
          ADD KWMENG TO INV-KWMENG.
        ENDSELECT.
        INV-AVAIL = INV-LABST - INV-INSME - INV-KWMENG - INV-LFIMG.
        MODIFY INV.
      ENDLOOP.
    ENDFORM.                               " GET_VBAP
    *&      Form  GET_UNIT_OF_MEASURE
          text
    -->  p1        text
    <--  p2        text
    FORM GET_UNIT_OF_MEASURE.
      LOOP AT INV.
        SELECT SINGLE MEINS
               FROM MARA
               INTO INV-MEINS
               WHERE MATNR EQ INV-MATNR.
        MODIFY INV.
      ENDLOOP.
    ENDFORM.                               " GET_UNIT_OF_MEASURE
    *&      Form  GET_OPEN
          text
    FORM GET_OPEN.
      DATA: BEGIN OF XTAB OCCURS 10,       " Open orders table
               WERKS LIKE EKPO-WERKS,
               LGORT LIKE EKPO-LGORT,
               MATNR LIKE EKPO-MATNR,
               MENGE LIKE EKPO-MENGE,
               MENGK LIKE EKPO-MENGE,
             END OF XTAB.
      RANGES: L_WERKS FOR MARD-WERKS.
      LOOP AT INV.
        REFRESH XTAB.
        CLEAR: XTAB, L_WERKS.
        MOVE INV-WERKS TO L_WERKS-LOW.
        CALL FUNCTION 'MB_ADD_PURCHASE_ORDER_QUANTITY'
             EXPORTING
                  X_MATNR = INV-MATNR
                  X_MEINS = INV-MEINS
                  X_ELIKZ = SPACE
                  X_LOEKZ = SPACE
             TABLES
                  XTAB    = XTAB
                  XWERKS  = L_WERKS.
        MOVE XTAB-MENGE TO INV-MENGE.
        MODIFY INV.
      ENDLOOP.
    ENDFORM.                               " GET_OPEN
    *&      Form  GET_PRICE
          text
    FORM GET_PRICE.
      LOOP AT INV.
        SELECT SINGLE STPRS
               FROM MBEW
               INTO INV-STPRS
               WHERE MATNR EQ INV-MATNR
               AND   BWKEY EQ INV-WERKS
               AND   BWTAR EQ SPACE.
          IF SY-SUBRC EQ 0.
            INV-VALUE = INV-STPRS *
                      ( INV-LABST + INV-INSME + INV-TRANS + INV-SPEME ).
            MODIFY INV.
          ENDIF.
      ENDLOOP.
    ENDFORM.                    " GET_PRICE
          FORM CONVERT_UNIT_OF_MEASURE                                  *
          text                                                          *
    -->  P_MATNR                                                       *
    -->  P_VRKME                                                       *
    -->  P_QUANT                                                       *
    FORM CONVERT_UNIT_OF_MEASURE USING P_MATNR P_VRKME P_QUANT.
      DATA: UMREZ LIKE MARM-UMREZ,
            UMREN LIKE MARM-UMREN.
      SELECT SINGLE UMREZ UMREN
             INTO (UMREZ, UMREN)
             FROM MARM
             WHERE MATNR EQ P_MATNR
             AND   MEINH EQ P_VRKME.
      IF SY-SUBRC EQ 0.
        COMPUTE P_QUANT = ( P_QUANT * UMREZ ) / UMREN.
      ENDIF.
    ENDFORM.
    *&      Form  BUILD_LAYOUT
          text
         -->P_LAYOUT  text                                               *
    FORM BUILD_LAYOUT USING P_LAYOUT TYPE SLIS_LAYOUT_ALV.
      P_LAYOUT-F2CODE       = F2CODE.
      P_LAYOUT-ZEBRA        = 'X'.
      P_LAYOUT-DETAIL_POPUP = 'X'.
    ENDFORM.                               " BUILD_LAYOUT
    *&      Form  WRITE_OUTPUT
          text
    FORM WRITE_OUTPUT.
      SORT INV BY WERKS MATNR.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
           EXPORTING
                I_PROGRAM_NAME     = REPNAME
                I_INTERNAL_TABNAME = 'INV'
                I_INCLNAME         = REPNAME
           CHANGING
                CT_FIELDCAT        = FIELDTAB.
      IF SY-SUBRC <> 0.
        WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_FIELDCATALOG_MERGE'.
      ENDIF.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
           EXPORTING
                I_CALLBACK_PROGRAM = REPNAME
                I_STRUCTURE_NAME   = 'INV'
                IS_LAYOUT          = LAYOUT
                IT_FIELDCAT        = FIELDTAB
                I_DEFAULT          = 'A'
                I_SAVE             = G_SAVE
                IS_VARIANT         = G_VARIANT
                IT_EVENTS          = EVENTS[]
           TABLES
                T_OUTTAB           = INV.
      IF SY-SUBRC <> 0.
        WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_LIST_DISPLAY'.
      ENDIF.
    ENDFORM.                               " WRITE_OUTPUT
    by: akshat

    Hi ,
    User transaction MC.9 it will show inventory , value etc  as per yor requirement.
    Regards
    Hari

  • Why This Report Not Working in Production Server But in Development Server

    I just need your help in solving one issue. There is one report which is working fine in development server but it is not getting executed in production server.
    Although the code is same in both the server. Could you please guide me in locating the problem. I am attaching that report with this mail. Please do the needful help.
    TABLES : a363,
             mara,
             marc,
             makt,
             ekko,
             ekpo,
             mkpf,
             mseg,
             konp,
             konh.
    SELECTION-SCREEN
    SELECTION-SCREEN   :   BEGIN OF BLOCK cst WITH FRAME TITLE text-001.
    SELECT-OPTIONS :   s_matnr FOR mara-matnr,                            "Material Number
                       s_lifnr FOR ekko-lifnr,                            "Account Number of the Vendor
                       s_bedat FOR ekko-bedat,                            "Purchasing Document Date
                       s_kschl FOR konh-kschl OBLIGATORY NO INTERVALS,    "Condition type
                       s_bwart FOR mseg-bwart OBLIGATORY NO INTERVALS.    "Movement Type (Inventory Management)
    PARAMETERS     :   p_werks LIKE marc-werks OBLIGATORY.                "Plant
    SELECTION-SCREEN   :   END OF BLOCK cst.
    INCLUDES
    INCLUDE zalv_data.
    DATA - INTERNAL TABLES AND FIELD LISTS
    DATA :  BEGIN    OF     a363_itab  OCCURS 0,
            matnr    LIKE   a363-matnr,                    "Material Number
            lifnr    LIKE   a363-lifnr,                    "Account Number of the Vendor
            werks    LIKE   a363-werks,                    "Plant
            kschl    LIKE   a363-kschl,                    "Condition type
            knumh    LIKE   a363-knumh,                    "Condition record number
            kbetr    LIKE   konp-kbetr,                    "Rate (condition amount or percentage) where no scale exists
            END      OF     a363_itab.
    DATA :  BEGIN    OF     konp_itab  OCCURS 0,
            knumh    LIKE   a363-knumh,                    "Condition record number
            kbetr    LIKE   konp-kbetr,                    "Rate (condition amount or percentage) where no scale exists
            lifnr    LIKE   a363-lifnr,                    "Account Number of the Vendor
            END      OF     konp_itab.
    DATA :  BEGIN    OF     ekko_itab  OCCURS 0,
            ebeln    LIKE   ekko-ebeln,                    "Purchasing Document Number
            lifnr    LIKE   ekko-lifnr,                    "Account Number of the Vendor
            bedat    LIKE   ekko-bedat,                    "Purchasing Document Date
            END      OF     ekko_itab.
    DATA :  BEGIN    OF     ekpo_itab  OCCURS 0,
            ebeln    LIKE   ekpo-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   ekpo-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   ekpo-matnr,                    "Material Number
            werks    LIKE   ekpo-werks,                    "Plant
            menge    LIKE   ekpo-menge,                    "Purchase order quantity
            END      OF     ekpo_itab.
    DATA :  BEGIN    OF     v_po_det  OCCURS 0,            "VENDOR + PLANT + PO DEATILS
            lifnr    LIKE   ekko-lifnr,                    "Account Number of the Vendor
            ebeln    LIKE   ekko-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   ekpo-ebelp,                    "Item Number of Purchasing Document
            bedat    LIKE   ekko-bedat,                    "Purchasing Document Date
            matnr    LIKE   ekpo-matnr,                    "Material Number
            werks    LIKE   ekpo-werks,                    "Plant
            menge    LIKE   ekpo-menge,                    "Purchase order quantity
            kbetr    LIKE   konp-kbetr,                    "Rate (condition amount or percentage) where no scale exists
            END      OF     v_po_det.
    DATA :  BEGIN    OF     mseg_itab  OCCURS 0,
            mblnr    LIKE   mseg-mblnr,                    "Number of Material Document
            ebeln    LIKE   mseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   mseg-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   mseg-matnr,                    "Material Number
            lifnr    LIKE   mseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   mseg-werks,                    "Plant
            menge    LIKE   mseg-menge,                    "Quantity
            dmbtr    LIKE   mseg-dmbtr,                    "Amount in local currency
            bwart    LIKE   mseg-bwart,                    "Movement Type (Inventory Management)
            END      OF     mseg_itab.
    DATA :  BEGIN    OF     mkpf_itab  OCCURS 0,
            mblnr    LIKE   mkpf-mblnr,                    "Number of Material Document
            bldat    LIKE   mkpf-bldat,                    "Document Date in Document
            END      OF     mkpf_itab.
    DATA :  BEGIN    OF     zeou_pcrdtl_itab  OCCURS 0,
            matnr    LIKE   zeou_pcrdtl-matnr,             "Material Number
            lifnr    LIKE   zeou_pcrdtl-lifnr,             "Account Number of the Vendor
            mblnr    LIKE   zeou_pcrdtl-mblnr,             "Number of Material Document
            whssn    LIKE   zeou_pcrdtl-whssn,             "Warehouse Records Entry Serial No.
            whsdt    LIKE   zeou_pcrdtl-whsdt,             "Warehouse Records Entry date
            END      OF     zeou_pcrdtl_itab.
    DATA :  BEGIN    OF     gr_wh_info  OCCURS 0,          "INFO OF GR & WH BASED ON MVMT TYPE & PO
            mblnr    LIKE   mseg-mblnr,                    "Number of Material Document
            bldat    LIKE   mkpf-bldat,                    "Document Date in Document
            ebeln    LIKE   mseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   ekpo-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   mseg-matnr,                    "Material Number
            lifnr    LIKE   mseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   mseg-werks,                    "Plant
            menge    LIKE   mseg-menge,                    "Quantity
            dmbtr    LIKE   mseg-dmbtr,                    "Amount in local currency
            bwart    LIKE   mseg-bwart,                    "Movement Type (Inventory Management)
            whssn    LIKE   zeou_pcrdtl-whssn,             "Warehouse Records Entry Serial No.
            whsdt    LIKE   zeou_pcrdtl-whsdt,             "Warehouse Records Entry date
            END      OF     gr_wh_info.
    DATA :  BEGIN    OF     bseg_itab  OCCURS 0,
            ebeln    LIKE   bseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   bseg-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   bseg-matnr,                    "Material Number
            lifnr    LIKE   bseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   bseg-werks,                    "Plant
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            wrbtr    LIKE   bseg-wrbtr,                    "Amount in document currency
            bukrs    LIKE   bseg-bukrs,                    "Company Code
            belnr    LIKE   bseg-belnr,                    "Accounting Document Number
            gjahr    LIKE   bseg-gjahr,                    "Fiscal Year
            END      OF     bseg_itab.
    DATA :  BEGIN    OF     bkpf_itab  OCCURS 0,
            bukrs    LIKE   bkpf-bukrs,                    "Company Code
            belnr    LIKE   bkpf-belnr,                    "Accounting Document Number
            gjahr    LIKE   bkpf-gjahr,                    "Fiscal Year
            xblnr    LIKE   bkpf-xblnr,                    "Reference Document Number
            bldat    LIKE   bkpf-bldat,                    "Document Date in Document
            END      OF     bkpf_itab.
    DATA :  BEGIN    OF     vend_inv  OCCURS 0,            "VENDOR INVOICE DETAILS
            ebeln    LIKE   bseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   bseg-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   bseg-matnr,                    "Material Number
            lifnr    LIKE   bseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   bseg-werks,                    "Plant
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            wrbtr    LIKE   bseg-wrbtr,                    "Amount in document currency
            bukrs    LIKE   bseg-bukrs,                    "Company Code
            belnr    LIKE   bseg-belnr,                    "Accounting Document Number
            gjahr    LIKE   bseg-gjahr,                    "Fiscal Year
            xblnr    LIKE   bkpf-xblnr,                    "Reference Document Number
            bldat    LIKE   bkpf-bldat,                    "Document Date in Document
            END      OF     vend_inv.
    DATA :  BEGIN    OF     chckinit  OCCURS 0,            "CHEQUE INIT INFO
            ebeln    LIKE   bseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   bseg-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   bseg-matnr,                    "Material Number
            lifnr    LIKE   bseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   bseg-werks,                    "Plant
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            bukrs    LIKE   bkpf-bukrs,                    "Company Code
            belnr    LIKE   bkpf-belnr,                    "Accounting Document Number
            gjahr    LIKE   bkpf-gjahr,                    "Fiscal Year
            koart    LIKE   bseg-koart,                    "Account type
            augbl    LIKE   bseg-augbl,                    "Document Number of the Clearing Document
            END      OF     chckinit.
    DATA :  BEGIN    OF     chckpayer  OCCURS 0,           "CHEQUE BANK DETAILS
            vblnr    LIKE   payr-vblnr,                    "Document Number of the Payment Document
            zbukr    LIKE   payr-zbukr,                    "Paying company code
            gjahr    LIKE   payr-gjahr,                    "Fiscal Year
            chect    LIKE   payr-chect,                    "Check Number
            zaldt    LIKE   payr-zaldt,                    "Probable Payment Date (Cash Discount 1 Due)
            hbkid    LIKE   payr-hbkid,                    "Short key for a house bank
            END      OF     chckpayer.
    DATA :  chckpayer_u LIKE chckpayer OCCURS 0 WITH HEADER LINE.      "UNIQUE CHEQUE DETAILS
    DATA :  BEGIN    OF     chckfinal  OCCURS 0,           "CHEQUE FINAL INFO
            ebeln    LIKE   bseg-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   bseg-ebelp,                    "Item Number of Purchasing Document
            matnr    LIKE   bseg-matnr,                    "Material Number
            lifnr    LIKE   bseg-lifnr,                    "Account Number of the Vendor
            werks    LIKE   bseg-werks,                    "Plant
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            bukrs    LIKE   bkpf-bukrs,                    "Company Code
            belnr    LIKE   bkpf-belnr,                    "Accounting Document Number
            gjahr    LIKE   bkpf-gjahr,                    "Fiscal Year
            koart    LIKE   bseg-koart,                    "Account type
            augbl    LIKE   bseg-augbl,                    "Document Number of the Clearing Document
            vblnr    LIKE   payr-vblnr,                    "Document Number of the Payment Document
            zbukr    LIKE   payr-zbukr,                    "Paying company code
            chect    LIKE   payr-chect,                    "Check Number
            zaldt    LIKE   payr-zaldt,                    "Probable Payment Date (Cash Discount 1 Due)
            hbkid    LIKE   payr-hbkid,                    "Short key for a house bank
            END      OF     chckfinal.
    DATA :  BEGIN    OF     mat_desc OCCURS 0,
            matnr    LIKE   mara-matnr,
            maktx    LIKE   makt-maktx,
            END      OF     mat_desc.
    DATA :  BEGIN      OF     vend_det OCCURS 0,
            lifnr      LIKE   lfa1-lifnr,
            name1      LIKE   lfa1-name1,
            j_1icstno  LIKE   j_1imovend-j_1icstno,
            END        OF     vend_det.
    DATA :  BEGIN    OF     cst_rep  OCCURS 0,             "FINAL CST REPORT
            lifnr    LIKE   a363-lifnr,                    "Account Number of the Vendor
            name1    LIKE   lfa1-name1,                    "Vendor Name
            j_1icstno  LIKE   j_1imovend-j_1icstno,        " Vendor CST No.
            werks    LIKE   a363-werks,                    "Plant
           kschl    LIKE   a363-kschl,                    "Condition type
            ebeln    LIKE   ekko-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   ekpo-ebelp,                    "Item Number of Purchasing Document
            bedat    LIKE   ekko-bedat,                    "Purchasing Document Date
            matnr    LIKE   ekpo-matnr,                    "Material Number
            maktx    LIKE   makt-maktx,                    "Material Description.
            kbetr    LIKE   konp-kbetr,                    "Rate (condition amount or percentage) where no scale exists
            mblnr    LIKE   mseg-mblnr,                    "Number of Material Document
            bldat    LIKE   mkpf-bldat,                    "Document Date in Document
            menge    LIKE   mseg-menge,                    "Quantity
            dmbtr    LIKE   mseg-dmbtr,                    "Amount in local currency
            cst_dmbtr LIKE  mseg-dmbtr,                    "CST Amount in local currency
            bwart    LIKE   mseg-bwart,                    "Movement Type (Inventory Management)
            whssn    LIKE   zeou_pcrdtl-whssn,             "Warehouse Records Entry Serial No.
            whsdt    LIKE   zeou_pcrdtl-whsdt,             "Warehouse Records Entry date
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            wrbtr    LIKE   bseg-wrbtr,                    "Amount in document currency
            cst_wrbtr LIKE  bseg-wrbtr,                    "CST Amount in document currency
            belnr    LIKE   bseg-belnr,                    "Accounting Document Number
            gjahr    LIKE   bseg-gjahr,                    "Fiscal Year
            xblnr    LIKE   bkpf-xblnr,                    "Reference Document Number
            koart    LIKE   bseg-koart,                    "Account type
            augbl    LIKE   bseg-augbl,                    "Document Number of the Clearing Document
            vblnr    LIKE   payr-vblnr,                    "Document Number of the Payment Document
            zbukr    LIKE   payr-zbukr,                    "Paying company code
            chect    LIKE   payr-chect,                    "Check Number
            zaldt    LIKE   payr-zaldt,                    "Probable Payment Date (Cash Discount 1 Due)
            hbkid    LIKE   payr-hbkid,                    "Short key for a house bank
            END      OF     cst_rep.
    DATA :  BEGIN    OF     gt_output  OCCURS 0,              "ALV OUTPUT
            slno     LIKE   sy-tabix,                      "Serial Number
            lifnr    LIKE   a363-lifnr,                    "Account Number of the Vendor
            name1    LIKE   lfa1-name1,                    "Vendor Name
            j_1icstno  LIKE   j_1imovend-j_1icstno,        " Vendor CST No.
            werks    LIKE   a363-werks,                    "Plant
           kschl    LIKE   a363-kschl,                    "Condition type
            ebeln    LIKE   ekko-ebeln,                    "Purchasing Document Number
            ebelp    LIKE   ekpo-ebelp,                    "Item Number of Purchasing Document
            bedat    LIKE   ekko-bedat,                    "Purchasing Document Date
            matnr    LIKE   ekpo-matnr,                    "Material Number
            maktx    LIKE   makt-maktx,                    "Material Description
            mblnr    LIKE   mseg-mblnr,                    "Number of Material Document
            bldat    LIKE   mkpf-bldat,                    "Document Date in Document
            menge    LIKE   mseg-menge,                    "Quantity
            dmbtr    LIKE   mseg-dmbtr,                    "Amount in local currency
            cst_dmbtr LIKE  mseg-dmbtr,                    "CST Amount in local currency
            bwart    LIKE   mseg-bwart,                    "Movement Type (Inventory Management)
            whssn    LIKE   zeou_pcrdtl-whssn,             "Warehouse Records Entry Serial No.
            whsdt    LIKE   zeou_pcrdtl-whsdt,             "Warehouse Records Entry date
            buzid    LIKE   bseg-buzid,                    "Identification of the Line Item
            bschl    LIKE   bseg-bschl,                    "Posting Key
            wrbtr    LIKE   bseg-wrbtr,                    "Amount in document currency
            cst_wrbtr LIKE  bseg-wrbtr,                    "CST Amount in document currency
            belnr    LIKE   bseg-belnr,                    "Accounting Document Number
            gjahr    LIKE   bseg-gjahr,                    "Fiscal Year
            xblnr    LIKE   bkpf-xblnr,                    "Reference Document Number
            koart    LIKE   bseg-koart,                    "Account type
            augbl    LIKE   bseg-augbl,                    "Document Number of the Clearing Document
            vblnr    LIKE   payr-vblnr,                    "Document Number of the Payment Document
            zbukr    LIKE   payr-zbukr,                    "Paying company code
            chect    LIKE   payr-chect,                    "Check Number
            zaldt    LIKE   payr-zaldt,                    "Probable Payment Date (Cash Discount 1 Due)
            hbkid    LIKE   payr-hbkid,                    "Short key for a house bank
            usr_txt1(20) TYPE c,
            usr_txt2(20) TYPE c,
            END      OF     gt_output.
    *Working Variables
    DATA : cst_gr  LIKE  mseg-dmbtr,
           cst_inv LIKE  bseg-wrbtr,
           usr_txt1(20) TYPE c,
           usr_txt2(20) TYPE c.
    START-OF-SELECTION.
    *Retreiving Data from a363 table for the given input
      SELECT  matnr
              lifnr
              werks
              kschl
              knumh
              FROM a363
              INTO TABLE a363_itab
              WHERE matnr IN s_matnr AND lifnr IN s_lifnr AND werks EQ p_werks AND kschl IN s_kschl.
      SELECT  *
              FROM konp
              INTO CORRESPONDING FIELDS OF TABLE konp_itab
              FOR ALL ENTRIES IN a363_itab
              WHERE knumh EQ a363_itab-knumh.
      LOOP AT a363_itab.
        READ TABLE konp_itab WITH KEY knumh = a363_itab-knumh.
        IF sy-subrc EQ 0.
          MOVE : konp_itab-kbetr TO a363_itab-kbetr.
          MODIFY a363_itab.
        ENDIF.
        CLEAR : a363_itab, konp_itab.
      ENDLOOP.
      SELECT *
             FROM makt
             INTO CORRESPONDING FIELDS OF TABLE mat_desc
             FOR ALL ENTRIES IN a363_itab
             WHERE matnr EQ a363_itab-matnr.
      SELECT a~lifnr
             a~name1
             b~j_1icstno
             INTO TABLE vend_det
             FROM lfa1 AS a JOIN j_1imovend AS b
             ON alifnr EQ blifnr
             FOR ALL ENTRIES IN a363_itab
             WHERE a~lifnr EQ a363_itab-lifnr.
    Retreiving Data from EKKO & EKPO table for the given input
    And Populating the V_PO_DETAILS itab
      SELECT  *
              FROM ekko
              INTO CORRESPONDING FIELDS OF TABLE ekko_itab
              FOR ALL ENTRIES IN a363_itab
              WHERE lifnr EQ a363_itab-lifnr AND bedat IN s_bedat.
      SELECT  *
              FROM ekpo
              INTO CORRESPONDING FIELDS OF TABLE ekpo_itab
              FOR ALL ENTRIES IN a363_itab
              WHERE matnr EQ a363_itab-matnr AND werks EQ a363_itab-werks AND mwskz NE 'V0'.
      LOOP AT ekpo_itab.
        MOVE :   ekpo_itab-ebelp TO v_po_det-ebelp,
                 ekpo_itab-matnr TO v_po_det-matnr,
                 ekpo_itab-werks TO v_po_det-werks,
                 ekpo_itab-menge TO v_po_det-menge.
        READ TABLE ekko_itab WITH KEY ebeln = ekpo_itab-ebeln.
        IF sy-subrc EQ 0.
          MOVE  :  ekko_itab-lifnr TO v_po_det-lifnr,
                   ekko_itab-ebeln TO v_po_det-ebeln,
                   ekko_itab-bedat TO v_po_det-bedat.
          APPEND : v_po_det.
        ENDIF.
        CLEAR  : ekko_itab, ekpo_itab, v_po_det.
      ENDLOOP.
      LOOP AT v_po_det.
        READ TABLE a363_itab WITH KEY matnr = v_po_det-matnr lifnr = v_po_det-lifnr werks = v_po_det-werks.
        IF sy-subrc EQ 0.
          MOVE : a363_itab-kbetr TO v_po_det-kbetr.
          MODIFY v_po_det.
        ENDIF.
        CLEAR : a363_itab, v_po_det.
      ENDLOOP.
    Retreiving Data from MKPF & MSEG & ZEOU_PCRDTL table for the given input
    And Populating the GR_WH_info itab
      SELECT  *
              FROM mseg
              INTO CORRESPONDING FIELDS OF TABLE mseg_itab
              FOR ALL ENTRIES IN v_po_det
              WHERE ebeln EQ v_po_det-ebeln AND matnr EQ v_po_det-matnr AND bwart IN s_bwart.
      SELECT  *
              FROM mkpf
              INTO CORRESPONDING FIELDS OF TABLE mkpf_itab
              FOR ALL ENTRIES IN mseg_itab
              WHERE mblnr EQ mseg_itab-mblnr.
      SELECT  *
              FROM zeou_pcrdtl
              INTO CORRESPONDING FIELDS OF TABLE zeou_pcrdtl_itab
              FOR ALL ENTRIES IN mseg_itab
              WHERE mblnr EQ mseg_itab-mblnr AND matnr EQ mseg_itab-matnr.
      LOOP AT mseg_itab.
        MOVE  :  mseg_itab-mblnr TO gr_wh_info-mblnr,
                 mseg_itab-ebeln TO gr_wh_info-ebeln,
                 mseg_itab-ebelp TO gr_wh_info-ebelp,
                 mseg_itab-matnr TO gr_wh_info-matnr,
                 mseg_itab-lifnr TO gr_wh_info-lifnr,
                 mseg_itab-werks TO gr_wh_info-werks,
                 mseg_itab-menge TO gr_wh_info-menge,
                 mseg_itab-dmbtr TO gr_wh_info-dmbtr,
                 mseg_itab-bwart TO gr_wh_info-bwart.
        READ TABLE mkpf_itab WITH KEY mblnr = mseg_itab-mblnr.
        IF sy-subrc EQ 0.
          MOVE  :  mkpf_itab-bldat TO gr_wh_info-bldat.
        ENDIF.
        READ TABLE zeou_pcrdtl_itab WITH KEY mblnr = mseg_itab-mblnr.
        IF sy-subrc EQ 0.
          MOVE  :  zeou_pcrdtl_itab-whssn TO gr_wh_info-whssn,
                   zeou_pcrdtl_itab-whsdt TO gr_wh_info-whsdt.
        ENDIF.
        APPEND : gr_wh_info.
        CLEAR : mseg_itab, mkpf_itab, gr_wh_info.
      ENDLOOP.
    Retreiving Data from BSEG & BKPF table
    And Populating the Vendor Invoice Details
      SELECT  *
              FROM bseg
              INTO CORRESPONDING FIELDS OF TABLE bseg_itab
              FOR ALL ENTRIES IN v_po_det
              WHERE ebeln EQ v_po_det-ebeln AND matnr EQ v_po_det-matnr AND buzid EQ 'W' AND bschl EQ '96'.
      SELECT  *
              FROM bkpf
              INTO CORRESPONDING FIELDS OF TABLE bkpf_itab
              FOR ALL ENTRIES IN bseg_itab
              WHERE bukrs EQ bseg_itab-bukrs AND belnr EQ bseg_itab-belnr AND gjahr EQ bseg_itab-gjahr.
      LOOP AT bseg_itab.
        MOVE  :  bseg_itab-ebeln TO vend_inv-ebeln,
                 bseg_itab-ebelp TO vend_inv-ebelp,
                 bseg_itab-matnr TO vend_inv-matnr,
                 bseg_itab-lifnr TO vend_inv-lifnr,
                 bseg_itab-werks TO vend_inv-werks,
                 bseg_itab-buzid TO vend_inv-buzid,
                 bseg_itab-bschl TO vend_inv-bschl,
                 bseg_itab-wrbtr TO vend_inv-wrbtr,
                 bseg_itab-bukrs TO vend_inv-bukrs,
                 bseg_itab-belnr TO vend_inv-belnr,
                 bseg_itab-gjahr TO vend_inv-gjahr.
        READ TABLE bkpf_itab WITH KEY bukrs = bseg_itab-bukrs belnr = bseg_itab-belnr gjahr = bseg_itab-gjahr.
        IF sy-subrc EQ 0.
          MOVE  :  bkpf_itab-xblnr TO vend_inv-xblnr,
                   bkpf_itab-bldat TO vend_inv-bldat.
          APPEND  :  vend_inv.
        ENDIF.
        CLEAR : vend_inv, bseg_itab, bkpf_itab.
      ENDLOOP.
    Retreiving Data from BSEG & BKPF table
    And Populating the Cheque Info Details
      SELECT  *
              FROM bseg
              INTO CORRESPONDING FIELDS OF TABLE chckinit
              FOR ALL ENTRIES IN v_po_det
              WHERE ebeln EQ v_po_det-ebeln AND matnr EQ v_po_det-matnr AND buzid EQ 'W' AND bschl EQ '86' AND koart EQ 'K'.
      SELECT  *
              FROM payr
              INTO CORRESPONDING FIELDS OF TABLE chckpayer
              FOR ALL ENTRIES IN chckinit
              WHERE vblnr EQ chckinit-augbl.
      SORT chckpayer BY vblnr DESCENDING.
      LOOP AT chckpayer.
        ON CHANGE OF chckpayer-vblnr.
          MOVE   : chckpayer TO chckpayer_u.
          APPEND : chckpayer_u.
          CLEAR  : chckpayer_u, chckpayer.
        ENDON.
      ENDLOOP.
      LOOP AT chckinit.
        MOVE  :  chckinit-ebeln TO chckfinal-ebeln,
                 chckinit-ebelp TO chckfinal-ebelp,
                 chckinit-matnr TO chckfinal-matnr,
                 chckinit-lifnr TO chckfinal-lifnr,
                 chckinit-werks TO chckfinal-werks,
                 chckinit-buzid TO chckfinal-buzid,
                 chckinit-bschl TO chckfinal-bschl,
                 chckinit-bukrs TO chckfinal-bukrs,
                 chckinit-gjahr TO chckfinal-gjahr,
                 chckinit-koart TO chckfinal-koart,
                 chckinit-augbl TO chckfinal-augbl.
        READ TABLE chckpayer_u WITH KEY vblnr = chckinit-augbl gjahr = chckinit-gjahr.
        IF sy-subrc EQ 0.
          MOVE  :  chckpayer_u-vblnr TO chckfinal-vblnr,
                   chckpayer_u-zbukr TO chckfinal-zbukr,
                   chckpayer_u-chect TO chckfinal-chect,
                   chckpayer_u-zaldt TO chckfinal-zaldt,
                   chckpayer_u-hbkid TO chckfinal-hbkid.
          APPEND : chckfinal.
        ENDIF.
        CLEAR : chckfinal, chckpayer_u, chckinit.
      ENDLOOP.
    Populating the final CST TABLE
      LOOP AT v_po_det.
        MOVE  :   v_po_det-lifnr TO cst_rep-lifnr,
                  v_po_det-werks TO cst_rep-werks,
                  v_po_det-ebeln TO cst_rep-ebeln,
                  v_po_det-ebelp TO cst_rep-ebelp,
                  v_po_det-bedat TO cst_rep-bedat,
                  v_po_det-matnr TO cst_rep-matnr,
                  v_po_det-kbetr TO cst_rep-kbetr.
        READ TABLE gr_wh_info WITH KEY ebeln = v_po_det-ebeln ebelp = v_po_det-ebelp."matnr = v_po_det-matnr.
        IF sy-subrc EQ 0.
          MOVE :  gr_wh_info-mblnr TO cst_rep-mblnr,
                  gr_wh_info-bldat TO cst_rep-bldat,
                  gr_wh_info-menge TO cst_rep-menge,
                  gr_wh_info-dmbtr TO cst_rep-dmbtr,
                  gr_wh_info-bwart TO cst_rep-bwart,
                  gr_wh_info-whssn TO cst_rep-whssn,
                  gr_wh_info-whsdt TO cst_rep-whsdt.
        ENDIF.
        READ TABLE vend_inv WITH KEY ebeln = v_po_det-ebeln ebelp = v_po_det-ebelp."matnr = v_po_det-matnr.
        IF sy-subrc EQ 0.
          MOVE : vend_inv-buzid TO cst_rep-buzid,
                 vend_inv-bschl TO cst_rep-bschl,
                 vend_inv-wrbtr TO cst_rep-wrbtr,
                 vend_inv-belnr TO cst_rep-belnr,
                 vend_inv-gjahr TO cst_rep-gjahr,
                 vend_inv-xblnr TO cst_rep-xblnr.
        ENDIF.
        READ TABLE chckfinal WITH KEY ebeln = v_po_det-ebeln ebelp = v_po_det-ebelp."matnr = v_po_det-matnr.
        IF sy-subrc EQ 0.
          MOVE : chckfinal-augbl TO cst_rep-augbl,
                 chckfinal-vblnr TO cst_rep-vblnr,
                 chckfinal-zbukr TO cst_rep-zbukr,
                 chckfinal-chect TO cst_rep-chect,
                 chckfinal-zaldt TO cst_rep-zaldt,
                 chckfinal-hbkid TO cst_rep-hbkid.
        ENDIF.
        READ TABLE mat_desc WITH KEY matnr = v_po_det-matnr.
        IF sy-subrc EQ 0.
          MOVE : mat_desc-maktx TO cst_rep-maktx.
        ENDIF.
        READ TABLE vend_det WITH KEY lifnr = v_po_det-lifnr.
        IF sy-subrc EQ 0.
          MOVE : vend_det-name1 TO cst_rep-name1,
                 vend_det-j_1icstno TO cst_rep-j_1icstno.
        ENDIF.
        APPEND : cst_rep.
        CLEAR  : cst_rep, v_po_det, gr_wh_info, vend_inv, chckfinal.
      ENDLOOP.
    Populating GT_output
      LOOP AT cst_rep.
        cst_gr = cst_rep-dmbtr * ( cst_rep-kbetr / 1000 ).
        cst_inv = cst_rep-wrbtr * ( cst_rep-kbetr / 1000 ).
        MOVE : cst_gr  TO cst_rep-cst_dmbtr,
               cst_inv TO cst_rep-cst_wrbtr.
        MODIFY : cst_rep.
        CLEAR : cst_rep, cst_gr, cst_inv.
      ENDLOOP.
      LOOP AT cst_rep.
        MOVE :  sy-tabix TO gt_output-slno,
                cst_rep-lifnr TO gt_output-lifnr,
                cst_rep-name1 TO gt_output-name1,
                cst_rep-j_1icstno TO gt_output-j_1icstno,
                cst_rep-werks TO gt_output-werks,
                cst_rep-matnr TO gt_output-matnr,
                cst_rep-maktx TO gt_output-maktx,
                cst_rep-ebeln TO gt_output-ebeln,
                cst_rep-ebelp TO gt_output-ebelp,
                cst_rep-bedat TO gt_output-bedat,
                cst_rep-mblnr TO gt_output-mblnr,
                cst_rep-bldat TO gt_output-bldat,
                cst_rep-menge TO gt_output-menge,
                cst_rep-dmbtr TO gt_output-dmbtr,
                cst_rep-cst_dmbtr TO gt_output-cst_dmbtr,
                cst_rep-bwart TO gt_output-bwart,
                cst_rep-whssn TO gt_output-whssn,
                cst_rep-whsdt TO gt_output-whsdt,
                cst_rep-buzid TO gt_output-buzid,
                cst_rep-bschl TO gt_output-bschl,
                cst_rep-wrbtr TO gt_output-wrbtr,
                cst_rep-cst_wrbtr TO gt_output-cst_wrbtr,
                cst_rep-belnr TO gt_output-belnr,
                cst_rep-gjahr TO gt_output-gjahr,
                cst_rep-xblnr TO gt_output-xblnr,
                cst_rep-augbl TO gt_output-augbl,
                cst_rep-vblnr TO gt_output-vblnr,
                cst_rep-zbukr TO gt_output-zbukr,
                cst_rep-chect TO gt_output-chect,
                cst_rep-zaldt TO gt_output-zaldt,
                cst_rep-hbkid TO gt_output-hbkid.
        APPEND gt_output.
        CLEAR : cst_rep, gt_output, sy-tabix.
      ENDLOOP.
    END-OF-SELECTION.
    *-ALV Routine
      PERFORM alv_forms.
    *&      Form  alv_forms
    FORM alv_forms.
      PERFORM alv_routines.
      gx_variant = sy-repid.
      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.
        vari = gx_variant-variant.
      ENDIF.
      PERFORM comment_build  USING gt_list_top_of_page[].
      PERFORM fieldcat_init  USING gt_fieldcat[].
      PERFORM layout_build USING gs_layout.
      PERFORM print_build  USING gs_print.
      PERFORM alv_output.
    ENDFORM.                    " alv_forms
    *&      Form  alv_routines
    FORM alv_routines.
      PERFORM eventtab_build USING gt_events[].
      PERFORM e06_t_sort_build  USING gt_sort[].
      PERFORM sp_group_build USING gt_sp_group[].
      g_save = 'A'.
      PERFORM variant_init.
    ENDFORM.                    " alv_routines
    *&      Form  eventtab_build
    FORM eventtab_build USING p_gt_events TYPE slis_t_event.
      DATA: ls_event TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type = 0
        IMPORTING
          et_events   = p_gt_events.
      READ TABLE p_gt_events WITH KEY name =  slis_ev_top_of_page
                             INTO ls_event.
      IF sy-subrc = 0.
        MOVE slis_ev_top_of_page TO ls_event-form.
        APPEND ls_event TO p_gt_events.
      ENDIF.
      READ TABLE p_gt_events WITH KEY name =  slis_ev_user_command
                             INTO ls_event.
      IF sy-subrc = 0.
        MOVE slis_ev_user_command TO ls_event-form.
        APPEND ls_event TO p_gt_events.
      ENDIF.
      READ TABLE p_gt_events WITH KEY name =  slis_ev_pf_status_set
                             INTO ls_event.
      IF sy-subrc = 0.
        MOVE slis_ev_pf_status_set TO ls_event-form.
        APPEND ls_event TO p_gt_events.
      ENDIF.
      SORT p_gt_events BY name.
      DELETE ADJACENT DUPLICATES FROM  p_gt_events.
      DELETE  p_gt_events WHERE form IS INITIAL.
    ENDFORM.                    " eventtab_build
    *&      Form  sort_build
    FORM e06_t_sort_build USING e06_lt_sort TYPE slis_t_sortinfo_alv.
      DATA: ls_sort TYPE slis_sortinfo_alv.
      CLEAR ls_sort.
      ls_sort-fieldname = 'SLNO'.
      ls_sort-spos      = 1.
      ls_sort-up        = 'X'.
      APPEND ls_sort TO e06_lt_sort.
    CLEAR ls_sort.
    ls_sort-fieldname = 'CNCNR'.
    ls_sort-spos      = 1.
    ls_sort-up        = 'X'.
    APPEND ls_sort TO e06_lt_sort.
    CLEAR ls_sort.
    ls_sort-fieldname = 'MATNR'.
    ls_sort-spos      = 1.
    ls_sort-up        = 'X'.
    APPEND ls_sort TO e06_lt_sort.
    ENDFORM.                    " sort_build
    *&      Form  sp_group_build
    FORM sp_group_build USING    p_gt_sp_group TYPE slis_t_sp_group_alv.
      DATA: ls_sp_group TYPE slis_sp_group_alv.
      CLEAR  ls_sp_group.
      ls_sp_group-sp_group = 'A'.
      ls_sp_group-text     = 'PRODUCT'.
      APPEND ls_sp_group TO p_gt_sp_group.
    ENDFORM.                    " sp_group_build
    *&      Form  variant_init
    FORM variant_init.
      CLEAR g_variant.
      g_repid = sy-repid.
      g_variant-report = g_repid.
    ENDFORM.                    " variant_init
    *&      Form  comment_build
    FORM comment_build USING   e04_lt_top_of_page TYPE slis_t_listheader.
      DATA: ls_line     TYPE slis_listheader.
      DATA: l_date(10)  TYPE c,
            l_time(8)   TYPE c,
            l_out(255)  TYPE c.
      WRITE sy-datum TO l_date.
      WRITE sy-uzeit TO l_time.
      CONCATENATE l_date '/' l_time INTO l_out.
      CLEAR ls_line.
      ls_line-typ  = 'H'.
      CLEAR ls_line.
      ls_line-typ  = 'S'.
      ls_line-key  = 'RUN BY :'.
      ls_line-info = sy-uname.
      APPEND ls_line TO e04_lt_top_of_page.
      CLEAR ls_line.
      ls_line-typ  = 'S'.
      ls_line-key  = 'RUN ON :'.
      ls_line-info = l_out.
      APPEND ls_line TO e04_lt_top_of_page.
    ENDFORM.                    " comment_build
    *&      Form  fieldcat_init
    FORM fieldcat_init    USING e01_lt_fieldcat TYPE slis_t_fieldcat_alv.
      DATA: ls_fieldcat TYPE slis_fieldcat_alv.
      DATA n1(3).
      DATA count(2)    TYPE c.
      DATA h1(10).
      DATA: l_week     LIKE scal-week,
            l_text(17) TYPE c.
      DATA cnt TYPE i.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = 1.
      ls_fieldcat-fieldname    = 'SLNO'.
      ls_fieldcat-seltext_m    = 'SL.NO'.
      ls_fieldcat-hotspot      = 'X'.
      ls_fieldcat-key          = 'X'.
      ls_fieldcat-key_sel      = 'X'.
      ls_fieldcat-just         = 'R'.
      ls_fieldcat-sp_group = 'A'.
      APPEND ls_fieldcat TO e01_lt_fieldcat.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = cnt.
      ls_fieldcat-fieldname    = 'LIFNR'.
      ls_fieldcat-seltext_m    = 'VENDOR NO.'.
      ls_fieldcat-hotspot      = 'X'.
      ls_fieldcat-key          = 'X'.
      ls_fieldcat-key_sel      = 'X'.
      ls_fieldcat-just         = 'R'.
      ls_fieldcat-sp_group = 'A'.
      APPEND ls_fieldcat TO e01_lt_fieldcat.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = cnt.
      ls_fieldcat-fieldname    = 'NAME1'.
      ls_fieldcat-seltext_m    = 'VENDOR NAME'.
      ls_fieldcat-hotspot      = 'X'.
      ls_fieldcat-key          = 'X'.
      ls_fieldcat-key_sel      = 'X'.
      ls_fieldcat-just         = 'L'.
      ls_fieldcat-sp_group = 'A'.
      APPEND ls_fieldcat TO e01_lt_fieldcat.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = cnt.
      ls_fieldcat-fieldname    = 'J_1ICSTNO'.
      ls_fieldcat-seltext_m    = 'VENDOR CST NO.'.
      ls_fieldcat-hotspot      = 'X'.
      ls_fieldcat-key          = 'X'.
      ls_fieldcat-key_sel      = 'X'.
      ls_fieldcat-just         = 'R'.
      ls_fieldcat-sp_group = 'A'.
      APPEND ls_fieldcat TO e01_lt_fieldcat.
    cnt = cnt + 1.
    CLEAR ls_fieldcat.
    ls_fieldcat-row_pos      = 1.
    ls_fieldcat-col_pos      = cnt.
    ls_fieldcat-fieldname    = 'WERKS'.
    ls_fieldcat-seltext_m    = 'PLANT'.
    ls_fieldcat-key          = 'X'.
    ls_fieldcat-key_sel      = 'X'.
    ls_fieldcat-just         = 'R'.
    ls_fieldcat-sp_group = 'A'.
    APPEND ls_fieldcat TO e01_lt_fieldcat.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = cnt.
      ls_fieldcat-fieldname    = 'EBELN'.
      ls_fieldcat-seltext_m    = 'PO NO.'.
      ls_fieldcat-key          = 'X'.
      ls_fieldcat-key_sel      = 'X'.
      ls_fieldcat-just         = 'R'.
      ls_fieldcat-sp_group = 'A'.
      APPEND ls_fieldcat TO e01_lt_fieldcat.
    cnt = cnt + 1.
    CLEAR ls_fieldcat.
    ls_fieldcat-row_pos      = 1.
    ls_fieldcat-col_pos      = cnt.
    ls_fieldcat-fieldname    = 'EBELP'.
    ls_fieldcat-seltext_m    = 'PO ITEM'.
    ls_fieldcat-key          = 'X'.
    ls_fieldcat-key_sel      = 'X'.
    ls_fieldcat-just         = 'R'.
    ls_fieldcat-sp_group = 'A'.
    APPEND ls_fieldcat TO e01_lt_fieldcat.
      cnt = cnt + 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-row_pos      = 1.
      ls_fieldcat-col_pos      = cnt

    Hi ,  
      This is a sort of performance issue , because your program takes more than the max time set for the program to execute in foreground.
    There are many stuff in program which will hamper your performance.
    I will list down a few
    1. SELECT *
    FROM konp
    INTO CORRESPONDING FIELDS OF TABLE konp_itab
    FOR ALL ENTRIES IN a363_itab
    WHERE knumh EQ a363_itab-knumh
    in this statement you are using for all entries a363_itab , but before this statement you are not checking if the table has any entry or not , please do remember that for all entries has this characterstic , that if you internal table does not contain any record , then all the records are selected from the database table. So in this case if you table a363_itab is empty , so what you want is no data must be seelcted from table konp , but what will happen is all the records in KONP will be seelcted.
    2. While retreiving data you are using seelct * even though you do not require all the fields , an example is
    <b>SELECT *
    FROM mkpf
    INTO CORRESPONDING FIELDS OF TABLE mkpf_itab
    FOR ALL ENTRIES IN mseg_itab
    WHERE mblnr EQ mseg_itab-mblnr.</b>
    in this your internal table contains only 2 fields
    <b>mblnr LIKE mkpf-mblnr, "Number of Material Document
    bldat LIKE mkpf-bldat, "Document Date in Document</b> , but to get these 2 fields you are selecting all the fields of the table.
    3. In select you are using into corresponding fields of table , it is not a good practice., so please avoidd it.
    Please understand that you must try to reduce the access to your database tables and try to keep it minimal , because this same thing may happen becasue data in DEV is very less compared to the volume of data in production , so a program working in DEV will take much more time in PRD if not written properly and may result in timeouts , as in your case.
    Please try to make chanegs to the prorgam and see if it works.
    In case you have more queries , please do revert back.
    Regards
    Arun
    *Reward points if replay is helpful

  • ABAP Dump while Changing the Layout fields in Report output - RCOPCA02

    Hi,
    I Copied the Standard Program RCOPCA02 to ZRCOPCA02. I added two new fields(AUART, AUGRU) in the report output. It is executing correctly with default layout, While Changing the layout for displaying new fields it is dumping.
    I am not understanding, What should i do...
    Here is the Code.
    report ZRCOPCA02 no standard page heading message-id km
                    line-count (2) line-size 81.
    type-pools: slis, ecarc.
    DDIC-Tabellen *******************************************************
    tables: glpca,                         "Einzelposten / Ist
            glu1,                          "Übergabestruktur FI-SL-Anzeige
            t000,
            tka01,
            sscrfields,
            vbak.
    Variablen und int. Tabellen *****************************************
    data: l_vbeln like vbak-vbeln,
    l_auart like vbak-auart,
    l_augru like vbak-augru.
    data: afield type slis_fieldcat_alv,
    sp_group type slis_sp_group_alv,
    t_listheader type slis_t_listheader with header line,
    t_layout type slis_layout_alv,
    t_fieldcat type slis_t_fieldcat_alv,
    t_spec_groups type slis_t_sp_group_alv,
    event type slis_alv_event,
    t_events type slis_t_event,
    g_variant like disvariant,
    gx_variant like disvariant,
    g_exit(1) type c,
    g_save(1) type c,
    g_repid like sy-repid,
    msgtyp like sy-msgty,
    lt_dynpread like dynpread occurs 1 with header line,
    ls_rpcak like rpcak, "note 0310592
    packsize type i value 1000,
    text1(60) type c,
    text2(60) type c,
    oldkokrs like glpca-kokrs,
    oldracct like glpca-racct.
    data: whr_size type i value 50,"Maximum of single values per MIC 46a
    "charact. in the where-clause of the select-statement
    lines type i, "number of lines of range table MIC 46a
    cnt_rldnr type i, "Zähler Anzahl selektierter Ledger
    cnt_kokrs type i, "Zähler Anzahl selektierter KoReKreise
    cnt_poper type i, "Zähler Anzahl selektierter Perioden
    cnt_ryear type i, "Zähler Anzahl selektierter GeschJahre
    cnt_rvers type i, "Zähler Anzahl selektierter Versionen
    cnt_bukrs type i, "Zähler Anzahl selektierter BuKreise
    empge like dkobr-empge,
    ksl_curr like tka01-pcacur,
    hsl_curr like t001-waers,
    a_rec like rstirec.
    data: begin of dim_data.
    include structure rgcdi. "data for dimensions
    data: end of dim_data.
    data: begin of tab_fields occurs 80,
    name like dntab-fieldname, "fields in table i_glpca
    end of tab_fields.
    data: begin of i_glpca occurs 0.
    include structure rpca2.
    data: racct_ktext like rpcak-ktext,
    psppp like prps-posid,
    v_auart like vbak-auart,
    v_augru like vbak-augru,
          end of i_glpca.
    data: rw_subrc   like sy-subrc,      "Flag: Report-Writer-Schnittstelle
          re_subrc   like sy-subrc,        "Flag: Recherche-Schnittstelle
          subrc      like sy-subrc.
    data: set_id    like sethier-setid,    "Set-ID        "RDI_SETS_4.0
          set_class like sethier-setclass, "Setklasse     "RDI_SETS_4.0
          set_sname like sethier-shortname."Setname (24)  "RDI_SETS_4.0
    data: authorised(1),
          s_message(1),
          auth_dbcount like sy-tabix,
        Hex-Konstanten für Minimum/Maximum-Werte
          begin of hex00,
            x1(12) type c,
            x2(12) type c,
          end of hex00,
          begin of hexff,
            x1(12) type c,
            x2(12) type c,
          end of hexff.
    ranges rclnt for glpca-rclnt.
    field-symbols:  type ecarc_glpca_curr.
    Selektionsoptionen *************************************************
    select-options:
      rldnr    for glpca-rldnr   default '8A' no-display,
      rassc    for glpca-rassc                no-display,
    rrcty    for glpca-rrcty   default 0,
      rrcty    for glpca-rrcty,
      rvers    for glpca-rvers   default '000',
      kokrs    for glpca-kokrs   memory id cac,
      bukrs    for glpca-rbukrs  memory id buk,
    poper    for glpca-poper   default sy-datlo+4(2),
    ryear    for glpca-ryear   default sy-datlo,
      poper    for glpca-poper,
      ryear    for glpca-ryear,
      prctr    for glpca-rprctr  matchcode object prct,
      pprctr   for glpca-sprctr  matchcode object prct,
    RACCT    FOR GLPCA-RACCT   MATCHCODE OBJECT KART,      "RD_P30K128304
      racct    for glpca-racct,            "RD_P30K128304
      drcrk    for glpca-drcrk,
      activ    for glpca-activ,
      rhoart   for glpca-rhoart,
      rfarea   for glpca-rfarea,
      stagr    for glpca-stagr,
      rtcur    for glpca-rtcur,
      runit    for glpca-runit,
      versa    for glpca-versa  no-display,
      eprctr   for glpca-eprctr no-display,
      afabe    for glpca-afabe  no-display,
      rmvct    for glpca-rmvct  no-display,
      hrkft    for glpca-hrkft  no-display,  "note 550972
      sbukrs   for glpca-sbukrs no-display,  "note 550972
      shoart   for glpca-shoart no-display,  "note 550972
      sfarea   for glpca-sfarea no-display,  "note 550972
      docct    for glpca-docct,
      docnr    for glpca-docnr,
      refdocct for glpca-refdocct,
      refdocnr for glpca-refdocnr,
      werks    for glpca-werks,
      repmatnr for glpca-rep_matnr matchcode object pca_shlp_rep_matnr,
      rscope   for glpca-rscope.
    parameters: no_rrint no-display default ' '." skip       "MICP40K066037
    " report-report-interface
    display variant                                       ">>MICP40K039857
    selection-screen begin of block 0 with frame title text-e01.
    parameters: p_vari like disvariant-variant.
    selection-screen comment 47(40) varname for field p_vari.
    selection-screen end of block 0.
    parameters log_grp(4) type c no-display default 'KE5Z'.
    "<<MICP40K039857
    ranges: v_racct  for glpca-racct,
            v_prctr  for glpca-rprctr,
            v_pprctr for glpca-sprctr.
    Tabelle mit Werten aus den Berichts-Set vom Report-Writer           *
    data  begin of val_tab occurs 50.
            include structure rgciv.
    data  end of val_tab.
           MICP30K166368
    feldkatalog und interface für bb-schnittstelle rw        MICP30K166368
           MICP30K166368
    "MICP30K166368
    data  begin of bbs_fieldtab occurs 20. "MICP30K166368
            include structure rstifields.  "MICP30K166368
    data  end of bbs_fieldtab.             "MICP30K166368
    archiv
    type-pools: rsds.
    types:      begin of ty_archive_objects,
                   object       like arch_obj-object,
                end   of ty_archive_objects,
                ty_t_archive_objects type ty_archive_objects occurs 2.
    constants:  lc_set          type  c           value 'X',
                lc_report       type  progname    value 'KE5Z',
                lc_reporttype   type  reporttype  value 'TR'.
    tables:     admi_files.
    select-options lr_files for admi_files-archiv_key no-display.
    parameter:  read_db       type c            default 'X' no-display,
                read_ar       type c                        no-display,
                arc_obj       like arch_obj-object          no-display,
                read_as       type c            default 'X' no-display.
    data  :     lt_arch_obj     type ty_t_archive_objects with header line,
                ls_selections   type rsds_frange,
                lt_selections   type rsds_frange_t,
                ls_selopt type rsdsselopt,
                lt_glpca_archiv type ecarc_t_glpca_curr.
    *********************************************************>>MICP40K039857
    INITIALIZATION
    initialization.
    Diverse Initialisierungen
      perform init_vars.
      g_repid = sy-repid.
    Set default values for record type
      rrcty-sign = 'I'.
      rrcty-option = 'EQ'.
      rrcty-low    = '0'.
      append rrcty.
      rrcty-low = '2'.
      append rrcty.
    Set default values for period and year (if kokrs or bukrs is known)
      get parameter id 'BUK' field bukrs-low.
      get parameter id 'CAC' field kokrs-low.
      if     kokrs-low is initial       "get contr. area from company code
         and not bukrs-low is initial.
        call function 'KOKRS_GET_FROM_BUKRS'
          exporting
            i_bukrs        = bukrs-low
          importing
            e_kokrs        = kokrs-low
          exceptions
            no_kokrs_found = 1
            others         = 2.
        if sy-subrc <> 0.
          clear kokrs-low.
        endif.
      endif.
      if not kokrs-low is initial.
        call function 'K_KOKRS_READ'       "get fiscal year variant
             exporting
                  kokrs           = kokrs-low
              importing
                  e_tka01         = tka01
            exceptions
                  not_found       = 1
                  not_found_gjahr = 2
                  others          = 3.
        if sy-subrc = 0.
          call function 'G_PERIOD_GET'
            exporting
              date                           = sy-datlo
              variant                        = tka01-lmona
            importing
              period                         = poper-low
              year                           = ryear-low
            exceptions
              ledger_not_assigned_to_company = 1
              period_not_defined             = 2
              variant_not_defined            = 3
              others                         = 4.
          if sy-subrc = 0.
            poper-sign = 'I'.
            poper-option = 'EQ'.
            append poper.
            ryear-sign = 'I'.
            ryear-option = 'EQ'.
            append ryear.
          endif.
        endif.
      endif.
    Settings for display variants
      g_save = 'A'.  "Schalter Varianten benutz./allg. speichern
      clear g_variant.
      g_variant-report = g_repid.
      g_variant-log_group = log_grp.
      g_variant-username = sy-uname.
    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.
    Set variant
      if p_vari is initial.
        p_vari = '1SAP'.
        move p_vari to gx_variant-variant.
        call function 'REUSE_ALV_VARIANT_EXISTENCE'
          exporting
            i_save     = g_save
          changing
            cs_variant = gx_variant
          exceptions
            not_found  = 1.
        if sy-subrc ne 0.
          clear p_vari.
          clear gx_variant-variant.
        endif.
      endif.
      varname = gx_variant-text.
      "<<MICP40K039857
    archiv
      call function 'KARL_DATA_INPUT_INIT'
        exporting
          i_report     = lc_report
          i_reporttype = lc_reporttype
        importing
          e_xusedb     = read_db
          e_xusear     = read_ar
          e_archobj    = arc_obj
          e_infosys    = read_as
        tables
          t_arch_sel   = lr_files.
      data: lt_excluding like sy-ucomm occurs 0 with header line.
      call function 'RS_SET_SELSCREEN_STATUS'
        exporting
          p_status  = 'SELSCREEN'
          p_program = 'RCOPCA02'
        tables
          p_exclude = lt_excluding.
    Initialisieren der Bericht/Bericht-Schnittstellen                   *
      data: ld_no_rrint type boole_d.      "note 490484 begin
      import rri = ld_no_rrint from memory id 'RCOPCA02_NO_RRI'.
      if ld_no_rrint = 'X'.
        free memory id 'RCOPCA02_NO_RRI'.
      else.                                "note 490484 end
        call function 'G_REPORT_INTERFACE_INIT'   "Report-Writer?
            exporting                      "MICP30K166368
                 table = 'GLPCT'           "MICP30K166368
             importing
                 subrc = rw_subrc          "MICP30K166368
            tables                         "MICP30K166368
                 it_fieldr = bbs_fieldtab. "MICP30K166368
        call function 'RSTI_APPL_STACK_POP'"oder Recherche?
             importing
                  i_rec                      = a_rec
             exceptions
                  appl_stack_not_initialized = 1.
        re_subrc = sy-subrc.
        if re_subrc = 0.
       check Receiver is this report
          if not ( ( a_rec-rtool = 'RT' and a_rec-ronam = 'RCOPCA02' )
                   or ( a_rec-rtool = 'TR' and a_rec-ronam = 'KE5Z' ) ) .
            re_subrc = 2.
          endif.
        endif.
      endif.
    AT SELCTION-SCREEN on value request**********************************
    *at selection-screen on value-request for racct-low.          "RD "4.6a
                                                                "RD "4.6a
    call function 'K_RACCT_VALUE_REQUEST'                       "RD "4.6a
         importing                                              "RD "4.6a
              e_racct      = racct-low.                         "RD "4.6a
                                                                "RD "4.6a
                                                                "RD "4.6a
    *at selection-screen on value-request for racct-high.         "RD "4.6a
                                                                "RD "4.6a
    call function 'K_RACCT_VALUE_REQUEST'                       "RD "4.6a
         importing                                              "RD "4.6a
              e_racct      = racct-high.                        "RD "4.6a
    at selection-screen on value-request for p_vari.         "MICP40K039857
      perform f4_for_variant.              "MICP40K039857
    at selection-screen on value-request for poper-low.         "RD "4.6a
    begin of insertion note 522715
      call function 'K_KOKRS_READ'
        exporting
          kokrs           = kokrs-low
        exceptions
          not_found       = 1
          not_found_gjahr = 2
          others          = 3.
      if sy-subrc = 0.
    end of insertion note 522715
        call function 'ECPCA_RPMAX_VALUE_REQUEST'               "RD "4.6a
             exporting                                          "RD "4.6a
                  i_kokrs     = kokrs-low                       "RD "4.6a
                  i_ryear     = ryear-low                       "RD "4.6a
             importing                                          "RD "4.6a
                  e_rpmax     = poper-low                       "RD "4.6a
    begin of insertion note 522715
             exceptions
                  table_empty = 1.
      endif.
    end of insertion note 522715
    at selection-screen on value-request for poper-high.        "RD "4.6a
    begin of insertion note 522715
      call function 'K_KOKRS_READ'
        exporting
          kokrs           = kokrs-low
        exceptions
          not_found       = 1
          not_found_gjahr = 2
          others          = 3.
      if sy-subrc = 0.
    end of insertion note 522715
        call function 'ECPCA_RPMAX_VALUE_REQUEST'               "RD "4.6a
             exporting                                          "RD "4.6a
                  i_kokrs     = kokrs-low                       "RD "4.6a
                  i_ryear     = ryear-low                       "RD "4.6a
             importing                                          "RD "4.6a
                  e_rpmax     = poper-high                      "RD "4.6a
    begin of insertion note 522715
             exceptions
                  table_empty = 1.
      endif.
    end of insertion note 522715
    AT SELCTION-SCREEN ***************************************************
    at selection-screen.
      perform pai_of_selection_screen.
    begin of insertion note 522715
      if not kokrs-low is initial.
        call function 'K_KOKRS_READ'
          exporting
            kokrs           = kokrs-low
          exceptions
            not_found       = 1
            not_found_gjahr = 2
            others          = 3.
        if sy-subrc <> 0.
          message e101(ki) with kokrs-low.
        endif.
      endif.
    end of insertion note 522715
    archiv
      if sy-ucomm = 'FC01' or sy-ucomm = 'UCDS'
        or sy-ucomm = 'ONLI' and read_ar = 'X'
        and read_as is initial and lr_files[] is initial.
        if lt_arch_obj[] is initial.
          lt_arch_obj-object = 'PCA_OBJECT'. append lt_arch_obj.
          lt_arch_obj-object = 'EC_PCA_ITM'. append lt_arch_obj.
        endif.
        call function 'KARL_DATA_INPUT_SELECT'
          exporting
            i_db_and_arc       = lc_set
            i_infosys_possible = lc_set
            i_object_fixed     = 'V'
            i_documentation    = 'KARL_DATA_INPUT_SEL_KE5YZ'
            i_report           = lc_report
            i_reporttype       = lc_reporttype
          tables
            t_objects          = lt_arch_obj
            t_arch_sel         = lr_files
          changing
            c_xusedb           = read_db
            c_xusear           = read_ar
            c_archobj          = arc_obj
            c_infosys          = read_as.
      endif.
    START-OF-SELECTION **************************************************
    start-of-selection.
      Default-Werte löschen, falls Aufruf über Recherche
      oder Report-Writer erfolgt ist
      if no_rrint is initial and ld_no_rrint is initial.        "note 490484
        if rw_subrc eq 0 or re_subrc eq 0.
          refresh: rldnr, rrcty, rvers,  kokrs, bukrs, poper,  ryear,
                   racct, prctr, pprctr, drcrk, activ, rhoart, rfarea,
                   versa, afabe, eprctr,
                   v_racct, v_prctr, v_pprctr.
          clear:   rldnr, rrcty, rvers,  kokrs, bukrs, poper,  ryear,
                   racct, prctr, pprctr, drcrk, activ, rhoart, rfarea,
                   versa, afabe, eprctr,
                   v_racct, v_prctr, v_pprctr.
        endif.
    Parameter einlesen über Report-Writer-Schnittstelle                 *
        if rw_subrc eq 0.
          perform rw_get_parameters.
    oder Parameter einlesen über Recherche-Schnittstelle                *
        elseif re_subrc eq 0.
          perform re_get_parameters.
        endif.
      endif.
      if read_db = 'X'.                     " read from DB (archiv)
    Bewegungsdaten einlesen und puffern...................................
        call function 'SAPGUI_PROGRESS_INDICATOR'
          exporting
            text = 'Einzelposten selektieren'(p10).
    Use dirty trick to mislead DB-optimizer
        call function 'DB_DO_NOT_USE_CLIENT_INDEX'
          exporting
            value    = sy-mandt
          tables
            mandttab = rclnt.
        select (tab_fields) from glpca
           client specified
           package size packsize
          APPENDING CORRESPONDING FIELDS OF TABLE i_glpcaO
            into corresponding fields of table i_glpca
           where rldnr     in rldnr
             and rrcty     in rrcty
             and rvers     in rvers
             and kokrs     in kokrs
             and rbukrs    in bukrs
             and ryear     in ryear
             and rassc     in rassc
             and hrkft     in hrkft   "note 550972
             and sbukrs    in sbukrs  "note 550972
             and shoart    in shoart  "note 550972
             and sfarea    in sfarea  "note 550972
             and racct     in racct
             and rprctr    in prctr
             and sprctr    in pprctr
             and poper     in poper
             and drcrk     in drcrk
             and activ     in activ
             and rhoart    in rhoart
             and rfarea    in rfarea
             and versa     in versa
             and eprctr    in eprctr
             and afabe     in afabe
             and rmvct     in rmvct
             and docct     in docct
             and docnr     in docnr
             and stagr     in stagr
             and rtcur     in rtcur
             and runit     in runit
             and refdocct  in refdocct
             and refdocnr  in refdocnr
             and werks     in werks
             and rep_matnr in repmatnr       "RDIP40K020663
             and rscope    in rscope         "RDIP40K020663
          and rclnt     in rclnt.       "dirty trick to mislead DB-optimizer
          if sy-dbcnt > 1.
            text1 = sy-dbcnt.
            condense text1.
            concatenate text1 text-m01 into text2 separated by space.
            call function 'SAPGUI_PROGRESS_INDICATOR'
              exporting
                text = text2.          " ... Datensätze gelesen
          endif.
        endselect.
    Entfernt nicht zugehörige Einträge....................................
        loop at i_glpca where ( not rprctr in v_prctr  )
                           or ( not sprctr in v_pprctr )
                           or ( not racct  in v_racct  ).
          delete i_glpca.
        endloop.
      endif.
    *archiv
      if read_ar = 'X' and not
        ( read_as is initial and lr_files[] is initial ).
        call function 'SAPGUI_PROGRESS_INDICATOR'
          exporting
            text = 'Lesen im Archiv'(p12).
        define fill_lt_selections.
          if not &2[] is initial.
            clear ls_selections.
            move &1 to ls_selections-fieldname.
            loop at &2.
              clear ls_selopt.
              move-corresponding &2 to ls_selopt.
              append ls_selopt to ls_selections-selopt_t.
            endloop.
            append ls_selections to lt_selections.
          endif.
        end-of-definition.
        fill_lt_selections 'RLDNR'  rldnr.
        fill_lt_selections 'RRCTY'  rrcty.
        fill_lt_selections 'RVERS'  rvers.
        fill_lt_selections 'KOKRS'  kokrs.
        fill_lt_selections 'RBUKRS' bukrs.
        fill_lt_selections 'POPER'  poper.
        fill_lt_selections 'RYEAR'  ryear.
        fill_lt_selections 'RPRCTR' prctr.
        fill_lt_selections 'SPRCTR' pprctr.
        fill_lt_selections 'RACCT'  racct.
        fill_lt_selections 'DRCRK'  drcrk.
        fill_lt_selections 'ACTIV'  activ.
        fill_lt_selections 'RHOART' rhoart.
        fill_lt_selections 'RFAREA' rfarea.    "note 401961
        fill_lt_selections 'STAGR'  stagr.
        fill_lt_selections 'RTCUR'  rtcur.
        fill_lt_selections 'RUNIT'  runit.
        fill_lt_selections 'VERSA'  versa.
        fill_lt_selections 'EPRCTR' eprctr.
        fill_lt_selections 'AFABE'  afabe.
        fill_lt_selections 'RMVCT'  rmvct.
        fill_lt_selections 'DOCCT'  docct.
        fill_lt_selections 'DOCNR'  docnr.
        fill_lt_selections 'REFDOCCT' refdocct.
        fill_lt_selections 'REFDOCNR' refdocnr.
        fill_lt_selections 'WERKS'  werks.
        fill_lt_selections 'REP_MATNR' repmatnr.
        fill_lt_selections 'RSCOPE' rscope.
        fill_lt_selections 'HRKFT'  hrkft.   "note 550972
        fill_lt_selections 'SBUKRS' sbukrs.  "note 550972
        fill_lt_selections 'SHOART' shoart.  "note 550972
        fill_lt_selections 'SFAREA' sfarea.  "note 550972
        call function 'EC_PCA_SELECT_FROM_ARCHIVE'
          exporting
            i_selections            = lt_selections[]
            i_files_sequential_read = lr_files[]
          importing
            e_glpca                 = lt_glpca_archiv[]
          exceptions
            no_infostruc_found      = 1.
        if sy-subrc = 1.
          message id sy-msgid type 'I' number sy-msgno
                  with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        endif.
        clear i_glpca.
        loop at lt_glpca_archiv assigning  to i_glpca.
          append i_glpca.
        endloop.
      endif.
      if i_glpca[] is initial.         "Info,nichts gefunden
        message s000.
        exit.
      endif.
    get texts for accounts ...............................................
      sort i_glpca by kokrs racct.
      loop at i_glpca assigning -racct_ktext = ls_rpcak-ktext.
      endloop.
    Liste mit Einzelposten geeignet sortieren.............................
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          text = 'Einzelposten sortieren'(p30).
    if show_ref is initial.
       sort i_glpca by rldnr ryear rbukrs rrcty rvers
                       docct docnr docln.
    else.
      sort i_glpca by rldnr kokrs ryear rbukrs rrcty rvers poper
                      refdocct refdocnr refdocln.
    endif.
    Berechtigungsprüfung und gemerkte Belege aufbereiten .................
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          text = 'Berechtigungsprüfungen'(p40).
      clear: cnt_rldnr, cnt_kokrs, cnt_ryear, cnt_rvers, cnt_bukrs.
      loop at i_glpca assigning .
      Berechtigungscheck
        perform check_repo_authority changing authorised.
        if authorised is initial.
          delete i_glpca.
          s_message = 'X'.
        zählen der Sätze ohne Berechtigung
          auth_dbcount = auth_dbcount + 1.
        else. "Weitere Bearbeitung nur für berechtigte Belege...
        Zusätzlich merken der Anzahl der Ausprägungen
        bestimmter Dimensionen
          on change of -rbukrs
                ct       = '10'
              importing
                currency = hsl_curr.
          endon.
        externe Immobilienbezeichnung                     "ww/kb
        on change of i_glpca-imkey.
          if ( not -dabrz
                    I_length   = 20
                 importing
                      e_empge    = -konty.
            endif.
          CONCATENATE I_GLPCA-KONTY I_GLPCA-EMPGE INTO I_GLPCA-IMBEZ.
          endif.
        endon.
        on change of i_glpca-dabrz.
           call function 'REMD_IMKEY_TO_EMPGE'
                exporting
                     i_imkey    = i_glpca-imkey
                     i_dabrz    = i_glpca-dabrz
                    i_length   = 20
                importing
                     e_empge    = i_glpca-empge
                     e_konty    = i_glpca-konty.
          CONCATENATE I_GLPCA-KONTY I_GLPCA-EMPGE INTO I_GLPCA-IMBEZ.
         endon.
        Konvertierungsproblem mit PSP-Nummer bereinigen
          if not -psppp.
            endif.
          endif.
        Währungen in Hilfsfeldern speichern
          if -ksl_curr = ksl_curr.
          endif.
        modify i_glpca.
        endif.
      endloop.
    Nachricht, wenn nicht alle Einzelposten angezeigt werden.
      if not s_message is initial.
        message s407(km) with auth_dbcount.
      endif.
    EP ausgeben...........................................................
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          text = 'Einzelposten ausgeben'(p50).
      t_layout-detail_initial_lines = 'X'.
      t_layout-detail_popup         = 'X'.
      t_layout-f2code               = 'PIC1'.                "MICP40K039857
      t_layout-get_selinfos         = 'X'.
      t_layout-group_change_edit    = 'X'.                   "note 576149
      perform fill_listheader.
      perform fieldcat_fill.
      perform spec_groups_fill.
      perform events_fill.                 "MICP40K039857
      ">>MICP40K039857
    call function 'K_KKB_LIST_DISPLAY'
          exporting
               i_callback_program       = 'RCOPCA02'
               i_callback_user_command  = 'USR_CMD'
               i_callback_top_of_page   = 'TOP_OF_PAGE'
              I_CALLBACK_END_OF_PAGE   =
              I_CALLBACK_END_OF_LIST   =
               i_callback_pf_status_set = 'SET_PF_STATUS'
              I_CALLBACK_LAYOUT_SAVE   =
              I_CALLBACK_FIELDCAT_SAVE =
               i_tabname                = 'I_GLPCA'
               is_layout                = t_layout
               it_fieldcat              = t_fieldcat
              I_FCTYPE                 = 'R'
              IT_EXCLUDING             =
               it_special_groups        = t_spec_groups
              IT_SORT                  =
              IS_SEL_HIDE              =
              I_SCREEN_START_COLUMN    = 0
              I_SCREEN_START_LINE      = 0
              I_SCREEN_END_COLUMN      = 0
              I_SCREEN_END_LINE        = 0
          tables
               t_outtab                 = i_glpca
          exceptions
               others                   = 1.
    loop at i_glpca.
    select single vbeln auart augru
    into (l_vbeln, l_auart, l_augru)
    from vbak where vbeln = i_glpca-aubel.
    if sy-subrc = 0.
    move l_auart to i_glpca-v_auart.
    move l_augru to i_glpca-v_augru.
    modify i_glpca.
    endif.
    endloop.
      call function 'REUSE_ALV_GRID_DISPLAY'
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
         exporting
            I_INTERFACE_CHECK        = ' '
               i_callback_program       = 'ZRCOPCA02'
               i_callback_pf_status_set = 'SET_PF_STATUS'
               i_callback_user_command  = 'USR_CMD'
               i_structure_name         = 'I_GLPCA'
               is_layout                = t_layout
               it_fieldcat              = t_fieldcat
            IT_EXCLUDING             =
               it_special_groups        = t_spec_groups
            IT_SORT                  =
            IT_FILTER                =
            IS_SEL_HIDE              =
               i_default                = 'X'
               i_save                   = g_save
               is_variant               = g_variant
               it_events                = t_events
            IT_EVENT_EXIT            =
            IS_PRINT                 =
            I_SCREEN_START_COLUMN    = 0
            I_SCREEN_START_LINE      = 0
            I_SCREEN_END_COLUMN      = 0
            I_SCREEN_END_LINE        = 0
       IMPORTING
            E_EXIT_CAUSED_BY_CALLER  =
            ES_EXIT_CAUSED_BY_USER   =
          tables
               t_outtab                 = i_glpca
        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.
      "<<MICP40K039857
      clear i_glpca.
    *&      Form  CHECK_REPO_AUTHORITY
    Check only new auth-object K_PCA                                    *
    -->  p1        text
    <--  p2        text
    form check_repo_authority changing authorized like authorised.
    fill structure for userexit in K_PCA_RESP_AUTHORITY_CHECK
      data: auth like pca_i_auth.          "46a MIC check K_PCA and G_GLTP
      auth-bukrs = -rrcty.
      clear authorized.
    check PrCtr/account/activity
      call function 'K_PCA_RESP_AUTHORITY_CHECK'
        exporting
          i_kokrs             = -racct
          i_vorgn             = 'REPP'
          i_actvt             = '28'
          i_auth              = auth
          i_no_dialog_message = 'X'
        exceptions
          no_authority        = 1
          data_missing        = 2
          others              = 3.
      if sy-subrc = 0.                                          "ok
    check ledger/version/record type
        call function 'PCA_G_GLTP_AUTH_CHECK'
          exporting
            rldnr            = -rrcty
          exceptions
            no_authorisation = 1
            others           = 2.
        if sy-subrc = 0.                   "ok, User is authorized
          authorized = 'X'.
        endif.
      endif.
    endform.                               " CHECK_REPO_AUTHORITY
    *&      Form  INIT_VARS
          Initialisieren diverser Hilfsvariablen und -tabellen           *
    form init_vars.
      data begin of nametab occurs 80. "Tabelle mit Feldern aus der RPCA2
              include structure dntab.
      data end of nametab.
      select single * from t000
                      client specified
                      where mandt = sy-mandt.
      refresh nametab.
      call function 'NAMETAB_GET'
        exporting
          only    = 'T'
          tabname = 'RPCA2'
        tables
          nametab = nametab.
    Übernehmen der Feldnamen, die auch in der GLPCA
    vorkommen.
      loop at nametab where fieldname ne 'KSL_CURR'
                        and fieldname ne 'HSL_CURR'
                        and fieldname ne 'EMPGE'               "ww/kb
                        and fieldname ne 'KONTY'.              "ww/kb
        move nametab-fieldname to tab_fields-name.
        append tab_fields.
      endloop.
    fill Fields of receiver for BBS                          "MIC46C
      call function 'RSTI_REPORT_FIELDS_FIND'
        exporting
          e_repid   = 'RCOPCA02'
          e_type    = 'R'
        tables
          it_fields = bbs_fieldtab.
    correct fieldnames
      read table bbs_fieldtab with key rfield = 'PRCTR'.
      if sy-subrc = 0.
        bbs_fieldtab-rfield = 'RPRCTR'.
        modify bbs_fieldtab index sy-tabix.
      endif.
      read table bbs_fieldtab with key rfield = 'PPRCTR'.
      if sy-subrc = 0.
        bbs_fieldtab-rfield = 'SPRCTR'.
        modify bbs_fieldtab index sy-tabix.
      endif.
      read table bbs_fieldtab with key rfield = 'BUKRS'.
      if sy-subrc = 0.
        bbs_fieldtab-rfield = 'RBUKRS'.
        modify bbs_fieldtab index sy-tabix.
      endif.
    Unicode
      class cl_abap_char_utilities definition load.
      clear hex00 with cl_abap_char_utilities=>minchar.
      clear hexff with cl_abap_char_utilities=>maxchar.
    endform.                               " INIT_VARS
          FORM FILL_LISTHEADER                                          *
          List-Header in Abhängigkeit der selektierten Daten            *
    form fill_listheader.
      read table i_glpca index 1.
      if sy-subrc ne 0.
        exit.
      endif.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Ledger              '(h01).
      if cnt_rldnr <= 1.
        t_listheader-info = i_glpca-rldnr.
      else.
        t_listheader-info = '*'.
      endif.
      append t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Kostenrechnungskreis'(h02).
      if  cnt_kokrs <= 1.
        t_listheader-info = i_glpca-kokrs.
      else.
        t_listheader-info = '*'.
      endif.
      append t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Buchungskreis       '(h03).
      if cnt_bukrs <= 1.
        t_listheader-info = i_glpca-rbukrs.
      else.
        t_listheader-info = '*'.
      endif.
      append t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Buchungsperiode     '(h04).
      if cnt_poper <= 1.
        t_listheader-info = i_glpca-poper.
      else.
        t_listheader-info = '*'.
      endif.
      append t_listheader.
      if cnt_ryear <= 1.
        t_listheader-typ  = 'S'.
        t_listheader-key  = 'Geschäftsjahr       '(h05).
        t_listheader-info = i_glpca-ryear.
        append t_listheader.
      endif.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Version             '(h06).
      if cnt_rvers <= 1.
        t_listheader-info = i_glpca-rvers.
      else.
        t_listheader-info = '*'.
      endif.
      append t_listheader.
    endform.                    "fill_listheader
    *&      Form  FIELDCAT_FILL
    *&      Aufbau des Feldkataloges für den K_KKB_LIST_DISPLAY,           *
    *&      bzw REUSE_ALV_LIST_DISPLAY,                                    *
    *&      weitere Infos enthält die FktBaustein-Doku                     *
    form fieldcat_fill.
      data: i type i value 0.
      refresh t_fieldcat.
    Ledger
    if cnt_rldnr > 1.
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RLDNR'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
      afield-key         = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group    = '1'.
      append afield to t_fieldcat.
    endif.
    Satzart
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RRCTY'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      append afield to t_fieldcat.
    Version
    if cnt_rvers > 1.
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RVERS'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      append afield to t_fieldcat.
    endif.
    Periode
    if cnt_poper > 1.
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'POPER'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      append afield to t_fieldcat.
    endif.
    Geschäftsjahr
    if cnt_ryear > 1.
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RYEAR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      append afield to t_fieldcat.
    endif.
    Referenzbelegtyp
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'REFDOCCT'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '2'.
      afield-seltext_s   = 'Typ'(t01).
      afield-seltext_m   = 'Belegtyp'(t02).
      afield-seltext_l   = 'Ref.Belegtyp'(t03).
      afield-outputlen   = 3. "Platz für die Sterne der Zwischensummen
    if not show_ref is initial.
      afield-key = 'X'.
    else.
       afield-no_out = 'X'.
    endif.
      append afield to t_fieldcat.
    Referenzbelegnummer
      add 1 to i.
      clear afield.
      afield-col_pos     = i.
      afield-fieldname   = 'REFDOCNR'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '2'.
      afield-seltext_s  = 'Refbeleg'(t04).
      afield-seltext_m  = 'Refbelegnr'(t05).
      afield-seltext_l  = 'Ref.Belegnummer'(t06).
    if not show_ref is initial.
      afield-key = 'X'.
    else.
       afield-no_out = 'X'.
    endif.
      append

    Hi Prabhu,
    You are right, problem is with Field Catalog...
    When I use  FM 'REUSE_ALV_GRID_DISPLAY'  it is dumping...
    When i tried with FM 'REUSE_ALV_LIST_DISPLAY'  it is working perfectly....
    how can i use FM 'REUSE_ALV_GRID_DISPLAY' without dumping????
    do i need to pass any thing in FM????
    Here is the dump:
    Runtime Errors         MESSAGE_TYPE_X                                
           Occurred on     12/21/2006 at 01:03:24                                                                               
    The current application triggered a termination with a short dump.   
                                                             What happened?                                                       
    The current application program detected a situation which really    
    should not occur. Therefore, a termination with a short dump was     
    triggered on purpose by the key word MESSAGE (type X).               
                                                         Error analysis                                                       
    Short text of error message:                                                                               
    Technical information about the message:                             
    Message classe...... "0K "                                           
    Number.............. 000 
    User, transaction...                                                                               
    Language key........ "E"                                                    
    Transaction......... "SE38 "                                                
    Program............. "SAPLSLVC "                                            
    Screen.............. "SAPLSLVC_FULLSCREEN 0500"                             
    Screen line......... 3                                                                               
    Information on where termination occurred                                                                               
    The termination occurred in the ABAP program "SAPLSLVC " in "LINE_OUT_NEW_2".
    The main program was "ZRCOPCA02 ".                                          
    The termination occurred in line 918 of the source code of the (Include)    
    program "LSLVCF01 "                                                        
    of the source code of program "LSLVCF01 " (when calling the editor 9180).   
                                                             Source code extract                                                                               
    008880         gs_roid-row_id = rs_row-index * -1.                          
    008890       endif.                                                         
    008900       gs_roid-sub_row_id = rs_row-rowtype+7(10).                     
    008910       gs_poid-row_id = gs_roid-row_id.                               
    008920       gs_poid-sub_row_id = gs_roid-sub_row_id.                       
    008930       gs_poid-rowtype    = rs_row-rowtype.                           
    008940       gs_poid-index      = rs_row-index.                             
    008950       insert gs_poid into table rt_poid.  
    008960     endif.                                                               
    008970     append gs_roid to rt_roid.                                           
    008980                                                                          
    008990     loop at rt_fieldcat assigning <ls_fieldcat> where tech ne 'X' and    
    009000                                                       no_out ne 'X'.     
    009010                                                                          
    009020       if gflg_invisible = 'X'.                                           
    009030         if <ls_fieldcat>-do_sum is initial.                              
    009040           clear gflg_invisible.                                          
    009050           continue.                                                      
    009060         else.                                                            
    009070           clear g_col_counter.                                           
    009080           clear gflg_invisible.                                          
    009090         endif.                                                           
    009100       endif.                                                             
    009110                                                                          
    009120       clear gs_lvc_data.                                                 
    009130       clear g_style.                                                     
    009140                                                                          
    009150       assign component                                                   
    009160              <ls_fieldcat>-fieldname of structure rt_data to <g_field>.  
    009170       if sy-subrc ne 0.                                                  
         >         message x000(0k).                                                
    009190       endif.                                                             
    009200                                                                          
    009210       g_col_counter = g_col_counter + 1.                                 
    009220                                                                          
    009230       gs_lvc_data-row_pos = r_row_counter.                               
    009240       gs_lvc_data-col_pos = g_col_counter.                               
    009250       gs_lvc_data-row_id  = gs_roid-row_id.                              
    009260       gs_lvc_data-sub_row_id = gs_roid-sub_row_id.                       
    009270                                                                          
    009280   *   Endtotal and average                                               
    009290       if rs_row-rowtype(1) ca 'T' and <ls_fieldcat>-do_sum = 'C'.        
    009300   *     save the actual grouplevel information                    
    009310         gs_grouplevels = rs_grouplevels.                          
    009320         clear g_lines.                                            
    009330                                                                   
    009340   *     get number of lines of the collect table                  
    009350         describe table rt_data lines g_lines.                     
    009360   *     if there is only one line or the field has no references so
    009370   *     that only the first line has to be considered                                                                               
    Thanks,
    fractal
    null

  • Adding Field to the output of the Report

    Hello experts
    I have a program like following, I would like to add a field (Customer purchase order from order header)vbkd-bstkd to the output, I tried to add some code(check the highlightened portion) but it doesnt work(no values) can anyone help in correcting the code so that i can execute directly,
    Iam not full time ABAPer so could you please highlight the code you corrected(added),
    Thanks
    SP
    Global structure of list
    TYPE-POOLS: slis.
    TABLES: likp,
            lips,
            vbfa,
            kssk,
            klah,
            ausp,
            cabn,
            vbak,
            mara,
            vbrk,
            ser01,
            vbpa,
            vbrp,
            nast,
            zseri,
            ltap,
            pa0001,
            kna1,
            objk,
            viqmel,
            viqmma.
    TYPES:  BEGIN OF i_delivery,
                 vbeln LIKE likp-vbeln,
                 posnr  LIKE lips-posnr,
                 kunnr LIKE likp-kunnr,
                 kunag LIKE likp-kunag,
                 vkorg  LIKE vbak-vkorg,
                 matnr  LIKE lips-matnr,
                 lfart  LIKE likp-lfart,
                 arktx  LIKE vbap-arktx,
                 vgbel  LIKE lips-vgbel,
                 vgpos  LIKE lips-vgpos,
                 pstyv   LIKE lips-pstyv,
                 wadat TYPE likp-wadat_ist,
                 lfdat TYPE likp-lfdat,
                 prodh TYPE lips-prodh,
                 lfimg TYPE lips-lfimg,
                 vkbur TYPE lips-vkbur,
                 werks TYPE lips-werks,
                 vkgrp TYPE lips-vkgrp,
                 mvgr1 TYPE lips-mvgr1,
                 sernr LIKE equi-sernr,
                 sernp LIKE equi-sernr,
                 equnr LIKE equi-equnr,
                 kttxt LIKE qpct-kurztext,
                 fkimg LIKE vbrp-fkimg,
                 bstnk  LIKE vbak-bstnk,
                 vbelv  LIKE lips-vgbel,
                 posnv  LIKE lips-posnv,
                 uecha  LIKE lips-uecha,
                 ernam  LIKE vbak-ernam,
                 erdat LIKE vbak-erdat,
                 serail LIKE lips-serail,
                 anzsn LIKE lips-anzsn,
                 auart LIKE vbak-auart ,
                 netwr LIKE vbap-netwr,
                 fstno LIKE vbpa-pernr,
                 fstnm LIKE pa0001-ename,
                 ename LIKE pa0001-ename,
                 qname LIKE ltap-qname,
                 name1 LIKE kna1-name1,
                 name3 LIKE kna1-name2,
                 pernr LIKE vbpa-pernr,
                 aufnr LIKE viqmel-aufnr,
                 qmnum LIKE viqmel-qmnum,
                 mngrp LIKE viqmma-mngrp,
                 qmcod LIKE viqmel-qmcod,
                 qmcol LIKE viqmma-mncod,
                 cotxt(20),
                 invvalue LIKE vbrp-netwr,
                 posnn LIKE vbfa-posnn,
                 bstkd LIKE vbkd-bstkd,
             END OF i_delivery.
    Global structure of list
    */ Selection and Input Parameters
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-003.
    SELECT-OPTIONS: s_vkorg FOR likp-vkorg NO INTERVALS.
    SELECT-OPTIONS: s_vbeln  FOR likp-vbeln,
                    s_lfart  FOR likp-lfart,
                    s_kunnr  FOR likp-kunnr,
                    s_erdat  FOR likp-erdat,
                    s_wadat  FOR likp-wadat_ist,
                    s_werks  FOR lips-werks,
                    s_matnr  FOR lips-matnr,
                    s_prodh  FOR lips-prodh,
                    s_qmnum FOR viqmel-qmnum.
    SELECTION-SCREEN END OF BLOCK block2.
    SELECTION-SCREEN BEGIN OF BLOCK block4 WITH FRAME TITLE text-002.
    SELECT-OPTIONS:  s_vbelv FOR vbak-vbeln,
                     s_auart FOR vbak-auart.
    SELECTION-SCREEN END OF BLOCK block4.
    PARAMETERS: p_vari LIKE disvariant-variant.
    RANGES: r_vbeln FOR likp-vbeln.
    DATA:   gt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA:   gt_outtab TYPE i_delivery OCCURS 0 WITH HEADER LINE,
            rt_outtab1 TYPE i_delivery OCCURS 0 WITH HEADER LINE,
            i_nast TYPE nast OCCURS 0 WITH HEADER LINE,
            gt_list_top_of_page TYPE slis_t_listheader,
            gt_events   TYPE slis_t_event,
            gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
    DATA:   g_repid LIKE sy-repid,
             g_count LIKE sy-tabix.
    DATA: BEGIN OF i_serial OCCURS 0,
            obknr TYPE ser01-obknr,
            lief_nr TYPE ser01-lief_nr,
            posnr TYPE ser01-posnr,
            anzsn TYPE ser01-anzsn,
          END OF i_serial.
    DATA: BEGIN OF i_object_numbers OCCURS 0,
            obknr TYPE objk-obknr,
            obzae TYPE objk-obzae,
            sernr TYPE objk-sernr,
            equnr TYPE objk-equnr,
            matnr TYPE objk-matnr,
            taser TYPE objk-taser,
          END OF i_object_numbers.
    DATA:   g_save(1) TYPE c,
           g_default(1) TYPE c,
            g_exit(1) TYPE c,
            gx_variant LIKE disvariant,
            g_variant LIKE disvariant.
    DATA:  g_mnkat LIKE viqmma-mnkat,
           g_mngrp LIKE viqmma-mngrp,
           g_atinn LIKE ausp-atinn.
    DATA: gt_vbkd TYPE TABLE OF vbkd WITH HEADER LINE.
    Initialization fieldcatalog
    INITIALIZATION.
      g_repid = sy-repid.
      PERFORM fieldcat_init USING gt_fieldcat[].
      MOVE: 'I' TO  s_vkorg-sign,
            'EQ' TO  s_vkorg-option,
            '5090' TO s_vkorg-low.
      APPEND  s_vkorg.
      MOVE: 'I' TO  s_lfart-sign,
           'EQ' TO s_lfart-option,
           'LF' TO s_lfart-low.
      APPEND  s_lfart.
      g_save = 'A'.
      PERFORM variant_init.
    Get default variant
      gx_variant = g_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save     = g_save
           CHANGING
                cs_variant = gx_variant
           EXCEPTIONS
                not_found  = 2.
      IF sy-subrc = 0.
        p_vari = gx_variant-variant.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM f4_for_variant.
    AT SELECTION-SCREEN.
      PERFORM pai_of_selection_screen.
    Start of Selection
    START-OF-SELECTION.
      PERFORM e03_eventtab_build USING gt_events[].
      PERFORM select_data TABLES gt_outtab.
    Display list
    END-OF-SELECTION.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_background_id         = 'ALV_BACKGROUND'
                i_callback_user_command = 'USER_COMMAND'
                is_variant              = g_variant
                i_save                  = g_save
                i_callback_program      = g_repid
                it_fieldcat             = gt_fieldcat[]
           TABLES
                t_outtab                = gt_outtab.
       Forms
    Initialization fieldcatalog
    FORM fieldcat_init
          USING rt_fieldcat TYPE slis_t_fieldcat_alv.
      DATA: ls_fieldcat TYPE slis_fieldcat_alv.
      DATA: pos TYPE i VALUE 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VBELN'.
      ls_fieldcat-seltext_s     = 'Delivery'.
      ls_fieldcat-seltext_m     = 'Delivery'.
      ls_fieldcat-key           = 'X'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'BSTKD'.
      ls_fieldcat-seltext_s     = 'PO Number'.
      ls_fieldcat-seltext_m     = 'PO Number'.
      ls_fieldcat-key           = 'X'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'POSNR'.
      ls_fieldcat-key           = 'X'.
      ls_fieldcat-seltext_s     = 'Item'.
      ls_fieldcat-seltext_m     = 'Item'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'LFART'.
      ls_fieldcat-seltext_s     = 'Del Type'.
      ls_fieldcat-seltext_m     = 'Delivery Type'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VGBEL'.
      ls_fieldcat-seltext_s     = 'Source Doc'.
      ls_fieldcat-seltext_m     = 'Source Doc'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'AUART'.
      ls_fieldcat-seltext_s     = 'Type'.
      ls_fieldcat-seltext_m     = 'Type'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'KUNNR'.
      ls_fieldcat-seltext_s     = 'Customer'.
      ls_fieldcat-seltext_m     = 'Customer'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'NAME1'.
      ls_fieldcat-seltext_s     = 'Name'.
      ls_fieldcat-seltext_m     = 'Name1'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'WERKS'.
      ls_fieldcat-seltext_s     = 'Plant'.
      ls_fieldcat-seltext_m     = 'Plant'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'MATNR'.
      ls_fieldcat-seltext_s     = 'Material'.
      ls_fieldcat-seltext_m     = 'Material'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'MVGR1'.
      ls_fieldcat-seltext_s     = 'Speciality'.
      ls_fieldcat-seltext_m     = 'Speciality'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'PRODH'.
      ls_fieldcat-seltext_s     = 'Hierarchy'.
      ls_fieldcat-seltext_m     = 'Prod Hierarchy'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ARKTX'.
      ls_fieldcat-seltext_s     = 'Description'.
      ls_fieldcat-seltext_m     = 'Description'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ERNAM'.
      ls_fieldcat-seltext_s     = 'Created By'.
      ls_fieldcat-seltext_m     = 'Created By'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ERDAT'.
      ls_fieldcat-seltext_s     = 'Created On'.
      ls_fieldcat-seltext_m     = 'Created On'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'WADAT_IST'.
      ls_fieldcat-seltext_s     = 'GoodsMvt.Date'.
      ls_fieldcat-seltext_m     = 'Goods Mvt Date'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'SERNR'.
      ls_fieldcat-seltext_s     = 'Serial Shipped'.
      ls_fieldcat-seltext_m     = 'Serial Shipped'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'SERNP'.
      ls_fieldcat-seltext_s     = 'Old Serial'.
      ls_fieldcat-seltext_m     = 'Old Serial'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VBELV'.
      ls_fieldcat-seltext_s     = 'Invoice'.
      ls_fieldcat-seltext_m     = 'Invoice'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'INVVALUE'.
      ls_fieldcat-seltext_s     = 'Invoice Amt'.
      ls_fieldcat-seltext_m     = 'Invoice Value'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMNUM'.
      ls_fieldcat-seltext_s     = 'Notification'.
      ls_fieldcat-seltext_m     = 'Notification'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMCOD'.
      ls_fieldcat-seltext_s     = 'Rep LevKST'.
      ls_fieldcat-seltext_m     = 'Repair Level KST'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'COTXT'.
      ls_fieldcat-seltext_s     = 'CdTXT KST'.
      ls_fieldcat-seltext_m     = 'Repair Level Text KST'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMCOL'.
      ls_fieldcat-seltext_s     = 'Rep LevKSE'.
      ls_fieldcat-seltext_m     = 'Repair Level KSE'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'KTTXT'.
      ls_fieldcat-seltext_s     = 'CdTXT KSE'.
      ls_fieldcat-seltext_m     = 'Repair Level Text KSE'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
    ENDFORM.   "fieldcat_init
    Data selection
    FORM select_data TABLES rt_outtab LIKE gt_outtab[].
      CLEAR: r_vbeln[].
    Read all Invoices for the Selection
      SELECT DISTINCT h~vbeln  h~kunnr h~kunag
                     d~posnr  d~matnr d~anzsn
                     d~serail d~vgbel d~vgpos
                     d~posnv  d~lfimg d~arktx
                     d~uecha  h~lfart h~erdat
                     h~ernam  h~lfdat d~prodh
                     h~vkorg  d~vkbur d~vkgrp
                     d~mvgr1  h~wadat_ist d~pstyv
                     d~werks
             INTO (rt_outtab-vbeln, rt_outtab-kunnr,
                    rt_outtab-kunag, rt_outtab-posnr,
                    rt_outtab-matnr, rt_outtab-anzsn,
                    rt_outtab-serail, rt_outtab-vgbel,
                    rt_outtab-vgpos,  rt_outtab-posnv,
                    rt_outtab-lfimg,  rt_outtab-arktx,
                    rt_outtab-uecha, rt_outtab-lfart,
                    rt_outtab-erdat, rt_outtab-ernam,
                    rt_outtab-lfdat, rt_outtab-prodh,
                    rt_outtab-vkorg, rt_outtab-vkbur,
                    rt_outtab-vkgrp, rt_outtab-mvgr1,
                    rt_outtab-wadat, rt_outtab-pstyv,
                    rt_outtab-werks)
            FROM likp AS h INNER JOIN lips AS d
                     ON h~vbeln = d~vbeln
                    WHERE h~vbeln IN s_vbeln
                    AND  h~vkorg IN s_vkorg
                    AND  h~lfart IN s_lfart
                     AND  h~kunnr IN s_kunnr
                     AND  h~wadat IN s_wadat
                     AND  d~matnr IN s_matnr
                     AND  d~werks IN s_werks
                     AND  d~prodh IN s_prodh
                     AND  d~vgbel IN s_vbelv
                     AND  d~matnr LIKE 'S%'.
        SELECT SINGLE * FROM vbak WHERE vbeln = rt_outtab-vgbel.
        IF: sy-subrc EQ 0.
          MOVE vbak-vbeln TO rt_outtab-vgbel.
          MOVE vbak-auart TO rt_outtab-auart.
        ENDIF.
        SELECT SINGLE * FROM mara WHERE matnr = rt_outtab-matnr
                                    AND  mtart EQ 'FERT'.
        CHECK sy-subrc EQ 0.
        IF NOT rt_outtab-posnv IS INITIAL.
          rt_outtab-vgpos = rt_outtab-posnv.
        ENDIF.
        CLEAR: vbfa.
        SELECT SINGLE vbeln posnn rfwrt INTO
        (rt_outtab-vbelv,  rt_outtab-posnn, rt_outtab-netwr)
        FROM vbfa  WHERE vbelv EQ rt_outtab-vbeln
                                  AND   posnv EQ rt_outtab-posnr
                                  AND   vbtyp_n EQ 'M'.
        CLEAR : rt_outtab-invvalue.
        SELECT SINGLE * FROM vbrp WHERE vbeln = rt_outtab-vbelv
          AND posnr = rt_outtab-posnn.
        rt_outtab-fkimg = vbrp-fkimg.
        IF rt_outtab-fkimg NE 0.
          rt_outtab-invvalue = rt_outtab-netwr / rt_outtab-fkimg.
        ENDIF.
        APPEND rt_outtab.
        IF NOT  r_vbeln-low IS INITIAL.
          IF r_vbeln-low GT rt_outtab-vbeln.
            r_vbeln-low =  rt_outtab-vbeln.
          ENDIF.
          IF r_vbeln-high LT rt_outtab-vbeln.
            r_vbeln-high =  rt_outtab-vbeln.
          ENDIF.
        ELSE.
          r_vbeln-low  =  rt_outtab-vbeln.
          r_vbeln-high =  rt_outtab-vbeln.
        ENDIF.
        CLEAR: rt_outtab.
      ENDSELECT.
    IF NOT rt_outtab[] IS INITIAL.
       SELECT vbeln posnr bstkd INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
       FROM vbkd
         FOR ALL ENTRIES IN rt_outtab
         WHERE vbeln = rt_outtab-vgbel
         AND posnr = rt_outtab-vgpos.
       IF NOT gt_vbkd[] IS INITIAL.
         SORT gt_vbkd BY vbeln posnr.
         LOOP AT rt_outtab.
           READ TABLE gt_vbkd WITH KEY vbeln = rt_outtab-vgbel
           posnr = rt_outtab-vgpos
           BINARY SEARCH.
           IF sy-subrc = 0.
             rt_outtab-bstkd = gt_vbkd-bstkd.
             MODIFY rt_outtab.
           ENDIF.
         ENDLOOP.
       ENDIF.
    ENDIF.
    *select bstkd INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
       from vbkd   where vbeln = gt_outtab-vbeln
                  and posnr = '000000'.
                 rt_outtab-bstkd = vbkd-bstkd .
       <i><b> select single bstkd into gt_vbkd
        from vbkd  where vbeln = rt_outtab-vbeln
                   and posnr = '000000'.
                   rt_outtab-bstkd = gt_vbkd-bstkd.
                  APPEND rt_outtab .</b></i>
      IF NOT r_vbeln IS INITIAL.
        MOVE: 'I' TO  r_vbeln-sign,
               'BT' TO  r_vbeln-option.
        APPEND r_vbeln.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE i_serial
                                  FROM   ser01 WHERE lief_nr IN r_vbeln.
      ENDIF.
      SORT i_serial.
      IF NOT i_serial[] IS INITIAL.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE i_object_numbers
                                   FROM   objk
                                   FOR ALL ENTRIES IN i_serial
                                   WHERE obknr EQ i_serial-obknr
                                   AND  taser EQ 'SER01'.
      ENDIF.
      SORT i_object_numbers BY  obknr obzae.
      LOOP AT rt_outtab.
        CLEAR: rt_outtab-name1, rt_outtab-sernr, rt_outtab-lfimg,
         rt_outtab-sernp, rt_outtab-kttxt.
    Read the Sold To Name
        SELECT SINGLE name1 INTO rt_outtab-name1
                          FROM kna1 WHERE kunnr EQ rt_outtab-kunnr.
    Read Ship-to Customer
        CLEAR: objk.
        IF NOT rt_outtab-serail IS INITIAL.
          READ TABLE i_serial WITH KEY lief_nr = rt_outtab-vbeln
                                        posnr = rt_outtab-posnr.
          IF sy-subrc EQ 0.
            DO i_serial-anzsn TIMES.
              CLEAR: rt_outtab-sernr, rt_outtab-sernp.
              READ TABLE i_object_numbers  WITH KEY obknr = i_serial-obknr
                                                    matnr = rt_outtab-matnr
                                                BINARY SEARCH.
              IF sy-subrc EQ 0.
                rt_outtab-sernr = i_object_numbers-sernr.
                DELETE i_object_numbers INDEX sy-tabix.
                MOVE '1'   TO rt_outtab-lfimg.
                CLEAR: rt_outtab-aufnr, rt_outtab-qmnum,
                         rt_outtab-equnr, rt_outtab-qmcod, g_mngrp, g_mnkat.
                SELECT SINGLE aufnr qmnum equnr qmcod qmgrp qmkat
                                     INTO (rt_outtab-aufnr, rt_outtab-qmnum,
                        rt_outtab-equnr, rt_outtab-qmcod, g_mngrp, g_mnkat)
                                 FROM viqmel  WHERE matnr = rt_outtab-matnr
                                        AND serialnr = rt_outtab-sernr
                                        AND qmart  EQ 'S4'
                                        AND qmnum IN s_qmnum.
                CLEAR: rt_outtab-cotxt.
                SELECT SINGLE kurztext INTO rt_outtab-cotxt
                                      FROM qpct WHERE katalogart EQ g_mnkat
                                         AND codegruppe EQ  g_mngrp
                                         AND code EQ rt_outtab-qmcod
                                         AND sprache EQ sy-langu.
    Read Serial Number from Name Plate Data.
                CLEAR: klah, kssk, ausp, cabn, g_atinn.
                SELECT SINGLE atinn INTO (g_atinn) FROM cabn
                                    WHERE atnam = 'SBANK_SERIAL_NUMBER'.
                SELECT SINGLE  atwrt
                      INTO  (rt_outtab-sernp)
                      FROM  ( klah AS a INNER JOIN kssk AS k
                               ON aclint = kclint )
                          JOIN ausp AS p
                                ON kobjek = pobjek
                                AND p~atinn = g_atinn
                                AND pklart = aklart
                      WHERE a~klart = '002'
                       AND  a~class = 'KSE_SN_ENDOSCOPES'
                        AND  k~objek = rt_outtab-equnr.
    *KSE Repair level (activity code text from KSE-SM07 code group)
                CLEAR: rt_outtab-qmcol, g_mngrp, g_mnkat.
                CLEAR: rt_outtab-qmcol.
                CLEAR:   g_mnkat, g_mngrp.
                SELECT SINGLE mnkat mngrp mncod INTO
                                    (g_mnkat, g_mngrp, rt_outtab-qmcol)
                              FROM viqmma WHERE qmnum = rt_outtab-qmnum
                                    AND  mngrp EQ 'KSE-SM07'
                                    AND kzloesch EQ space.
                CLEAR: rt_outtab-kttxt.
                SELECT SINGLE kurztext INTO rt_outtab-kttxt
                             FROM qpct WHERE katalogart EQ g_mnkat
                                    AND codegruppe EQ  g_mngrp
                                    AND code EQ rt_outtab-qmcol
                                    AND sprache EQ sy-langu.
                rt_outtab1 = rt_outtab.
                APPEND rt_outtab1.
              ENDIF.
            ENDDO.
          ENDIF.
        ENDIF.
      ENDLOOP.
      CLEAR: rt_outtab[].
      rt_outtab[] = rt_outtab1[].
      SORT rt_outtab BY vbeln posnr.
    ENDFORM.
          FORM get_repname                                              *
    -->  P_VBELN                                                       *
    -->  P_POSNR                                                       *
    -->  P_PERNR                                                       *
    -->  P_ENAME                                                       *
    FORM get_repname USING  p_vbeln
                              p_posnr
                     CHANGING  p_pernr
                              p_ename. "
      DATA: i_vbpa LIKE vbpa OCCURS 0 WITH HEADER LINE.
      CLEAR: i_vbpa[].
      CALL FUNCTION 'Z_DETERMINE_ACTIVE_SALES_REP'
           EXPORTING
                g_salesdocument = p_vbeln
                g_sales_item    = p_posnr
           TABLES
                st_vbpa         = i_vbpa.
      READ TABLE i_vbpa INDEX 1.
      IF sy-subrc = 0.
        p_pernr = i_vbpa-pernr.
        SELECT SINGLE ename INTO p_ename
          FROM pa0001
         WHERE pernr = i_vbpa-pernr.
      ENDIF.
    ENDFORM.                    " get_repname
          FORM E03_EVENTTAB_BUILD                                       *
    -->  E03_LT_EVENTS                                                 *
    FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event.
      DATA: ls_event TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                i_list_type = 0
           IMPORTING
                et_events   = e03_lt_events.
      READ TABLE e03_lt_events WITH KEY name =  slis_ev_top_of_page
                               INTO ls_event.
      IF sy-subrc = 0.
        MOVE gc_formname_top_of_page TO ls_event-form.
        APPEND ls_event TO e03_lt_events.
      ENDIF.
    ENDFORM.
          FORM TOP_OF_PAGE                                              *
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                it_list_commentary = gt_list_top_of_page.
    ENDFORM.
    *&      Form  USER_COMMAND
    FORM user_command  USING r_ucomm LIKE sy-ucomm
                             rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN '&IC1'.
          PERFORM display_delivery USING r_ucomm
                                        rs_selfield.
      ENDCASE.
    ENDFORM.
    *&      Form  display_delivery
    FORM display_delivery
    USING r_ucomm LIKE sy-ucomm
                                 rs_selfield TYPE slis_selfield.
      CASE rs_selfield-sel_tab_field.
        WHEN '1-VBELN'.
          SET PARAMETER ID 'VL' FIELD rs_selfield-value.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
        WHEN '1-VBELV'.
          SET PARAMETER ID 'VF' FIELD rs_selfield-value.
          CALL TRANSACTION 'VF03N' AND SKIP FIRST SCREEN.
      ENDCASE.
    ENDFORM.
    *&      Form  VARIANT_INIT
          text
    -->  p1        text
    <--  p2        text
    FORM variant_init.
      CLEAR g_variant.
      g_variant-report = g_repid.
    ENDFORM.                               " VARIANT_INIT
    *&      Form  F4_FOR_VARIANT
          text
    -->  p1        text
    <--  p2        text
    FORM f4_for_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = g_variant
                i_save              = g_save
              it_default_fieldcat =
           IMPORTING
                e_exit              = g_exit
                es_variant          = gx_variant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF g_exit = space.
          p_vari = gx_variant-variant.
        ENDIF.
      ENDIF.
    ENDFORM.
    *&      Form  PAI_OF_SELECTION_SCREEN
          text
    FORM pai_of_selection_screen.
      IF NOT p_vari IS INITIAL.
        MOVE g_variant TO gx_variant.
        MOVE p_vari TO gx_variant-variant.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  i_save     = g_save
             CHANGING
                  cs_variant = gx_variant.
        g_variant = gx_variant.
      ELSE.
        PERFORM variant_init.
      ENDIF.
    ENDFORM.

    naren this is the program
    Global structure of list
    TYPE-POOLS: slis.
    TABLES: likp,
            lips,
            vbfa,
            kssk,
            klah,
            ausp,
            cabn,
            vbak,
            mara,
            vbrk,
            ser01,
            vbpa,
            vbrp,
            nast,
            zseri,
            ltap,
            pa0001,
            kna1,
            objk,
            viqmel,
            viqmma.
    TYPES:  BEGIN OF i_delivery,
                 vbeln LIKE likp-vbeln,
                 posnr  LIKE lips-posnr,
                 kunnr LIKE likp-kunnr,
                 kunag LIKE likp-kunag,
                 vkorg  LIKE vbak-vkorg,
                 matnr  LIKE lips-matnr,
                 lfart  LIKE likp-lfart,
                 arktx  LIKE vbap-arktx,
                 vgbel  LIKE lips-vgbel,
                 vgpos  LIKE lips-vgpos,
                 pstyv   LIKE lips-pstyv,
                 wadat TYPE likp-wadat_ist,
                 lfdat TYPE likp-lfdat,
                 prodh TYPE lips-prodh,
                 lfimg TYPE lips-lfimg,
                 vkbur TYPE lips-vkbur,
                 werks TYPE lips-werks,
                 vkgrp TYPE lips-vkgrp,
                 mvgr1 TYPE lips-mvgr1,
                 sernr LIKE equi-sernr,
                 sernp LIKE equi-sernr,
                 equnr LIKE equi-equnr,
                 kttxt LIKE qpct-kurztext,
                 fkimg LIKE vbrp-fkimg,
                 bstnk  LIKE vbak-bstnk,
                 vbelv  LIKE lips-vgbel,
                 posnv  LIKE lips-posnv,
                 uecha  LIKE lips-uecha,
                 ernam  LIKE vbak-ernam,
                 erdat LIKE vbak-erdat,
                 serail LIKE lips-serail,
                 anzsn LIKE lips-anzsn,
                 auart LIKE vbak-auart ,
                 netwr LIKE vbap-netwr,
                 fstno LIKE vbpa-pernr,
                 fstnm LIKE pa0001-ename,
                 ename LIKE pa0001-ename,
                 qname LIKE ltap-qname,
                 name1 LIKE kna1-name1,
                 name3 LIKE kna1-name2,
                 pernr LIKE vbpa-pernr,
                 aufnr LIKE viqmel-aufnr,
                 qmnum LIKE viqmel-qmnum,
                 mngrp LIKE viqmma-mngrp,
                 qmcod LIKE viqmel-qmcod,
                 qmcol LIKE viqmma-mncod,
                 cotxt(20),
                 invvalue LIKE vbrp-netwr,
                 posnn LIKE vbfa-posnn,
                 bstkd LIKE vbkd-bstkd,
             END OF i_delivery.
    Global structure of list
    */ Selection and Input Parameters
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-003.
    SELECT-OPTIONS: s_vkorg FOR likp-vkorg NO INTERVALS.
    SELECT-OPTIONS: s_vbeln  FOR likp-vbeln,
                    s_lfart  FOR likp-lfart,
                    s_kunnr  FOR likp-kunnr,
                    s_erdat  FOR likp-erdat,
                    s_wadat  FOR likp-wadat_ist,
                    s_werks  FOR lips-werks,
                    s_matnr  FOR lips-matnr,
                    s_prodh  FOR lips-prodh,
                    s_qmnum FOR viqmel-qmnum.
    SELECTION-SCREEN END OF BLOCK block2.
    SELECTION-SCREEN BEGIN OF BLOCK block4 WITH FRAME TITLE text-002.
    SELECT-OPTIONS:  s_vbelv FOR vbak-vbeln,
                     s_auart FOR vbak-auart.
    SELECTION-SCREEN END OF BLOCK block4.
    PARAMETERS: p_vari LIKE disvariant-variant.
    RANGES: r_vbeln FOR likp-vbeln.
    DATA:   gt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA:   gt_outtab TYPE i_delivery OCCURS 0 WITH HEADER LINE,
            rt_outtab1 TYPE i_delivery OCCURS 0 WITH HEADER LINE,
            i_nast TYPE nast OCCURS 0 WITH HEADER LINE,
            gt_list_top_of_page TYPE slis_t_listheader,
            gt_events   TYPE slis_t_event,
            gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
    DATA:   g_repid LIKE sy-repid,
             g_count LIKE sy-tabix.
    DATA: BEGIN OF i_serial OCCURS 0,
            obknr TYPE ser01-obknr,
            lief_nr TYPE ser01-lief_nr,
            posnr TYPE ser01-posnr,
            anzsn TYPE ser01-anzsn,
          END OF i_serial.
    DATA: BEGIN OF i_object_numbers OCCURS 0,
            obknr TYPE objk-obknr,
            obzae TYPE objk-obzae,
            sernr TYPE objk-sernr,
            equnr TYPE objk-equnr,
            matnr TYPE objk-matnr,
            taser TYPE objk-taser,
          END OF i_object_numbers.
    DATA:   g_save(1) TYPE c,
           g_default(1) TYPE c,
            g_exit(1) TYPE c,
            gx_variant LIKE disvariant,
            g_variant LIKE disvariant.
    DATA:  g_mnkat LIKE viqmma-mnkat,
           g_mngrp LIKE viqmma-mngrp,
           g_atinn LIKE ausp-atinn.
    DATA: gt_vbkd TYPE TABLE OF vbkd WITH HEADER LINE.
    Initialization fieldcatalog
    INITIALIZATION.
      g_repid = sy-repid.
      PERFORM fieldcat_init USING gt_fieldcat[].
      MOVE: 'I' TO  s_vkorg-sign,
            'EQ' TO  s_vkorg-option,
            '5090' TO s_vkorg-low.
      APPEND  s_vkorg.
      MOVE: 'I' TO  s_lfart-sign,
           'EQ' TO s_lfart-option,
           'LF' TO s_lfart-low.
      APPEND  s_lfart.
      g_save = 'A'.
      PERFORM variant_init.
    Get default variant
      gx_variant = g_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save     = g_save
           CHANGING
                cs_variant = gx_variant
           EXCEPTIONS
                not_found  = 2.
      IF sy-subrc = 0.
        p_vari = gx_variant-variant.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM f4_for_variant.
    AT SELECTION-SCREEN.
      PERFORM pai_of_selection_screen.
    Start of Selection
    START-OF-SELECTION.
      PERFORM e03_eventtab_build USING gt_events[].
      PERFORM select_data TABLES gt_outtab.
    Display list
    END-OF-SELECTION.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_background_id         = 'ALV_BACKGROUND'
                i_callback_user_command = 'USER_COMMAND'
                is_variant              = g_variant
                i_save                  = g_save
                i_callback_program      = g_repid
                it_fieldcat             = gt_fieldcat[]
           TABLES
                t_outtab                = gt_outtab.
       Forms
    Initialization fieldcatalog
    FORM fieldcat_init
          USING rt_fieldcat TYPE slis_t_fieldcat_alv.
      DATA: ls_fieldcat TYPE slis_fieldcat_alv.
      DATA: pos TYPE i VALUE 1.
      CLEAR ls_fieldcat.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VBELN'.
      ls_fieldcat-seltext_s     = 'Delivery'.
      ls_fieldcat-seltext_m     = 'Delivery'.
      ls_fieldcat-key           = 'X'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'BSTKD'.
      ls_fieldcat-seltext_s     = 'PO Number'.
      ls_fieldcat-seltext_m     = 'PO Number'.
      ls_fieldcat-key           = 'X'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'POSNR'.
      ls_fieldcat-key           = 'X'.
      ls_fieldcat-seltext_s     = 'Item'.
      ls_fieldcat-seltext_m     = 'Item'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'LFART'.
      ls_fieldcat-seltext_s     = 'Del Type'.
      ls_fieldcat-seltext_m     = 'Delivery Type'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VGBEL'.
      ls_fieldcat-seltext_s     = 'Source Doc'.
      ls_fieldcat-seltext_m     = 'Source Doc'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'AUART'.
      ls_fieldcat-seltext_s     = 'Type'.
      ls_fieldcat-seltext_m     = 'Type'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'KUNNR'.
      ls_fieldcat-seltext_s     = 'Customer'.
      ls_fieldcat-seltext_m     = 'Customer'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'NAME1'.
      ls_fieldcat-seltext_s     = 'Name'.
      ls_fieldcat-seltext_m     = 'Name1'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'WERKS'.
      ls_fieldcat-seltext_s     = 'Plant'.
      ls_fieldcat-seltext_m     = 'Plant'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'MATNR'.
      ls_fieldcat-seltext_s     = 'Material'.
      ls_fieldcat-seltext_m     = 'Material'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'MVGR1'.
      ls_fieldcat-seltext_s     = 'Speciality'.
      ls_fieldcat-seltext_m     = 'Speciality'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'PRODH'.
      ls_fieldcat-seltext_s     = 'Hierarchy'.
      ls_fieldcat-seltext_m     = 'Prod Hierarchy'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ARKTX'.
      ls_fieldcat-seltext_s     = 'Description'.
      ls_fieldcat-seltext_m     = 'Description'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ERNAM'.
      ls_fieldcat-seltext_s     = 'Created By'.
      ls_fieldcat-seltext_m     = 'Created By'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'ERDAT'.
      ls_fieldcat-seltext_s     = 'Created On'.
      ls_fieldcat-seltext_m     = 'Created On'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'WADAT_IST'.
      ls_fieldcat-seltext_s     = 'GoodsMvt.Date'.
      ls_fieldcat-seltext_m     = 'Goods Mvt Date'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'SERNR'.
      ls_fieldcat-seltext_s     = 'Serial Shipped'.
      ls_fieldcat-seltext_m     = 'Serial Shipped'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'SERNP'.
      ls_fieldcat-seltext_s     = 'Old Serial'.
      ls_fieldcat-seltext_m     = 'Old Serial'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'VBELV'.
      ls_fieldcat-seltext_s     = 'Invoice'.
      ls_fieldcat-seltext_m     = 'Invoice'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'INVVALUE'.
      ls_fieldcat-seltext_s     = 'Invoice Amt'.
      ls_fieldcat-seltext_m     = 'Invoice Value'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMNUM'.
      ls_fieldcat-seltext_s     = 'Notification'.
      ls_fieldcat-seltext_m     = 'Notification'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMCOD'.
      ls_fieldcat-seltext_s     = 'Rep LevKST'.
      ls_fieldcat-seltext_m     = 'Repair Level KST'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'COTXT'.
      ls_fieldcat-seltext_s     = 'CdTXT KST'.
      ls_fieldcat-seltext_m     = 'Repair Level Text KST'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'QMCOL'.
      ls_fieldcat-seltext_s     = 'Rep LevKSE'.
      ls_fieldcat-seltext_m     = 'Repair Level KSE'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
      pos = pos + 1.
      ls_fieldcat-col_pos       =  pos.
      ls_fieldcat-fieldname     = 'KTTXT'.
      ls_fieldcat-seltext_s     = 'CdTXT KSE'.
      ls_fieldcat-seltext_m     = 'Repair Level Text KSE'.
      APPEND ls_fieldcat TO rt_fieldcat.
      CLEAR ls_fieldcat.
    ENDFORM.   "fieldcat_init
    Data selection
    FORM select_data TABLES rt_outtab LIKE gt_outtab[].
      CLEAR: r_vbeln[].
    Read all Invoices for the Selection
      SELECT DISTINCT h~vbeln  h~kunnr h~kunag
                     d~posnr  d~matnr d~anzsn
                     d~serail d~vgbel d~vgpos
                     d~posnv  d~lfimg d~arktx
                     d~uecha  h~lfart h~erdat
                     h~ernam  h~lfdat d~prodh
                     h~vkorg  d~vkbur d~vkgrp
                     d~mvgr1  h~wadat_ist d~pstyv
                     d~werks
             INTO (rt_outtab-vbeln, rt_outtab-kunnr,
                    rt_outtab-kunag, rt_outtab-posnr,
                    rt_outtab-matnr, rt_outtab-anzsn,
                    rt_outtab-serail, rt_outtab-vgbel,
                    rt_outtab-vgpos,  rt_outtab-posnv,
                    rt_outtab-lfimg,  rt_outtab-arktx,
                    rt_outtab-uecha, rt_outtab-lfart,
                    rt_outtab-erdat, rt_outtab-ernam,
                    rt_outtab-lfdat, rt_outtab-prodh,
                    rt_outtab-vkorg, rt_outtab-vkbur,
                    rt_outtab-vkgrp, rt_outtab-mvgr1,
                    rt_outtab-wadat, rt_outtab-pstyv,
                    rt_outtab-werks)
            FROM likp AS h INNER JOIN lips AS d
                     ON h~vbeln = d~vbeln
                    WHERE h~vbeln IN s_vbeln
                    AND  h~vkorg IN s_vkorg
                    AND  h~lfart IN s_lfart
                     AND  h~kunnr IN s_kunnr
                     AND  h~wadat IN s_wadat
                     AND  d~matnr IN s_matnr
                     AND  d~werks IN s_werks
                     AND  d~prodh IN s_prodh
                     AND  d~vgbel IN s_vbelv
                     AND  d~matnr LIKE 'S%'.
        SELECT SINGLE * FROM vbak WHERE vbeln = rt_outtab-vgbel.
        IF: sy-subrc EQ 0.
          MOVE vbak-vbeln TO rt_outtab-vgbel.
          MOVE vbak-auart TO rt_outtab-auart.
        ENDIF.
        SELECT SINGLE * FROM mara WHERE matnr = rt_outtab-matnr
                                    AND  mtart EQ 'FERT'.
        CHECK sy-subrc EQ 0.
        IF NOT rt_outtab-posnv IS INITIAL.
          rt_outtab-vgpos = rt_outtab-posnv.
        ENDIF.
        CLEAR: vbfa.
        SELECT SINGLE vbeln posnn rfwrt INTO
        (rt_outtab-vbelv,  rt_outtab-posnn, rt_outtab-netwr)
        FROM vbfa  WHERE vbelv EQ rt_outtab-vbeln
                                  AND   posnv EQ rt_outtab-posnr
                                  AND   vbtyp_n EQ 'M'.
        CLEAR : rt_outtab-invvalue.
        SELECT SINGLE * FROM vbrp WHERE vbeln = rt_outtab-vbelv
          AND posnr = rt_outtab-posnn.
        rt_outtab-fkimg = vbrp-fkimg.
        IF rt_outtab-fkimg NE 0.
          rt_outtab-invvalue = rt_outtab-netwr / rt_outtab-fkimg.
        ENDIF.
        APPEND rt_outtab.
        IF NOT  r_vbeln-low IS INITIAL.
          IF r_vbeln-low GT rt_outtab-vbeln.
            r_vbeln-low =  rt_outtab-vbeln.
          ENDIF.
          IF r_vbeln-high LT rt_outtab-vbeln.
            r_vbeln-high =  rt_outtab-vbeln.
          ENDIF.
        ELSE.
          r_vbeln-low  =  rt_outtab-vbeln.
          r_vbeln-high =  rt_outtab-vbeln.
        ENDIF.
        CLEAR: rt_outtab.
      ENDSELECT.
    IF NOT rt_outtab[] IS INITIAL.
       SELECT vbeln posnr bstkd INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
       FROM vbkd
         FOR ALL ENTRIES IN rt_outtab
         WHERE vbeln = rt_outtab-vgbel
         AND posnr = rt_outtab-vgpos.
       IF NOT gt_vbkd[] IS INITIAL.
         SORT gt_vbkd BY vbeln posnr.
         LOOP AT rt_outtab.
           READ TABLE gt_vbkd WITH KEY vbeln = rt_outtab-vgbel
           posnr = rt_outtab-vgpos
           BINARY SEARCH.
           IF sy-subrc = 0.
             rt_outtab-bstkd = gt_vbkd-bstkd.
             MODIFY rt_outtab.
           ENDIF.
         ENDLOOP.
       ENDIF.
    ENDIF.
    *select bstkd INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
       from vbkd   where vbeln = gt_outtab-vbeln
                  and posnr = '000000'.
                 rt_outtab-bstkd = vbkd-bstkd .
      SELECT single bstkd INTO CORRESPONDING FIELDS OF gt_vbkd
      FROM vbkd WHERE vbeln = gt_vbkd-vbeln
      AND posnr = '000000'.
      rt_outtab-bstkd = gt_vbkd-bstkd.
      APPEND rt_outtab.
      IF NOT r_vbeln IS INITIAL.
        MOVE: 'I' TO  r_vbeln-sign,
               'BT' TO  r_vbeln-option.
        APPEND r_vbeln.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE i_serial
                                  FROM   ser01 WHERE lief_nr IN r_vbeln.
      ENDIF.
      SORT i_serial.
      IF NOT i_serial[] IS INITIAL.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE i_object_numbers
                                   FROM   objk
                                   FOR ALL ENTRIES IN i_serial
                                   WHERE obknr EQ i_serial-obknr
                                   AND  taser EQ 'SER01'.
      ENDIF.
      SORT i_object_numbers BY  obknr obzae.
      LOOP AT rt_outtab.
        CLEAR: rt_outtab-name1, rt_outtab-sernr, rt_outtab-lfimg,
         rt_outtab-sernp, rt_outtab-kttxt.
    Read the Sold To Name
        SELECT SINGLE name1 INTO rt_outtab-name1
                          FROM kna1 WHERE kunnr EQ rt_outtab-kunnr.
    Read Ship-to Customer
        CLEAR: objk.
        IF NOT rt_outtab-serail IS INITIAL.
          READ TABLE i_serial WITH KEY lief_nr = rt_outtab-vbeln
                                        posnr = rt_outtab-posnr.
          IF sy-subrc EQ 0.
            DO i_serial-anzsn TIMES.
              CLEAR: rt_outtab-sernr, rt_outtab-sernp.
              READ TABLE i_object_numbers  WITH KEY obknr = i_serial-obknr
                                                    matnr = rt_outtab-matnr
                                                BINARY SEARCH.
              IF sy-subrc EQ 0.
                rt_outtab-sernr = i_object_numbers-sernr.
                DELETE i_object_numbers INDEX sy-tabix.
                MOVE '1'   TO rt_outtab-lfimg.
                CLEAR: rt_outtab-aufnr, rt_outtab-qmnum,
                         rt_outtab-equnr, rt_outtab-qmcod, g_mngrp, g_mnkat.
                SELECT SINGLE aufnr qmnum equnr qmcod qmgrp qmkat
                                     INTO (rt_outtab-aufnr, rt_outtab-qmnum,
                        rt_outtab-equnr, rt_outtab-qmcod, g_mngrp, g_mnkat)
                                 FROM viqmel  WHERE matnr = rt_outtab-matnr
                                        AND serialnr = rt_outtab-sernr
                                        AND qmart  EQ 'S4'
                                        AND qmnum IN s_qmnum.
                CLEAR: rt_outtab-cotxt.
                SELECT SINGLE kurztext INTO rt_outtab-cotxt
                                      FROM qpct WHERE katalogart EQ g_mnkat
                                         AND codegruppe EQ  g_mngrp
                                         AND code EQ rt_outtab-qmcod
                                         AND sprache EQ sy-langu.
    Read Serial Number from Name Plate Data.
                CLEAR: klah, kssk, ausp, cabn, g_atinn.
                SELECT SINGLE atinn INTO (g_atinn) FROM cabn
                                    WHERE atnam = 'SBANK_SERIAL_NUMBER'.
                SELECT SINGLE  atwrt
                      INTO  (rt_outtab-sernp)
                      FROM  ( klah AS a INNER JOIN kssk AS k
                               ON aclint = kclint )
                          JOIN ausp AS p
                                ON kobjek = pobjek
                                AND p~atinn = g_atinn
                                AND pklart = aklart
                      WHERE a~klart = '002'
                       AND  a~class = 'KSE_SN_ENDOSCOPES'
                        AND  k~objek = rt_outtab-equnr.
    *KSE Repair level (activity code text from KSE-SM07 code group)
                CLEAR: rt_outtab-qmcol, g_mngrp, g_mnkat.
                CLEAR: rt_outtab-qmcol.
                CLEAR:   g_mnkat, g_mngrp.
                SELECT SINGLE mnkat mngrp mncod INTO
                                    (g_mnkat, g_mngrp, rt_outtab-qmcol)
                              FROM viqmma WHERE qmnum = rt_outtab-qmnum
                                    AND  mngrp EQ 'KSE-SM07'
                                    AND kzloesch EQ space.
                CLEAR: rt_outtab-kttxt.
                SELECT SINGLE kurztext INTO rt_outtab-kttxt
                             FROM qpct WHERE katalogart EQ g_mnkat
                                    AND codegruppe EQ  g_mngrp
                                    AND code EQ rt_outtab-qmcol
                                    AND sprache EQ sy-langu.
                rt_outtab1 = rt_outtab.
                APPEND rt_outtab1.
              ENDIF.
            ENDDO.
          ENDIF.
        ENDIF.
      ENDLOOP.
      CLEAR: rt_outtab[].
      rt_outtab[] = rt_outtab1[].
      SORT rt_outtab BY vbeln posnr.
    ENDFORM.
          FORM get_repname                                              *
    -->  P_VBELN                                                       *
    -->  P_POSNR                                                       *
    -->  P_PERNR                                                       *
    -->  P_ENAME                                                       *
    FORM get_repname USING  p_vbeln
                              p_posnr
                     CHANGING  p_pernr
                              p_ename. "
      DATA: i_vbpa LIKE vbpa OCCURS 0 WITH HEADER LINE.
      CLEAR: i_vbpa[].
      CALL FUNCTION 'Z_DETERMINE_ACTIVE_SALES_REP'
           EXPORTING
                g_salesdocument = p_vbeln
                g_sales_item    = p_posnr
           TABLES
                st_vbpa         = i_vbpa.
      READ TABLE i_vbpa INDEX 1.
      IF sy-subrc = 0.
        p_pernr = i_vbpa-pernr.
        SELECT SINGLE ename INTO p_ename
          FROM pa0001
         WHERE pernr = i_vbpa-pernr.
      ENDIF.
    ENDFORM.                    " get_repname
          FORM E03_EVENTTAB_BUILD                                       *
    -->  E03_LT_EVENTS                                                 *
    FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event.
      DATA: ls_event TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                i_list_type = 0
           IMPORTING
                et_events   = e03_lt_events.
      READ TABLE e03_lt_events WITH KEY name =  slis_ev_top_of_page
                               INTO ls_event.
      IF sy-subrc = 0.
        MOVE gc_formname_top_of_page TO ls_event-form.
        APPEND ls_event TO e03_lt_events.
      ENDIF.
    ENDFORM.
          FORM TOP_OF_PAGE                                              *
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                it_list_commentary = gt_list_top_of_page.
    ENDFORM.
    *&      Form  USER_COMMAND
    FORM user_command  USING r_ucomm LIKE sy-ucomm
                             rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN '&IC1'.
          PERFORM display_delivery USING r_ucomm
                                        rs_selfield.
      ENDCASE.
    ENDFORM.
    *&      Form  display_delivery
    FORM display_delivery
    USING r_ucomm LIKE sy-ucomm
                                 rs_selfield TYPE slis_selfield.
      CASE rs_selfield-sel_tab_field.
        WHEN '1-VBELN'.
          SET PARAMETER ID 'VL' FIELD rs_selfield-value.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
        WHEN '1-VBELV'.
          SET PARAMETER ID 'VF' FIELD rs_selfield-value.
          CALL TRANSACTION 'VF03N' AND SKIP FIRST SCREEN.
      ENDCASE.
    ENDFORM.
    *&      Form  VARIANT_INIT
          text
    -->  p1        text
    <--  p2        text
    FORM variant_init.
      CLEAR g_variant.
      g_variant-report = g_repid.
    ENDFORM.                               " VARIANT_INIT
    *&      Form  F4_FOR_VARIANT
          text
    -->  p1        text
    <--  p2        text
    FORM f4_for_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = g_variant
                i_save              = g_save
              it_default_fieldcat =
           IMPORTING
                e_exit              = g_exit
                es_variant          = gx_variant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF g_exit = space.
          p_vari = gx_variant-variant.
        ENDIF.
      ENDIF.
    ENDFORM.
    *&      Form  PAI_OF_SELECTION_SCREEN
          text
    FORM pai_of_selection_screen.
      IF NOT p_vari IS INITIAL.
        MOVE g_variant TO gx_variant.
        MOVE p_vari TO gx_variant-variant.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  i_save     = g_save
             CHANGING
                  cs_variant = gx_variant.
        g_variant = gx_variant.
      ELSE.
        PERFORM variant_init.
      ENDIF.
    ENDFORM.

  • Last digit truncates while downloading to Excel from ALV Grid

    Hi All,
    I have been using REUSE_ALV_LIST_DISPLAY and REUSE_ALV_GRID_DISPLAY in my report program.
    While i use REUSE_ALV_GRID_DISPLAY and downloading the data to a local file(Excel) the last digit of the Vendor code is truncated. But in REUSE_ALV_LIST_DISPLAY the datas are downloaded correctly as displayed in the ALV.
    I have copied the code for the reference.
    REPORT  zfirp001                                .
    TYPE-POOLS: slis.
    TABLES: bsak.
    SELECT-OPTIONS:  s_bukrs FOR bsak-bukrs,
                     s_lifnr FOR bsak-lifnr,
                     s_blart FOR bsak-blart,
                     s_augdt FOR bsak-augdt,
                     s_zterm FOR bsak-zterm.
    PARAMETERS:      s_list AS CHECKBOX,
                     s_vari LIKE disvariant-variant.
    DATA: g_ext_num(24) TYPE c.
    DATA: BEGIN OF gt_bsak OCCURS 0,
            bukrs LIKE bsak-bukrs,
            lifnr LIKE bsak-lifnr,
            augdt LIKE bsak-augdt,
            gjahr LIKE bsak-gjahr,
            belnr LIKE bsak-belnr,
            blart LIKE bsak-blart,
            zterm LIKE bsak-zterm,
          END OF gt_bsak.
    DATA: BEGIN OF gt_bseg OCCURS 0,
            bukrs LIKE bseg-bukrs,
            belnr LIKE bseg-belnr,
            gjahr LIKE bseg-gjahr,
            wrbtr LIKE bseg-wrbtr,
            projk LIKE bseg-projk,
            shkzg LIKE bseg-shkzg,
            hkont LIKE bseg-hkont,
          END OF gt_bseg.
    ALV
    DATA: gt_fieldtab TYPE slis_t_fieldcat_alv,
          g_save(1)   TYPE c,
          g_variant   LIKE disvariant.
    DATA: BEGIN OF gt_result OCCURS 0,
            bukrs       LIKE bsak-bukrs,
            lifnr       LIKE bsak-lifnr,
            name1       LIKE lfa1-name1,
            augdt       LIKE bsak-augdt,
            gjahr       LIKE bsak-gjahr,
            belnr       LIKE bsak-belnr,
            blart       LIKE bsak-blart,
            zterm       LIKE bsak-zterm,
            wrbtr       LIKE bseg-wrbtr,
            waers       LIKE bkpf-waers,
            ext_num(24) TYPE c,
            txt20       LIKE skat-txt20,
            usr00       LIKE prps-usr00,
            usr01       LIKE prps-usr01,
            usr02       LIKE prps-usr02,
            usr03       LIKE prps-usr03,
          END OF gt_result.
    CONSTANTS: c_credit(1)       TYPE c VALUE 'H',
               c_x(1)            TYPE c VALUE 'X',
               c_en(2)           TYPE c VALUE 'EN',
               c_mrc(4)          TYPE c VALUE 'CA01'.
    *====================================================
    INITIALIZATION.
      PERFORM initialize_variant.
    AT SELECTION-SCREEN.
      PERFORM pai_of_selection_screen.
    *====================================================
    START-OF-SELECTION.
      REFRESH gt_result.
    find clearing documents
      SELECT        bukrs
                    lifnr
                    augdt
                    gjahr
                    belnr
                    blart
                    zterm
             INTO   TABLE gt_bsak
             FROM   bsak
             WHERE  bukrs  IN s_bukrs
             AND    lifnr  IN s_lifnr
             AND    augdt  IN s_augdt
             AND    blart  IN s_blart
             AND    zterm  IN s_zterm.
      CHECK NOT gt_bsak[] IS INITIAL.
      LOOP AT gt_bsak.
    read WBS items
        SELECT        bukrs
                      belnr
                      gjahr
                      dmbtr
                      projk
                      shkzg
                      hkont
               INTO   TABLE  gt_bseg
               FROM   bseg
               WHERE  bukrs  = gt_bsak-bukrs
               AND    belnr  = gt_bsak-belnr
               AND    gjahr  = gt_bsak-gjahr
               AND    projk  > space.
        gt_result-bukrs = gt_bsak-bukrs.
        gt_result-lifnr = gt_bsak-lifnr.
        gt_result-augdt = gt_bsak-augdt.
        gt_result-belnr = gt_bsak-belnr.
        gt_result-gjahr = gt_bsak-gjahr.
        gt_result-blart = gt_bsak-blart.
        gt_result-zterm = gt_bsak-zterm.
    document currency
        SELECT SINGLE waers
               INTO   gt_result-waers
               FROM   bkpf
               WHERE  bukrs  = gt_bsak-bukrs
               AND    belnr  = gt_bsak-belnr
               AND    gjahr  = gt_bsak-gjahr.
    vendor name
        SELECT SINGLE name1
               INTO   gt_result-name1
               FROM   lfa1
               WHERE  lifnr  = gt_result-lifnr.
    for each accounting document
        LOOP AT gt_bseg.
    convert to external WBS
          CALL FUNCTION 'PSPNUM_INTERN_TO_EXTERN_CONV'
            EXPORTING
              edit_imp  = c_x
              int_num   = gt_bseg-projk
            IMPORTING
              ext_num   = gt_result-ext_num
            EXCEPTIONS
              not_found = 1
              OTHERS    = 2.
    debit or credit
          IF gt_bseg-shkzg = c_credit.
            gt_result-wrbtr = gt_bseg-wrbtr.
          ELSE.
            gt_result-wrbtr = gt_bseg-wrbtr * -1.
          ENDIF.
    GL short Text
          SELECT SINGLE txt20
                 INTO   gt_result-txt20
                 FROM   skat
                 WHERE  spras  = c_en
                 AND    ktopl  = 'CA01'
                 AND    saknr  = gt_bseg-hkont.
    user fields
          SELECT SINGLE usr00
                        usr01
                        usr02
                        usr03
                 INTO  (gt_result-usr00,
                        gt_result-usr01,
                        gt_result-usr02,
                        gt_result-usr03)
                 FROM   prps
                 WHERE  pspnr  = gt_bseg-projk.
    append to result table
          APPEND gt_result.
        ENDLOOP.
      ENDLOOP.
    *====================================================
    END-OF-SELECTION.
      PERFORM initialize_fieldcat USING gt_fieldtab[].
      g_variant-report = sy-repid.
      g_save           = 'A'.
      IF s_list = 'X'.
        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
          EXPORTING
            it_fieldcat = gt_fieldtab
            i_default   = 'A'
            i_save      = g_save
            is_variant  = g_variant
          TABLES
            t_outtab    = gt_result.
      ELSE.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            it_fieldcat = gt_fieldtab
            i_default   = 'A'
            i_save      = g_save
            is_variant  = g_variant
          TABLES
            t_outtab    = gt_result.
      ENDIF.
    *&      Form  initialize_variant
    FORM initialize_variant.
      g_save = 'A'.
      CLEAR g_variant.
      g_variant-report = sy-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
        EXPORTING
          i_save     = g_save
        CHANGING
          cs_variant = g_variant
        EXCEPTIONS
          not_found  = 2.
      IF sy-subrc = 0.
        s_vari = g_variant-variant.
      ENDIF.
    ENDFORM.                               " INITIALIZE_VARIANT
    *&      Form  pai_of_selection_screen
    FORM pai_of_selection_screen.
      IF NOT s_vari IS INITIAL.
        MOVE s_vari TO g_variant-variant.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
          EXPORTING
            i_save     = g_save
          CHANGING
            cs_variant = g_variant.
      ELSE.
        PERFORM initialize_variant.
      ENDIF.
    ENDFORM.                    " PAI_OF_SELECTION_SCREEN
    *&      Form  initialize_fieldcat
    FORM initialize_fieldcat USING p_fieldtab TYPE slis_t_fieldcat_alv.
      DATA: l_fieldcat TYPE slis_fieldcat_alv.
      CLEAR l_fieldcat.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'BUKRS'.
      l_fieldcat-seltext_L  = 'Company'.
      l_fieldcat-outputlen  = '8'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'LIFNR'.
      l_fieldcat-seltext_L  = 'Vendor'.
      l_fieldcat-outputlen  = '10'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'NAME1'.
      l_fieldcat-seltext_L  = 'Name'.
      l_fieldcat-outputlen  = '35'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'AUGDT'.
      l_fieldcat-seltext_L  = 'Cleared'.
      l_fieldcat-outputlen  = '10'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'GJAHR'.
      l_fieldcat-seltext_L  = 'Year'.
      l_fieldcat-outputlen  = '5'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'BELNR'.
      l_fieldcat-seltext_L  = 'Document'.
      l_fieldcat-outputlen  = '10'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'BLART'.
      l_fieldcat-seltext_L  = 'Type'.
      l_fieldcat-outputlen  = '4'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'ZTERM'.
      l_fieldcat-seltext_L  = 'Pay Terms'.
      l_fieldcat-outputlen  = '4'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'WRBTR'.
      l_fieldcat-seltext_L  = 'Amount'.
      l_fieldcat-outputlen  = '13'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'WAERS'.
      l_fieldcat-seltext_L  = 'CURR'.
      l_fieldcat-outputlen  = '5'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'EXT_NUM'.
      l_fieldcat-seltext_L  = 'WBS'.
      l_fieldcat-outputlen  = '24'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'TXT20'.
      l_fieldcat-seltext_L  = 'Short Text'.
      l_fieldcat-outputlen  = '20'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'USR00'.
      l_fieldcat-seltext_L  = 'H/O File Ref'.
      l_fieldcat-outputlen  = '20'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'USR01'.
      l_fieldcat-seltext_L  = 'Local File Ref'.
      l_fieldcat-outputlen  = '20'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'USR02'.
      l_fieldcat-seltext_L  = 'INFORM Agree ID'.
      l_fieldcat-outputlen  = '10'.
      APPEND l_fieldcat TO p_fieldtab.
      l_fieldcat-tabname    = 'GT_RESULT'.
      l_fieldcat-fieldname  = 'USR03'.
      l_fieldcat-seltext_L  = 'INFM Prim Ag ID'.
      l_fieldcat-outputlen  = '10'.
      APPEND l_fieldcat TO p_fieldtab.
    ENDFORM.                    " INITIALIZE_FIELDCAT
    Could the experts do help to overcome the probs.
    Thanks in Advance.
    Regards,
    Anbalagan.V

    Hi Anbalagan,
    i've tested your program - but it works fine (Rel. 4.6C,SAPKB46C30)
    download is ok and direct transfer (excel inplace) is ok.
    but i've a question to the selection of waers in your program -
    why do you select waers from bkpf and not from bsak ?
    i think sel. of bkpf is'nt necessary !
    regards Andreas

  • Output the requested delivery date for each different line item

    Hello Experts
    I have program called ZFSFSF(following), in the output Its showing multiple requested delvery dates per line item.
    But We need to show the requested delivery date for each different line item.
    Any code is highly appreciated. I wud appreacite if you cud bold the added code.
    Thanks
    SP
    TYPE-POOLS: slis.
    TABLES: vbap, vbrk, vbfa, vbak, vbrp, konv, kna1, bkpf, bsad, bkpf_bsad,
    knvv, pa0002, t005u, mvke, lips, likp, vbpa, vbep.
    DATA: BEGIN OF i_list OCCURS 0,
    vbeln LIKE vbak-vbeln,
    posnr LIKE vbap-posnr,
    matnr LIKE vbap-matnr,
    erdat LIKE vbap-erdat,
    mvgr1 LIKE mvke-mvgr1,
    wadat_ist LIKE likp-wadat_ist,
    days TYPE i,
    werks LIKE vbap-werks,
    lgort LIKE vbap-lgort,
    kwmeng LIKE vbap-kwmeng," CH01+
    lfimg LIKE lips-lfimg," CH01+
    pstyv LIKE vbap-pstyv," CH01+
    obd LIKE lips-vbeln," CH01+
    obd_pos LIKE lips-posnr," CH01+
    soldto LIKE vbaK-kunnr," JR+
    shipto LIKE vbpa-kunnr," JR+
    edatu like vbep-edatu," PR+
    END OF i_list.
    DATA: i_list2 LIKE i_list OCCURS 0 WITH HEADER LINE,
    i_list3 LIKE i_list OCCURS 0 WITH HEADER LINE.
    DATA: i_list4 LIKE vbap OCCURS 0 WITH HEADER LINE.
    *ALV Output Header
    DATA: gt_list_top_of_page TYPE slis_t_listheader,
    prognm LIKE sy-repid,
    gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
    gt_events TYPE slis_t_event,
    is_layout TYPE slis_layout_alv,
    is_variant LIKE disvariant,
    it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    DATA:gt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA:gt_outtab LIKE i_list OCCURS 0 WITH HEADER LINE.
    DATA: g_repid LIKE sy-repid,
    g_count LIKE sy-tabix.
    SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t10.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t11.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t12.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN END OF BLOCK block0.
    */ Selection and Input Parameters
    SELECTION-SCREEN BEGIN OF BLOCK blocko WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_vbeln FOR vbap-vbeln, "SO
    s_auart FOR vbak-auart DEFAULT 'KB' OBLIGATORY,
    s_matnr FOR vbap-matnr," obligatory,
    s_mvgr1 FOR mvke-mvgr1,
    s_erdat FOR vbap-erdat OBLIGATORY,
    s_werks FOR vbap-werks,
    s_lgort FOR vbap-lgort,
    s_edatu FOR vbep-edatu.
    PARAMETERS: p_vkorg LIKE vbak-vkorg DEFAULT '5010'.
    SELECTION-SCREEN SKIP 2.
    +EC1
    Addition +EC1
    +EC1
    PARAMETERS: p_vari LIKE disvariant-variant.
    +EC1
    End Addition +EC1
    +EC1
    SELECTION-SCREEN END OF BLOCK blocko.
    +EC1
    Addition +EC1
    +EC1
    DATA: g_save(1) TYPE c,
    g_default(1) TYPE c,
    g_exit(1) TYPE c,
    gx_variant LIKE disvariant,
    g_variant LIKE disvariant.
    +EC1
    End Addition +EC1
    +EC1
    Initialization fieldcatalog
    INITIALIZATION.
    PERFORM clear_tables.
    g_repid = sy-repid.
    PERFORM fieldcat_init USING gt_fieldcat[].
    +EC1
    Addition +EC1
    +EC1
    g_save = 'A'.
    PERFORM variant_init.
    Get default variant
    gx_variant = g_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
    i_save = g_save
    CHANGING
    cs_variant = gx_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 0.
    p_vari = gx_variant-variant.
    ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM f4_for_variant.
    AT SELECTION-SCREEN.
    PERFORM auth_check. "+ESC
    PERFORM pai_of_selection_screen.
    +EC1
    End Addition +EC1
    +EC1
    START-OF-SELECTION.
    PERFORM get_data.
    PERFORM alv.
    END-OF-SELECTION.
    FORM get_data *
    FORM get_data.
    *CH01 - Added kwmeng(order qty) to selection, excluded rejects
    *JR -added soldto and shipto code
    SELECT avbeln aposnr amatnr aerdat awerks algort
    akwmeng apstyv bkunnr cedatu
    CH01+
    INTO
    (i_list-vbeln, i_list-posnr, i_list-matnr, i_list-erdat, i_list-werks,
    i_list-lgort,
    i_list-kwmeng , i_list-pstyv, i_list-soldto,i_list-edatu)
    CH01+
    FROM vbap AS a INNER JOIN vbak AS b ON avbeln = bvbeln
    INNER JOIN vbep AS c ON avbeln = cvbeln
    WHERE b~vkorg = p_vkorg
    AND a~werks IN s_werks
    AND a~lgort IN s_lgort
    AND b~auart IN s_auart
    AND a~vbeln IN s_vbeln
    AND a~erdat IN s_erdat
    AND a~abgru = ''" CH01+
    AND a~matnr IN s_matnr
    AND c~edatu IN s_edatu.
    APPEND i_list.
    ENDSELECT.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    SELECT SINGLE mvgr1 INTO i_list-mvgr1 FROM mvke
    WHERE matnr = i_list-matnr.
    MODIFY i_list.
    CLEAR: i_list.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-mvgr1 IN s_mvgr1.
    CONTINUE.
    ELSE.
    DELETE i_list.
    COMMIT WORK AND WAIT.
    ENDIF.
    ENDLOOP.
    CH01 - commented these lines out and redid logic below
    LOOP AT i_list.
    select single vbeln into lips-vbeln from lips
    where vgbel = i_list-vbeln
    and vgpos = i_list-posnr.
    select single wadat_ist into i_list-wadat_ist from likp
    where vbeln = lips-vbeln.
    SELECT b~wadat_ist INTO i_list-wadat_ist
    FROM lips AS a INNER JOIN
    likp AS b ON avbeln = bvbeln WHERE a~vgbel = i_list-vbeln
    AND a~vgpos = i_list-posnr.
    MODIFY i_list.
    CLEAR: i_list, lips-vbeln.
    ENDSELECT.
    ENDLOOP.
    CH01 - Changed to select multiple delivery lines & del qty
    summing the total deliveries per OBD# and date
    LOOP AT i_list.
    SELECT avbeln sum( alfimg ) b~wadat_ist
    INTO (i_list-obd , i_list-lfimg , i_list-wadat_ist)
    FROM lips AS a INNER JOIN
    likp AS b ON avbeln = bvbeln WHERE a~vgbel = i_list-vbeln
    AND a~vgpos = i_list-posnr
    AND a~pstyv = i_list-pstyv
    group by avbeln bwadat_ist.
    i_list2 = i_list.
    APPEND i_list2.
    ENDSELECT.
    IF sy-subrc <> 0.
    i_list2 = i_list.
    APPEND i_list2.
    ENDIF.
    ENDLOOP.
    i_list[] = i_list2[].
    *End CH01
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-wadat_ist IS INITIAL.
    CONTINUE.
    ELSE.
    i_list-days = i_list-wadat_ist - i_list-erdat.
    ENDIF.
    MODIFY i_list.
    CLEAR: i_list.
    COMMIT WORK AND WAIT.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-vbeln IS INITIAL.
    DELETE i_list.
    ENDIF.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    *JR
    LOOP AT i_list.
    SELECT SINGLE KUNNR INTO i_list-shipto FROM vbpa
    WHERE vbeln = i_list-vbeln
    AND parvw = 'WE'.
    MODIFY i_list.
    ENDLOOP.
    *END JR
    gt_outtab[] = i_list[].
    COMMIT WORK AND WAIT.
    ENDFORM.
    FORM alv *
    FORM alv.
    PERFORM e03_eventtab_build USING gt_events[]. "+EC1
    PERFORM e04_comment_build USING gt_list_top_of_page[]. "+EC1
    prognm = sy-repid. "+EC1
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_user_command = 'USER_COMMAND'
    i_callback_program = g_repid
    it_fieldcat = gt_fieldcat[]
    it_events = gt_events[] "+ESC
    it_sort = it_sort[]
    +EC1
    Addition +EC1
    +EC1
    is_variant = g_variant
    i_save = g_save
    +EC1
    End Addition +EC1
    +EC1
    TABLES
    t_outtab = gt_outtab.
    COMMIT WORK AND WAIT.
    ENDFORM.
    FORM fieldcat_init *
    --> I_FIELDCAT *
    FORM fieldcat_init
    USING i_fieldcat TYPE slis_t_fieldcat_alv.
    DATA: ls_fieldcat TYPE slis_fieldcat_alv.
    DATA: pos TYPE i VALUE 1.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'VBELN'.
    ls_fieldcat-ref_tabname = 'VBAK'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'POSNR'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'MATNR'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'MVGR1'.
    ls_fieldcat-ref_tabname = 'MVKE'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'WERKS'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'LGORT'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'ERDAT'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'WADAT_IST'.
    ls_fieldcat-ref_tabname = 'LIKP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'DAYS'.
    ls_fieldcat-ref_fieldname = 'DAYS'.
    ls_fieldcat-seltext_s = '# Of Days'.
    ls_fieldcat-seltext_m = '# Of Days'.
    ls_fieldcat-seltext_l = '# Of Days'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *Begin CH01
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'KWMENG'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-outputlen = 7.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'LFIMG'.
    ls_fieldcat-ref_tabname = 'LIPS'.
    ls_fieldcat-outputlen = 7.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'OBD'.
    ls_fieldcat-seltext_s = 'OBD'.
    ls_fieldcat-seltext_m = 'Outbound Del'.
    ls_fieldcat-seltext_l = 'Outbound Delivery'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'OBD_POS'.
    ls_fieldcat-seltext_s = 'OBD Ln'.
    ls_fieldcat-seltext_m = 'Outbound Del Ln'.
    ls_fieldcat-seltext_l = 'Outbound Del Line'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *End CH01
    *JR
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'SOLDTO'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-seltext_m = 'Sold To'.
    ls_fieldcat-seltext_l = 'Sold To'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'SHIPTO'.
    ls_fieldcat-ref_tabname = 'VBPA'.
    ls_fieldcat-seltext_m = 'Ship To'.
    ls_fieldcat-seltext_l = 'Ship To'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *END JR
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'EDATU'.
    ls_fieldcat-ref_tabname = 'VBEP'.
    ls_fieldcat-seltext_m = 'Requested Delivery date'.
    ls_fieldcat-seltext_l = 'Requested Delivery date'.
    ls_fieldcat-outputlen = 20.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *FOR ALV SORT & SUBTOTAL
    CLEAR it_sort.
    it_sort-spos = '0'.
    it_sort-fieldname = 'VBELN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '1'.
    it_sort-fieldname = 'POSNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '2'.
    it_sort-fieldname = 'MATNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '3'.
    it_sort-fieldname = 'MVGR1'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '4'.
    it_sort-fieldname = 'ERDAT'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '5'.
    it_sort-fieldname = 'WADAT_IST'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-down = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '6'.
    it_sort-fieldname = 'PERNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '7'.
    it_sort-fieldname = 'VORNA'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '8'.
    it_sort-fieldname = 'NACHN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '9'.
    it_sort-fieldname = 'VKGRP'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '10'.
    it_sort-fieldname = 'VBELN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '11'.
    it_sort-fieldname = 'ERDAT'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '12'.
    it_sort-fieldname = 'BEZEI'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    clear it_sort.
    it_sort-spos = '1'.
    it_sort-fieldname = 'BELNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    append it_sort.
    ENDFORM.
    +EC1
    Addition +EC1
    +EC1
    *& Form VARIANT_INIT
    text
    --> p1 text
    <-- p2 text
    FORM variant_init.
    CLEAR g_variant.
    g_variant-report = g_repid.
    ENDFORM. " VARIANT_INIT
    FORM f4_for_variant *
    FORM f4_for_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
    is_variant = g_variant
    i_save = g_save
    it_default_fieldcat =
    IMPORTING
    e_exit = g_exit
    es_variant = gx_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 2.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
    IF g_exit = space.
    p_vari = gx_variant-variant.
    ENDIF.
    ENDIF.
    ENDFORM.
    *& Form PAI_OF_SELECTION_SCREEN
    text
    FORM pai_of_selection_screen.
    IF NOT p_vari IS INITIAL.
    MOVE g_variant TO gx_variant.
    MOVE p_vari TO gx_variant-variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
    i_save = g_save
    CHANGING
    cs_variant = gx_variant.
    g_variant = gx_variant.
    ELSE.
    PERFORM variant_init.
    ENDIF.
    ENDFORM. " PAI_OF_SELECTION_SCREEN
    +EC1
    End Addition +EC1
    +EC1
    FORM e03_eventtab_build *
    --> E03_LT_EVENTS *
    FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event.
    DATA: ls_event TYPE slis_alv_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = e03_lt_events.
    READ TABLE e03_lt_events WITH KEY name = slis_ev_top_of_page
    INTO ls_event.
    IF sy-subrc = 0.
    MOVE gc_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO e03_lt_events.
    ENDIF.
    ENDFORM.
    FORM e04_comment_build *
    --> E04_LT_TOP_OF_PAGE *
    FORM e04_comment_build USING e04_lt_top_of_page TYPE slis_t_listheader.
    DATA: ls_line TYPE slis_listheader.
    *Report Title
    CLEAR ls_line.
    ls_line-typ = 'H'.
    ls_line-info = text-007.
    APPEND ls_line TO e04_lt_top_of_page.
    **Doc Type Desc.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-008.
    ls_line-info = p_matnr.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-009.
    ls_line-info = p_werks.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-010.
    ls_line-info = p_stlan.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-011.
    ls_line-info = p_stlal.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-012.
    ls_line-info = p_stlal.
    append ls_line to e04_lt_top_of_page.
    ENDFORM.
    FORM top_of_page *
    FORM top_of_page.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = gt_list_top_of_page.
    ENDFORM.
    FORM auth_check *
    FORM auth_check.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    ID 'VKORG' FIELD p_vkorg.
    IF sy-subrc NE 0.
    MESSAGE e054 WITH p_vkorg.
    ENDIF.
    ENDFORM. " auth_check
    *& Form USER_COMMAND
    FORM user_command USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    CASE r_ucomm.
    WHEN '&IC1'.
    PERFORM display_so_order USING r_ucomm
    rs_selfield.
    ENDCASE.
    ENDFORM.
    *& Form display_sales_order
    text
    -->P_R_UCOMM text
    -->P_RS_SELFIELD text
    FORM display_so_order USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    CASE rs_selfield-sel_tab_field.
    WHEN '1-VBELN'.
    SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
    CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    WHEN '1-MATNR'.
    SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
    CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    WHEN '1-OBD'.
    SET PARAMETER ID 'VL' FIELD rs_selfield-value.
    CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
    WHEN OTHERS.
    MESSAGE i000(z1) WITH 'Please Click on the Valid Selection'.
    EXIT.
    ENDCASE.
    ENDFORM. " display_sales_order
    FORM EDit_table *

    > TYPE-POOLS: slis.
    >
    > TABLES: vbap, vbrk, vbfa, vbak, vbrp, konv, kna1,
    > bkpf, bsad, bkpf_bsad,
    > knvv, pa0002, t005u, mvke, lips, likp, vbpa, vbep.
    >
    > DATA: BEGIN OF i_list OCCURS 0,
    > vbeln LIKE vbak-vbeln,
    > posnr LIKE vbap-posnr,
    <b>  etenr like vbep-etenr,</b>
    > matnr LIKE vbap-matnr,
    > erdat LIKE vbap-erdat,
    > mvgr1 LIKE mvke-mvgr1,
    > wadat_ist LIKE likp-wadat_ist,
    > days TYPE i,
    > werks LIKE vbap-werks,
    > lgort LIKE vbap-lgort,
    > kwmeng LIKE vbap-kwmeng," CH01+
    > lfimg LIKE lips-lfimg," CH01+
    > pstyv LIKE vbap-pstyv," CH01+
    > obd LIKE lips-vbeln," CH01+
    > obd_pos LIKE lips-posnr," CH01+
    > soldto LIKE vbaK-kunnr," JR+
    > shipto LIKE vbpa-kunnr," JR+
    > edatu like vbep-edatu," PR+
    > END OF i_list.
    >
    > DATA: i_list2 LIKE i_list OCCURS 0 WITH HEADER LINE,
    > i_list3 LIKE i_list OCCURS 0 WITH HEADER LINE.
    >
    > DATA: i_list4 LIKE vbap OCCURS 0 WITH HEADER LINE.
    >
    >
    > *ALV Output Header
    > DATA: gt_list_top_of_page TYPE slis_t_listheader,
    > prognm LIKE sy-repid,
    > gc_formname_top_of_page TYPE slis_formname VALUE
    > 'TOP_OF_PAGE',
    > gt_events TYPE slis_t_event,
    > is_layout TYPE slis_layout_alv,
    > is_variant LIKE disvariant,
    > it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    >
    > DATA:gt_fieldcat TYPE slis_t_fieldcat_alv.
    > DATA:gt_outtab LIKE i_list OCCURS 0 WITH HEADER
    > LINE.
    >
    > DATA: g_repid LIKE sy-repid,
    > g_count LIKE sy-tabix.
    >
    > SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME
    > TITLE text-t01.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t10.
    >
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t11.
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t12.
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN END OF BLOCK block0.
    >
    > */ Selection and Input Parameters
    > SELECTION-SCREEN BEGIN OF BLOCK blocko WITH FRAME
    > TITLE text-001.
    >
    >
    >
    > SELECT-OPTIONS: s_vbeln FOR vbap-vbeln, "SO
    > s_auart FOR vbak-auart DEFAULT 'KB' OBLIGATORY,
    > s_matnr FOR vbap-matnr," obligatory,
    > s_mvgr1 FOR mvke-mvgr1,
    > s_erdat FOR vbap-erdat OBLIGATORY,
    > s_werks FOR vbap-werks,
    > s_lgort FOR vbap-lgort,
    > s_edatu FOR vbep-edatu.
    >
    > PARAMETERS: p_vkorg LIKE vbak-vkorg DEFAULT '5010'.
    >
    >
    >
    > SELECTION-SCREEN SKIP 2.
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > PARAMETERS: p_vari LIKE disvariant-variant.
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    > SELECTION-SCREEN END OF BLOCK blocko.
    >
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > DATA: g_save(1) TYPE c,
    > * g_default(1) TYPE c,
    > g_exit(1) TYPE c,
    > gx_variant LIKE disvariant,
    > g_variant LIKE disvariant.
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    > * Initialization fieldcatalog
    > INITIALIZATION.
    >
    > * PERFORM clear_tables.
    >
    > g_repid = sy-repid.
    > PERFORM fieldcat_init USING gt_fieldcat[].
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > g_save = 'A'.
    > PERFORM variant_init.
    > * Get default variant
    > gx_variant = g_variant.
    > CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    > EXPORTING
    > i_save = g_save
    > CHANGING
    > cs_variant = gx_variant
    > EXCEPTIONS
    > not_found = 2.
    > IF sy-subrc = 0.
    > p_vari = gx_variant-variant.
    > ENDIF.
    >
    > AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    > PERFORM f4_for_variant.
    >
    > AT SELECTION-SCREEN.
    > PERFORM auth_check. "+ESC
    > PERFORM pai_of_selection_screen.
    >
    >
    >
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    >
    > START-OF-SELECTION.
    >
    > PERFORM get_data.
    >
    > PERFORM alv.
    >
    > END-OF-SELECTION.
    >
    > *----
    > -
    > * FORM get_data *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM get_data.
    > *CH01 - Added kwmeng(order qty) to selection,
    > excluded rejects
    > *JR -added soldto and shipto code
    SELECT a~vbeln a~posnr a~matnr a~erdat a~werks a~lgort
    a~kwmeng a~pstyv b~kunnr c~edatu
    CH01+
    INTO corresponding fields of table i_list
    FROM vbap AS a INNER JOIN vbak AS b ON a~vbeln = b~vbeln
    INNER JOIN vbep AS c ON a~vbeln = c~vbeln
    and a~posnr = c~posnr
    WHERE b~vkorg = p_vkorg
    AND a~werks IN s_werks
    AND a~lgort IN s_lgort
    AND b~auart IN s_auart
    AND a~vbeln IN s_vbeln
    AND a~erdat IN s_erdat
    AND a~abgru = ''" CH01+
    AND a~matnr IN s_matnr
    AND c~edatu IN s_edatu.
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > SELECT SINGLE mvgr1 INTO i_list-mvgr1 FROM mvke
    > WHERE matnr = i_list-matnr.
    > MODIFY i_list.
    > CLEAR: i_list.
    > ENDLOOP.
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-mvgr1 IN s_mvgr1.
    > CONTINUE.
    > ELSE.
    > DELETE i_list.
    > COMMIT WORK AND WAIT.
    > ENDIF.
    > ENDLOOP.
    > * CH01 - commented these lines out and redid logic
    > below
    > * LOOP AT i_list.
    > ** select single vbeln into lips-vbeln from lips
    > ** where vgbel = i_list-vbeln
    > ** and vgpos = i_list-posnr.
    > **
    > ** select single wadat_ist into i_list-wadat_ist from
    > likp
    > ** where vbeln = lips-vbeln.
    > *
    > * SELECT b~wadat_ist INTO i_list-wadat_ist
    > * FROM lips AS a INNER JOIN
    > * likp AS b ON a~vbeln = b~vbeln WHERE a~vgbel =
    > i_list-vbeln
    > * AND a~vgpos = i_list-posnr.
    > * MODIFY i_list.
    > * CLEAR: i_list, lips-vbeln.
    > * ENDSELECT.
    > * ENDLOOP.
    >
    > * CH01 - Changed to select multiple delivery lines &
    > del qty
    > * summing the total deliveries per OBD# and date
    > LOOP AT i_list.
    > SELECT avbeln sum( alfimg ) b~wadat_ist
    > INTO (i_list-obd , i_list-lfimg , i_list-wadat_ist)
    > FROM lips AS a INNER JOIN
    > likp AS b ON avbeln = bvbeln WHERE a~vgbel =
    > i_list-vbeln
    > AND a~vgpos = i_list-posnr
    > AND a~pstyv = i_list-pstyv
    > group by avbeln bwadat_ist.
    > i_list2 = i_list.
    > APPEND i_list2.
    > ENDSELECT.
    > IF sy-subrc <> 0.
    > i_list2 = i_list.
    > APPEND i_list2.
    > ENDIF.
    > ENDLOOP.
    > i_list[] = i_list2[].
    > *End CH01
    >
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-wadat_ist IS INITIAL.
    > CONTINUE.
    > ELSE.
    > i_list-days = i_list-wadat_ist - i_list-erdat.
    > ENDIF.
    > MODIFY i_list.
    > CLEAR: i_list.
    > COMMIT WORK AND WAIT.
    > ENDLOOP.
    >
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-vbeln IS INITIAL.
    > DELETE i_list.
    > ENDIF.
    > ENDLOOP.
    > COMMIT WORK AND WAIT.
    >
    > *JR
    > LOOP AT i_list.
    > SELECT SINGLE KUNNR INTO i_list-shipto FROM vbpa
    > WHERE vbeln = i_list-vbeln
    > AND parvw = 'WE'.
    > MODIFY i_list.
    > ENDLOOP.
    > *END JR
    >
    > gt_outtab[] = i_list[].
    > COMMIT WORK AND WAIT.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM alv *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM alv.
    >
    > PERFORM e03_eventtab_build USING gt_events[]. "+EC1
    > PERFORM e04_comment_build USING
    > gt_list_top_of_page[]. "+EC1
    > prognm = sy-repid. "+EC1
    >
    >
    > CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    > EXPORTING
    > i_callback_user_command = 'USER_COMMAND'
    > i_callback_program = g_repid
    > it_fieldcat = gt_fieldcat[]
    > it_events = gt_events[] "+ESC
    > it_sort = it_sort[]
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > is_variant = g_variant
    > i_save = g_save
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    > TABLES
    > t_outtab = gt_outtab.
    >
    > COMMIT WORK AND WAIT.
    >
    >
    > ENDFORM.
    >
    >
    > *----
    > -
    > * FORM fieldcat_init *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> I_FIELDCAT *
    > *----
    > -
    > FORM fieldcat_init
    > USING i_fieldcat TYPE slis_t_fieldcat_alv.
    > DATA: ls_fieldcat TYPE slis_fieldcat_alv.
    > DATA: pos TYPE i VALUE 1.
    > CLEAR ls_fieldcat.
    <b>Please note to keep on incrementing pos variable for column position.</b>
    <b> pos = pos + 1.</b>
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'VBELN'.
    > ls_fieldcat-ref_tabname = 'VBAK'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    <b> pos = pos + 1.</b> ===> after every append to field catalog.
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'POSNR'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    <b>> ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'ETERN'.
    > ls_fieldcat-ref_tabname = 'VBEP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.</b>
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'MATNR'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'MVGR1'.
    > ls_fieldcat-ref_tabname = 'MVKE'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'WERKS'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'LGORT'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'ERDAT'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'WADAT_IST'.
    > ls_fieldcat-ref_tabname = 'LIKP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'DAYS'.
    > ls_fieldcat-ref_fieldname = 'DAYS'.
    > ls_fieldcat-seltext_s = '# Of Days'.
    > ls_fieldcat-seltext_m = '# Of Days'.
    > ls_fieldcat-seltext_l = '# Of Days'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > *Begin CH01
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'KWMENG'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-outputlen = 7.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'LFIMG'.
    > ls_fieldcat-ref_tabname = 'LIPS'.
    > ls_fieldcat-outputlen = 7.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'OBD'.
    > ls_fieldcat-seltext_s = 'OBD'.
    > ls_fieldcat-seltext_m = 'Outbound Del'.
    > ls_fieldcat-seltext_l = 'Outbound Delivery'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > * ls_fieldcat-col_pos = pos.
    > * ls_fieldcat-fieldname = 'OBD_POS'.
    > * ls_fieldcat-seltext_s = 'OBD Ln'.
    > * ls_fieldcat-seltext_m = 'Outbound Del Ln'.
    > * ls_fieldcat-seltext_l = 'Outbound Del Line'.
    > * ls_fieldcat-outputlen = 10.
    > * APPEND ls_fieldcat TO i_fieldcat.
    > * CLEAR ls_fieldcat.
    > *
    > *End CH01
    >
    > *JR
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'SOLDTO'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-seltext_m = 'Sold To'.
    > ls_fieldcat-seltext_l = 'Sold To'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'SHIPTO'.
    > ls_fieldcat-ref_tabname = 'VBPA'.
    > ls_fieldcat-seltext_m = 'Ship To'.
    > ls_fieldcat-seltext_l = 'Ship To'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    > *END JR
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'EDATU'.
    > ls_fieldcat-ref_tabname = 'VBEP'.
    > ls_fieldcat-seltext_m = 'Requested Delivery date'.
    > ls_fieldcat-seltext_l = 'Requested Delivery date'.
    > ls_fieldcat-outputlen = 20.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > *FOR ALV SORT & SUBTOTAL
    > CLEAR it_sort.
    > it_sort-spos = '0'.
    > it_sort-fieldname = 'VBELN'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > CLEAR it_sort.
    > it_sort-spos = '1'.
    > it_sort-fieldname = 'POSNR'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > it_sort-subtot = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    > *
    > CLEAR it_sort.
    > it_sort-spos = '2'.
    > it_sort-fieldname = 'MATNR'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > CLEAR it_sort.
    > it_sort-spos = '3'.
    > it_sort-fieldname = 'MVGR1'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    > *
    > CLEAR it_sort.
    > it_sort-spos = '4'.
    > it_sort-fieldname = 'ERDAT'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    >
    > CLEAR it_sort.
    > it_sort-spos = '5'.
    > it_sort-fieldname = 'WADAT_IST'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-down = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '6'.
    > * it_sort-fieldname = 'PERNR'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '7'.
    > * it_sort-fieldname = 'VORNA'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '8'.
    > * it_sort-fieldname = 'NACHN'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '9'.
    > * it_sort-fieldname = 'VKGRP'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '10'.
    > * it_sort-fieldname = 'VBELN'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '11'.
    > * it_sort-fieldname = 'ERDAT'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '12'.
    > * it_sort-fieldname = 'BEZEI'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    >
    > * clear it_sort.
    > * it_sort-spos = '1'.
    > * it_sort-fieldname = 'BELNR'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > * append it_sort.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > *&----
    > -
    > *& Form VARIANT_INIT
    > *&----
    > -
    > * text
    > *----
    > -
    > * --> p1 text
    > * <-- p2 text
    > *----
    > -
    > FORM variant_init.
    > *
    > CLEAR g_variant.
    > g_variant-report = g_repid.
    > ENDFORM. " VARIANT_INIT
    >
    >
    >
    > *----
    > -
    > * FORM f4_for_variant *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM f4_for_variant.
    > *
    > CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    > EXPORTING
    > is_variant = g_variant
    > i_save = g_save
    > * it_default_fieldcat =
    > IMPORTING
    > e_exit = g_exit
    > es_variant = gx_variant
    > EXCEPTIONS
    > not_found = 2.
    > IF sy-subrc = 2.
    > MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    > WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    > ELSE.
    > IF g_exit = space.
    > p_vari = gx_variant-variant.
    > ENDIF.
    > ENDIF.
    > ENDFORM.
    > *&----
    > -
    > *& Form PAI_OF_SELECTION_SCREEN
    > *&----
    > -
    > * text
    > *----
    > -
    > FORM pai_of_selection_screen.
    > *
    > IF NOT p_vari IS INITIAL.
    > MOVE g_variant TO gx_variant.
    > MOVE p_vari TO gx_variant-variant.
    > CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    > EXPORTING
    > i_save = g_save
    > CHANGING
    > cs_variant = gx_variant.
    > g_variant = gx_variant.
    > ELSE.
    > PERFORM variant_init.
    > ENDIF.
    > ENDFORM. " PAI_OF_SELECTION_SCREEN
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    >
    > *----
    > -
    > * FORM e03_eventtab_build *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> E03_LT_EVENTS *
    > *----
    > -
    > FORM e03_eventtab_build USING e03_lt_events TYPE
    > slis_t_event.
    > DATA: ls_event TYPE slis_alv_event.
    >
    > CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    > EXPORTING
    > i_list_type = 0
    > IMPORTING
    > et_events = e03_lt_events.
    > READ TABLE e03_lt_events WITH KEY name =
    > slis_ev_top_of_page
    > INTO ls_event.
    > IF sy-subrc = 0.
    > MOVE gc_formname_top_of_page TO ls_event-form.
    > APPEND ls_event TO e03_lt_events.
    > ENDIF.
    > ENDFORM.
    >
    > *----
    > -
    > * FORM e04_comment_build *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> E04_LT_TOP_OF_PAGE *
    > *----
    > -
    > FORM e04_comment_build USING e04_lt_top_of_page TYPE
    > slis_t_listheader.
    > DATA: ls_line TYPE slis_listheader.
    >
    > *Report Title
    > CLEAR ls_line.
    > ls_line-typ = 'H'.
    > ls_line-info = text-007.
    > APPEND ls_line TO e04_lt_top_of_page.
    > *
    > *
    > **Doc Type Desc.
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-008.
    > ** ls_line-info = p_matnr.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-009.
    > ** ls_line-info = p_werks.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-010.
    > ** ls_line-info = p_stlan.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-011.
    > ** ls_line-info = p_stlal.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-012.
    > ** ls_line-info = p_stlal.
    > * append ls_line to e04_lt_top_of_page.
    >
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM top_of_page *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM top_of_page.
    >
    > CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    > EXPORTING
    > it_list_commentary = gt_list_top_of_page.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM auth_check *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM auth_check.
    >
    > AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    > ID 'VKORG' FIELD p_vkorg.
    > IF sy-subrc NE 0.
    > MESSAGE e054 WITH p_vkorg.
    > ENDIF.
    >
    >
    > ENDFORM. " auth_check
    >
    >
    > *&----
    > -
    > *& Form USER_COMMAND
    > *&----
    > -
    > FORM user_command USING r_ucomm LIKE sy-ucomm
    > rs_selfield TYPE slis_selfield.
    >
    > CASE r_ucomm.
    > WHEN '&IC1'.
    > PERFORM display_so_order USING r_ucomm
    > rs_selfield.
    >
    > ENDCASE.
    >
    > ENDFORM.
    >
    > *&----
    > -
    > *& Form display_sales_order
    > *&----
    > -
    > * text
    > *----
    > -
    > * -->P_R_UCOMM text
    > * -->P_RS_SELFIELD text
    > *----
    > -
    > FORM display_so_order USING r_ucomm LIKE sy-ucomm
    > rs_selfield TYPE slis_selfield.
    >
    > CASE rs_selfield-sel_tab_field.
    > WHEN '1-VBELN'.
    > SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
    > CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    > WHEN '1-MATNR'.
    > SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
    > CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    > WHEN '1-OBD'.
    > SET PARAMETER ID 'VL' FIELD rs_selfield-value.
    > CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
    > WHEN OTHERS.
    > MESSAGE i000(z1) WITH 'Please Click on the Valid
    > Selection'.
    > EXIT.
    > ENDCASE.
    >
    >
    > ENDFORM. " display_sales_order
    >
    > *----
    > -
    > * FORM EDit_table *
    > *----
    > -
    > * ........ *
    > *----
    > -
    Message was edited by: Anurag Bankley

  • Report header is missng while printing or spooling

    Hi All,
    I have a problem in print a report.its
    After getting selection screen of the report ,If i click a print button (it's for execute and print)
    the header details are missing in spool ( does not print selection fields of the report are missing in spool).
    If i execute the report and got the output ,then i click the print button it's execute properly means in spool i am getting all the output properly ,header details also printed. means selection screen fields means what i entered in selection screen is printing.Its a AVL report.While debugging i am not getting solution.i have investigated in menu painter also.
    but i am not getting proper idea to fix the bug.
    i am sending the code also.please let me know ASAP
    code:
    REPORT  ZMXXR048 LINE-SIZE   1023  "255 deleted AW2150 GLDK9AAYU9
                     LINE-COUNT  65
                     MESSAGE-ID  zm
                     NO STANDARD PAGE HEADING.
    *eject
    TABLES declaration.
    TABLES:ekko,      "Purchasing Document: Header
           ekpo,      "Purchasing Document: Item
         a016,      "Contract Item                              AMT25JAN05
         a019,      "Contract Header                            AMT25JAN05
           t024,      "Purchasing Groups
           t024e,     "Purchasing Organizations
           t161,      "Purchasing Document Types
           t001w,     "Plants/branches
         lfa1,      "Vendor Master (General Section)            AMT25JAN05
           eket,      "Scheduling Agreement Schedule Lines
         ekbe,      "Purchasing Document: History               AMT25JAN05
         ekab,      "Release Documentation                      AMT25JAN05
           zbsart_doc."Purchasing documents custom structure     "GA01
         ekkn.      "Account Assignment in Purchasing Document "GA19062003
                    Comment AMT25JAN05
    *eject
    TYPE-POOLS  definition.
    TYPE-POOLS slis.                                            "KAK01
    *eject
    CONSTANTS declaration.
    CONSTANTS:
            c_t(1)      TYPE c         VALUE 'T',             "AMT25JAN05
              c_l(1)      TYPE c         VALUE 'L',
            c_m(1)      TYPE c         VALUE '4',             "AMT25JAN05
            c_y(1)      TYPE c         VALUE 'Y',             "AMT25JAN05
              c_i(1)      TYPE c         VALUE 'I',
              c_ne(2)     TYPE c         VALUE 'NE',
            c_eq(2)     TYPE c         VALUE 'EQ',            "AMT25JAN05
              c_lp(2)     TYPE c         VALUE 'LP',
              c_nb(2)     TYPE c         VALUE 'NB',
              c_ec(2)     TYPE c         VALUE 'EC',
              c_lpa(3)    TYPE c         VALUE 'LPA',
              c_zlp(3)    TYPE c         VALUE 'ZLP',
              c_znba(4)   TYPE c         VALUE 'ZNBA',
            c_mk(2)     TYPE c         VALUE 'MK',            "AMT25JAN05
            c_wk(2)     TYPE c         VALUE 'WK',            "AMT25JAN05
            c_doqot(1)  TYPE c         VALUE '"',             "AMT25JAN05
              c_totals(6) TYPE c         VALUE 'TOTALS',
              c_x(1)      TYPE c         VALUE 'X',
            c_k(1)      TYPE c         VALUE 'K',             "AMT25JAN05
              c_a(1)      TYPE c         VALUE 'A',
              C_S(1)      TYPE C         VALUE 'S',"insert AW2150 GLDK9AAYU9
              c_55(2)     TYPE c         VALUE '55',
              c_56(2)     TYPE c         VALUE '56',
            c_44(2)     TYPE c         VALUE '44',            "AMT25JAN05
              c_45(2)     TYPE c         VALUE '45',
              c_1(1)      TYPE c         VALUE '1',
              c_2(1)      TYPE c         VALUE '2',
              c_h(1)      TYPE c         VALUE 'H',
              c_(1)      TYPE c         VALUE '',             "GA18062003.
              c_n(1)      TYPE c         VALUE 'N',             "SRI24062003
              c_o(1)      TYPE c         VALUE 'O',             "SRI24062003
              c_maxdays   TYPE p         VALUE '93',            "GA29072003
              c_wk1(10)   type c         VALUE 'WK1'.           "NAR10NOV06
    *Begin of Addition by AMT25JAN05
    CONSTANTS :
                c_3           TYPE i VALUE 3               ,
                c_4           TYPE i VALUE 4               ,
                c_5           TYPE i VALUE 5               ,
                c_8           TYPE i VALUE 8               ,
                c_10          TYPE i VALUE 10              ,
                c_11          TYPE i VALUE 11              ,
                c_12          TYPE i VALUE 12              ,
              c_15          TYPE i VALUE 15              ,
                c_18          TYPE i VALUE 18              ,
                c_20          TYPE i VALUE 20              ,
              c_23          TYPE i VALUE 23 , "TUL02022005  "KVI04Feb05
                c_40          TYPE i VALUE 40              ,
                c_all(4)      TYPE c VALUE '&ALL'          ,
                c_sa(3)       TYPE c VALUE '&SA'           ,
                c_bs(3)       TYPE c VALUE '&BS'           ,
                c_sum(4)      TYPE c VALUE '&SUM'          ,
                c_eb3(4)      TYPE c VALUE '&EB3'          ,
                c_xpa(4)      TYPE c VALUE '&XPA'          ,
                c_omp(4)      TYPE c VALUE '&OMP'          ,
                c_crb(4)      TYPE c VALUE '&CRB'          ,
                c_cre(4)      TYPE c VALUE '&CRE'          ,
                c_ave(4)      TYPE c VALUE '&AVE'          ,
                c_pc10(4)     TYPE c VALUE 'PC10'          ,
                c_coltab(6)   TYPE c VALUE 'COLTAB'        ,
                c_excel(5)    TYPE c VALUE 'EXCEL'         ,
                c_ic1(4)      TYPE c VALUE '&IC1'          ,
                c_dload(5)    TYPE c VALUE 'DLOAD'         ,
                c_refrs(5)    TYPE c VALUE 'REFRS'         ,
                c_waers(5)    TYPE c VALUE 'WAERS'         ,
                c_bprme(5)    TYPE c VALUE 'BPRME'         ,
                c_ekbe(4)     TYPE c VALUE 'EKBE'          ,
                c_meins2(6)   TYPE c VALUE 'MEINS2'        ,
                c_meins3(6)   TYPE c VALUE 'MEINS3'        ,
                c_ekkn(4)     TYPE c VALUE 'EKKN'          ,
                c_ekpo(4)     TYPE c VALUE 'EKPO'          ,
                c_ekko(4)     TYPE c VALUE 'EKKO'          ,
                c_lfa1(4)     TYPE c VALUE 'LFA1'          ,
                c_meins(5)    TYPE c VALUE 'MEINS'         ,
                c_eket(4)     TYPE c VALUE 'EKET'          ,
                c_me33l(5)    TYPE c VALUE 'ME33L'         ,
                c_me23(4)     TYPE c VALUE 'ME23'          ,
                c_bes(3)      TYPE c VALUE 'BES'           ,
                c_bedat(11)   TYPE c VALUE 'S_BEDAT-LOW',
                c_pur(15)     TYPE c VALUE 'PURCHASING DOC.',
                c_item(4)     TYPE c VALUE 'ITEM'           ,
                c_doc(8)      TYPE c VALUE 'DOC.DATE'       ,
                c_vendor(6)   TYPE c VALUE 'VENDOR'         ,
                c_vname(11)   TYPE c VALUE 'VENDOR NAME'    ,
                c_plant(5)    TYPE c VALUE 'PLANT'          ,
                c_pdesc(17)   TYPE c VALUE 'PLANT DESCRIPTION',
                c_sloc(4)     TYPE c VALUE 'SLOC'            ,
                c_pgr(3)      TYPE c VALUE 'PGR'            ,
                c_porg(4)     TYPE c VALUE 'PORG'            ,
                c_mat(8)      TYPE c VALUE 'MATERIAL'        ,
                c_standard(8) TYPE c VALUE 'STANDARD'        ,
                c_matdesc(20) TYPE c VALUE 'MATERIAL DESCRIPTION',
                c_deldate(13) TYPE c VALUE 'DELIVERY DATE'       ,
                c_qty(13)     TYPE c VALUE 'SCHEDULED QTY'       ,
                c_quom(4)     TYPE c VALUE 'OUOM'                ,
                c_net(9)      TYPE c VALUE 'NET PRICE'           ,
                c_curr(4)     TYPE c VALUE 'CURR'                ,
                c_per(3)      TYPE c VALUE 'PER'                 ,
                c_opuom(5)    TYPE c VALUE 'OPUOM'               ,
                c_grqty(6)    TYPE c VALUE 'GR QTY'              ,
                c_gruom(6)    TYPE c VALUE 'GR UOM'              ,
                c_irqty(6)    TYPE c VALUE 'IR QTY'              ,
                c_iruom(6)    TYPE c VALUE 'IR UOM'              ,
                c_trnum(15)   TYPE c VALUE 'TRACKING NUMBER'     ,
                c_rec(12)     TYPE c VALUE 'RECEIVER-BBP'        ,
                c_tcont(18)   TYPE c VALUE 'T_CONDITIONS-EBELN'  .
    *End   of Addition by AMT25JAN05
    *BEGIN INSERT BB1097 - add a constant for the vendor mat field
    CONSTANTS C_VENDMAT(15)   TYPE C VALUE 'VENDOR MATERIAL'.
    *END INSERT BB1097
    *eject
    DATA Work fields definition.
    DATA    : w_repid       LIKE sy-repid,
              w_color       TYPE i,
            w_info        LIKE sy-lisel,                      "AMT25JAN05
            w_lifnr       LIKE eina-lifnr,                    "AMT25JAN05
            w_matnr       LIKE eina-matnr,                    "AMT25JAN05
            w_werks       LIKE marc-werks,                    "AMT25JAN05
            w_tabkey      LIKE cdpos-tabkey,                  "AMT25JAN05
            w_objectid    LIKE konp-knumh,                    "AMT25JAN05
            w_len         TYPE i ,                            "AMT25JAN05
            w_field       LIKE konp-kopos,                    "AMT25JAN05
            w_eindt       LIKE eket-eindt,                    "AMT25JAN05
              w_ebeln       LIKE ekko-ebeln,                    "ujo1jul
              zsort(6)      TYPE c,                             "KAK01
              w_fldname(20) TYPE c,                             "GA16062003.
              w_titel       LIKE spop-titel,                    "GA25062003.
              w_text1       LIKE spop-textline1,                "GA25062003.
              w_text2       LIKE spop-textline2,                "GA25062003.
              W_FLAG(1)     TYPE C,                             "KVI04Feb05
    Start of GLDK9A8WWS (AS3848)
    Defined variable for line size.
              w_linsz       LIKE sy-linsz.
    End of GLDK9A8WWS (AS3848)
    DATA: date_diff LIKE ekko-aedat.
    *BEGIN OF SRI26062003
    *DATA: w_s1     LIKE ekbe-menge,                              AMT25JAN05
         w_s2     LIKE ekbe-bamng,                              AMT25JAN05
         w_s3     LIKE ekbe-bpmng,                              AMT25JAN05
         w_s4     LIKE ekpo-netpr.                              AMT25JAN05
         w_s5     LIKE ekkn-wempf.                              AMT25JAN05
         w_s6     LIKE ekpo-webaz,                              AMT25JAN05
    *END   OF SRI26062003
    *eject
    DATA Structure definition.
    DATA: e_coltab TYPE slis_specialcol_alv.
    *eject
    DATA Internal table definition with INCLUDE STRUCTURE
    *Begin of comment by AMT25JAN05
    *DATA: BEGIN OF ibdcdata OCCURS 0.
           INCLUDE STRUCTURE bdcdata.
    *DATA: END OF ibdcdata.
    *End   of comment by AMT25JAN05
    *eject
    DATA Other internal table definition.
    DATA: BEGIN OF t_documents OCCURS 0,   "Main initial internal table
               ekgrp     LIKE ekko-ekgrp,
               ekorg     LIKE ekko-ekorg,
               eknam     LIKE t024-eknam,
               ebeln     LIKE ekko-ebeln,
               ebelp     LIKE ekpo-ebelp,
               lgort     LIKE ekpo-lgort,
               kschl     LIKE a016-kschl,
               datbi     LIKE a016-datbi,
               datab     LIKE a016-datab,
               LOEKZ     LIKE EKPO-LOEKZ,          "insert AW2150 GLDK9AAYU9
               infnr     LIKE ekpo-infnr,
               pstyp     LIKE ekpo-pstyp,
               konnr     LIKE ekpo-konnr,
               ematn     LIKE ekpo-ematn,
               txz01     LIKE ekpo-txz01,
               werks     LIKE ekpo-werks,
               aedat     LIKE ekpo-aedat,
               epstp     LIKE rm06e-epstp,
               lifnr     LIKE ekko-lifnr,
               waers     LIKE ekko-waers,                       "SRI26062003
               name1     LIKE lfa1-name1,
               name2     LIKE t001w-name1,
               ktmng     LIKE ekpo-ktmng,
               meins     LIKE ekpo-meins,
               meins2    LIKE ekpo-meins,                       "GA23062003
               meins3    LIKE ekpo-meins,                       "GA23062003
               bednr     LIKE ekpo-bednr,
               loevm_ko  LIKE konp-loevm_ko,
               bsart     LIKE ekko-bsart,
               eindt     LIKE eket-eindt,                       "SBH01
               netpr     LIKE ekpo-netpr,                       "SBh01
               peinh     LIKE ekpo-peinh,                       "GA01
               bprme     LIKE ekpo-bprme,                       "GA01
               menge     LIKE ekpo-menge,
             menge2    like ekbe-menge,                       "GA23062003.
               bamng     LIKE ekbe-bamng,                       "GA23062003.
               bpmng     LIKE ekbe-bpmng,
               vgabe     LIKE ekbe-vgabe,                       "GA01
               webaz     LIKE ekpo-webaz,
               wempf     LIKE ekkn-wempf,                       "GA19062003.
               flgdel(1) TYPE c,                                "ujo9jul
    Start of GLDK9A8WWS (AS3848)
    Added fields WEPOS (GR indicator), REPOS (IR indicator) and WEBRE (GR-
    based IV indicator).
               wepos     LIKE ekpo-wepos,             "GR indicator
               repos     LIKE ekpo-repos,             "IR indicator
               webre     LIKE ekpo-webre,             "GR-based IV indicator
    End of GLDK9A8WWS (AS3848)
               ELIKZ     LIKE ekpo-ELIKZ,             "Delivery "TUL02022005
               EREKZ     LIKE EKPO-EREKZ,         "Invoice AW2150 GLDK9AAYU9
    *BEGIN INSERT BB1097 - add column for the vendor mat field. this field
                         will hold the value of the vendor material #
               IDNLF     LIKE EKPO-IDNLF,
    *END INSERT BB1097
          END OF t_documents.
    Added begin ujo9jul
    *DATA: t_documents_tmp LIKE t_documents OCCURS 0 WITH HEADER LINE.
    *Comment by AMT25JAN05
    *eject
    DATA Other internal table definition.
    *Begin of Comment by AMT25JAN05
    *DATA: BEGIN OF t_ekko OCCURS 0,
           ebeln LIKE ekko-ebeln,
           bsart LIKE ekko-bsart,
           loekz LIKE ekko-loekz,
           aedat LIKE ekko-aedat,
           lifnr LIKE ekko-lifnr,
           ekorg LIKE ekko-ekorg,
           ekgrp LIKE ekko-ekgrp,
           waers LIKE ekko-waers,
           name1 LIKE lfa1-name1,
         END OF t_ekko.
    *End   of Comment by AMT25JAN05
    Added end ujo9jul
    *Begin of SRI26062003
    DATA:BEGIN OF t_t024  OCCURS 0 ,
           ekgrp LIKE t024-ekgrp,
           eknam LIKE t024-eknam,
         END OF t_t024.
    DATA:BEGIN OF t_t001w OCCURS 0 ,
           werks LIKE t001w-werks,
           name1 LIKE t001w-name1,
         END OF t_t001w.
    *End of SRI26062003
    DATA: BEGIN OF t_conditions OCCURS 0,         "Main final internal table
            ebeln    LIKE ekpo-ebeln,
            ekgrp    LIKE ekko-ekgrp,
            ekorg    LIKE ekko-ekorg,
            waers    LIKE ekko-waers,                      "SRI26062003
            eknam    LIKE t024-eknam,
            ebelp    LIKE ekpo-ebelp,
            lgort    LIKE ekpo-lgort,
            kschl    LIKE a016-kschl,
            datbi    LIKE a016-datbi,
            datab    LIKE a016-datab,
            infnr    LIKE ekpo-infnr,
            pstyp    LIKE ekpo-pstyp,
            konnr    LIKE ekpo-konnr,
            ematn    LIKE ekpo-ematn,
            txz01    LIKE ekpo-txz01,
            werks    LIKE ekpo-werks,
            aedat    LIKE ekpo-aedat,
            epstp    LIKE rm06e-epstp,
            lifnr    LIKE ekko-lifnr,
            name1    LIKE lfa1-name1,
            name2    LIKE t001w-name1,
            ktmng    LIKE ekpo-ktmng,
            meins    LIKE ekpo-meins,
            meins2   LIKE ekpo-meins,                      "GA23062003.
            meins3   LIKE ekpo-meins,                      "GA23062003.
            bednr    LIKE ekpo-bednr,
            loevm_ko LIKE konp-loevm_ko,
            bsart    LIKE ekko-bsart,
            eindt    LIKE eket-eindt,
            netpr    LIKE ekpo-netpr,
            peinh    LIKE ekpo-peinh,
            bprme    LIKE ekpo-bprme,
            menge    LIKE ekpo-menge,
          menge2   like ekbe-menge,                      "GA23062003.
            bamng    LIKE ekbe-bamng,                      "GA23062003.
            bpmng    LIKE ekbe-bpmng,
            vgabe    LIKE ekbe-vgabe,                           "GA01
            webaz    LIKE ekpo-webaz,
            wempf    LIKE ekkn-wempf,                      "GA19062003.
            AGING    TYPE I,                  "insert AW2150 GLDK9AAYU9
            ELIKZ    LIKE ekpo-ELIKZ,                      "TUL02022005
            EREKZ    LIKE EKPO-EREKZ,         "insert AW2150 GLDK9AAYU9
            coltab   TYPE slis_t_specialcol_alv,           "SRI24062003
    *BEGIN INSERT BB1097 - add column for the vendor mat field. this field
                         will hold the value of the vendor material #
            IDNLF    LIKE EKPO-IDNLF,
    *END INSERT BB1097
          END OF t_conditions.
    Internal Table for the Purchasing Group name
    *Begin of Comment by AMT25JAN05
    *DATA: BEGIN OF t_purchgr OCCURS 0,
           name2 LIKE t024-eknam,
         END OF t_purchgr.
    *End   of Comment by AMT25JAN05
    internal table for the plant name
    *Begin of Comment by AMT25JAN05
    *DATA: BEGIN OF t_plant OCCURS 0,
           name1 LIKE t001w-name1,
         END OF t_plant.
    *End   of Comment by AMT25JAN05
    *Begin of Comment by AW2150
    Internal Table for the Vendor Number and Vendor Name
    *DATA: BEGIN OF t_lfa1 OCCURS 0,
           lifnr LIKE lfa1-lifnr,
           name1 LIKE lfa1-name1,
         END OF t_lfa1.
    *End of Comment by AW2150
    *Start of GA19062003
    Internal table for the Good Recipient in case of BBP
    DATA: BEGIN OF t_ekkn OCCURS 0,
            ebeln LIKE ekkn-ebeln,                              "SRI26062003
            ebelp LIKE ekkn-ebelp,                              "SRI26062003
            wempf LIKE ekkn-wempf,
          END OF t_ekkn.
    *End of GA19062003
    Internal Table for EXCEL DOWNLOADING
    DATA: BEGIN OF t_conditions_exe OCCURS 0,
            ebeln(15)    TYPE c,
            ebelp(11)    TYPE c,
            aedat(11)    TYPE c,
            lifnr(16)    TYPE c,
            name1(35)    TYPE c,
            werks(5)     TYPE c,
            name2(30)    TYPE c,                                "GA16062003.
            lgort(4)     TYPE c,
            ekgrp(3)     TYPE c,
            ekorg(4)     TYPE c,
    "       eknam(30)    type c,                                "GA16062003.
            ematn(20)    TYPE c,
            txz01(40)    TYPE c,
    *BEGIN INSERT BB1097 - this field will hold the value of the vendor
                         material #
            IDNLF(35)    TYPE C,
    *END INSERT BB1097
            eindt(13)    TYPE c,
            menge(13)    TYPE c,
            meins(4)     TYPE c,
            netpr(11)    TYPE c,
            waers(5)     TYPE c,                                "ujo7jul
            peinh(4)     TYPE c,
            bprme(4)     TYPE c,
          menge2(11)   type c,
            bamng(11)    TYPE c,
            meins2(6)    TYPE c,
            bpmng(11)    TYPE c,
            meins3(6)    TYPE c,
            bednr(21)    TYPE c,
            wempf(12)    TYPE c,                                "GA19062003.
            AGING(7)     TYPE C,                   "insert AW2150 GLDK9AAYU9
            ELIKZ(23)    TYPE c,                                "TUL02022005
            EREKZ(23)    TYPE C,                   "insert AW2150 GLDK9AAYU9
          END OF t_conditions_exe.
    *eject
    *INTERNAL TABLE TO FIND THE RECEIVED AND INVOICED QUANTITY
    DATA: BEGIN OF t_ekbe OCCURS 0,
            ebelp LIKE ekbe-ebelp,
            ebeln LIKE ekbe-ebeln,
            vgabe LIKE ekbe-vgabe,
          BELNR LIKE EKBE-BELNR,
    *Begin Of Change BH9511 20-Aug-07
           menge LIKE ekbe-menge,
            menge(16) TYPE P DECIMALS 3,
    *End Of Change BH9511 20-Aug-07
            shkzg LIKE ekbe-shkzg,
          END OF t_ekbe.
    *INTERNAL TABLE TO FIND THE RECEIVED AND INVOICED UoM
    DATA: BEGIN OF t_ekbe_temp OCCURS 0,
            ebelp LIKE ekbe-ebelp,
            ebeln LIKE ekbe-ebeln,
            vgabe LIKE ekbe-vgabe,
            menge LIKE ekbe-menge,
          END OF t_ekbe_temp.
    Added begin ujo7jul
    DATA: BEGIN OF t_totals OCCURS 0,
            menge  LIKE ekpo-menge,
            meins  LIKE ekpo-meins,
            bamng  LIKE ekbe-bamng,
            meins2 LIKE ekpo-meins,
            bpmng  LIKE ekbe-bpmng,
            meins3 LIKE ekpo-meins,
          END OF t_totals.
    DATA: BEGIN OF t_tot_netpr OCCURS 0,
            netpr  LIKE ekpo-netpr,
            waers  LIKE ekko-waers,
          END   OF t_tot_netpr.
    DATA: BEGIN OF t_tot_peinh OCCURS 0,
            peinh  LIKE ekpo-peinh,
            bprme  LIKE ekpo-bprme,
          END   OF t_tot_peinh.
    *Begin of Comment by AW2150
    *DATA: BEGIN OF t_eket OCCURS 0,
           ebeln LIKE eket-ebeln,
           ebelp LIKE eket-ebelp,
           eindt LIKE eket-eindt,
         END   OF t_eket.
    Added end ujo7jul
    *End of Comment by AW2150
    BEGIN OF KAK01
    FOR ALV Related Details.
    DATA: alv_fieldcat  TYPE slis_t_fieldcat_alv,
          alv_layout    TYPE slis_layout_alv,
          alv_exclude   TYPE slis_t_extab,
          alv_sort      TYPE slis_t_sortinfo_alv,
          g_variant     LIKE disvariant,
          gx_variant    LIKE disvariant,
          gt_event_exit TYPE slis_t_event_exit,                 "GA23062003.
          g_save(1)     TYPE c,                                 "GA23062003.
        g_exit(1)     TYPE c,                                 "AMT25JAN05
        lt_dynpread   LIKE dynpread OCCURS 1 WITH HEADER LINE,"AMT25JAN05
          g_repid       LIKE d020s-prog,
    END OF KAK01
    Start of GLDK9A8WWS (AS3848)
    Added the definition of structure for the events that will be used
    in the logic for generating the standard report header for the report.
          v_events      TYPE slis_t_event.
    End of GLDK9A8WWS (AS3848)
    *eject
    PARAMETERS and SELECT-OPTIONS definition
    Start of GLDK9A8WWS (AS3848)
    Changed the text-100 in the list of text elements.  It was changed
    from OPEN PURCHASE DOCUMENTS LIST DISPLAY to Open Purchaser Order
    Report.
    SELECTION-SCREEN: BEGIN OF BLOCK three WITH FRAME TITLE text-100.
    End of GLDK9A8WWS (AS3848)
    SELECTION-SCREEN: BEGIN OF BLOCK one WITH FRAME TITLE text-060.
    SELECT-OPTIONS : s_ekorg FOR  ekko-ekorg OBLIGATORY MEMORY ID eko
                                  NO INTERVALS,
                     s_lifnr FOR  ekko-lifnr,
                     s_werks FOR  ekpo-werks MEMORY ID wrk,
                     s_ekgrp FOR  ekko-ekgrp MEMORY ID ekg
                                  NO INTERVALS,
                     s_ebeln FOR  ekko-ebeln MEMORY ID bes,
                     s_ebelp FOR  ekpo-ebelp MEMORY ID bsp,
                     s_bsart FOR  zbsart_doc-bsart MEMORY ID bsa,"GA01
                     s_pstyp FOR  ekpo-pstyp,
                     s_loekz FOR  ekko-loekz,
                     s_knttp FOR  ekpo-knttp MEMORY ID knt,
                     s_matnr FOR  ekpo-matnr MEMORY ID mat,
                     s_matkl FOR  ekpo-matkl MEMORY ID mkl,
      start of modifications AW2150 GLDK9AAYU9
                    s_bedat FOR  ekko-bedat OBLIGATORY,        "GA29072003
                     S_BEDAT FOR  EKKO-BEDAT,
      end of modifications AW2150 GLDK9AAYU9
                     S_EINDT FOR  EKET-EINDT.
    PARAMETERS:      p_sum AS CHECKBOX,                         "SRI26062003
    start of modification AW2150 GLDK9ABI53
    deleted checkbox for manually closed PO
               p_pod AS CHECKBOX DEFAULT 'X'."insert AW2150 GLDK9AAYU9
    added checkbox for DCI and FI.
                P_DCI AS CHECKBOX DEFAULT 'X', "insert AW2150 GLDK9ABI53
                P_FI  AS CHECKBOX.             "insert AW2150 GLDK9ABI53
    end of modification AW2150 GLDK9ABI53
    SELECTION-SCREEN: END OF BLOCK one .
    SELECTION-SCREEN: BEGIN OF BLOCK two  WITH FRAME TITLE text-070.
    start of insert AW2150 GLDK9ABSZ8
    PARAMETERS:     P_ALLPO AS CHECKBOX DEFAULT 'X'.
    end of insert AW2150 GLDK9ABSZ8
    start of insert AW2150 GLDK9AAYU9
    this was just moved from the block below. this is not a new
    requirement.
    PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT NO-DISPLAY. " ALV Variant
    SELECTION-SCREEN COMMENT 47(40) VARNAME FOR FIELD P_VARI.
    end of insert AW2150 GLDK9AAYU9
    *Start of GA16062003
    PARAMETERS:      p_qty   RADIOBUTTON GROUP qtvl,
                     p_date  RADIOBUTTON GROUP qtvl,
                     p_date1 RADIOBUTTON GROUP qtvl.
    *End of GA16062003
    SELECTION-SCREEN: END OF BLOCK two .
    start of modification AW2150 GLDK9AAYU9
    Start of GLDK9A8WWS (AS3848)
    Commented out the following portion of the source code to remove the
    field VARIANT under Settings on the report selection screen.
    *SELECTION-SCREEN: BEGIN OF BLOCK four WITH FRAME
                                         TITLE text-073.       "TUL0202200
    *selection-screen: begin of block four with frame title text-1
    *Start of GA23062003
    *PARAMETERS: p_vari LIKE disvariant-variant NO-DISPLAY. " ALV Variant
    *SELECTION-SCREEN COMMENT 47(40) varname FOR FIELD p_vari.
    *Select-Options : S_ELIKZ FOR  ekpo-ELIKZ .                  "TUL0202200
    End of modification  AW2150 GLDK9AAYU9
    Ext. check warning ignored for the comment.                 AMT25JAN05
    *SELECTION-SCREEN: END OF BLOCK four.
    End of GLDK9A8WWT (AS3848)
    *selection-screen: end of block three.
    PARAMETERS p_loggrp(4) TYPE c NO-DISPLAY DEFAULT 'PC10'.
    SELECTION-SCREEN: END OF BLOCK three.
    *End of GA23062003
    *eject
    *eject
    INITIALIZATION
    INITIALIZATION.
    *Deletion Indicator
      s_loekz-low    = c_l.
      s_loekz-sign   = c_i.
      s_loekz-option = c_ne.
      APPEND s_loekz.
    *start of insert AW2150 GLDK9ABSZ8
      IF P_ALLPO EQ C_X.
        LOOP AT SCREEN.
          IF SCREEN-NAME EQ 'P_QTY'.
            SCREEN-ACTIVE = 0.
          ELSEIF SCREEN-NAME EQ 'P_DATE'.
            SCREEN-ACTIVE = 0.
          ELSEIF SCREEN-NAME EQ 'P_DATE1'.
            SCREEN-ACTIVE = 0.
          ENDIF.
          MODIFY SCREEN.
        ENDLOOP.
      ELSEIF P_ALLPO NE C_X.
        LOOP AT SCREEN.
          IF SCREEN-NAME EQ 'P_QTY'.
            SCREEN-ACTIVE = 1.
          ELSEIF SCREEN-NAME EQ 'P_DATE'.
            SCREEN-ACTIVE = 1.
          ELSEIF SCREEN-NAME EQ 'P_DATE1'.
            SCREEN-ACTIVE = 1.
          ENDIF.
          MODIFY SCREEN.
        ENDLOOP.
      ENDIF.
    *end of insert AW2150 GLDK9ABSZ8
    *Start of GA23062003
    Settings for display variants
    *INITIALIZATION.                                            "GA03122003.
      g_repid = sy-repid.
      g_save  = c_a(1).
      CLEAR g_variant.
      g_variant-report    = g_repid.
      g_variant-log_group = p_loggrp.
      g_variant-username  = sy-uname.
    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 EQ 0.
        p_vari = gx_variant-variant.
      ENDIF.
      varname = gx_variant-text.
    VALIDATE INITIAL DATA ENTERED BY THE USERS ***************
    *Start of GA29072003.
      IF NOT s_bedat IS INITIAL.
    Start of GLDK9A8WWS (AS3848)
    Changed sequence in subroutine name to comply with coding standards
    based on the review tool ZZCHK.
        PERFORM f0100_check_s_bedat.
    End of GLDK9A8WWS (AS3848)
      ENDIF.
    *End of GA29072003.
    *eject
    *start of insert AW2150 GLDK9ABSZ8
    AT SELECTION-SCREEN OUTPUT.
      IF P_ALLPO EQ C_X.
        LOOP AT SCREEN.
          IF SCREEN-NAME EQ 'P_QTY'.
            SCREEN-ACTIVE = 0.
          ELSEIF SCREEN-NAME EQ 'P_DATE'.
            SCREEN-ACTIVE = 0.
          ELSEIF SCREEN-NAME EQ 'P_DATE1'.
            SCREEN-ACTIVE = 0.
          ENDIF.
          MODIFY SCREEN.
        ENDLOOP.
      ELSEIF P_ALLPO NE C_X.
        LOOP AT SCREEN.
          IF SCREEN-NAME EQ 'P_QTY'.
            SCREEN-ACTIVE = 1.
          ELSEIF SCREEN-NAME EQ 'P_DATE'.
            SCREEN-ACTIVE = 1.
          ELSEIF SCREEN-NAME EQ 'P_DATE1'.
            SCREEN-ACTIVE = 1.
          ENDIF.
          MODIFY SCREEN.
        ENDLOOP.
      ENDIF.
    *end of insert AW2150 GLDK9ABSZ8
    *eject
    *start of insert by AW2150 GLDK9AAYU9
    AT SELECTION SCREEN ON S_EINDT.
    AT SELECTION-SCREEN ON S_EINDT.
      IF NOT S_EINDT IS INITIAL.
        PERFORM F17200_CHECK_S_EINDT.
      ENDIF.
    *end of insert by AW2150 GLDK9AAYU9
    *eject
    AT SELECTION SCREEN ON S_EKORG
    AT SELECTION-SCREEN ON s_ekorg.
    Validate value of purchasing org(s) entered on the selection         *
    screen by executing subroutine 0100_VALIDATE_PURC_ORG.               *
      IF NOT s_ekorg IS INITIAL.
        PERFORM f0200_validate_purc_org.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_EKGRP
    AT SELECTION-SCREEN ON s_ekgrp.
    Validate value of purchasing group(s) entered on the selection       *
    screen by executing subroutine 0200_VALIDATE_PURC_GROUP.             *
      IF NOT s_ekgrp IS INITIAL.
        PERFORM f0300_validate_purc_group.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_EBELN
    AT SELECTION-SCREEN ON s_ebeln.
    Validate value of purchase order(s) entered on the selection         *
    screen by executing subroutine F0310_VALIDATE_PURC_ORDER.
      IF NOT s_ebeln IS INITIAL.
        PERFORM f0310_validate_purc_order.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_WERKS
    AT SELECTION-SCREEN ON s_werks.
    Validate value of plant(s) entered on the selection                  *
    screen by executing subroutine F0400_VALIDATE_PLANT.
      IF NOT s_werks IS INITIAL.
        PERFORM f0400_validate_plant.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_BSART
    AT SELECTION-SCREEN ON s_bsart.
    Validate value of Document type(s) entered on the selection          *
    screen by executing subroutine F0500_VALIDATE_DOC_TYPE.
      IF NOT s_bsart IS INITIAL.
        PERFORM f0500_validate_doc_type.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_PSTYP
    AT SELECTION-SCREEN ON s_pstyp.
    Validate value of Item Category entered on the selection             *
    screen by executing subroutine F0600_VALIDATE_ITEM_CATEGORY.
      IF NOT s_pstyp IS INITIAL.
        PERFORM f0600_validate_item_category.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_MATNR
    AT SELECTION-SCREEN ON s_matnr.
    Validate value of Material Number entered on the selection           *
    screen by executing subroutine F0700_validate_mat_number
      IF NOT s_matnr IS INITIAL.
        PERFORM f0700_validate_mat_number.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_LIFNR
    AT SELECTION-SCREEN ON s_lifnr.
    Validate value of Vendor entered on the selection by executing       *
    subroutine F0800_VALIDATE_VENDOR_NUMBER
      IF NOT s_lifnr IS INITIAL.
        PERFORM f0800_validate_vendor_number.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_MATKL
    AT SELECTION-SCREEN ON s_matkl.
    Validate value of material group entered on the selection screen     *
    by executing subroutine F0900_validate_mat_group.
      IF NOT s_matkl IS INITIAL.
        PERFORM f0900_validate_mat_group.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_KNTTP
    AT SELECTION-SCREEN ON s_knttp.
    Validate the value of account assignment category entered on the     *
    selection screen by executing subroutine 1000_validate_mat_group.    *
      IF NOT s_knttp IS INITIAL.
        PERFORM f1000_validate_***_category.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_EBELP
    AT SELECTION-SCREEN ON s_ebelp.
    Validate the value of PO line item entered on the                    *
    selection screen by executing subroutine F1100_VALIDATE_PO_ITEM.
      IF NOT s_ebelp IS INITIAL.
        PERFORM f1100_validate_po_item.
      ENDIF.
    *eject
    AT SELECTION SCREEN ON S_LOEKZ
    AT SELECTION-SCREEN ON s_loekz.
    Validate the value of deletion indicator enterd on the selection     *
    selection screen by executing subroutine F1200_VALIDATE_DEL_IND.
      IF NOT s_loekz IS INITIAL.
        PERFORM f1200_validate_del_ind.
      ENDIF.
    Start of GLDK9A8WWS (AS3848)
    Commented out the following block of code as a result of the removal
    of the field VARIANT from the selection screen.
    *at selection-screen on value-request for p_vari.
    perform 14000_f4_for_variant.
    End of GLDK9A8WWS (AS3848)
    *Start of deletion AW2150
    *eject
    Block Added From Here TUL02022005
    AT SELECTION SCREEN ON S_ELIKZ
    *AT SELECTION-SCREEN ON s_ELIKZ.
    Validate the value of Delivery Completed Indicator entered.
    IF NOT s_ELIKZ IS INITIAL.
      Check the Valid Values.
       IF  not SPACE in S_ELIKZ
       AND not C_X   in S_ELIKZ .
         MESSAGE e999 WITH
                 'Invalid Delivery Completed Flag entered'(006).
       ENDIF.
    ENDIF.
    Block Added Till Here TUL02022005
    *End of deletion AW2150
    *eject
    AT SELECTION SCREEN
    AT SELECTION-SCREEN.
      PERFORM f15000_pai_of_selection_screen.
    *End of GA23062003
    start of insert AW2150 GLDK9AAYU9
      IF S_BEDAT IS INITIAL
         AND S_EINDT IS INITIAL.
        MESSAGE E999 WITH TEXT-E01.
      ENDIF.
    end of insert AW2150 GLDK9AAYU9
                            MAIN PROCESSING                            **
    *eject
    START-OF-SELECTION.
    START-OF-SELECTION.
    Store report name and report size into temp. varaibles for later use.
      w_repid = sy-repid.
    Select OAs and Info Records to be displayed into internal table
      PERFORM f2000_get_pos.
    Store data into final reporting internal table
      PERFORM f3000_store_data.
    Begin of KAK01
    Start of GLDK9A8WWS (AS3848)
    Calls the subroutine for building the event catalog for ALV.  This
    event catalog will be used in the function module that will generate
    the ALV report.  Logic will eventually be used for the generation of
    the standard report header on top of each page.
      CLEAR v_events.
      w_linsz = sy-linsz.
      PERFORM f17100_build_events USING v_events.
    End of GLDK9A8WWS (AS3848)
    Use ALV instead of normal list.
    Write data to the screen.
    Populate ALV Field Category Structure.
      PERFORM f8000_field_cat.
    Populate ALV Exclude Structure.
      PERFORM f9000_alv_exclude.
    *eject
    END-OF-SELECTION.
    END-OF-SELECTION.
    Begin of KVI04Feb05
      IF W_FLAG EQ C_X.
        CLEAR W_FLAG.
        STOP.
      ENDIF.
    End of "KVI04Feb05
    Display Report.
      PERFORM f10000_call_disp.
    *eject
    AT USER-COMMAND .
    *AT USER-COMMAND.
    CASE SY-UCOMM.
       WHEN 'EXEL'.
         PERFORM F5000_DOWNLOAD_TO_EXCEL.
       WHEN 'CLIK'.
         IF SY-LISEL+1(2) EQ '45'.
           PERFORM F6000_see_po_details.
         ELSE.
           PERFORM F7000_see_oa_details.
         ENDIF.
    ENDCASE.
    End of KAK01
    *eject
      Form(s)/Subroutine(s)   ************************
    *Start of GA29072003.
    *&      FORM F0100_CHECK_S_BEDAT
    Check if user entered appropriate date values as selection criteria *
    ----

    Hi!
    After you click on the printer icon, a popup will apeear. Depends on the SAP system version, you are using, somewhere on the popup, you can find a filed, which is called SAP COVER PAGE.
    Here you can choose, coverpage, without cover page, or standard cover page.
    Regards
    Tamá

  • Report on sales order on hold

    hello sdn friends,
    how to develop an report to display to open sales orders on hold.
    i dont have any idea about this,please help regarding this.

    Hi,
    Check the program
    TABLES:vbak,
           vbap,
           tvko,
           tvak,
           mara,
           tvtw,
           kna1,
           vbpa.
    TYPE-POOLS : slis.
                               GLOBAL TYPES
                       naming convention: "TY_name"
    TYPES : BEGIN OF ty_vbak       ,
            vbeln  TYPE vbak-vbeln ,
            auart  TYPE vbak-auart , " DRFK904686
            vkorg  TYPE vbak-vkorg ,
            vtweg  TYPE vbak-vtweg ,
            vkgrp  TYPE vbak-vkgrp ,
            bstnk  TYPE vbak-bstnk ,  "DRFK904686(+)
            kunrsl TYPE vbak-kunnr ,
            END OF ty_vbak         .
    TYPES: BEGIN OF ty_vbap        ,
            vbeln TYPE vbap-vbeln  ,
            posnr TYPE vbap-posnr  ,
            matnr TYPE vbap-matnr  ,
            matkl TYPE vbap-matkl  ,
            kwmeng TYPE vbap-kwmeng,
            vrkme  TYPE vbap-vrkme ,   "order unit
            zmeng  TYPE vbap-zmeng ,
            zieme  TYPE vbap-zieme ,  "order unit
            netpr  TYPE vbap-netpr ,  "price
            netwr  TYPE vbap-netwr ,  "DRFK904686(+)
          END OF ty_vbap           .
    TYPES:BEGIN OF ty_vbuk     ,
          vbeln TYPE vbuk-vbeln,
    Start of addition DRFK904686
          lfstk TYPE statv     ,
          lfgsk TYPE statv     ,
          fkstk TYPE statv     ,
    End of addition DRFK904686
          END OF ty_vbuk       .
    TYPES:BEGIN OF ty_vbpa     ,
            vbeln TYPE vbpa-vbeln,
            kunrsh TYPE kunnr    ,
          END OF ty_vbpa       .
    TYPES:BEGIN OF ty_makt  ,
            matnr TYPE matnr,
            maktx TYPE maktx,
          END OF ty_makt.
    TYPES:BEGIN OF ty_t023t,
           matkl TYPE matkl,
           wgbez TYPE wgbez,
         END OF ty_t023t.
    TYPES:BEGIN OF ty_kna1    ,
           kunnr TYPE kunnr   ,
           name1 TYPE name1_gp,
         END OF ty_kna1.
    TYPES:BEGIN OF ty_final         ,
            vbeln  TYPE vbak-vbeln  ,
            auart  TYPE vbak-auart  ,
            vkorg  TYPE vbak-vkorg  ,
            vtweg  TYPE vbak-vtweg  ,
            vkgrp  TYPE vbak-vkgrp  ,
            bstnk  TYPE vbak-bstnk  , "PO Number; DRFK904686(+)
            kunrsl TYPE vbak-kunnr  ,
            name1  TYPE name1_gp    ,
            matnr  TYPE vbap-matnr  ,
            maktx  TYPE maktx       ,
            matkl  TYPE vbap-matkl  ,
            wgbez  TYPE wgbez       ,
            kwmeng TYPE vbap-kwmeng ,
            vrkme  TYPE vbap-vrkme  ,   "order unit
            zmenge TYPE vbap-kwmeng ,
            netpr  TYPE vbap-netpr  ,  " price "vv
            netwr  TYPE vbap-netwr  ,
            zmein  TYPE vbap-meins  ,
            kunrsh TYPE kunnr       ,
            name2  TYPE name1_gp    ,
    Start of addition DRFK904686
            lfstk  TYPE statv     ,
            lfgsk  TYPE statv     ,
            fkstk  TYPE statv     ,
    End of addition DRFK904686
          END OF ty_final         .
                              GLOBAL CONSTANTS
                       naming convention: "c_name"
    CONSTANTS: c_sh                         TYPE vbpa-parvw        VALUE 'WE'                   ,
               c_formname_top_of_page       TYPE slis_formname     VALUE 'F_DISPLAY_TOP_OF_PAGE',
               c_en(2)                      TYPE c                 VALUE 'EN'                   ,
               c_a                          TYPE char1             VALUE 'A'                    .
                        GLOBAL ELEMENTARY VARIABLES
                        naming convention: "w_name"
    DATA :w_list_top_of_page      TYPE slis_t_listheader,
          w_kwmeng                TYPE vbap-kwmeng      ,
          w_meins                 TYPE t006-msehi       ,
          w_zmein                 TYPE t006-msehi       ,
          w_repid                 TYPE sy-repid         ,
          w_zmenge                TYPE vbap-kwmeng      ,
          w_events                TYPE slis_t_event     ,
          w_datum                 TYPE sy-datum         ,
          w_umrez1                TYPE marm-umrez       ,
          w_umren1                TYPE marm-umren       ,
          w_umrez2                TYPE marm-umrez       ,
          w_umren2                TYPE marm-umren       ,
          w_text(25)              TYPE c                .
                              GLOBAL STRUCTURES
                        naming convention: "st_name"
    DATA:st_vbak  TYPE ty_vbak  ,
         st_vbap  TYPE ty_vbap  ,
         st_vbpa  TYPE ty_vbpa  ,
         st_makt  TYPE ty_makt  ,
         st_t023t TYPE ty_t023t ,
         st_knasl TYPE  ty_kna1 ,
         st_knash TYPE  ty_kna1 ,
         st_vbuk  TYPE  ty_vbuk ,
         st_final TYPE ty_final .
    DATA:st_fieldcat    TYPE slis_fieldcat_alv ,
         st_layout      TYPE slis_layout_alv   .
                           GLOBAL INTERNAL TABLES
                         naming convention: "i_name"
    DATA:i_vbak  TYPE TABLE OF ty_vbak  ,
         i_vbap  TYPE TABLE OF ty_vbap  ,
         i_vbuk  TYPE TABLE OF ty_vbuk  ,
         i_vbpa  TYPE TABLE OF ty_vbpa  ,
         i_makt  TYPE TABLE OF ty_makt   ,
         i_t023t TYPE TABLE OF ty_t023t ,
         i_knasl TYPE TABLE OF ty_kna1  ,
         i_knash TYPE TABLE OF ty_kna1  ,
         i_final TYPE TABLE OF ty_final .
    DATA:i_fieldcat    TYPE slis_t_fieldcat_alv ,
         i_variant     TYPE disvariant          .
    DEFINE m_fieldcat.
      add 1 to st_fieldcat-col_pos.
      st_fieldcat-fieldname   = &1.
      st_fieldcat-ref_tabname = &2.
      st_fieldcat-seltext_s   = &3.
      st_fieldcat-seltext_l   = &4.
      st_fieldcat-datatype    = &5.
      append st_fieldcat to i_fieldcat.
    END-OF-DEFINITION.
                          PARAMETERS & SELECT-OPTIONS
                     aming convention: "p_name" & "s_name"
    SELECTION-SCREEN  BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    *SELECT-OPTIONS : s_vkorg    FOR  vbak-vkorg  OBLIGATORY,
                    s_vtweg    FOR  vbak-vtweg  OBLIGATORY,
                    s_kunrsl   FOR  vbak-kunnr            ,
                    s_kunrsh   FOR  vbpa-kunnr            ,
                    s_matnr    FOR  vbap-matnr            ,
                    s_auart    for  vbak-auart            . "DRFK904686
                 s_datum    FOR  sy-datum  OBLIGATORY DEFAULT sy-datum."DRFK904686
    SELECT-OPTIONS : s_vkorg    FOR  tvko-vkorg  OBLIGATORY,
                     s_vtweg    FOR  tvtw-vtweg  OBLIGATORY,
                     s_kunrsl   FOR  kna1-kunnr            ,
                     s_kunrsh   FOR  kna1-kunnr            ,
                     s_matnr    FOR  mara-matnr            ,
                     s_auart    FOR  tvak-auart            .    "DRFK904686
    PARAMETERS:   p_meins TYPE vbap-meins.
    SELECTION-SCREEN  END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-002.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(20) text-006 FOR FIELD p_var.
    PARAMETERS: p_var TYPE disvariant-variant.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b5.
                              INITIALIZATION
    INITIALIZATION.
    Report id assigned to Global variable
      w_repid = sy-repid.
    EVENTS TABLE BUILD
      PERFORM f_eventtab_build USING w_events[].
    Processing of listheader
      PERFORM f_comment_build  USING w_list_top_of_page[].
      CLEAR i_variant.
      i_variant-report = sy-repid.
    Read default display variant (description only, w/o field catalog)
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
        EXPORTING
          i_save     = c_a
        CHANGING
          cs_variant = i_variant
        EXCEPTIONS
          not_found  = 2.
      IF sy-subrc EQ 0.
        p_var = i_variant-variant.
      ENDIF.
    Start of addition DRFK904686
                          AT SELECTION-SCREEN ON s_vkorg
    Sales Organisation
    AT SELECTION-SCREEN ON s_vkorg.
      PERFORM f_validate_vkorg.
                          AT SELECTION-SCREEN ON s_vtweg
    Distribution Channel
    AT SELECTION-SCREEN ON s_vtweg.
      PERFORM f_validate_vtweg.
                          AT SELECTION-SCREEN ON s_kunrsl
    Sold-to-party
    AT SELECTION-SCREEN ON s_kunrsl.
      IF NOT s_kunrsl[] IS INITIAL.
        PERFORM f_validate_cust.
      ENDIF.
                          AT SELECTION-SCREEN ON s_kunrsh
    Ship-to-party
    AT SELECTION-SCREEN ON s_kunrsh.
      IF NOT s_kunrsh[] IS INITIAL.
        PERFORM f_validate_shipto.
      ENDIF.
                          AT SELECTION-SCREEN ON s_matnr
    Material Number
    AT SELECTION-SCREEN ON s_matnr.
      IF NOT s_matnr[] IS INITIAL.
        PERFORM f_validate_matnr.
      ENDIF.
                          AT SELECTION-SCREEN ON s_auart
    Order Type
    AT SELECTION-SCREEN ON s_auart.
      IF NOT s_auart[] IS INITIAL.
        PERFORM f_validate_auart.
      ENDIF.
    End of addition DRFK904686
                   AT SELECTION-SCREEN ON VALUE-REQUEST
    F4 for Layout Variant
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
      PERFORM f_get_alv_variant CHANGING p_var.
                          AT SELECTION-SCREEN ON
    Validate Layout Variant
    AT SELECTION-SCREEN ON p_var.
      IF NOT p_var IS INITIAL.
        PERFORM f_check_alv_variant USING p_var.
      ENDIF.
                               START-OF-SELECTION
    START-OF-SELECTION.
    begin of changes DRFK904686
      PERFORM f_fetch_vbuk.
      PERFORM f_fetch_vbak.
    *perform to fetch the data from vbuk.
    *perform to fetch the data from vbak.
    PERFORM f_fetch_vbak.
    *perform to fetch the data from vbuk.
    PERFORM f_fetch_vbuk.
    end of changes DRFK904686
    *perform to fetch the data from vbpa.
      PERFORM f_fetch_vbpa.
    *perform to fetch the data from vbap.
      PERFORM f_fetch_vbap.
    *perform to fetch the material description.
      PERFORM f_fetch_makt.
    *perform to fetch the material group description.
      PERFORM f_fetch_t023t.
    *perform to fetch the customer name
      PERFORM f_fetch_knasl.
    *perform to fetch the customer name
      PERFORM f_fetch_knash.
    *perofrm to move the data into final table
      PERFORM f_move_final.
    Finding no of entries in Internal Table
      IF LINES( i_final ) EQ 0.
        MESSAGE s000 WITH 'No documents found for the  selection criteria'(019).
        EXIT.
      ENDIF.
    *perform for fieldcatalog building
      PERFORM f_build_fieldcat.
    *perform to display the list
      PERFORM f_list_dispaly.
    *&      Form  f_validate_vkorg
          text
         -->P_S_VKORG  text
    FORM f_validate_vkorg.
      SELECT vkorg
         FROM tvko
         UP TO 1 ROWS
         INTO tvko-vkorg
       WHERE vkorg IN s_vkorg.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Sales Organization is invalid'(033).
      ENDIF.
    ENDFORM.                    " f_validate_vkorg
    *&      Form  f_validate_vtweg
          text : This form is used to validate the Distribution Channel
    FORM f_validate_vtweg.
      SELECT vtweg
            FROM tvtw
            UP TO 1 ROWS
            INTO tvtw-vtweg
          WHERE vtweg IN s_vtweg.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Distribution Channel is invalid'(032).
      ENDIF.
    ENDFORM.                    " f_validate_vtweg
    *&      Form  f_validate_cust
          text: This form is used to validate the Sold-to party .
    FORM f_validate_cust.
      SELECT kunnr
             FROM kna1
             UP TO 1 ROWS
             INTO kna1-kunnr
           WHERE kunnr IN s_kunrsl.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Customer is invalid'(034).
      ENDIF.
    ENDFORM.                    " f_validate_cust
    *&      Form  f_validate_shipto
           text: This form is used to validate the Ship-to party .
    FORM f_validate_shipto.
      SELECT kunnr
             FROM kna1
             UP TO 1 ROWS
             INTO kna1-kunnr
           WHERE kunnr IN s_kunrsh.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Ship-to party is invalid'(035).
      ENDIF.
    ENDFORM.                    " f_validate_shipto
    *&      Form  f_validate_matnr
          text: This form is used to validate material.
    FORM f_validate_matnr .
      SELECT matnr
        FROM mara
        UP TO 1 ROWS
        INTO mara-matnr
      WHERE matnr IN s_matnr.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Material is invalid'(036).
      ENDIF.
    ENDFORM.                    " f_validate_matnr
    *&      Form  f_validate_auart
          text: This form is used to validate Order Type
    FORM f_validate_auart .
      SELECT auart
          FROM tvak
          UP TO 1 ROWS
          INTO tvak-auart
        WHERE auart IN s_auart.
      ENDSELECT.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH 'Order Type is invalid'(037).
      ENDIF.
    ENDFORM.                    " f_validate_auart
    *&      Form  sub_get_alv_variant
          To display variant selection dialog box
    FORM f_get_alv_variant  CHANGING p_layvar TYPE disvariant-variant.
      CLEAR i_variant.
      DATA lw_exit(1) TYPE c.
      i_variant-report   = sy-repid.
      i_variant-username = sy-uname.
    Display variant selection dialog box
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant    = i_variant
          i_save        = c_a
        IMPORTING
          e_exit        = lw_exit
          es_variant    = i_variant
        EXCEPTIONS
          not_found     = 1
          program_error = 2
          OTHERS        = 3.
      IF sy-subrc EQ 0.
        IF lw_exit IS INITIAL.
          p_layvar = i_variant-variant.
        ENDIF.
      ELSE.
        MESSAGE i000 WITH 'No display variants found'(007).
      ENDIF.
    ENDFORM.                    " sub_get_alv_variant
    *&      Form  sub_check_alv_variant
          to check whether a display variant exists
    FORM f_check_alv_variant  USING p_layvar TYPE disvariant-variant.
      CLEAR i_variant.
      i_variant-report   = sy-repid.
      i_variant-username = sy-uname.
      IF p_layvar NE space.
        MOVE p_layvar TO i_variant-variant.
    Checks whether a display variant exists
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
          EXPORTING
            i_save     = c_a
          CHANGING
            cs_variant = i_variant.
      ENDIF.
    ENDFORM.                    "f_check_alv_variant
    " sub_check_alv_variant
    *&      Form  f_fetch_vbak
    from to fetch sales org, dis chanel,sales group sold to party from vbak
    FORM f_fetch_vbak .
    *{ begin of change DRFK904686
      IF i_vbuk IS NOT INITIAL.
        SELECT vbeln
               auart
               vkorg
               vtweg
               vkgrp
               bstnk
               kunnr
          FROM vbak
          INTO TABLE i_vbak
             FOR ALL ENTRIES IN i_vbuk
         WHERE vbeln EQ i_vbuk-vbeln
           AND auart IN s_auart
           AND vkorg IN s_vkorg
           AND vtweg IN s_vtweg
           AND kunnr IN s_kunrsl  .
    end of change DRFK904686 }
        IF sy-subrc EQ 0.
          SORT i_vbak BY vbeln.
        ELSE.
          MESSAGE s000 WITH 'No documents found for the  selection criteria'(019).
          EXIT.
        ENDIF.
      ENDIF.
    ENDFORM.                    " f_fetch_vbak
    *&      Form  f_fetch_vbuk
      from to fetch open sales doc from vbuk
    FORM f_fetch_vbuk .
    IF i_vbak IS NOT INITIAL.
       SELECT vbeln
         FROM vbuk
         INTO TABLE i_vbuk
          FOR ALL ENTRIES IN i_vbak
        WHERE vbeln EQ i_vbak-vbeln
          AND ( lfstk NE 'C'
          OR    fkstk NE 'C' ) .
      SELECT vbeln
             lfstk               
             lfgsk       
             fkstk            FROM vbuk
        INTO TABLE i_vbuk
       WHERE ( ( lfstk EQ 'A'
         OR lfstk EQ 'B')
         OR (  fkstk EQ 'A'
         OR    fkstk EQ 'B' ) ) .
    ENDIF.
    ENDFORM.                    " f_fetch_vbuk
    *&      Form  f_fetch_vbpa
         from to fetch ship to party from vbpa
    FORM f_fetch_vbpa .
      IF i_vbak IS NOT INITIAL.
        SELECT vbeln
               kunnr
          FROM vbpa
          INTO TABLE i_vbpa
           FOR ALL ENTRIES IN i_vbak
         WHERE vbeln EQ i_vbak-vbeln
           AND kunnr IN s_kunrsh
           AND parvw EQ c_sh.
      ENDIF.
    ENDFORM.                    " f_fetch_vbpa
    *&      Form  f_fetch_vbap
      from to fetch sales doc, mat no, mat group,order UOM from vbap
    FORM f_fetch_vbap .
      IF i_vbpa IS NOT INITIAL.
        SELECT vbeln
               posnr
               matnr
               matkl
               kwmeng
               vrkme
               zmeng
               zieme
               netwr
               netpr
          FROM vbap
          INTO TABLE i_vbap
           FOR ALL ENTRIES IN i_vbpa
         WHERE vbeln EQ i_vbpa-vbeln
           AND matnr IN s_matnr.
      ENDIF.
    ENDFORM.                    " f_fetch_vbap
    *&      Form  f_fetch_makt
    form to fetch the material description
    FORM f_fetch_makt .
      IF i_vbap IS NOT INITIAL.
        SELECT
            matnr
            maktx
       FROM makt
          INTO TABLE i_makt
           FOR ALL ENTRIES IN i_vbap
         WHERE matnr EQ i_vbap-matnr
           AND spras EQ c_en.
      ENDIF.
    ENDFORM.                    " f_fetch_makt
    *&      Form  f_fetch_t023t
       form to fetch the material group description
    FORM f_fetch_t023t .
      IF i_vbap IS NOT INITIAL.
        SELECT
            matkl
            wgbez
       FROM t023t
          INTO TABLE i_t023t
           FOR ALL ENTRIES IN i_vbap
         WHERE spras EQ c_en
           AND matkl EQ i_vbap-matkl.
      ENDIF.
    ENDFORM.                    " f_fetch_t023t
    *&      Form  f_fetch_kna1
       form to fetch the sold to customer name
    FORM f_fetch_knasl .
      IF i_vbak IS NOT INITIAL.
        SELECT
            kunnr
            name1
       FROM kna1
          INTO TABLE i_knasl
           FOR ALL ENTRIES IN i_vbak
         WHERE kunnr EQ i_vbak-kunrsl.
      ENDIF.
    ENDFORM.                    " f_fetch_kna1
    *&      Form  f_fetch_knash
       form to fetch the ship to customer name
    FORM f_fetch_knash .
      IF i_vbpa IS NOT INITIAL.
        SELECT
            kunnr
            name1
       FROM kna1
          INTO TABLE i_knash
           FOR ALL ENTRIES IN i_vbpa
         WHERE kunnr EQ i_vbpa-kunrsh.
      ENDIF.
    ENDFORM.                    " f_fetch_knash
    *&      Form  f_move_final
    form for moving all the fields into the final internal table for
    *dispalying the final output.
    FORM f_move_final .
      SORT : i_vbak  BY vbeln,
             i_vbpa  BY vbeln,
             i_makt  BY matnr,
             i_t023t BY matkl,
             i_knasl BY kunnr,
             i_vbuk  BY vbeln,
             i_knash BY kunnr.
    *looping at i_vbap and moving mat no,mat group,quantity and
    *UOM into final table.
      LOOP AT i_vbap INTO st_vbap.
        IF st_vbap-kwmeng IS INITIAL.
          st_vbap-kwmeng = st_vbap-zmeng.
          st_vbap-vrkme  = st_vbap-zieme.
        ENDIF.
        MOVE: st_vbap-matnr  TO st_final-matnr,
              st_vbap-matkl  TO st_final-matkl,
              st_vbap-kwmeng TO st_final-kwmeng,
              st_vbap-netwr  TO st_final-netwr,
              st_vbap-vrkme  TO st_final-vrkme.
        IF p_meins IS INITIAL.
          MOVE:st_vbap-vrkme  TO st_final-zmein ,
               st_vbap-kwmeng TO st_final-zmenge.
        ELSE.
          CLEAR : w_kwmeng,
                  w_meins,
                  w_zmein.
    *Order Quantity
          w_kwmeng = st_vbap-kwmeng.
    *Order Unit
          w_meins = st_vbap-vrkme.
    *Report Unit
          w_zmein = p_meins.
          CLEAR : w_umrez1,
                  w_umren1,
                  w_umrez2,
                  w_umren2.
          SELECT SINGLE umrez
                        umren
                  INTO (w_umrez1,
                        w_umren1)
                   FROM marm
                  WHERE matnr EQ st_vbap-matnr
                    AND meinh EQ w_meins.
          SELECT SINGLE umrez
                        umren
                  INTO (w_umrez2,
                        w_umren2)
                   FROM marm
                  WHERE matnr EQ st_vbap-matnr
                    AND meinh EQ w_zmein.
          IF w_umrez1 IS NOT INITIAL AND w_umren2 IS NOT INITIAL.
            w_zmenge = w_kwmeng * ( w_umren1 / w_umrez1 ) * ( w_umrez2 / w_umren2 ).
        update new report unit and quantity
            MOVE p_meins  TO st_final-zmein.
            MOVE w_zmenge TO st_final-zmenge.
          ELSE.
       if failed to convert update report unit and quantity with order values
            MOVE st_vbap-vrkme TO st_final-zmein.
            MOVE st_vbap-kwmeng TO st_final-zmenge.
          ENDIF.
        ENDIF.
    Start of changes DRFK904686
    To get the delivery, overall and billing status
        CLEAR st_vbuk.
        READ TABLE i_vbuk INTO st_vbuk
                    WITH KEY vbeln = st_vbap-vbeln
                    BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE : st_vbuk-lfstk TO st_final-lfstk,
                 st_vbuk-lfgsk TO st_final-lfgsk,
                 st_vbuk-fkstk TO st_final-fkstk.
        ENDIF.
    End of changes DRFK904686
    *reading i_vbak and moving sales doc,sales org,dist chanel,
    *sales group,and sold to party into the final internal table
        CLEAR st_vbak.
        READ TABLE i_vbak
              INTO st_vbak
          WITH KEY vbeln = st_vbap-vbeln
          BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE: st_vbak-vbeln  TO st_final-vbeln ,
                st_vbak-vkorg  TO st_final-vkorg ,
                st_vbak-vtweg  TO st_final-vtweg ,
                st_vbak-vkgrp  TO st_final-vkgrp ,
                st_vbak-auart  TO st_final-auart ,
                st_vbak-bstnk  TO st_final-bstnk , "DRFK904686(+)
                st_vbak-kunrsl TO st_final-kunrsl.
        ENDIF.
    *reading i_vbpa and moving ship to party to the final internal table
        CLEAR st_vbpa.
        READ TABLE i_vbpa
              INTO st_vbpa
          WITH KEY vbeln = st_vbap-vbeln
          BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE st_vbpa-kunrsh TO st_final-kunrsh.
        ENDIF.
    *reading i_makt and moving material description to the final table
        CLEAR st_makt.
        READ TABLE i_makt
                  INTO st_makt
              WITH KEY matnr = st_vbap-matnr
              BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE st_makt-maktx TO st_final-maktx.
        ENDIF.
    *reading i_t023t
        CLEAR st_t023t.
        READ TABLE i_t023t
                  INTO st_t023t
              WITH KEY matkl = st_vbap-matkl
              BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE st_t023t-wgbez TO st_final-wgbez.
        ENDIF.
    *READINGI_KNASL
        CLEAR st_knasl.
        READ TABLE i_knasl
                  INTO st_knasl
              WITH KEY kunnr = st_final-kunrsl
              BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE st_knasl-name1 TO st_final-name1.
        ENDIF.
    *READINGI_KNASH
        CLEAR st_knash.
        READ TABLE i_knash
                  INTO st_knash
              WITH KEY kunnr = st_final-kunrsh
              BINARY SEARCH.
        IF sy-subrc EQ 0.
          MOVE st_knash-name1 TO st_final-name2.
        ENDIF.
        APPEND st_final TO i_final.
        CLEAR st_final.
      ENDLOOP.
    ENDFORM.                    " f_move_final
    *&      Form  f_build_fieldcat
    form for building the field catalog
    FORM f_build_fieldcat .
      m_fieldcat 'VKORG'   'VBAK'   'Sales Organisation'(004)   'Sales Organisation'(004)                     ' '.
      m_fieldcat 'VTWEG'   'VBAK'   'Distribution Channel'(005) 'Distribution Channel'(005)                   ' '.
      m_fieldcat 'VKGRP'   'VBAK'   'Sales Group'(008)          'Sales Group'(008)                            ' '.
      m_fieldcat 'VBELN'   'VBAK'   'Sales Document'(009)       'Sales Document'(009)                         ' '.
      m_fieldcat 'AUART'   'VBAK'   'Order Type'(026)           'Order Type'(026)                             ' '.
      m_fieldcat 'BSTNK'   'VBAK'   'PO number'(031)            'PO number'(031)                              ' '.
      m_fieldcat 'KUNRSL'  'VBAK'   'Sold to Party'(010)        'Sold to Party'(010)                          ' '.
      m_fieldcat 'NAME1'   'KNA1'   'Name Sold to'(020)         'Name Sold to'(020)                           ' '.
      m_fieldcat 'KUNRSH'  'VBPA'   'Ship to Party'(011)        'Ship to Party'(011)                          ' '.
      m_fieldcat 'NAME2'   'KNA1'   'Name Ship to'(022)         'Name Ship to'(022)                           ' '.
      m_fieldcat 'KWMENG'  'VBAP'   'Order Quantity'(012)       'Order Quantity'(012)                 'QUAN '(014).
      m_fieldcat 'VRKME'   'VBAP'   'Order UOM'(017)            'Order UOM'(017)                               ' '.
      m_fieldcat 'ZMENGE'  'VBAP'   'Report Quantity'(013)      'Report Quantity'(013)                'QUAN '(014).
      m_fieldcat 'ZMEIN'   'VBAP'   'Report UOM'(018)           'Report UOM'(018)                              ' '.
      m_fieldcat 'NETWR'   'VBAP'   'Net value'(030)            'Net value'(030)                               ' '.
    m_fieldcat 'MATKL'   'VBAP'   'Material Group Description'(023)    'Material Group Description'(023)    ' '. "DRFK904686(-)
    m_fieldcat 'WGBEZ'   'T023T'  'Material Group'(015)       'Material Group'(015)                         ' '. "DRFK904686(-)
      m_fieldcat 'MATKL'   'VBAP'   'Material Group'(015)       'Material Group'(015)                          ' '. "DRFK904686(+)
      m_fieldcat 'WGBEZ'   'T023T'  'Material Group Description'(023)    'Material Group Description'(023)     ' '. "DRFK904686(+)
      m_fieldcat 'MATNR'   'VBAP'   'Material Number'(016)      'Material Number'(016)                         ' '.
      m_fieldcat 'MAKTX'   'MAKT'   'Materia Description'(024)  'Material Description'(025)                    ' '.
    Begin of addition DRFK904686
      m_fieldcat 'LFSTK'   'VBUK'   'Delivery status'(027)         'Delivery status'(027)  'DelStat'           .
      m_fieldcat 'LFGSK'   'VBUK'   'Overall delivery status'(028) 'Overall delivery status'(028)              ' '.
      m_fieldcat 'FKSTK'   'VBUK'   'Billing status'(029)          'Billing status'(029)                       ' '.
    End of addition DRFK904686
    ENDFORM.                    " f_build_fieldcat
    *&      Form  f_list_dispaly
    form for displaying the final output in the Alv grid
    FORM f_list_dispaly .
      st_layout-cell_merge        = 'X'.
      st_layout-colwidth_optimize = 'X'.
    To display the required data
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_buffer_active    = 'X'
          i_callback_program = w_repid
          is_layout          = st_layout
          it_fieldcat        = i_fieldcat[]
          i_save             = 'A'
          is_variant         = i_variant
          it_events          = w_events[]
        TABLES
          t_outtab           = i_final.
    ENDFORM.                    " f_list_dispaly
    " f_EVENTTAB_BUILD
          FORM F_DISPLAY_TOP_OF_PAGE                                    *
    *form for providing the report heading                                *
            event     TOP_OF_PAGE                                       *
    FORM f_display_top_of_page.                                 "#EC CALLED
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = w_list_top_of_page.
    ENDFORM.                    "DISPLAY_TOP_OF_PAGE
    *&      Form  f_EVENTTAB_BUILD
            Ereignistabelle Bilden
            EVENTS TABLE BUILD
         -->U_ER_EVENTS[]  text
    FORM f_eventtab_build USING p_u_er_events TYPE slis_t_event.
      FIELD-SYMBOLS: <fs_event> TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type = 0
        IMPORTING
          et_events   = p_u_er_events.
      READ TABLE p_u_er_events WITH KEY name = slis_ev_top_of_page
                             ASSIGNING <fs_event>.
      IF sy-subrc = 0.
        <fs_event>-form = c_formname_top_of_page.
      ENDIF.
    ENDFORM.                               " f_EVENTTAB_BUILD
    *&      Form  F_COMMENT_BUILD
           Bearbeitung des Listenkopfes
           Processing of listheader
         -->U_ER_LIST_TOP_OF_PAGE[]  text
    FORM f_comment_build USING u_er_list_top_of_page TYPE slis_t_listheader.
      DATA: lw_line TYPE slis_listheader.
    Type H
      CLEAR lw_line.
      lw_line-typ  = 'H'.
    Daily Historical Volume
      lw_line-info = text-003.
      APPEND lw_line TO u_er_list_top_of_page.
    Type S
      CLEAR lw_line.
      lw_line-typ  = 'S'.
    Run Date - Sy-datum
      WRITE sy-datum TO w_datum MM/DD/YY .
      CONCATENATE text-021 w_datum INTO w_text.
      lw_line-info = w_text.
      APPEND lw_line TO u_er_list_top_of_page.
    ENDFORM.                               " COMMENT_BUILD
    Reward the points for useful answers.

  • Help required on ALV REPORT

    Hi,
    Please help with a solution:
    my requirement is to add the following to an existing program.
    i need to add 3 fields from a new table(a table which is not used in the program).
    the fields are :
    Vendor Part No. : Field ZWTYVND-Z_WTY_MAT_VPN
    Mail To Vendor No.:  Field ZWTYVND-Z_WTY_LIFNR_MAIL
    Mail To Vendor Name:  Field ZWTYVND-WTY_NAME1
    here is the program code:
    REPORT  zwtyrep008
            LINE-SIZE 500
            MESSAGE-ID zpp02.
    *& Report  ZWTYREP008                                                  *
    *$*$----------------------------------------------------------------$*$*
    *$*$---T A B L E S--------------------------------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    TABLES: wty_pnwtyh_dia,    "
            wty_pnwtyv_dia,
            mara,
            usr21,
            pnwtyv,
            adrp,
            s084.
    *$*$----------------------------------------------------------------$*$*
    *$*$ CONSTANTS
    *$*$----------------------------------------------------------------$*$*
    CONSTANTS: true(1)                                VALUE 'X',
               false(1)                               VALUE ' '.
    CONSTANTS: c_year_low(4)                          VALUE '1960',
               c_year_high(4)                         VALUE '9999',
               c_zero        LIKE wty_pvwty_dia-valiv VALUE '0.00',
               c_claim_to_process TYPE i              VALUE 3000.
    CONSTANTS: c_save(1)               VALUE 'U'.
    *$*$----------------------------------------------------------------$*$*
    *$*$ TYPES
    *$*$----------------------------------------------------------------$*$*
    TYPE-POOLS: slis, pwty.
    TYPES: BEGIN OF lt_period,
                   year(4),
                   poper(2),
                   start     TYPE d,
                   end       TYPE d,
          END   OF lt_period.
    TYPES: BEGIN OF tp_charac_value,
                 atwrt LIKE cawn-atwrt,
           END   OF tp_charac_value.
    TYPES: BEGIN OF tp_submit_records,
                 header_guid   LIKE wty_pnwtyv_dia-header_guid,
                 versn         LIKE wty_pnwtyv_dia-versn,
                 prev_version  LIKE wty_pnwtyv_dia-prev_version,
                 kateg         LIKE wty_pnwtyv_dia-kateg,
                 aktiv         LIKE wty_pnwtyv_dia-aktiv,
                 pnguid        LIKE wty_pnwtyv_dia-pnguid,
                 knumv         LIKE wty_pnwtyv_dia-knumv,
           END   OF tp_submit_records.
    TYPES: BEGIN OF tp_cond_table,
                 kschl  LIKE konv-kschl,
                 zaehk  LIKE konv-zaehk,
                 kinak  LIKE konv-kinak,
                 kbetr  LIKE konv-kbetr,
           END   OF tp_cond_table.
    *$*$----------------------------------------------------------------$*$*
    *$*$---I N T E R N A L   T A B L E S--------------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    * Report table to display with ALV
    DATA: t_detail_info TYPE STANDARD TABLE OF zwty_claim_avg_rep_det
                        WITH HEADER LINE
                        INITIAL SIZE 0.
    FIELD-SYMBOLS:<fs_detail_info> LIKE LINE OF t_detail_info.
    DATA: t_summary_alv TYPE STANDARD TABLE OF zwty_claim_avg_rep_sum
                        WITH HEADER LINE
                        INITIAL SIZE 0.
    FIELD-SYMBOLS:<fs_summary_alv>  LIKE LINE OF t_summary_alv.
    DATA: t_detail_alv  TYPE STANDARD TABLE OF zwty_claim_avg_rep_det
                        WITH HEADER LINE
                        INITIAL SIZE 0.
    FIELD-SYMBOLS:<fs_detail_alv> LIKE LINE OF t_detail_alv.
    DATA: it_submit_records TYPE HASHED TABLE OF tp_submit_records
                           WITH UNIQUE KEY header_guid versn
                           WITH HEADER LINE
                           INITIAL SIZE 0.
    FIELD-SYMBOLS: <fs_submit_rec_vs2> TYPE tp_submit_records.
    DATA: it_period TYPE HASHED TABLE OF lt_period
                    WITH UNIQUE KEY year poper
                    WITH HEADER LINE
                    INITIAL SIZE 0.
    FIELD-SYMBOLS: <fs_it_period>      LIKE LINE OF it_period.
    DATA: it_pvwty_dia_all  TYPE wty_pvwty_dia_tab.
    FIELD-SYMBOLS: <fs_pvwty_dia_es3> LIKE LINE OF it_pvwty_dia_all.
    DATA: it_cond_table TYPE STANDARD TABLE OF tp_cond_table
                        WITH HEADER LINE
                        INITIAL SIZE 0.
    FIELD-SYMBOLS: <fs_cond_table> TYPE tp_cond_table.
    *$*$----------------------------------------------------------------$*$*
    *$*$---G L O B A L  D A T A  ---------------------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    DATA: gt_fieldcat_sum   TYPE slis_t_fieldcat_alv,
          gt_fieldcat_det  TYPE slis_t_fieldcat_alv,
          gtw_fieldcat     LIKE LINE OF gt_fieldcat_sum,
          gt_top_of_page   TYPE slis_t_listheader,
          gtw_top_of_page  LIKE LINE OF gt_top_of_page,
          gt_end_of_page   TYPE slis_t_listheader,
          gtw_end_of_page  LIKE LINE OF gt_end_of_page,
          gs_layout        TYPE slis_layout_alv,
          gt_excluding     TYPE slis_t_extab,
          gtw_excluding    LIKE LINE OF gt_excluding,
          gs_variant1       TYPE disvariant,
          gs_variant2       TYPE disvariant,
          eventcat         TYPE slis_t_event,         "EVENEMENT
          eventcat_ln      LIKE LINE OF eventcat,     "LIGNE D'EVENEMENT
          gt_sort          TYPE slis_t_sortinfo_alv,
          gtw_sort         LIKE LINE OF gt_sort.
    DATA: wa_lis_progname  LIKE sy-cprog,
          wa_low_date      TYPE d,
          wa_high_date     TYPE d,
          wa_index_mat     TYPE i,
          wa_index_link    TYPE i,
          wa_level_alv     TYPE i.
    DATA: g_callback_pgm(40)          TYPE c,
          g_callback_user_command(30) TYPE c.
    DATA: my_print TYPE  slis_print_alv.
    FIELD-SYMBOLS: <fs_pvwty_dia> TYPE wty_pvwty_dia.
    * SELECTION SCREEN                                          *
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK post WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_cpudt FOR s084-spmon NO-EXTENSION,
                    s_postdt FOR  wty_pnwtyv_dia-fkdat NO-EXTENSION.
    SELECTION-SCREEN END   OF BLOCK post.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
    SELECT-OPTIONS: s_vend  FOR pnwtyv-v_parnr NO INTERVALS.
    SELECT-OPTIONS: s_clgrp FOR wty_pnwtyh_dia-clmgrp.
    SELECTION-SCREEN SKIP 1.
    SELECT-OPTIONS: s_model  FOR  wty_pnwtyh_dia-z_wty_model.
    SELECT-OPTIONS: s_matnr  FOR  mara-matnr.
    SELECTION-SCREEN END   OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK lay WITH FRAME TITLE text-004.
    PARAMETERS: varn1  TYPE slis_vari MEMORY ID fit_alv_gl,  "Dis. variant
                varn2  TYPE slis_vari.
    SELECTION-SCREEN END   OF BLOCK lay.
    *$*$----------------------------------------------------------------$*$*
    *$*$---A T  S E L E C T I O N - S C R E E N-------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR varn1.
      PERFORM alv_variant_f4 USING '0001' CHANGING varn1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR varn2.
      PERFORM alv_variant_f4 USING '0002' CHANGING varn2.
    AT SELECTION-SCREEN ON BLOCK post.  "Validate posting parameters
      PERFORM validate_posting_parameter.
    AT SELECTION-SCREEN ON s_model.     "Validate model
      PERFORM validate_model.
    AT SELECTION-SCREEN ON s_vend.      "Validate vendor
      PERFORM validate_vendor.
    AT SELECTION-SCREEN ON s_matnr.      "Validate material
      PERFORM validate_material.
    AT SELECTION-SCREEN ON s_clgrp.     "Validate claim group
      PERFORM validate_claim_group.
    AT SELECTION-SCREEN OUTPUT.
    * Initialization.
    INITIALIZATION.
    * Initialize default display variant for ALV report
      CLEAR gs_variant1.
      MOVE sy-repid TO: gs_variant1-report,
                        gs_variant2-report.
      gs_variant1-handle = '0001'.
      gs_variant2-handle = '0002'.
      wa_lis_progname   = sy-repid.
      PERFORM set_default_variant CHANGING gs_variant1
                                           varn1.
      PERFORM set_default_variant CHANGING gs_variant2
                                           varn2.
      PERFORM get_fin_period USING c_year_low c_year_high.
      PERFORM set_period_to_analyse.
    *$*$----------------------------------------------------------------$*$*
    *$*$---S T A R T - O F - S E L E C T I O N--------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    START-OF-SELECTION.
      PERFORM select_claim_to_process.
    *$*$----------------------------------------------------------------$*$*
    *$*$---E N D - O F - S E L E C T I O N------------------------------$*$*
    *$*$----------------------------------------------------------------$*$*
    END-OF-SELECTION.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
    *        PERCENTAGE       = 0
         text             =  text-m02.
      IF sy-batch = 'X'.
        PERFORM set_print_alv_grid.
      ENDIF.
      PERFORM show_alv_grid.
    *&      Form  PRINT_DETAIL_ALV
    FORM show_alv_grid.
    * Prepare ALV_GRID before display
    * ===============================
      PERFORM init_field.
      PERFORM init_layout.
      PERFORM init_fieldcat.
      PERFORM init_excluding.
      PERFORM init_event.
    *  SORT report_data BY bukrs werks.
      PERFORM call_alv_list_display_level_1.
    ENDFORM.                    " PRINT_DETAIL
    *&      Form  VARIANT_F4   copied from RPCWCCK3
    *       Display a list of all available display variants for the ALV.
    *      <--P_varn1  Return the selected variant and return
    FORM variant_f4 CHANGING p_varn1 TYPE disvariant-variant.
      DATA: l_variant LIKE disvariant.
    * Get the list of available variants for the report
      l_variant-report = sy-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant = l_variant
          i_save     = 'A'
        IMPORTING
          es_variant = l_variant.
      p_varn1 = l_variant-variant.
    ENDFORM.                               " VARIANT_F4
    *&      Form  INIT_FIELD
    FORM init_field.
      MOVE sy-repid          TO g_callback_pgm.
      MOVE 'MY_USER_COMMAND' TO g_callback_user_command.
    ENDFORM.                    " INIT_FIELD
    *&      Form  INIT_LAYOUT
    FORM init_layout.
      gs_layout-window_titlebar   = sy-title.
      gs_layout-colwidth_optimize = 'X'.
      gs_layout-expand_all        = 'X'.
      gs_layout-no_subtotals      = ''.
      gs_layout-key_hotspot       = 'X'.         " Afficher Hotspot
      gs_layout-zebra             = 'X'.
      gs_layout-group_change_edit = 'X'.
      gs_layout-f2code            = 'DISPLAY'.
    * gs_layout-max_linesize      = 400.
    * gs_layout-totals_only       = 'X'.
    ENDFORM.                    " INIT_LAYOUT
    *&      Form  INIT_FIELDCAT
    FORM init_fieldcat.
      DATA: lt_fieldcatalog    TYPE lvc_t_fcat,
            ltw_fieldcatalog   TYPE lvc_s_fcat.
      REFRESH: lt_fieldcatalog,
               gt_fieldcat_sum,
               gt_fieldcat_det.
      CLEAR   gtw_sort.
      REFRESH gt_sort.
    * ==============================================
    * Set the label column for summary report leve 1
    * ==============================================
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'ZWTY_CLAIM_AVG_REP_SUM'
          i_client_never_display = 'X'
        CHANGING
          ct_fieldcat            = lt_fieldcatalog.
    *                             FIELD     pos sub  up  down Group
      PERFORM create_sort USING: 'V_PARNR'   1  'X'  'X'  ' '   'X',
                                 'NAME'      2  'X'  'X'  ' '   'X',
                                 'MAKTX'     3  'X'  'X'  ' '   'X',
                                 'MATNR'     4  'X'  'X'  ' '   'X'.
      LOOP AT lt_fieldcatalog INTO ltw_fieldcatalog.
        CLEAR: gtw_fieldcat.
        MOVE-CORRESPONDING ltw_fieldcatalog TO gtw_fieldcat.
        PERFORM set_alv_field_desc USING  ltw_fieldcatalog '1'.
        APPEND gtw_fieldcat TO gt_fieldcat_sum.
      ENDLOOP.
      PERFORM set_hot_spot TABLES gt_fieldcat_sum USING 'CLAIM_NB'.
    * =========================================
    * Field Catalog for Detail report (level 2)
    * =========================================
      REFRESH: lt_fieldcatalog.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'ZWTY_CLAIM_AVG_REP_DET'
          i_client_never_display = 'X'
        CHANGING
          ct_fieldcat            = lt_fieldcatalog.
      LOOP AT lt_fieldcatalog INTO ltw_fieldcatalog.
        CLEAR: gtw_fieldcat.
        MOVE-CORRESPONDING ltw_fieldcatalog TO gtw_fieldcat.
        PERFORM set_alv_field_desc USING  ltw_fieldcatalog '2'.
        APPEND gtw_fieldcat TO gt_fieldcat_det.
      ENDLOOP.
      PERFORM set_hot_spot TABLES gt_fieldcat_det USING 'CLMNO'.
    ENDFORM.                    " INIT_FIELDCAT
    *&      Form  INIT_SORT
    FORM create_sort USING  p_fieldname p_spos
                            p_subtot            TYPE char1
                            p_up                TYPE char1
                            p_down              TYPE char1
                            p_group             TYPE char1.
      CLEAR: gtw_sort.
      gtw_sort-fieldname = p_fieldname.
      gtw_sort-spos      = p_spos.
      gtw_sort-subtot    = p_subtot.
      gtw_sort-up        = p_up.
      gtw_sort-down      = p_down.
      gtw_sort-group     = p_group.
      APPEND gtw_sort TO gt_sort.
    ENDFORM.                    "create_sort
    *&      Form  INIT_EXCLUDING
    *       Exclude des option de l'application tool bar
    FORM init_excluding.
      CLEAR   gtw_excluding.
      REFRESH gt_excluding.
      gtw_excluding-fcode   = '&ABC'.
      APPEND gtw_excluding TO gt_excluding.
    ENDFORM.                    " INIT_EXCLUDING
    *&      Form  call_alv_list_display_level_1
    FORM call_alv_list_display_level_1.
    * DATA: l_i_save  VALUE 'U'.   "User-specific variants only
      DATA: l_i_save  VALUE 'A'.   "Any type of variants
      gs_variant1-report  = sy-repid.
      gs_variant1-variant = varn1.
      gs_layout-colwidth_optimize = true.
      wa_level_alv = 1.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program      = g_callback_pgm
          i_callback_user_command = g_callback_user_command
          is_layout               = gs_layout
          it_fieldcat             = gt_fieldcat_sum
          it_excluding            = gt_excluding
          it_sort                 = gt_sort
          i_save                  = l_i_save
          is_variant              = gs_variant1
          it_events               = eventcat
          is_print                = my_print
        TABLES
          t_outtab                = t_summary_alv
        EXCEPTIONS
          program_error           = 1
          OTHERS                  = 2.
    ENDFORM.                    " call_alv_list_display_level_1
    *&      Form  INIT_EVENT
    *       Determine quelle routine a executer selon l'event
    FORM init_event.
      eventcat_ln-name = 'TOP_OF_PAGE'.
      eventcat_ln-form = 'ALV_PAGE_HEADER'.
      APPEND eventcat_ln TO eventcat.
      eventcat_ln-name = 'END_OF_PAGE'.
      eventcat_ln-form = 'FOOTER_PAGE'.
      APPEND eventcat_ln TO eventcat.
    ENDFORM.                    " INIT_EVENT
    *&      Form  ALV_PAGE_HEADER
    FORM alv_page_header.
      DATA: l_date_time(22),
            l_char7(7),
            l_char10(10).
      DATA: p_date(10) TYPE c.
      DATA: p_time(8)  TYPE c.
      DATA: p_name(80) TYPE c.
    * Format current date and time
      WRITE sy-datum TO p_date USING EDIT MASK '____/__/__'.
      WRITE sy-uzeit TO p_time USING EDIT MASK '__:__:__'.
      CONCATENATE p_date '-' p_time
                  INTO l_date_time SEPARATED BY space.
    * Set the user name
      SELECT SINGLE
             persnumber addrnumber INTO (usr21-persnumber, usr21-addrnumber)
                 FROM  usr21
                 WHERE bname = sy-uname.
      SELECT SINGLE name_first name_last
             INTO   (adrp-name_first, adrp-name_last )
             FROM   adrp
             WHERE  persnumber = usr21-persnumber.
      CONCATENATE adrp-name_first adrp-name_last INTO p_name
      SEPARATED BY space.
      REFRESH gt_top_of_page.
      CLEAR   gtw_top_of_page.
    * Program title ------------------------------------------------
      CLEAR gtw_top_of_page.
      gtw_top_of_page-typ  = 'H'.
      gtw_top_of_page-info = sy-title.
      APPEND gtw_top_of_page TO gt_top_of_page.
      CLEAR gtw_top_of_page.
      gtw_top_of_page-typ     = 'S'.
      gtw_top_of_page-key  = 'Parameters :'.
    * Period / Posting Date -----------------------------------------
      IF s_cpudt[] IS INITIAL.
        WRITE s_postdt-low TO l_char10.
        CONCATENATE gtw_top_of_page-info
                    text-104
                    l_char10
               INTO gtw_top_of_page-info SEPARATED BY space.
        IF NOT s_postdt-high IS INITIAL.
          WRITE s_postdt-high TO l_char10.
          CONCATENATE gtw_top_of_page-info
                      text-105
                      l_char10
                      INTO gtw_top_of_page-info SEPARATED BY space.
        ENDIF.
        APPEND gtw_top_of_page TO gt_top_of_page.
      ELSE.
        CONCATENATE s_cpudt-low(4) '/' s_cpudt-low+4(2)
                    INTO l_char7 .
        CONCATENATE gtw_top_of_page-info
                    text-103
                    l_char7
                    INTO gtw_top_of_page-info SEPARATED BY space.
        IF s_cpudt-high NE space.
          CONCATENATE s_cpudt-high(4) '/' s_cpudt-high+4(2)
                      INTO l_char7 .
          CONCATENATE gtw_top_of_page-info
                      text-105
                      l_char7
                      INTO gtw_top_of_page-info SEPARATED BY space.
        ENDIF.
        APPEND gtw_top_of_page TO gt_top_of_page.
      ENDIF.
    * Display wich level we display -----------------------------
    *  IF wa_level_alv > 1.
    *    CLEAR gtw_top_of_page.
    *    IF wa_level_alv = 2.
    *      gtw_top_of_page-info = t_summary_alv-v_parnr.
    *      SHIFT gtw_top_of_page-info LEFT DELETING LEADING '0'.
    *    ENDIF.
    *    gtw_top_of_page-typ     = 'S'.
    *    gtw_top_of_page-key  = 'Partner:'.
    *    APPEND gtw_top_of_page TO gt_top_of_page.
    *  ENDIF.
    * Executed by -----------------------------------------------
      CLEAR gtw_top_of_page.
      gtw_top_of_page-typ     = 'S'.
      gtw_top_of_page-key  = 'Report executed by :'.
      gtw_top_of_page-info =  p_name.
    * * Date & time of execution --------------------------------
      APPEND gtw_top_of_page TO gt_top_of_page.
      gtw_top_of_page-key  = 'DATE :'.
      gtw_top_of_page-info = l_date_time.
      APPEND gtw_top_of_page TO gt_top_of_page.
    * Name of the report ----------------------------------------
      CLEAR gtw_top_of_page.
      gtw_top_of_page-typ  = 'A'.
    * LS_LINE-KEY:  not used for this type
      gtw_top_of_page-info = sy-repid.
      APPEND gtw_top_of_page TO gt_top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = gt_top_of_page.
    *  IF sy-batch = 'X' AND sy-linsz > 255 AND l_ctr_newpage = 0.
    *    NEW-PAGE PRINT ON LINE-SIZE 255.   "Pour wrapper !!!!!!
    *  ENDIF.
    ENDFORM.                    "ALV_PAGE_HEADER
    *&      Form  footer_page
    FORM footer_page.
      DATA: l_footer(300),
            l_page_no(5).
      l_page_no   = sy-pagno.
      CONCATENATE 'Page' l_page_no INTO l_footer SEPARATED BY space.
      SKIP 2.
      WRITE:/001 l_footer(sy-linsz) CENTERED.
    ENDFORM.                    "footer_page
    *&      Form  MY_USER_COMMAND
    *       text
    *      -->P_SY_UCOMM  text
    *      -->P_GS_SELFIELD  text
    FORM my_user_command USING    p_sy_ucomm
                                  p_gs_selfield TYPE slis_selfield.
      DATA: l_claim_no         LIKE mcshier-hiername,
            lv_tcode_last(15).
    * ======================================================
    * Call TX WTY to display the claim. Only possible at the
    * detail report(level 3)
    * ======================================================
      CASE p_gs_selfield-fieldname.
        WHEN 'CLMNO'.
          READ TABLE t_detail_alv INDEX p_gs_selfield-tabindex.
          SHIFT t_detail_alv-clmno LEFT DELETING LEADING '0'.
          l_claim_no = t_detail_alv-clmno.
          CONCATENATE sy-tcode syst-modno
                      INTO lv_tcode_last.
          EXPORT wty_tcode_last_memoid FROM lv_tcode_last TO MEMORY
                                       ID    'WTY_TCODE_LAST_MEMOID'.
          SET PARAMETER ID 'CLMNO' FIELD l_claim_no.
          CALL TRANSACTION 'WTY' AND SKIP FIRST SCREEN.
        WHEN 'CLAIM_NB'.
    *     =====================================
    *     Display the next level of information
    *     =====================================
          CASE  wa_level_alv.
            WHEN 1.
              REFRESH: t_detail_alv.
              wa_level_alv = 2.
              READ TABLE t_summary_alv INDEX p_gs_selfield-tabindex.
              LOOP AT t_detail_info
                      ASSIGNING <fs_detail_info>
                      WHERE v_parnr    EQ t_summary_alv-v_parnr
                        AND crncy      EQ t_summary_alv-crncy
                        AND item_type  EQ t_summary_alv-item_type
                        AND ov_meinh   EQ t_summary_alv-ov_meinh
                        AND iv_meinh   EQ t_summary_alv-iv_meinh
                        AND matnr      EQ t_summary_alv-matnr.
                MOVE-CORRESPONDING <fs_detail_info> TO t_detail_alv.
                APPEND t_detail_alv.
              ENDLOOP.
              CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                EXPORTING
                  i_callback_program      = g_callback_pgm
                  i_callback_user_command = g_callback_user_command
                  is_layout               = gs_layout
                  it_fieldcat             = gt_fieldcat_det
                  it_excluding            = gt_excluding
    *              it_sort                 = gt_sort
                  i_save                  = c_save
                  is_variant              = gs_variant2
                  it_events               = eventcat
                  is_print                = my_print
                TABLES
                  t_outtab                = t_detail_alv
                EXCEPTIONS
                  program_error           = 1
                  OTHERS                  = 2.
              wa_level_alv = 1.
          ENDCASE.
      ENDCASE.
    ENDFORM.                    " MY_USER_COMMAND
    *       FORM PRINT_ALV_GRID                                           *
    *       Print the report not on screen for special batch processing.  *
    *  -->  IT         Table to print  -   Z_HRF_BEN_CONF_FLEX
    FORM set_print_alv_grid.
      my_print-print              = 'X'.  "Force printing
      my_print-no_print_selinfos  = 'X'.
      my_print-no_print_listinfos = 'X'.
      my_print-no_new_page        = ''.   "Separate spool files
      my_print-prnt_title         = 'X'.
      my_print-prnt_info          = 'X'.
      my_print-reserve_lines      = 3.
    ENDFORM.                    "set_print_alv_grid
    *&      Form  ALV_VARIANT_F4
    FORM alv_variant_f4 USING    p_handle
                        CHANGING p_vari.
      DATA: rs_variant LIKE disvariant.
      DATA: nof4 TYPE c.
      CLEAR nof4.
      LOOP AT SCREEN.
        IF screen-name = p_vari.
          IF screen-input = 0.
            nof4 = 'X'.
          ENDIF.
        ENDIF.
      ENDLOOP.
      rs_variant-report   = sy-repid.
      rs_variant-username = sy-uname.
      rs_variant-handle   = p_handle.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant = rs_variant
          i_save     = 'A'
        IMPORTING
          es_variant = rs_variant
        EXCEPTIONS
          OTHERS     = 1.
      IF sy-subrc = 0 AND nof4 EQ space.
        p_vari = rs_variant-variant.
      ENDIF.
    ENDFORM.                               " ALV_VARIANT_F4
    *&      Form  validate_model
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM validate_model .
      DATA: l_matnr LIKE mara-matnr.
      SELECT SINGLE matnr
             INTO  l_matnr
             FROM  mara
             WHERE matnr IN s_model
               AND mtart EQ 'ZKMA'.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH text-e07.
      ENDIF.
    ENDFORM.                    " validate_model
    *&      Form  select_claim_to_process
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM select_claim_to_process .
      DATA: lt_pnwtyh_dia     TYPE wty_pnwtyh_dia_tab,
            lt_pnwtyv_dia     TYPE wty_pnwtyv_dia_tab,
            lt_pvwty_dia      TYPE wty_pvwty_dia_tab,
            lt_pnwtyh_dia_tmp TYPE wty_pnwtyh_dia_tab,
            lt_pnwtyv_dia_tmp TYPE wty_pnwtyv_dia_tab,
            lt_pvwty_dia_tmp  TYPE wty_pvwty_dia_tab,
            lt_pvwty_dia_mat  TYPE wty_pvwty_dia_tab,
            lt_sel_fkdat      TYPE pwty_sel_fkdat_pt,
            lt_sel_v_parnr    TYPE pwty_sel_v_parnr_pt,
            lt_sel_clmty      TYPE pwty_sel_clmty_pt,
            lt_sel_clmgrp     TYPE pwty_sel_clmgrp_pt.
      DATA: lst_sel_fkdat LIKE LINE OF lt_sel_fkdat,
            lst_sel_clmty LIKE LINE OF lt_sel_clmty.
      DATA: BEGIN OF lt_clmno OCCURS 0,
                  clmno   LIKE pnwtyh-clmno,
            END   OF lt_clmno,
            lt_clmno_tmp   LIKE lt_clmno OCCURS 0,
            lt_claim    TYPE pwty_sel_clmno_pt,
            wa_clmno    LIKE LINE OF lt_claim.
      DATA: l_nb_claim         TYPE i.
      RANGES: lr_model FOR wty_pnwtyh_dia-z_wty_model.
      FIELD-SYMBOLS: <lfs_pnwtyh_dia>    LIKE LINE OF lt_pnwtyh_dia,
                     <lfs_pnwtyv_dia>    LIKE LINE OF lt_pnwtyv_dia,
                     <lfs_pvwty_dia_es2> LIKE LINE OF lt_pvwty_dia,
                     <lfs_pvwty_dia_mat> LIKE LINE OF lt_pvwty_dia_mat.
      REFRESH: lt_pnwtyh_dia, lt_pnwtyv_dia,lt_pvwty_dia, lt_sel_clmty,
               lr_model, t_detail_info, t_summary_alv, lt_pvwty_dia_mat.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
    *    PERCENTAGE       = 0
         text             =  text-m01. "Extracting claim
    * ========================
    * Get the Claim to process
    * ========================
    *  SELECT clmno
    *         INTO  TABLE lt_clmno
    *         FROM  pnwtyh
    *         WHERE z_wty_convflg  EQ space
    *           AND z_wty_error    EQ space
    *  wa_clmno-sign   = 'I'.
    *  wa_clmno-option = 'EQ'.
    *  LOOP AT lt_clmno.
    *    wa_clmno-low     = lt_clmno-clmno.
    *    APPEND wa_clmno  TO lt_claim.
    *  ENDLOOP.
      lst_sel_fkdat-sign   = 'I'.
      lst_sel_fkdat-option = 'BT'.
      lst_sel_fkdat-low    = wa_low_date.
      lst_sel_fkdat-high   = wa_high_date.
      APPEND lst_sel_fkdat TO lt_sel_fkdat.
      lst_sel_clmty-sign   = 'E'.
      lst_sel_clmty-option = 'EQ'.
      lst_sel_clmty-low    = 'ZSBC'.
      APPEND lst_sel_clmty TO lt_sel_clmty.
      lt_sel_v_parnr[] = s_vend[].
      lt_sel_clmgrp[]  = s_clgrp[].
      CALL FUNCTION 'PVSDBWTY_CLAIM_SELECT'
        EXPORTING
          it_sel_fkdat     = lt_sel_fkdat
          it_sel_clmgrp    = lt_sel_clmgrp
          it_sel_v_parnr   = lt_sel_v_parnr
          it_sel_clmty     = lt_sel_clmty
    *      it_sel_clmno     = lt_claim
        IMPORTING
          et_pnwtyh_dia    = lt_pnwtyh_dia
          et_pnwtyv_dia    = lt_pnwtyv_dia
          et_pvwty_dia     = lt_pvwty_dia
        EXCEPTIONS
          no_entry_found   = 1
          authority_failed = 2
          OTHERS           = 3.
      IF sy-subrc = 3 .
        MESSAGE e309(wty) .
      ENDIF .
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
    *    PERCENTAGE       = 0
         text             =  text-m03. "Extracting claim
      LOOP AT lt_pvwty_dia
           ASSIGNING <fs_pvwty_dia>
           WHERE poskt_cust = 'MAT'.
        INSERT <fs_pvwty_dia> INTO TABLE lt_pvwty_dia_mat.
      ENDLOOP.
      it_pvwty_dia_all[] = lt_pvwty_dia[].
      SORT lt_pnwtyh_dia     BY pnguid.
      SORT lt_pvwty_dia      BY version_guid z_wty_posnr_hier.
      SORT lt_pvwty_dia_mat  BY version_guid.
      SORT it_pvwty_dia_all  BY version_guid posnr.
    * Keep Version record OC or IV in a separate table for later use
      LOOP AT lt_pnwtyv_dia
              ASSIGNING <lfs_pnwtyv_dia>.
        it_submit_records-header_guid  = <lfs_pnwtyv_dia>-header_guid.
        it_submit_records-versn        = <lfs_pnwtyv_dia>-versn.
        it_submit_records-prev_version = <lfs_pnwtyv_dia>-prev_version.
        it_submit_records-kateg        = <lfs_pnwtyv_dia>-kateg.
        it_submit_records-aktiv        = <lfs_pnwtyv_dia>-aktiv.
        it_submit_records-knumv        = <lfs_pnwtyv_dia>-knumv.
        it_submit_records-pnguid       = <lfs_pnwtyv_dia>-pnguid.
        INSERT TABLE it_submit_records.
      ENDLOOP.
    * =============
    * Process Claim
    * =============
      LOOP AT lt_pnwtyv_dia
              ASSIGNING <lfs_pnwtyv_dia>
              WHERE aktiv        EQ true   "Active version only
                AND kateg        EQ 'IV'   "Category
                AND fi_doc_exist EQ 'X'.
        CLEAR: t_detail_info, t_summary_alv.
    *   Read Header detail
        READ TABLE lt_pnwtyh_dia
             WITH KEY pnguid = <lfs_pnwtyv_dia>-header_guid
             ASSIGNING <lfs_pnwtyh_dia>
             BINARY SEARCH.
    *   Claim must be without error -----------------------------
        IF sy-subrc                      NE 0      OR
           <lfs_pnwtyh_dia>-z_wty_error   = true   OR
           <lfs_pnwtyh_dia>-z_wty_convflg = true.
          CONTINUE. "Rejected this Claim
        ENDIF.
    *   Check Model
        IF <lfs_pnwtyh_dia>-z_wty_model IN s_model.
        ELSE.
          CONTINUE. "Rejected this Claim
        ENDIF.
    *   Read first "MAT" Item information ------------------
        READ TABLE lt_pvwty_dia_mat
             WITH KEY version_guid = <lfs_pnwtyv_dia>-pnguid
             ASSIGNING <lfs_pvwty_dia_mat>
             BINARY SEARCH.
        wa_index_mat = sy-tabix.
        IF sy-subrc NE 0.
          CONTINUE. "Rejected this Claim
        ENDIF.
    *   ====================================================
    *   Process all item "MAT" linked to the current version
    *   ====================================================
        WHILE sy-subrc                     = 0
              AND
              <lfs_pvwty_dia_mat>-version_guid = <lfs_pnwtyv_dia>-pnguid.
          IF <lfs_pvwty_dia_mat>-matnr IN s_matnr.
    *       ======================================
    *       Process Items linked to the "MAT" Item
    *       ======================================
            READ TABLE lt_pvwty_dia
                 WITH KEY version_guid     = <lfs_pnwtyv_dia>-pnguid
                          z_wty_posnr_hier = <lfs_pvwty_dia_mat>-posnr
                 ASSIGNING <lfs_pvwty_dia_es2>
                 BINARY SEARCH.
            wa_index_link = sy-tabix.
            DO. "Execute only ONCE (to process all items linked to the)
              "MAT Item
              IF sy-subrc NE 0.
                EXIT.  "Exit the DO loop
              ENDIF.
              WHILE sy-subrc                     = 0
                    AND
                   <lfs_pvwty_dia_es2>-version_guid =
                           <lfs_pnwtyv_dia>-pnguid
                    AND
                   <lfs_pvwty_dia_es2>-z_wty_posnr_hier =
                           <lfs_pvwty_dia_mat>-posnr.
                IF <lfs_pvwty_dia_es2>-valiv EQ c_zero.
                ELSE.
    *             Initialize the detail information to display ---------
                  CLEAR: t_detail_info.
                  t_detail_info-v_parnr    = <lfs_pnwtyv_dia>-v_parnr.
                  t_detail_info-matnr      = <lfs_pvwty_dia_mat>-matnr.
                  t_detail_info-item_type  = <lfs_pvwty_dia_es2>-poskt_cust.
                  t_detail_info-iv_versn   = <lfs_pnwtyv_dia>-versn.
                  t_detail_info-clmno      = <lfs_pnwtyh_dia>-clmno.
                  t_detail_info-crncy      = <lfs_pnwtyv_dia>-v_crncy.
                  t_detail_info-iv_meinh   = <lfs_pvwty_dia_es2>-meinh.
                  t_detail_info-z_wty_model = <lfs_pnwtyh_dia>-z_wty_model.
                  ADD  <lfs_pvwty_dia_es2>-quant TO
                                                 t_detail_info-iv_appr_qty.
                  SELECT SINGLE kbetr
                         INTO   t_detail_info-iv_appr_rate
                         FROM   konv
                         WHERE  knumv  = <lfs_pnwtyv_dia>-knumv
                           AND  kposn  = <lfs_pvwty_dia_es2>-posnr
                           AND  kschl  = 'ZVAP'
                           AND  kinak  = space.
    *              t_detail_info-flat_indic   = <lfs_pnwtyh_dia>-z_wty_model
    *             t_detail_info-pric_indic   = <lfs_pnwtyh_dia>-z_wty_serno
                  PERFORM get_the_submit_record
                          USING <lfs_pnwtyv_dia>-header_guid
                                <lfs_pnwtyv_dia>-prev_version
                                <lfs_pnwtyh_dia>-clmno
                                <lfs_pvwty_dia_es2>-posnr.
                ENDIF.
    *           =====================
    *           Read next Linked item
    *           =====================
                PERFORM read_next_item  TABLES   lt_pvwty_dia
                                        CHANGING wa_index_link.
                IF sy-subrc = 0.
                  ASSIGN <fs_pvwty_dia> TO <lfs_pvwty_dia_es2>.
                ENDIF.
              ENDWHILE.
              EXIT.  "Exit the DO loop
            ENDDO.
          ENDIF.
    *     ====================
    *     Read next "MAT" item
    *     ====================
          PERFORM read_next_item  TABLES   lt_pvwty_dia_mat
                                  CHANGING wa_index_mat.
          IF sy-subrc = 0.
            ASSIGN <fs_pvwty_dia> TO <lfs_pvwty_dia_mat>.
          ENDIF.
        ENDWHILE.
      ENDLOOP.
    * ========================
    * Get the description text
    * ========================
      LOOP AT t_detail_info
           ASSIGNING <fs_detail_info>.
    *   Get the model text -------------------------------------
        SELECT SINGLE mfrpn
               INTO   <fs_detail_info>-z_wty_model
               FROM   mara
               WHERE  matnr = <fs_detail_info>-z_wty_model.
    *   Set Node name to regroup later by group -----------------
        SELECT SINGLE name1
               INTO   <fs_detail_info>-name
               FROM   lfa1
               WHERE  lifnr = <fs_detail_info>-v_parnr.
    *   Set Node name to regroup later by group -----------------
        SELECT SINGLE maktx
               INTO   <fs_detail_info>-maktx
               FROM   makt
               WHERE  matnr = <fs_detail_info>-matnr
                 AND  spras = sy-langu.
        MOVE-CORRESPONDING <fs_detail_info> TO t_summary_alv.
        t_summary_alv-claim_nb = 1.
        COLLECT t_summary_alv.
      ENDLOOP.
    * ===========================================
    * Calculate the average of the summary report
    * ===========================================
      LOOP AT t_summary_alv
           ASSIGNING <fs_summary_alv>.
        DIVIDE <fs_summary_alv>-ov_prop_qty   BY <fs_summary_alv>-claim_nb.
        DIVIDE <fs_summary_alv>-ov_prop_rate  BY <fs_summary_alv>-claim_nb.
        DIVIDE <fs_summary_alv>-ov_submit_qty  BY <fs_summary_alv>-claim_nb.
        DIVIDE <fs_summary_alv>-ov_submit_rate BY <fs_summary_alv>-claim_nb.
        DIVIDE <fs_summary_alv>-iv_appr_qty    BY <fs_summary_alv>-claim_nb.
        DIVIDE <fs_summary_alv>-iv_appr_rate   BY <fs_summary_alv>-claim_nb.
      ENDLOOP.
      DELETE t_summary_alv WHERE v_parnr NOT IN s_vend.
    ENDFORM.                    " select_claim_to_process
    *&      Form  SET_HOT_SPOT
    *       text
    *      -->P_0287   text
    FORM set_hot_spot  TABLES   p_fieldcat     TYPE slis_t_fieldcat_alv
                       USING    value(p_field).
      FIELD-SYMBOLS: <lfs_field_cat> LIKE LINE OF gt_fieldcat_sum.
      READ TABLE p_fieldcat WITH KEY fieldname  = p_field
           ASSIGNING <lfs_field_cat>.
      IF sy-subrc = 0.
        <lfs_field_cat>-hotspot = 'X'.
        <lfs_field_cat>-key     = 'X'.
      ENDIF.
    ENDFORM.                    " SET_HOT_SPOT
    *&      Form  set_screen_text
    *       text
    *      -->P_0997   text
    FORM set_screen_text  USING    p_label
                                   p_text.
      MOVE p_label TO :gtw_fieldcat-seltext_l,
                       gtw_fieldcat-seltext_m,
                       gtw_fieldcat-seltext_s,
                       gtw_fieldcat-reptext_ddic.
      IF p_text NE space.
        gtw_fieldcat-ddictxt = p_text.
      ENDIF.
    ENDFORM.                    " set_screen_text
    *&      Form  set_default_variant
    *       text
    *      -->P_0822   text
    *      <--P_GS_VARIANT1  text
    FORM set_default_variant  CHANGING p_variant     TYPE disvariant
                                       p_disvar      TYPE slis_vari.
    * Get default variant
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
        EXPORTING
          i_save     = c_save
        CHANGING
          cs_variant = p_variant
        EXCEPTIONS
          not_found  = 2.
      IF sy-subrc = 0.
        p_disvar =  p_variant-variant.
      ENDIF.
    ENDFORM.                    " set_default_variant
    *&      Form  validate_vendor
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM validate_vendor.
      DATA: l_lifnr LIKE lfa1-lifnr.
      IF s_vend[] IS INITIAL.
      ELSE.
        SELECT SINGLE lifnr
               INTO   l_lifnr
               FROM   lfa1
               WHERE  lifnr IN s_vend.
        IF sy-subrc NE 0.
          MESSAGE e000 WITH text-e01.
        ENDIF.
      ENDIF.
    ENDFORM.                    " validate_vendor
    *&      Form  inform_claim_error
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM inform_claim_error USING value(p_claim_no)
                                  value(p_version).
      DATA: l_text1(50),
            l_text2(50).
      CONCATENATE text-301
                  p_claim_no
                  INTO l_text1 SEPARATED BY space.
      CONCATENATE text-302
                  p_version
                  text-303
                  INTO l_text2 SEPARATED BY space.
      CALL FUNCTION 'POPUP_TO_INFORM'
        EXPORTING
          titel = text-200
          txt1  = l_text1
          txt2  = l_text2
          txt3  = ' '
          txt4  = text-304.
    ENDFORM.                    " inform_claim_error
    *&      Form  validate_posting_parameter
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM validate_posting_parameter .
      DATA: l_low_date  TYPE d,
            l_high_date TYPE d.
      CLEAR: wa_low_date, wa_high_date.
    * Posting parameters must be entered
      IF s_cpudt[] IS INITIAL AND s_postdt[] IS INITIAL.
        MESSAGE e000 WITH text-e04.
      ENDIF.
    * Posting paramters can't be intered at the same time
      IF s_cpudt[] IS INITIAL OR s_postdt[] IS INITIAL.
      ELSE.
        MESSAGE e000 WITH text-e03.
      ENDIF.
    * Validate posting period ---------------------------------------------
      IF s_postdt[] IS INITIAL.
        READ TABLE s_cpudt INDEX 1.
        IF s_cpudt-low IS INITIAL.
          MESSAGE e000 WITH text-e03.
        ENDIF.
        PERFORM validate_period USING    s_cpudt-low
                                CHANGING l_low_date
                                         l_high_date.
        wa_low_date  = l_low_date.
        wa_high_date = l_high_date.
        IF s_cpudt-high IS INITIAL.
        ELSE.
          PERFORM validate_period USING    s_cpudt-high
                                  CHANGING l_low_date
                                           l_high_date.
          IF s_cpudt-high LT s_cpudt-low.
            MESSAGE ID 'DB' TYPE 'E' NUMBER '650' .
          ENDIF.
          wa_high_date = l_high_date.
        ENDIF.
      ELSE.
    *   Validate posting date --------------------------------------------
        READ TABLE s_postdt INDEX 1.
        wa_low_date  = s_postdt-low.
        IF s_postdt-high IS INITIAL.
          wa_high_date = wa_low_date.
        ELSE.
          wa_high_date = s_postdt-high.
        ENDIF.
      ENDIF.
    ENDFORM.                    " validate_posting_parameter
    *&      Form  get_fin_period
    *       Get the financial period from 1960 to 9999
    *  -->  p1        text
    *  <--  p2        text
    FORM get_fin_period USING value(p_year_low)
                              value(p_year_high).
      DATA : BEGIN OF fp_table OCCURS 0,
                   periv LIKE t009b-periv, "FINANCIAL YEAR VARIANT
                   bdatj LIKE t009b-bdatj, "CALENDAR YEAR
                   bumon LIKE t009b-bumon, "MONTH
                   butag LIKE t009b-butag, "DAY OF MONTH
                   poper LIKE t009b-poper, "COST PERIOD
                   reljr LIKE t009b-reljr, "YEAR SHIFT
             END OF fp_table.
      DATA: l_fin_bdatj       LIKE t009b-bdatj,
            l_period_start    TYPE d,
            l_period_end      TYPE d,
            l_prev_period_end TYPE d,
            l_prev_fin_bdatj  LIKE t009b-bdatj,
            l_prev_poper      LIKE t009b-poper,
            l_count           TYPE n.
    * Get the Fiscal year variant periods
      SELECT periv bdatj bumon butag poper reljr
             INTO  TABLE fp_table
             FROM  t009b
             WHERE periv = 'ZB'.
      LOOP AT fp_table.
        IF l_prev_period_end NE '00000000'.
          l_period_start = l_prev_period_end + 1.
        ENDIF.
        CONCATENATE fp_table-bdatj fp_table-bumon fp_table-butag
                    INTO l_period_end.
        l_prev_period_end = l_period_end.
        l_fin_bdatj       = fp_table-bdatj + fp_table-reljr.
        IF c_year_low NE ''      AND l_fin_bdatj LT p_year_low.
          CONTINUE.
        ELSEIF p_year_high NE '' AND l_fin_bdatj GT p_year_high.
          CONTINUE.
        ELSEIF p_year_low NE '' AND p_year_high EQ '' AND
               l_fin_bdatj  GT c_year_low.
          CONTINUE.
        ENDIF.
        IF l_prev_fin_bdatj EQ l_fin_bdatj         AND
           l_prev_poper     EQ fp_table-poper.
          it_period-end    = l_period_end.
          MODIFY it_period TRANSPORTING  end
                 WHERE year  = it_period-year
                   AND poper = it_period-poper.
        ELSE.
          it_period-year   = l_fin_bdatj.
          it_period-poper  = fp_table-poper+1.
          it_period-start  = l_period_start.
          it_period-end    = l_period_end.
          INSERT TABLE it_period.
        ENDIF.
        l_prev_fin_bdatj = l_fin_bdatj.
        l_prev_poper     = fp_table-poper.
        IF l_count EQ 0.
          l_count = l_count + 1.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " get_fin_period
    *&      Form  set_period_to_analyse
    *       Find the fiscal period for a specific date
    *  -->  p1        text
    *  <--  p2        text
    FORM set_period_to_analyse.
      LOOP AT it_period
           ASSIGNING <fs_it_period>
           WHERE start LE sy-datum
             AND end   GE sy-datum.
        CONCATENATE <fs_it_period>-year
                    <fs_it_period>-poper
                    INTO s_cpudt-low.
        s_cpudt-sign   = 'I'.
        s_cpudt-option = 'EQ'.
        APPEND s_cpudt.
        EXIT.
      ENDLOOP.
    ENDFORM.                    " set_period_to_analyse
    *&      Form  validate_material
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM validate_material .
      DATA: l_matnr LIKE mara-matnr.
      IF s_matnr[] IS INITIAL.
      ELSE.
        SELECT SINGLE matnr
               INTO   l_matnr
               FROM   mara
               WHERE  matnr IN s_matnr.
        IF sy-subrc NE 0.
          MESSAGE e000 WITH text-e02.
        ENDIF.
      ENDIF.
    ENDFORM.                    " validate_material
    *&      Form  validate_claim_group
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM validate_claim_group .
      DATA: l_clmgrp LIKE cwty006-clmgrp.
      IF s_clgrp[] IS INITIAL.
      ELSE.
        SELECT SINGLE clmgrp
               INTO   l_clmgrp
               FROM   cwty006
               WHERE  clmgrp IN s_clgrp.
        IF sy-subrc NE 0.
          MESSAGE e000 WITH text-e06.
        ENDIF.
      ENDIF.
    ENDFORM.                    " validate_claim_group
    *&      Form  set_alv_field_desc
    *       text
    *      -->P_LTW_FIELDCATALOG  text
    *      <--P_GTW_FIELDCAT  text
    FORM set_alv_field_desc USING value(p_fieldcat) TYPE lvc_s_fcat
                                  value(p_level).
      gtw_fieldcat-seltext_l    = p_fieldcat-scrtext_l.
      gtw_fieldcat-seltext_m    = p_fieldcat-scrtext_m.
      gtw_fieldcat-seltext_s    = p_fieldcat-scrtext_s.
      gtw_fieldcat-reptext_ddic = p_fieldcat-reptext.
      CASE p_fieldcat-fieldname.
        WHEN 'NAME'.
          PERFORM set_screen_text USING 'Vendor Name'           'L'.
        WHEN 'MAKTX'.
          PERFORM set_screen_text USING 'Material Description'  'L'.
        WHEN 'CLAIM_NB'.
          PERFORM set_screen_text USING '#Claims'               'L'.
        WHEN 'IV_MEINH'.
          PERFORM set_screen_text USING 'IV UoM'                'L'.
        WHEN 'OV_MEINH'.
          PERFORM set_screen_text USING 'OV UoM'                'L'.
        WHEN 'FLAT_INDIC'.
          PERFORM set_screen_text USING 'Flat Rate Ind.'        'L'.
        WHEN 'PRIC_INDIC'.
          PERFORM set_screen_text USING 'Price Ind.'            'L'.
        WHEN 'OV_PROP_QTY'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'OV avg. Prop. Qty'    'L'.
             PERFORM set_screen_text USING 'Avg Prop Qty Sub'    'L'.  "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'OV Prop. Qty'         'L'.
          ENDIF.
        WHEN 'OV_PROP_RATE'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'OV avg. Prop. Rate $'  'L'.
             PERFORM set_screen_text USING 'Avg Prop Rate Sub'  'L'.    "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'OV Prop. Rate $'       'L'.
          ENDIF.
        WHEN 'OV_SUBMIT_QTY'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'OV avg. Submit Qty'    'L'.
             PERFORM set_screen_text USING 'Avg Qty Sub'    'L'.          "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'OV Submit Qty'         'L'.
          ENDIF.
        WHEN 'OV_SUBMIT_RATE'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'OV avg. Submit Rate $' 'L'.
            PERFORM set_screen_text USING 'Avg Rate Sub' 'L'.        "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'OV Submit Rate $'      'L'.
          ENDIF.
        WHEN 'IV_APPR_QTY'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'IV Avg. Appr. Qty'     'L'.
            PERFORM set_screen_text USING 'Avg Qty Pd'     'L'.     "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'IV Appr. Qty'          'L'.
          ENDIF.
        WHEN 'IV_APPR_RATE'.
          IF p_level = 1. "Summary report
    *BEGIN OF TR#D03K935718
    *        PERFORM set_screen_text USING 'IV Avg. Appr. Rate $'  'L'.
            PERFORM set_screen_text USING 'Avg Rate Pd'  'L'.   "RFC2917
    *END OF TR#D03K935718
          ELSE.
            PERFORM set_screen_text USING 'IV Appr. Rate $'       'L'.
          ENDIF.
        WHEN 'OV_VERSN'.
          PERFORM set_screen_text USING 'OV Versn.'               'L'.
        WHEN 'IV_VERSN'.
          PERFORM set_screen_text USING 'IV Versn.'               'L'.
        WHEN OTHERS.
          gtw_fieldcat-ddictxt      = p_fieldcat-selddictxt.
      ENDCASE.
    *   Initialisation des Labels des entetes de colonne -------------------
      gtw_fieldcat-no_out       = p_fieldcat-no_out.
      gtw_fieldcat-emphasize    = p_fieldcat-emphasize.
      gtw_fieldcat-fix_column   = p_fieldcat-fix_column.
      gtw_fieldcat-icon         = p_fieldcat-icon.
      gtw_fieldcat-no_zero      = 'X'.
      gtw_fieldcat-do_sum       = p_fieldcat-do_sum.
    ENDFORM.                    " set_alv_field_desc
    *&      Form  validate_period
    *       text
    *      -->P_S_CPUDT_LOW  text
    FORM validate_period  USING value(p_period)
                          CHANGING p_low_date    TYPE d
                                   p_high_date   TYPE d.
      DATA: l_year(4),
            l_poper(2).
      l_year  = p_period(4).
      l_poper = p_period+4(2).
      READ TABLE it_period WITH KEY year  = l_year
                                    poper = l_poper
                 ASSIGNING <fs_it_period>.
      IF sy-subrc NE 0.
        MESSAGE e000 WITH text-e04.
      ENDIF.
      p_low_date  = <fs_it_period>-start.
      p_high_date = <fs_it_period>-end.
    ENDFORM.                    " validate_period
    *&      Form  read_next_item
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM read_next_item  TABLES pt_pvwty_dia     STRUCTURE wty_pvwty_dia
                         CHANGING p_index TYPE i.
      p_index = p_index + 1.
    *     Read next Item information ------------------------------
      READ TABLE pt_pvwty_dia INDEX p_index
           ASSIGNING <fs_pvwty_dia>.
    ENDFORM.                    " read_next_item
    *&      Form  get_the_submit_record
    *       text
    *      -->P_<LFS_PNWTYV_DIA>_HEADER_GUID  text
    *      -->P_<LFS_PNWTYV_DIA>_PREV_VERSION  text
    FORM get_the_submit_record  USING    p_header_guid
                                         p_prev_version
                                         p_claim_no
                                         p_posnr.
      DATA: l_nb_while       TYPE i,
            l_zaehk          LIKE konv-zaehk,
            l_submit_found(1).
    * ... USD1092841 - Add Start
      FIELD-SYMBOLS: <fs_submit_rec_vs3> TYPE tp_submit_records.
    * ... USD1092841 - Add End
      CLEAR: l_submit_found, l_nb_while.
      READ TABLE it_submit_records
           WITH KEY header_guid  = p_header_guid
                    versn        = p_prev_version
           ASSIGNING <fs_submit_rec_vs2>.
      WHILE sy-subrc = 0 .
        ADD 1 TO l_nb_while.
    *   if more than 30 loop(endless loop), it means som

    Hi Siddarth
    As per query, if you want to display sums automatically when you report is displayed for the first time, you'll have to modify your field catalog a bit.
    To acheive this, you need to identify the field for which the totals are calculated ex- for every new material num, or for every new documnet number etc.
    once you have this info, you identify the field that has to be totaled.
    then while building your fieldcatalog, set this parameter :
    l_wa_fieldcat-do_sum     =  'X' for the field that has to be totaled.
    and when you build a sort table then set this parameter:
    l_t_sort           TYPE slis_t_sortinfo_alv.
    l_s_sort-subtot    = 'X'. for the field for which totals are calculated.
    Hope this helps.
    Cheers
    Ravish
    Reward if helpful

  • Doubt in report of FI

    Hi every one i have a small doubt in FI report that is i have to give the following output as per the user requirement i had added all the everything in this program i had given u the entire code the only problem is if make comment for the code of city and postal code the remaining everything is working properly and if i remove comment at CITY and POSTAL CODE there is some error can u find out that and help me please
    * Ist-Einzelpostenanzeige EC-PCA                                      *
    * - direkte Aufruf                                                    *
    * - Report Writer                                                     *
    * - Recherche                                                         *
    * 45b MIC: default values for poper and ryear depfr. fiscyear variant *
    * 46a MIC Warning if too few selection parameters                     *
    * 46a MIC: use up to 'whr_size' single values in select statement     *
    * 46a MIC: move'Initialization of Rep-Rep-Interface' to Initialization*
    * 46a MIC: check only new auth-object                                 *
    * 46c MIC: add RMVCT and get more fields from RRI                     *
    REPORT z_rcopca02_1 NO STANDARD PAGE HEADING MESSAGE-ID km
                    LINE-COUNT (2) LINE-SIZE 81.
    * Typen ***************************************************************
    *type-pools: kkblo.
    TYPE-POOLS: slis, ecarc.
    * DDIC-Tabellen *******************************************************
    TABLES: glpca,                         "Einzelposten / Ist
            glu1,                          "Übergabestruktur FI-SL-Anzeige
            t000,
            tka01,
            sscrfields,
            lfa1,
            kna1,
            bseg,
            with_item.
    * Variablen und int. Tabellen *****************************************
    DATA: afield        TYPE slis_fieldcat_alv,
          sp_group      TYPE slis_sp_group_alv,
          t_listheader  TYPE slis_t_listheader WITH HEADER LINE,
          t_layout      TYPE slis_layout_alv,
          t_fieldcat    TYPE slis_t_fieldcat_alv,
          t_spec_groups TYPE slis_t_sp_group_alv,
          event         TYPE slis_alv_event,
          t_events      TYPE slis_t_event,
          g_variant     LIKE disvariant,
          gx_variant    LIKE disvariant,
          g_exit(1)     TYPE c,
          g_save(1)     TYPE c,
          g_repid       LIKE sy-repid,
          msgtyp        LIKE sy-msgty,
          lt_dynpread   LIKE dynpread OCCURS 1 WITH HEADER LINE,
          ls_rpcak      LIKE rpcak,              "note 0310592
          packsize      TYPE i VALUE 1000,
          text1(60)     TYPE c,
          text2(60)     TYPE c,
          oldkokrs      LIKE glpca-kokrs,
          oldracct      LIKE glpca-racct.
    DATA: whr_size    TYPE i VALUE 50,"Maximum of single values per  MIC 46a
                       "charact. in the where-clause of the select-statement
          lines         TYPE i, "number of lines of range table      MIC 46a
          cnt_rldnr     TYPE i, "Zähler Anzahl selektierter Ledger
          cnt_kokrs     TYPE i, "Zähler Anzahl selektierter KoReKreise
          cnt_poper     TYPE i, "Zähler Anzahl selektierter Perioden
          cnt_ryear     TYPE i, "Zähler Anzahl selektierter GeschJahre
          cnt_rvers     TYPE i, "Zähler Anzahl selektierter Versionen
          cnt_bukrs     TYPE i, "Zähler Anzahl selektierter BuKreise
          empge         LIKE dkobr-empge,
          ksl_curr      LIKE tka01-pcacur,
          hsl_curr      LIKE t001-waers,
          a_rec         LIKE rstirec.
    DATA: BEGIN OF dim_data.
            INCLUDE STRUCTURE rgcdi.       "data for dimensions
    DATA: END OF dim_data.
    DATA: BEGIN OF tab_fields OCCURS 80,
            name LIKE dntab-fieldname,     "fields in table i_glpca
          END OF tab_fields.
    DATA: BEGIN OF i_glpca OCCURS 0.
            INCLUDE STRUCTURE rpca2.
    DATA:   racct_ktext LIKE rpcak-ktext,
            psppp LIKE prps-posid,
            name1 LIKE lfa1-name1,
            adrnr like lfa1-adrnr,
            stras like lfa1-stras,
            c_name1 like kna1-name1,
            v_rate like with_item-qsatz,
            qsshb like bseg-qsshb,
            qbshb like bseg-qbshb,
          END OF i_glpca.
    DATA: rw_subrc   LIKE sy-subrc,      "Flag: Report-Writer-Schnittstelle
          re_subrc   LIKE sy-subrc,        "Flag: Recherche-Schnittstelle
          subrc      LIKE sy-subrc.
    DATA: set_id    LIKE sethier-setid,    "Set-ID        "RDI_SETS_4.0
          set_class LIKE sethier-setclass, "Setklasse     "RDI_SETS_4.0
          set_sname LIKE sethier-shortname."Setname (24)  "RDI_SETS_4.0
    DATA: authorised(1),
          s_message(1),
          auth_dbcount LIKE sy-tabix,
    *     Hex-Konstanten für Minimum/Maximum-Werte
          BEGIN OF hex00,
            x1(12) TYPE c,
            x2(12) TYPE c,
          END OF hex00,
          BEGIN OF hexff,
            x1(12) TYPE c,
            x2(12) TYPE c,
          END OF hexff.
    RANGES rclnt FOR glpca-rclnt.
    FIELD-SYMBOLS: <glpca> LIKE LINE OF i_glpca,
                   <glpca_arc> TYPE ecarc_glpca_curr.
    * Selektionsoptionen *************************************************
    SELECT-OPTIONS:
      rldnr    FOR glpca-rldnr   DEFAULT '8A' NO-DISPLAY,
      rassc    FOR glpca-rassc                NO-DISPLAY,
    * rrcty    for glpca-rrcty   default 0,
      rrcty    FOR glpca-rrcty,
      rvers    FOR glpca-rvers   DEFAULT '000',
      kokrs    FOR glpca-kokrs   MEMORY ID cac,
      bukrs    FOR glpca-rbukrs  MEMORY ID buk,
    * poper    for glpca-poper   default sy-datlo+4(2),
    * ryear    for glpca-ryear   default sy-datlo,
      poper    FOR glpca-poper,
      ryear    FOR glpca-ryear,
      prctr    FOR glpca-rprctr  MATCHCODE OBJECT prct,
      pprctr   FOR glpca-sprctr  MATCHCODE OBJECT prct,
    * RACCT    FOR GLPCA-RACCT   MATCHCODE OBJECT KART,      "RD_P30K128304
      racct    FOR glpca-racct,            "RD_P30K128304
      drcrk    FOR glpca-drcrk,
      activ    FOR glpca-activ,
      rhoart   FOR glpca-rhoart,
      rfarea   FOR glpca-rfarea,
      stagr    FOR glpca-stagr,
      rtcur    FOR glpca-rtcur,
      runit    FOR glpca-runit,
      versa    FOR glpca-versa  NO-DISPLAY,
      eprctr   FOR glpca-eprctr NO-DISPLAY,
      afabe    FOR glpca-afabe  NO-DISPLAY,
      rmvct    FOR glpca-rmvct  NO-DISPLAY,
      hrkft    FOR glpca-hrkft  NO-DISPLAY,  "note 550972
      sbukrs   FOR glpca-sbukrs NO-DISPLAY,  "note 550972
      shoart   FOR glpca-shoart NO-DISPLAY,  "note 550972
      sfarea   FOR glpca-sfarea NO-DISPLAY,  "note 550972
      docct    FOR glpca-docct,
      docnr    FOR glpca-docnr,
      refdocct FOR glpca-refdocct,
      refdocnr FOR glpca-refdocnr,
      werks    FOR glpca-werks,
      repmatnr FOR glpca-rep_matnr MATCHCODE OBJECT pca_shlp_rep_matnr,
      rscope   FOR glpca-rscope.
    PARAMETERS: no_rrint NO-DISPLAY DEFAULT ' '." skip       "MICP40K066037
    " report-report-interface
    * display variant                                       ">>MICP40K039857
    SELECTION-SCREEN BEGIN OF BLOCK 0 WITH FRAME TITLE text-e01.
    PARAMETERS: p_vari LIKE disvariant-variant.
    SELECTION-SCREEN COMMENT 47(40) varname FOR FIELD p_vari.
    SELECTION-SCREEN END OF BLOCK 0.
    PARAMETERS log_grp(4) TYPE c NO-DISPLAY DEFAULT 'zKE5Z'.
    "<<MICP40K039857
    RANGES: v_racct  FOR glpca-racct,
            v_prctr  FOR glpca-rprctr,
            v_pprctr FOR glpca-sprctr.
    * Tabelle mit Werten aus den Berichts-Set vom Report-Writer           *
    DATA  BEGIN OF val_tab OCCURS 50.
            INCLUDE STRUCTURE rgciv.
    DATA  END OF val_tab.
    ***************************************************        MICP30K166368
    * feldkatalog und interface für bb-schnittstelle rw        MICP30K166368
    ***************************************************        MICP30K166368
    "MICP30K166368
    DATA  BEGIN OF bbs_fieldtab OCCURS 20. "MICP30K166368
            INCLUDE STRUCTURE rstifields.  "MICP30K166368
    DATA  END OF bbs_fieldtab.             "MICP30K166368
    * archiv
    TYPE-POOLS: rsds.
    TYPES:      BEGIN OF ty_archive_objects,
                   object       LIKE arch_obj-object,
                END   OF ty_archive_objects,
                ty_t_archive_objects TYPE ty_archive_objects OCCURS 2.
    CONSTANTS:  lc_set          TYPE  c           VALUE 'X',
                lc_report       TYPE  progname    VALUE 'ZKE5Z',
                lc_reporttype   TYPE  reporttype  VALUE 'TR'.
    TABLES:     admi_files.
    SELECT-OPTIONS lr_files FOR admi_files-archiv_key NO-DISPLAY.
    PARAMETER:  read_db       TYPE c            DEFAULT 'X' NO-DISPLAY,
                read_ar       TYPE c                        NO-DISPLAY,
                arc_obj       LIKE arch_obj-object          NO-DISPLAY,
                read_as       TYPE c            DEFAULT 'X' NO-DISPLAY.
    DATA  :     lt_arch_obj     TYPE ty_t_archive_objects WITH HEADER LINE,
                ls_selections   TYPE rsds_frange,
                lt_selections   TYPE rsds_frange_t,
                ls_selopt TYPE rsdsselopt,
                lt_glpca_archiv TYPE ecarc_t_glpca_curr.
    *********************************************************>>MICP40K039857
    * INITIALIZATION
    INITIALIZATION.
    * Diverse Initialisierungen
      PERFORM init_vars.
      g_repid = sy-repid.
    * Set default values for record type
      rrcty-sign = 'I'.
      rrcty-option = 'EQ'.
      rrcty-low    = '0'.
      APPEND rrcty.
      rrcty-low = '2'.
      APPEND rrcty.
    * Set default values for period and year (if kokrs or bukrs is known)
      GET PARAMETER ID 'BUK' FIELD bukrs-low.
      GET PARAMETER ID 'CAC' FIELD kokrs-low.
      IF     kokrs-low IS INITIAL       "get contr. area from company code
         AND NOT bukrs-low IS INITIAL.
        CALL FUNCTION 'KOKRS_GET_FROM_BUKRS'
          EXPORTING
            i_bukrs        = bukrs-low
          IMPORTING
            e_kokrs        = kokrs-low
          EXCEPTIONS
            no_kokrs_found = 1
            OTHERS         = 2.
        IF sy-subrc <> 0.
          CLEAR kokrs-low.
        ENDIF.
      ENDIF.
      IF NOT kokrs-low IS INITIAL.
        CALL FUNCTION 'K_KOKRS_READ'       "get fiscal year variant
             EXPORTING
                  kokrs           = kokrs-low
              IMPORTING
                  e_tka01         = tka01
            EXCEPTIONS
                  not_found       = 1
                  not_found_gjahr = 2
                  OTHERS          = 3.
        IF sy-subrc = 0.
          CALL FUNCTION 'G_PERIOD_GET'
            EXPORTING
              date                           = sy-datlo
              variant                        = tka01-lmona
            IMPORTING
              period                         = poper-low
              year                           = ryear-low
            EXCEPTIONS
              ledger_not_assigned_to_company = 1
              period_not_defined             = 2
              variant_not_defined            = 3
              OTHERS                         = 4.
          IF sy-subrc = 0.
            poper-sign = 'I'.
            poper-option = 'EQ'.
            APPEND poper.
            ryear-sign = 'I'.
            ryear-option = 'EQ'.
            APPEND ryear.
          ENDIF.
        ENDIF.
      ENDIF.
    * Settings for display variants
      g_save = 'A'.  "Schalter Varianten benutz./allg. speichern
      CLEAR g_variant.
      g_variant-report = g_repid.
      g_variant-log_group = log_grp.
      g_variant-username = sy-uname.
    * 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.
    * Set variant
      IF p_vari IS INITIAL.
        p_vari = '1SAP'.
        MOVE p_vari TO gx_variant-variant.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
          EXPORTING
            i_save     = g_save
          CHANGING
            cs_variant = gx_variant
          EXCEPTIONS
            not_found  = 1.
        IF sy-subrc NE 0.
          CLEAR p_vari.
          CLEAR gx_variant-variant.
        ENDIF.
      ENDIF.
      varname = gx_variant-text.
      "<<MICP40K039857
    * archiv
      CALL FUNCTION 'KARL_DATA_INPUT_INIT'
        EXPORTING
          i_report     = lc_report
          i_reporttype = lc_reporttype
        IMPORTING
          e_xusedb     = read_db
          e_xusear     = read_ar
          e_archobj    = arc_obj
          e_infosys    = read_as
        TABLES
          t_arch_sel   = lr_files.
      DATA: lt_excluding LIKE sy-ucomm OCCURS 0 WITH HEADER LINE.
      CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
        EXPORTING
          p_status  = 'SELSCREEN'
          p_program = 'RCOPCA02'
        TABLES
          p_exclude = lt_excluding.
    * Initialisieren der Bericht/Bericht-Schnittstellen                   *
      DATA: ld_no_rrint TYPE boole_d.      "note 490484 begin
      IMPORT rri = ld_no_rrint FROM MEMORY ID 'RCOPCA02_NO_RRI'.
      IF ld_no_rrint = 'X'.
        FREE MEMORY ID 'RCOPCA02_NO_RRI'.
      ELSE.                                "note 490484 end
        CALL FUNCTION 'G_REPORT_INTERFACE_INIT'   "Report-Writer?
            EXPORTING                      "MICP30K166368
                 table = 'GLPCT'           "MICP30K166368
             IMPORTING
                 subrc = rw_subrc          "MICP30K166368
            TABLES                         "MICP30K166368
                 it_fieldr = bbs_fieldtab. "MICP30K166368
        CALL FUNCTION 'RSTI_APPL_STACK_POP'"oder Recherche?
             IMPORTING
                  i_rec                      = a_rec
             EXCEPTIONS
                  appl_stack_not_initialized = 1.
        re_subrc = sy-subrc.
        IF re_subrc = 0.
    *    check Receiver is this report
          IF NOT ( ( a_rec-rtool = 'RT' AND a_rec-ronam = 'Z_RCOPCA02_1' )
                   OR ( a_rec-rtool = 'TR' AND a_rec-ronam = 'ZKE5Z' ) ) .
            re_subrc = 2.
          ENDIF.
        ENDIF.
      ENDIF.
    * AT SELCTION-SCREEN on value request**********************************
    *at selection-screen on value-request for racct-low.          "RD "4.6a
    *                                                             "RD "4.6a
    * call function 'K_RACCT_VALUE_REQUEST'                       "RD "4.6a
    *      importing                                              "RD "4.6a
    *           e_racct      = racct-low.                         "RD "4.6a
    *                                                             "RD "4.6a
    *                                                             "RD "4.6a
    *at selection-screen on value-request for racct-high.         "RD "4.6a
    *                                                             "RD "4.6a
    * call function 'K_RACCT_VALUE_REQUEST'                       "RD "4.6a
    *      importing                                              "RD "4.6a
    *           e_racct      = racct-high.                        "RD "4.6a
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.         "MICP40K039857
      PERFORM f4_for_variant.              "MICP40K039857
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR poper-low.         "RD "4.6a
    * begin of insertion note 522715
      CALL FUNCTION 'K_KOKRS_READ'
        EXPORTING
          kokrs           = kokrs-low
        EXCEPTIONS
          not_found       = 1
          not_found_gjahr = 2
          OTHERS          = 3.
      IF sy-subrc = 0.
    * end of insertion note 522715
        CALL FUNCTION 'ECPCA_RPMAX_VALUE_REQUEST'               "RD "4.6a
             EXPORTING                                          "RD "4.6a
                  i_kokrs     = kokrs-low                       "RD "4.6a
                  i_ryear     = ryear-low                       "RD "4.6a
             IMPORTING                                          "RD "4.6a
                  e_rpmax     = poper-low                       "RD "4.6a
    * begin of insertion note 522715
             EXCEPTIONS
                  table_empty = 1.
      ENDIF.
    * end of insertion note 522715
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR poper-high.        "RD "4.6a
    * begin of insertion note 522715
      CALL FUNCTION 'K_KOKRS_READ'
        EXPORTING
          kokrs           = kokrs-low
        EXCEPTIONS
          not_found       = 1
          not_found_gjahr = 2
          OTHERS          = 3.
      IF sy-subrc = 0.
    * end of insertion note 522715
        CALL FUNCTION 'ECPCA_RPMAX_VALUE_REQUEST'               "RD "4.6a
             EXPORTING                                          "RD "4.6a
                  i_kokrs     = kokrs-low                       "RD "4.6a
                  i_ryear     = ryear-low                       "RD "4.6a
             IMPORTING                                          "RD "4.6a
                  e_rpmax     = poper-high                      "RD "4.6a
    * begin of insertion note 522715
             EXCEPTIONS
                  table_empty = 1.
      ENDIF.
    * end of insertion note 522715
    * AT SELCTION-SCREEN ***************************************************
    AT SELECTION-SCREEN.
      PERFORM pai_of_selection_screen.
    * begin of insertion note 522715
      IF NOT kokrs-low IS INITIAL.
        CALL FUNCTION 'K_KOKRS_READ'
          EXPORTING
            kokrs           = kokrs-low
          EXCEPTIONS
            not_found       = 1
            not_found_gjahr = 2
            OTHERS          = 3.
        IF sy-subrc <> 0.
          MESSAGE e101(ki) WITH kokrs-low.
        ENDIF.
      ENDIF.
    * end of insertion note 522715
    * archiv
      IF sy-ucomm = 'FC01' OR sy-ucomm = 'UCDS'
        OR sy-ucomm = 'ONLI' AND read_ar = 'X'
        AND read_as IS INITIAL AND lr_files[] IS INITIAL.
        IF lt_arch_obj[] IS INITIAL.
          lt_arch_obj-object = 'PCA_OBJECT'. APPEND lt_arch_obj.
          lt_arch_obj-object = 'EC_PCA_ITM'. APPEND lt_arch_obj.
        ENDIF.
        CALL FUNCTION 'KARL_DATA_INPUT_SELECT'
          EXPORTING
            i_db_and_arc       = lc_set
            i_infosys_possible = lc_set
            i_object_fixed     = 'V'
            i_documentation    = 'KARL_DATA_INPUT_SEL_KE5YZ'
            i_report           = lc_report
            i_reporttype       = lc_reporttype
          TABLES
            t_objects          = lt_arch_obj
            t_arch_sel         = lr_files
          CHANGING
            c_xusedb           = read_db
            c_xusear           = read_ar
            c_archobj          = arc_obj
            c_infosys          = read_as.
      ENDIF.
    * START-OF-SELECTION **************************************************
    START-OF-SELECTION.
    *   Default-Werte löschen, falls Aufruf über Recherche
    *   oder Report-Writer erfolgt ist
      IF no_rrint IS INITIAL AND ld_no_rrint IS INITIAL.        "note 490484
        IF rw_subrc EQ 0 OR re_subrc EQ 0.
          REFRESH: rldnr, rrcty, rvers,  kokrs, bukrs, poper,  ryear,
                   racct, prctr, pprctr, drcrk, activ, rhoart, rfarea,
                   versa, afabe, eprctr,
                   v_racct, v_prctr, v_pprctr.
          CLEAR:   rldnr, rrcty, rvers,  kokrs, bukrs, poper,  ryear,
                   racct, prctr, pprctr, drcrk, activ, rhoart, rfarea,
                   versa, afabe, eprctr,
                   v_racct, v_prctr, v_pprctr.
          IF NOT read_as IS INITIAL.                           "note 625581
            CLEAR: lr_files, lr_files[].                       "note 625581
          ENDIF.                                               "note 625581
        ENDIF.
    * Parameter einlesen über Report-Writer-Schnittstelle                 *
        IF rw_subrc EQ 0.
          PERFORM rw_get_parameters.
    * oder Parameter einlesen über Recherche-Schnittstelle                *
        ELSEIF re_subrc EQ 0.
          PERFORM re_get_parameters.
        ENDIF.
      ENDIF.
      IF read_db = 'X'.                     " read from DB (archiv)
    * Bewegungsdaten einlesen und puffern...................................
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            text = 'Einzelposten selektieren'(p10).
    * Use dirty trick to mislead DB-optimizer
        CALL FUNCTION 'DB_DO_NOT_USE_CLIENT_INDEX'
          EXPORTING
            value    = sy-mandt
          TABLES
            mandttab = rclnt.
        SELECT (tab_fields) FROM glpca
           CLIENT SPECIFIED
           PACKAGE SIZE packsize
           APPENDING CORRESPONDING FIELDS OF TABLE i_glpca
           WHERE rldnr     IN rldnr
             AND rrcty     IN rrcty
             AND rvers     IN rvers
             AND kokrs     IN kokrs
             AND rbukrs    IN bukrs
             AND ryear     IN ryear
             AND rassc     IN rassc
             AND hrkft     IN hrkft   "note 550972
             AND sbukrs    IN sbukrs  "note 550972
             AND shoart    IN shoart  "note 550972
             AND sfarea    IN sfarea  "note 550972
             AND racct     IN racct
             AND rprctr    IN prctr
             AND sprctr    IN pprctr
             AND poper     IN poper
             AND drcrk     IN drcrk
             AND activ     IN activ
             AND rhoart    IN rhoart
             AND rfarea    IN rfarea
             AND versa     IN versa
             AND eprctr    IN eprctr
             AND afabe     IN afabe
             AND rmvct     IN rmvct
             AND docct     IN docct
             AND docnr     IN docnr
             AND stagr     IN stagr
             AND rtcur     IN rtcur
             AND runit     IN runit
             AND refdocct  IN refdocct
             AND refdocnr  IN refdocnr
             AND werks     IN werks
             AND rep_matnr IN repmatnr       "RDIP40K020663
             AND rscope    IN rscope         "RDIP40K020663
          AND rclnt     IN rclnt.       "dirty trick to mislead DB-optimizer
          IF sy-dbcnt > 1.
            text1 = sy-dbcnt.
            CONDENSE text1.
            CONCATENATE text1 text-m01 INTO text2 SEPARATED BY space.
            CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
              EXPORTING
                text = text2.          " ... Datensätze gelesen
          ENDIF.
        ENDSELECT.
    * Entfernt nicht zugehörige Einträge....................................
        LOOP AT i_glpca WHERE ( NOT rprctr IN v_prctr  )
                           or ( not SPRCTR in v_pprctr )
                           OR ( NOT racct  IN v_racct  ).
          DELETE i_glpca.
        ENDLOOP.
      ENDIF.
    *archiv
      IF read_ar = 'X' AND NOT
        ( read_as IS INITIAL AND lr_files[] IS INITIAL ).
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            text = 'Lesen im Archiv'(p12).
        DEFINE fill_lt_selections.
          if not &2[] is initial.
            clear ls_selections.
            move &1 to ls_selections-fieldname.
            loop at &2.
              clear ls_selopt.
              move-corresponding &2 to ls_selopt.
              append ls_selopt to ls_selections-selopt_t.
            endloop.
            append ls_selections to lt_selections.
          endif.
        END-OF-DEFINITION.
        fill_lt_selections 'RLDNR'  rldnr.
        fill_lt_selections 'RRCTY'  rrcty.
        fill_lt_selections 'RVERS'  rvers.
        fill_lt_selections 'KOKRS'  kokrs.
        fill_lt_selections 'RBUKRS' bukrs.
        fill_lt_selections 'POPER'  poper.
        fill_lt_selections 'RYEAR'  ryear.
        fill_lt_selections 'RPRCTR' prctr.
        fill_lt_selections 'SPRCTR' pprctr.
        fill_lt_selections 'RACCT'  racct.
        fill_lt_selections 'DRCRK'  drcrk.
        fill_lt_selections 'ACTIV'  activ.
        fill_lt_selections 'RHOART' rhoart.
        fill_lt_selections 'RFAREA' rfarea.    "note 401961
        fill_lt_selections 'STAGR'  stagr.
        fill_lt_selections 'RTCUR'  rtcur.
        fill_lt_selections 'RUNIT'  runit.
        fill_lt_selections 'VERSA'  versa.
        fill_lt_selections 'EPRCTR' eprctr.
        fill_lt_selections 'AFABE'  afabe.
        fill_lt_selections 'RMVCT'  rmvct.
        fill_lt_selections 'DOCCT'  docct.
        fill_lt_selections 'DOCNR'  docnr.
        fill_lt_selections 'REFDOCCT' refdocct.
        fill_lt_selections 'REFDOCNR' refdocnr.
        fill_lt_selections 'WERKS'  werks.
        fill_lt_selections 'REP_MATNR' repmatnr.
        fill_lt_selections 'RSCOPE' rscope.
        fill_lt_selections 'HRKFT'  hrkft.   "note 550972
        fill_lt_selections 'SBUKRS' sbukrs.  "note 550972
        fill_lt_selections 'SHOART' shoart.  "note 550972
        fill_lt_selections 'SFAREA' sfarea.  "note 550972
        CALL FUNCTION 'EC_PCA_SELECT_FROM_ARCHIVE'
          EXPORTING
            i_selections            = lt_selections[]
            i_files_sequential_read = lr_files[]
          IMPORTING
            e_glpca                 = lt_glpca_archiv[]
          EXCEPTIONS
            no_infostruc_found      = 1.
        IF sy-subrc = 1.
          MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        CLEAR i_glpca.
        LOOP AT lt_glpca_archiv ASSIGNING <glpca_arc>
                        WHERE ( rprctr IN v_prctr  )
                          and ( sprctr IN v_pprctr )
                          AND ( racct  IN v_racct  ).
          MOVE-CORRESPONDING <glpca_arc> TO i_glpca.
          APPEND i_glpca.
        ENDLOOP.
    * delete duplicate records                                   note 639647
        IF NOT read_db IS INITIAL AND NOT lt_glpca_archiv[] IS INITIAL.
          SORT i_glpca.
          DELETE ADJACENT DUPLICATES FROM i_glpca.
        ENDIF.
      ENDIF.
      IF i_glpca[] IS INITIAL.         "Info,nichts gefunden
        MESSAGE s000.
        EXIT.
      ENDIF.
    * get texts for accounts ...............................................
      SORT i_glpca BY kokrs racct.
      LOOP AT i_glpca ASSIGNING <glpca>.
        IF <glpca>-kokrs <> oldkokrs OR <glpca>-racct <> oldracct. "AT NEW
          CLEAR ls_rpcak.
          oldkokrs = <glpca>-kokrs.
          oldracct = <glpca>-racct.
          CALL FUNCTION 'K_RACCT_SINGLE_CHECK'         "note 0310592
               EXPORTING
                    i_kokrs    = <glpca>-kokrs
                    i_racct    = <glpca>-racct
                    i_spras    = sy-langu
                    i_textflag = 'X'
               IMPORTING
                    e_rpcak    = ls_rpcak
               EXCEPTIONS
                    not_valid  = 1
                    OTHERS     = 2.
          IF sy-subrc NE 0.
            CLEAR ls_rpcak.
          ENDIF.
        ENDIF.                             "ENDAT
        <glpca>-racct_ktext = ls_rpcak-ktext.
    * Fetching vendor name from vendor number
    *break-point.
         SELECT SINGLE * FROM LFA1
             WHERE LIFNR = <glpca>-LIFNR AND
             SPRAS = SY-LANGU.
         IF SY-SUBRC eq 0.
            <glpca>-name1 = lfa1-name1.
            <glpca>-adrnr = lfa1-adrnr.
            <glpca>-stras = lfa1-stras.
         ENDIF.
    * Fetching customer name from customer number
         SELECT SINGLE * FROM kna1
             WHERE KUNNR = <glpca>-KUNNR.
         IF SY-SUBRC eq 0.
            <glpca>-c_name1 = kna1-name1.
         ENDIF.
         SELECT SINGLE * FROM bseg
                WHERE BUKRS EQ <glpca>-rbukrs AND
                      BELNR EQ <glpca>-refdocnr AND
                      GJAHR EQ <glpca>-ryear AND
                      KTOSL EQ 'WIT' AND
                      BUZEI EQ <glpca>-refdocln.
         IF SY-SUBRC eq 0.
           SELECT SINGLE * FROM WITH_ITEM
                  WHERE BUKRS EQ <glpca>-rbukrs AND
                        BELNR EQ <glpca>-refdocnr AND
                        GJAHR EQ <glpca>-ryear." AND
    *                    BUZEI EQ <glpca>-refdocln AND
    *                    WITHT EQ BSEG-QSSKZ.
           IF SY-SUBRC eq 0.
              <glpca>-v_rate = with_item-qsatz.
              <glpca>-qsshb = with_item-WT_QSSHB.
              <glpca>-qbshb = with_item-WT_QBSHB.
           ENDIF.
         ENDIF
      ENDLOOP.
    * Liste mit Einzelposten geeignet sortieren.............................
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          text = 'Einzelposten sortieren'(p30).
    *  if show_ref is initial.
    *    sort i_glpca by rldnr ryear rbukrs rrcty rvers
    *                    docct docnr docln.
    *  else.
      SORT i_glpca BY rldnr kokrs ryear rbukrs rrcty rvers poper
                      refdocct refdocnr refdocln.
    *  endif.
    * Berechtigungsprüfung und gemerkte Belege aufbereiten .................
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          text = 'Berechtigungsprüfungen'(p40).
      CLEAR: cnt_rldnr, cnt_kokrs, cnt_ryear, cnt_rvers, cnt_bukrs.
      LOOP AT i_glpca ASSIGNING <glpca>.
    *   Berechtigungscheck
        PERFORM check_repo_authority CHANGING authorised.
        IF authorised IS INITIAL.
          DELETE i_glpca.
          s_message = 'X'.
    *     zählen der Sätze ohne Berechtigung
          auth_dbcount = auth_dbcount + 1.
        ELSE. "Weitere Bearbeitung nur für berechtigte Belege...
    *     Zusätzlich merken der Anzahl der Ausprägungen
    *     bestimmter Dimensionen
          ON CHANGE OF <glpca>-rldnr.
            ADD 1 TO cnt_rldnr.
          ENDON.
          ON CHANGE OF <glpca>-kokrs.
            ADD 1 TO cnt_kokrs.
            CALL FUNCTION 'G_CURRENCY_FROM_CT_GET'
              EXPORTING
                ct       = '90'
                kokrs    = <glpca>-kokrs
                rldnr    = <glpca>-rldnr
              IMPORTING
                currency = ksl_curr.
          ENDON.
          ON CHANGE OF <glpca>-poper.
            ADD 1 TO cnt_poper.
          ENDON.
          ON CHANGE OF <glpca>-ryear.
            ADD 1 TO cnt_ryear.
          ENDON.
          ON CHANGE OF <glpca>-rvers.
            ADD 1 TO cnt_rvers.
          ENDON.
          ON CHANGE OF <glpca>-rbukrs.
            ADD 1 TO cnt_bukrs.
            CALL FUNCTION 'G_CURRENCY_FROM_CT_GET'
              EXPORTING
                bukrs    = <glpca>-rbukrs
                ct       = '10'
              IMPORTING
                currency = hsl_curr.
          ENDON.
    *     externe Immobilienbezeichnung                     "ww/kb
    *     on change of i_glpca-imkey.
          IF ( NOT <glpca>-imkey IS INITIAL ).
            CALL FUNCTION 'REMD_IMKEY_TO_EMPGE'
                 EXPORTING
                      i_imkey    = <glpca>-imkey
                      i_dabrz    = <glpca>-dabrz
    *                 I_length   = 20
                 IMPORTING
                      e_empge    = <glpca>-empge
                      e_konty    = <glpca>-konty
                 EXCEPTIONS
                      not_found  = 1.
            IF sy-subrc NE 0.
              CLEAR <glpca>-empge.
              CLEAR <glpca>-konty.
            ENDIF.
    *       CONCATENATE I_GLPCA-KONTY I_GLPCA-EMPGE INTO I_GLPCA-IMBEZ.
          ENDIF.
    *     endon.
    *     on change of i_glpca-dabrz.
    *        call function 'REMD_IMKEY_TO_EMPGE'
    *             exporting
    *                  i_imkey    = i_glpca-imkey
    *                  i_dabrz    = i_glpca-dabrz
    **                 i_length   = 20
    *             importing
    *                  e_empge    = i_glpca-empge
    *                  e_konty    = i_glpca-konty.
    **       CONCATENATE I_GLPCA-KONTY I_GLPCA-EMPGE INTO I_GLPCA-IMBEZ.
    *      endon.
    *     Konvertierungsproblem mit PSP-Nummer bereinigen
          IF NOT <glpca>-ps_psp_pnr IS INITIAL.
            IF <glpca>-ps_psp_pnr EQ space.
              CLEAR <glpca>-ps_psp_pnr.
            ELSE.
              WRITE <glpca>-ps_psp_pnr TO <glpca>-psppp.
              CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'
                EXPORTING
                  input  = <glpca>-psppp
                IMPORTING
                  output = <glpca>-psppp.
            ENDIF.
          ENDIF.
    *     Währungen in Hilfsfeldern speichern
          IF <glpca>-hsl_curr IS INITIAL.
            <glpca>-hsl_curr = hsl_curr.
          ENDIF.
          IF <glpca>-ksl_curr IS INITIAL.
            <glpca>-ksl_curr = ksl_curr.
          ENDIF.
    *     modify i_glpca.
        ENDIF.
      ENDLOOP.
    * Nachricht, wenn nicht alle Einzelposten angezeigt werden.
      IF NOT s_message IS INITIAL.
        MESSAGE s407(km) WITH auth_dbcount.
      ENDIF.
    * EP ausgeben...........................................................
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          text = 'Einzelposten ausgeben'(p50).
      t_layout-detail_initial_lines = 'X'.
      t_layout-detail_popup         = 'X'.
      t_layout-f2code               = 'PIC1'.                "MICP40K039857
      t_layout-get_selinfos         = 'X'.
      t_layout-group_change_edit    = 'X'.                   "note 576149
      PERFORM fill_listheader.
      PERFORM fieldcat_fill.
      PERFORM spec_groups_fill.
      PERFORM events_fill.                 "MICP40K039857
      ">>MICP40K039857
    *  call function 'K_KKB_LIST_DISPLAY'
    *       exporting
    *            i_callback_program       = 'Z_RCOPCA02_1
    *            i_callback_user_command  = 'USR_CMD'
    *            i_callback_top_of_page   = 'TOP_OF_PAGE'
    **           I_CALLBACK_END_OF_PAGE   =
    **           I_CALLBACK_END_OF_LIST   =
    *            i_callback_pf_status_set = 'SET_PF_STATUS'
    **           I_CALLBACK_LAYOUT_SAVE   =
    **           I_CALLBACK_FIELDCAT_SAVE =
    *            i_tabname                = 'I_GLPCA'
    *            is_layout                = t_layout
    *            it_fieldcat              = t_fieldcat
    **           I_FCTYPE                 = 'R'
    **           IT_EXCLUDING             =
    *            it_special_groups        = t_spec_groups
    **           IT_SORT                  =
    **           IS_SEL_HIDE              =
    **           I_SCREEN_START_COLUMN    = 0
    **           I_SCREEN_START_LINE      = 0
    **           I_SCREEN_END_COLUMN      = 0
    **           I_SCREEN_END_LINE        = 0
    *       tables
    *            t_outtab                 = i_glpca
    *       exceptions
    *            others                   = 1.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    *  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
         EXPORTING
    *         I_INTERFACE_CHECK        = ' '
               i_callback_program       = 'Z_RCOPCA02_1'
               i_callback_pf_status_set = 'SET_PF_STATUS'
               i_callback_user_command  = 'USR_CMD'
               i_structure_name         = 'I_GLPCA'
               is_layout                = t_layout
               it_fieldcat              = t_fieldcat
    *         IT_EXCLUDING             =
               it_special_groups        = t_spec_groups
    *         IT_SORT                  =
    *         IT_FILTER                =
    *         IS_SEL_HIDE              =
               i_default                = 'X'
               i_save                   = g_save
               is_variant               = g_variant
               it_events                = t_events
    *         IT_EVENT_EXIT            =
    *         IS_PRINT                 =
    *         I_SCREEN_START_COLUMN    = 0
    *         I_SCREEN_START_LINE      = 0
    *         I_SCREEN_END_COLUMN      = 0
    *         I_SCREEN_END_LINE        = 0
    *    IMPORTING
    *         E_EXIT_CAUSED_BY_CALLER  =
    *         ES_EXIT_CAUSED_BY_USER   =
          TABLES
               t_outtab                 = i_glpca
        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.
      "<<MICP40K039857
      CLEAR i_glpca.
    *&      Form  CHECK_REPO_AUTHORITY
    *  Check only new auth-object K_PCA                                    *
    *  -->  p1        text
    *  <--  p2        text
    FORM check_repo_authority CHANGING authorized LIKE authorised.
    * fill structure for userexit in K_PCA_RESP_AUTHORITY_CHECK
      DATA: auth LIKE pca_i_auth.          "46a MIC check K_PCA and G_GLTP
      auth-bukrs = <glpca>-rbukrs.
      auth-rldnr = <glpca>-rldnr.
      auth-rvers = <glpca>-rvers.
      auth-rrcty = <glpca>-rrcty.
      CLEAR authorized.
    * check PrCtr/account/activity
      CALL FUNCTION 'K_PCA_RESP_AUTHORITY_CHECK'
        EXPORTING
          i_kokrs             = <glpca>-kokrs
          i_prctr             = <glpca>-rprctr
          i_kstar             = <glpca>-racct
          i_vorgn             = 'REPP'
          i_actvt             = '28'
          i_auth              = auth
          i_no_dialog_message = 'X'
        EXCEPTIONS
          no_authority        = 1
          data_missing        = 2
          OTHERS              = 3.
      IF sy-subrc = 0.                                          "ok
    * check ledger/version/record type
        CALL FUNCTION 'PCA_G_GLTP_AUTH_CHECK'
          EXPORTING
            rldnr            = <glpca>-rldnr
            rvers            = <glpca>-rvers
            rrcty            = <glpca>-rrcty
          EXCEPTIONS
            no_authorisation = 1
            OTHERS           = 2.
        IF sy-subrc = 0.                   "ok, User is authorized
          authorized = 'X'.
        ENDIF.
      ENDIF.
    ENDFORM.                               " CHECK_REPO_AUTHORITY
    *&      Form  INIT_VARS
    *       Initialisieren diverser Hilfsvariablen und -tabellen           *
    FORM init_vars.
      DATA BEGIN OF nametab OCCURS 80. "Tabelle mit Feldern aus der RPCA2
              INCLUDE STRUCTURE dntab.
      DATA END OF nametab.
      SELECT SINGLE * FROM t000
                      CLIENT SPECIFIED
                      WHERE mandt = sy-mandt.
      REFRESH nametab.
      CALL FUNCTION 'NAMETAB_GET'
        EXPORTING
          only    = 'T'
          tabname = 'RPCA2'
        TABLES
          nametab = nametab.
    * Übernehmen der Feldnamen, die auch in der GLPCA
    * vorkommen.
      LOOP AT nametab WHERE fieldname NE 'KSL_CURR'
                        AND fieldname NE 'HSL_CURR'
                        AND fieldname NE 'EMPGE'               "ww/kb
                        AND fieldname NE 'KONTY'.              "ww/kb
        MOVE nametab-fieldname TO tab_fields-name.
        APPEND tab_fields.
      ENDLOOP.
    * fill Fields of receiver for BBS                          "MIC46C
      CALL FUNCTION 'RSTI_REPORT_FIELDS_FIND'
        EXPORTING
          e_repid   = 'Z_RCOPCA02_1'
          e_type    = 'R'
        TABLES
          it_fields = bbs_fieldtab.
    * correct fieldnames
      READ TABLE bbs_fieldtab WITH KEY rfield = 'PRCTR'.
      IF sy-subrc = 0.
        bbs_fieldtab-rfield = 'RPRCTR'.
        MODIFY bbs_fieldtab INDEX sy-tabix.
      ENDIF.
      READ TABLE bbs_fieldtab WITH KEY rfield = 'PPRCTR'.
      IF sy-subrc = 0.
        bbs_fieldtab-rfield = 'SPRCTR'.
        MODIFY bbs_fieldtab INDEX sy-tabix.
      ENDIF.
      READ TABLE bbs_fieldtab WITH KEY rfield = 'BUKRS'.
      IF sy-subrc = 0.
        bbs_fieldtab-rfield = 'RBUKRS'.
        MODIFY bbs_fieldtab INDEX sy-tabix.
      ENDIF.
    * Unicode
      CLASS cl_abap_char_utilities DEFINITION LOAD.
      CLEAR hex00 WITH cl_abap_char_utilities=>minchar.
      CLEAR hexff WITH cl_abap_char_utilities=>maxchar.
    ENDFORM.                               " INIT_VARS
    *       FORM FILL_LISTHEADER                                          *
    *       List-Header in Abhängigkeit der selektierten Daten            *
    FORM fill_listheader.
      READ TABLE i_glpca INDEX 1.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Ledger              '(h01).
      IF cnt_rldnr <= 1.
        t_listheader-info = i_glpca-rldnr.
      ELSE.
        t_listheader-info = '*'.
      ENDIF.
      APPEND t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Kostenrechnungskreis'(h02).
      IF  cnt_kokrs <= 1.
        t_listheader-info = i_glpca-kokrs.
      ELSE.
        t_listheader-info = '*'.
      ENDIF.
      APPEND t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Buchungskreis       '(h03).
      IF cnt_bukrs <= 1.
        t_listheader-info = i_glpca-rbukrs.
      ELSE.
        t_listheader-info = '*'.
      ENDIF.
      APPEND t_listheader.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Buchungsperiode     '(h04).
      IF cnt_poper <= 1.
        t_listheader-info = i_glpca-poper.
      ELSE.
        t_listheader-info = '*'.
      ENDIF.
      APPEND t_listheader.
      IF cnt_ryear <= 1.
        t_listheader-typ  = 'S'.
        t_listheader-key  = 'Geschäftsjahr       '(h05).
        t_listheader-info = i_glpca-ryear.
        APPEND t_listheader.
      ENDIF.
      t_listheader-typ  = 'S'.
      t_listheader-key  = 'Version             '(h06).
      IF cnt_rvers <= 1.
        t_listheader-info = i_glpca-rvers.
      ELSE.
        t_listheader-info = '*'.
      ENDIF.
      APPEND t_listheader.
    ENDFORM.                    "fill_listheader
    *&      Form  FIELDCAT_FILL
    *&      Aufbau des Feldkataloges für den K_KKB_LIST_DISPLAY,           *
    *&      bzw REUSE_ALV_LIST_DISPLAY,                                    *
    *&      weitere Infos enthält die FktBaustein-Doku                     *
    FORM fieldcat_fill.
      DATA: i TYPE i VALUE 0.
      REFRESH t_fieldcat.
    * Ledger
    *  if cnt_rldnr > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RLDNR'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
    *   afield-key         = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Satzart
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RRCTY'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    * Version
    *  if cnt_rvers > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RVERS'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Periode
    *  if cnt_poper > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'POPER'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Geschäftsjahr
    *  if cnt_ryear > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RYEAR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Referenzbelegtyp
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'REFDOCCT'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '2'.
      afield-seltext_s   = 'Typ'(t01).
      afield-seltext_m   = 'Belegtyp'(t02).
      afield-seltext_l   = 'Ref.Belegtyp'(t03).
      afield-outputlen   = 3. "Platz für die Sterne der Zwischensummen
    *  if not show_ref is initial.
      afield-key = 'X'.
    *  else.
    *    afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Referenzbelegnummer
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'REFDOCNR'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '2'.
      afield-seltext_s  = 'Refbeleg'(t04).
      afield-seltext_m  = 'Refbelegnr'(t05).
      afield-seltext_l  = 'Ref.Belegnummer'(t06).
    *  if not show_ref is initial.
      afield-key = 'X'.
    *  else.
    *    afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Referenzbelegzeile
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'REFDOCLN'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '2'.
      afield-seltext_s   = 'Zeile'(t07).
      afield-seltext_m   = 'Belegzeile'(t08).
      afield-seltext_l   = 'Ref.Belegzeile'(t09).
    *  if not show_ref is initial.
      afield-key = 'X'.
    *  else.
    *    afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Belegtyp PCA
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'DOCCT'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '1'.
      afield-outputlen   = 3. "Platz für die Sterne der Zwischensummen
    *  if show_ref is initial.
      afield-key = 'X'.
    *  else.
      afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Belegnummer PCA
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'DOCNR'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '1'.
    *  if show_ref is initial.
      afield-key = 'X'.
    *  else.
      afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Belegzeile PCA
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'DOCLN'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-sp_group    = '1'.
    *  if show_ref is initial.
      afield-key = 'X'.
    *  else.
      afield-no_out = 'X'.
    *  endif.
      APPEND afield TO t_fieldcat.
    * Kostenrechnungskreis
    *  if cnt_kokrs > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'KOKRS'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Buchungskreis
    *  if cnt_bukrs > 1.
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RBUKRS'.
      afield-ref_tabname = 'GLPCA'.
      afield-key_sel     = 'X'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
      afield-seltext_s  = 'BuKrs'(b01).
      afield-seltext_m  = 'BuKrs'(b02).
      afield-seltext_l  = 'Empfänger-BuKrs'(b03).
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    *  endif.
    * Profit Center
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RPRCTR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
    * Eliminierungs-Profit-Center
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'EPRCTR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
    * Sender-Profit-Center
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'SPRCTR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
    * Konto
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RACCT'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
      ADD 1 TO i.
    * Kontentext
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RACCT_KTEXT'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'RPCAK'.
      afield-ref_fieldname = 'KTEXT'.
      afield-seltext_s   = 'Kont-txt.'(m11).
      afield-seltext_m   = 'Kontentext'(m12).
      afield-seltext_l   = 'Kontentext'(m13).
      afield-sp_group    = '7'.
      APPEND afield TO t_fieldcat.
      ADD 1 TO i.
    * Statistische Kennzahl
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'STAGR'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '12'.
      APPEND afield TO t_fieldcat.
    * Soll/Haben-Kennzeichen
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'DRCRK'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '1'.
      APPEND afield TO t_fieldcat.
    * Wert in Profit-Center-Währung
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'KSL'.
      afield-do_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
    *  AFIELD-SELTEXT_S   = 'PrCtr-Hauswhr.'(P01).
    *  AFIELD-SELTEXT_M   = 'PrCtr-Hauswährung'(P02).
    *  AFIELD-SELTEXT_L   = 'Profit-Center-Hauswährung'(P03).
      afield-cfieldname  = 'KSL_CURR'.
      afield-sp_group    = '3'.
      APPEND afield TO t_fieldcat.
    * Währungsschlüssel KSL
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos       = i.
      afield-fieldname     = 'KSL_CURR'.
      afield-ref_tabname   = 'TKA01'.
      afield-ref_fieldname = 'PCACUR'.
      afield-no_sum        = 'X'.
      afield-no_out        = 'X'.
      afield-seltext_s     = 'PrCtrHW'(t10).
      afield-seltext_m     = 'Währungsschl. PrCtrHW'(t11).
      afield-seltext_l     = 'Währungsschl. PrCtrHW'(t12).
      afield-sp_group      = '3'.
      APPEND afield TO t_fieldcat.
    * Betrag in Hauswährung
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'HSL'.
      afield-do_sum      = 'X'.
      afield-no_out      = 'X '.
      afield-ref_tabname = 'GLPCA'.
      afield-cfieldname  = 'HSL_CURR'.
      afield-sp_group    = '4'.
      APPEND afield TO t_fieldcat.
    * Währungsschlüssel Hauswährung
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos       = i.
      afield-fieldname     = 'HSL_CURR'.
      afield-ref_tabname   = 'T001'.
      afield-ref_fieldname = 'WAERS'.
      afield-no_sum        = 'X'.
      afield-no_out        = 'X '.
      afield-seltext_s     = 'BukrW.'(t13).
      afield-seltext_m     = 'Währungsschl. BukrW'(t14).
      afield-seltext_l     = 'Währungsschl. BukrW'(t15).
      afield-sp_group      = '4'.
      APPEND afield TO t_fieldcat.
    * Betrag in Transaktionswährung
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'TSL'.
      afield-no_out      = 'X '.
      afield-ref_tabname = 'GLPCA'.
      afield-cfieldname  = 'RTCUR'.
      afield-sp_group    = '5'.
      APPEND afield TO t_fieldcat.
    * Währungsschlüssel Transaktionswährung
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos       = i.
      afield-fieldname     = 'RTCUR'.
      afield-ref_tabname   = 'GLPCA'.
      afield-ref_fieldname = 'RTCUR'.
      afield-no_sum        = 'X'.
      afield-no_out        = 'X '.
      afield-seltext_s     = 'TW  '(t16).
      afield-seltext_m     = 'Währungsschl. TW'(t17).
      afield-seltext_l     = 'Währungsschl. TW'(t18).
      afield-sp_group      = '5'.
      APPEND afield TO t_fieldcat.
    * Menge
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'MSL'.
      afield-qfieldname  = 'RUNIT'.
      afield-no_out      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group      = '6'.
      APPEND afield TO t_fieldcat.
    * Mengeneinheit
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RUNIT'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-sp_group      = '6'.
      APPEND afield TO t_fieldcat.
    * Herkunftsobjektart
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RHOART'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group      = '7'.
      APPEND afield TO t_fieldcat.
    * Funktionsbereich
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RFAREA'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group      = '7'.
      APPEND afield TO t_fieldcat.
    * Objektklasse
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'RSCOPE'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group      = '1'.
      APPEND afield TO t_fieldcat.
    * G/L-Vorgang
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'ACTIV'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-seltext_s     = 'Vorg.'(t31).
      afield-seltext_m     = 'Vorgang'(t32).
      afield-seltext_l     = 'Betriebswirt. Vorgang'(t33).
      afield-sp_group      = '1'.
      APPEND afield TO t_fieldcat.
    * Geschäftsbereich
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'GSBER'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group      = '8'.
      APPEND afield TO t_fieldcat.
    * Kostenstelle
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'KOSTL'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '9'.
      APPEND afield TO t_fieldcat.
    * CO-Auftrag
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'AUFNR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-sp_group    = '9'.
      APPEND afield TO t_fieldcat.
    * Projekt
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'PSPPP'.
      afield-no_sum      = 'X'.
      afield-no_out      = 'X'.
      afield-sp_group    = '9'.
      afield-ref_tabname   = 'PRPS'.
      afield-ref_fieldname = 'POSID'.
      APPEND afield TO t_fieldcat.
    * Debitor
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'KUNNR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-seltext_s   = 'Debitor'(d01).
      afield-seltext_m   = text-d01.
      afield-seltext_l   = text-d01.
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    * Customer Name
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'C_NAME1'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'KNA1'.
      afield-no_out      = 'X'.
      afield-seltext_s   = 'Customer Name'.
      afield-seltext_m   = 'Cust Name'.
      afield-seltext_l   = 'C Name'.
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    * Kreditor
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'LIFNR'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'GLPCA'.
      afield-no_out      = 'X'.
      afield-seltext_s   = 'Kreditor'(k01).
      afield-seltext_m   = text-k01.
      afield-seltext_l   = text-k01.
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    * Vendor name
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'NAME1'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'LFA1'.
      afield-no_out      = 'X'.
      afield-seltext_s   = 'Vendor Name'(v01).
      afield-seltext_m   = text-v01.
      afield-seltext_l   = text-v01.
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    * Withholding tax rate
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'V_RATE'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = 'WITH_ITEM'.
      afield-no_out      = 'X'.
      afield-seltext_s   = 'Withholding tax rate'.
      afield-seltext_m   = 'With. tax rate'.
      afield-seltext_l   = 'W. Tax rate'.
      afield-sp_group    = '8'.
      APPEND afield TO t_fieldcat.
    * Withholding Tax Base Amount
      ADD 1 TO i.
      CLEAR afield.
      afield-col_pos     = i.
      afield-fieldname   = 'QSSHB'.
      afield-no_sum      = 'X'.
      afield-ref_tabname = '

    Hi pavan.
    something is definitely wrong with your code: You have an internal table for display with fields from rpca 2 and additional some more fields. I do not see a field ORT01 for CITY or PSTLZ for POSTAL CODE, at least to in table GLPCA from where the data are extracted.
    You must fill PSTLZ and ORT01 (if it is for the supplier):
         SELECT SINGLE * FROM LFA1
             WHERE LIFNR = <glpca>-LIFNR AND
             SPRAS = SY-LANGU.
         IF SY-SUBRC eq 0.
            <glpca>-name1 = lfa1-name1.
            <glpca>-adrnr = lfa1-adrnr.
            <glpca>-stras = lfa1-stras.
    **** add here: ***
      select single ort01 pstlz
        into corresponding fields of <glpca>
        from adrc
        where adrnr = <glpca>-adrnr.
         ENDIF.
    Make sure that fields ORT01 and PSTLZ are defined for internal table i_glpca.
    Regards,
    Clemens

  • Field Catalogs in ALV

    Hi Friends,
    Please help me out, I am new to ABAP.
    Please anybody explain me the functionality of Field catalogs in ALVs?
    How many methods are there to pass data to ALVs, i.e., in how many ways?
    Hope u will help me.

    hi,
    this will be very helpful for ALV REPORTING.....
    Sap provides a set of ALV (ABAP LIST VIEWER) function modules which can be put into use to embellish the output of a report. This set of ALV functions is used to enhance the readability and functionality of any report output. Cases arise in sap when the output of a report contains columns extending more than 255 characters in length.  In such cases, this set of ALV functions can help choose selected columns and arrange the different columns from a report output and also save different variants for report display. This is a very efficient tool for dynamically sorting and arranging the columns from a report output. The report output can contain upto 90 columns in the display with the wide array of display options.
    The commonly used ALV functions used for this purpose are;
    1.     REUSE_ALV_VARIANT_DEFAULT_GET
    2.     REUSE_ALV_VARIANT_F4
    3.     REUSE_ALV_VARIANT_EXISTENCE
    4.     REUSE_ALV_EVENTS_GET
    5.     REUSE_ALV_COMMENTARY_WRITE
    6.   REUSE_ALV_FIELDCATALOG_MERGE
    7.   REUSE_ALV_LIST_DISPLAY
    8.     REUSE_ALV_GRID_DISPLAY
    9.     REUSE_ALV_POPUP_TO_SELECT
    The different steps used for getting the above function modules into use are:
    Step 1
    DATA DECLARATION
    Sap standard type pools:  SLIS , KKBLO .
    Sap standard tables types taken from the type pools are:  SLIS_LAYOUT_ALV ,
                                             SLIS_T_FIELDCAT_ALV,
    SLIS_T_LISTHEADER,
    SLIS_T_EVENT,
    SLIS_SELFIELD.
    Internal tables to used in the program declared based on the above table types
    DATA:  I_LAYOUT TYPE SLIS_LAYOUT_ALV,
                I_FIELDTAB TYPE SLIS_T_FIELDCAT_ALV,
               I_HEADING TYPE SLIS_T_LISTHEADER,
    I_EVENTS TYPE SLIS_T_EVENT.
    TYPES:  KKBLO_SELFIELD TYPE SLIS_SELFIELD.
    Step 2 (Optional)
    SELECTING THE VARIANTS FOR INITIAL LIST DISPLAY (DEFAULT VARIANT)
    The variants in the list display can be both user-specific and general. The user can programmatically set the initial (default) variant for list display.
    The default variant can be found using the function module 'REUSE_ALV_VARIANT_DEFAULT_GET'.
    Sample code:
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save     = variant save condition ( A=all, U = user-specific )
           CHANGING
                cs_variant = internal table containing the program name (and the default variant---optional )
           EXCEPTIONS
                not_found  = 2.
    The user can also choose from the list of existing variants using the function module ‘REUSE_ALV_VARIANT_F4’.
    Step 3
    DEFININING OUTPUT CHARACTERISTICS: PREPARING DISPLAY FIELDS CATALOG
    A field catalog is prepared using the internal table (I_FIELDCAT) of type SLIS_T_FIELDCAT_ALV. Field catalog containing descriptions of the list output fields (usually a subset of the internal output table fields).
    A field catalog is required for every ALV list output to add desired functionality (i.e. Key, Hotspot, Specific headings, Justify, Col. position etc) to certain fields of the output. If not mentioned specifically, then the defaults are taken. The possible values and defaults are listed below.
    The field catalog for the output table is built-up in the caller's coding. The build-up can be completely or partially automated by calling the REUSE_ALV_FIELDCATALOG_MERGE module.
    The minimal field catalog is documented below. This can be done in a routine using a local variable. The user can use the other optional parameters to assign output attributes to different fields in the output, which differ from the default.
    A field catalog need not be built-up and passed explicitly only under the following conditions:
    1.     The internal table to be output has the same structure as a Data Dictionary structure which is referred to in the internal table declaration using LIKE or INCLUDE STRUCTURE. In this case the attributes of the different fields is taken directly from the table and the attributes (key fields, length, texts etc) need to state explicitly.
    2.     all fields in this structure are to be output
    3.     The structure name is passed to ALV in the parameter I_STRUCTURE_NAME of the function module REUSE_ALV_LIST_DISPLAY.
    All the values entered in the catalog is specific to the particular field whose name is entered in the fieldname FIELDNAME of the fieldcat structure. The name of the table is also entered in the corr. Fieldname TABNAME of the structure.
    The different possible attributes are:
    •     Row_pos (row position): Only relevant if the list output is to be multi-line (two or three lines) by default. So, this attribute can be used maintain certain level of alignment in the output.
                         Value set: 0, 1 – 3
    •     Col_pos (column position): This parameter is relevant when the fields in the output are to be different from the sequence of the fields in the internal table used for display.       The parameter specifies the relative column position of the field in the list output. The column order can be changed interactively by the user. If this parameter is initial for all field catalog entries, columns appear in the internal table field sequence.
    Value set: 0, 1 – 60
    •     Fieldname (field name): This is the name of the internal table field for which the parameters are passed in the catalog.
    Value set: internal output table field name (required parameter)
    •     Tabname (internal output table): Name of the internal output table that contains the field FIELDCAT-FIELDNAME above.
                         Value set: SPACE, internal output table name.
    •     Ref_fieldname (reference field name): Name of the Data Dictionary field referred to. This parameter is only used when the internal output table field described by the current field catalog entry has a reference to the Data Dictionary (not a program field), and the field name in the internal output table is different from the name of the field in the        Data Dictionary. If the field names are identical, naming the Data Dictionary structure or table in the FIELDCAT-REF_TABNAME parameter is sufficient.
        Value set: SPACE, Data Dictionary field name.
    •     Ref_tabname (reference table/structure field name): Structure or table name of the referred Data Dictionary field.        This parameter is only used when the internal output table field described by the current field catalog entry has a Data Dictionary reference (not a program field).
    Value set: SPACE, name of a Data Dictionary structure or table
    Link to currency unit
    •     Cfieldname (currency unit field name): This is used for currency fields that have a reference to any unit field. This is only relevant for amount columns with associated unit. This parameter contains the Name of the internal output table field containing the currency unit associated with the amount field FIELDCAT-FIELDNAME. The field in FIELDCAT-CFIELDNAME must have its own field catalog entry.
    Value set: SPACE, output table field name
    •     Ctabname (internal currency unit field output table): Name of the internal output table containing the FIELDCAT-CFIELDNAME field.
    Value set: SPACE, output table field name.
            Link to measurement unit
    •     Qfieldname (measurement unit field name): Only relevant for quantity columns with unit link. Name of the internal output table field containing the measurement unit associated with the quantity field FIELDCAT-FIELDNAME. The field in FIELDCAT-QFIELDNAME must have its own field catalog entry.
    Value set: SPACE, output table field name.
    •     Qtabname (internal measurement unit field output table): Name of the internal output table containing the FIELDCAT-QFIELDNAME field.
    Value set: SPACE, output table field name.
    •     Outputlen (column width): This parameter is used if the desired output length for a field is desired to be different from the internal output table field. For fields with a Data Dictionary link this parameter can be left initial. For fields without a Data Dictionary link (program field) the parameter must be given the value of the desired field list output length (column width).
    Initial = column width is the output length of the referred Data Dictionary field (domain).
    N = column width is n characters.
          Value set: 0 (initial), n.
    •     Key (key column): By default, the system makes some fields in the output as key fields, provided the fields are key fields in their referencing table. Using this parameter, fields other than key fields of the referencing table can be made key field. This parameter is most important if the output needs to contain some field which are not scrollable or cannot be hidden.
    If the internal output table contains fields that are key fields from different tables, then all those fields in the report output becomes unscrollable and cannot be hidden. So, the fields in the output internal table should not be referenced from tables in which they are key fields. Instead, they should be referenced to the tables in which they are not key fields, incase they are not desired as key field in the output.
    'X' = key field (key field output in color) and Key fields can not be interactively hidden. Parameter FIELDCAT-NO_OUT must be left initial.
          Value set: SPACE, 'X'.
    •     Key_sel (hideable key column): This parameter is only relevant for the fields which are made key fields using FIELDCAT-KEY = 'X'. Using this parameter the Key field can be hidden interactively.
    The key column sequence cannot be changed interactively by the user. The output is controlled by the FIELDCAT-NO_OUT parameter analogously to non-key fields.
    Value set: SPACE, 'X'.
    •     No_out (field in field list): This parameter is used to remove certain fields from the output during initial display.  The user can however interactively choose the field for output from the field list in the display variant.
                'X' = field is not displayed in the current list.
            Value set: SPACE, 'X'.
    •     Tech (technical field): This parameter is used to make certain field display only in the field catalog. The fields with this parameter set cannot be output in the list nor can they be displayed interactively from the catalog.
                        'X' = technical field.
           Value set: SPACE, 'X'.
    •     Emphasize (highlight columns in color): As name suggests, this field parameter is used to highlight certain field with chosen colors.
    Value set: SPACE, 'X' or 'Cxyz' (x:'1'-'9'; y,z: '0'=off ,'1'=on).
    'X' = column is colored with the default column highlight color.
                        'Cxyz' = column is colored with a coded color:
                      -  C: Color (coding must begin with C)
                     -  X: color number
                      -  Y: bold
                       -  Z: inverse
    •     Hotspot (column as hotspot): This parameter is used to make certain field appear as hotspot i.e. a hand is displayed if the cursor is positioned on the field value. Single click on such fields cause the PICK OR F2 events to happen.
             Value set: SPACE, 'X'.
                        'X' = column cells are output as hotspots.
    •     Fix_column (fix column): This parameter is used to fix certain columns in the output. All columns to be fixed must have this flag, starting from the left. If a column without this flag is output, only the columns to the left of this column are fixed. The user can change the column fixing interactively.
                         Value set: SPACE, 'X'.
            'X' = column fixed (does not scroll horizontally).
    •     Do_sum (sum over column): the user can also call this function interactively.
                      Value set: SPACE, 'X'.
    'X' = a sum is calculated over this internal output table field.
    •     No_sum (sums forbidden): No sum can be calculated over this field, although the data type of the field would allow summing.
             Value set: SPACE, 'X'.
    •     Icon: The parameter displays certain column contents as icons. The internal output table column contents must be valid icon strings.
                        Value set: SPACE, 'X'.
                         'X' = column contents to be output as an icon.
    •     Symbol: The internal output table column must be a valid symbol character.
    Value set: SPACE, 'X'
                        'X' = column contents are to be output as a symbol.
    •     Just (justification): This parameter is used for alignment of the contents of the output table. This is only relevant for CHAR or NUMC fields in the output internal table. The justification of the column header always follows the justification of the columns. Independent justification of the column header is not possible.
    Value set: SPACE, 'R', 'L', and ‘C’.
           ' ' = Default justification for this data type
           'R' = right-justified output
           'L' = left-justified output
           'C' = centered output.
    •     Lzero (leading zeros): By default ALV outputs NUMC fields right-justified without leading zeros. Using this parameter only the NUMC fields can be displayed with leading zeroes.
                       Value set: SPACE, 'X'.
                        'X' = output with leading zeros.
    •     No_sign (no +/- sign): This parameter is used to suppress the signs of the output fields. It is only relevant for the value fields.
        Value set: SPACE, 'X'.
               'X' = value output without +/ sign.
    •     No_zero (suppress zeros): Only relevant for value fields.
                 Value set: SPACE, 'X'.
                        'X' = suppress zeros.
    •     Edit_mask (field formatting): To apply the report output formatting options same as in the WRITE statement in report writing.
               Value set: SPACE, template.
    The following parameters are used for customizing the texts in the heading of the output of the columns. The texts are taken from the Data Dictionary for fields with a Data Dictionary reference. If this is not desired, the text parameters can also be specified. The Data Dictionary texts are then ignored.
    If the user changes the column width interactively, the column header text with the appropriate length is always used.
    The interactive function 'Optimize column width' takes account of both the field contents and the column headers: if all field contents are shorter than the shortest column header, the column width depends on the column header.
         The 'long field label' is also used in display variant definition,
            Sort, etc.  Popup.
    •     seltext_l (long field label)
    •     seltext_m (medium field label)
    •     seltext_s (short field label)
    •     reptext_ddic(header) Analogous to the Data element main header
    •     Ddictxt (specify text) : You can specify with values 'L', 'M',  and 'S', the keyword that should always be used as column header. If the column width changes, no attempt is made in this case to find an appropriate header for the new output width.
    Value set: SPACE, 'L', 'M', and ‘S’.
    Sample code:
    Suppose I_PO_DETAILS is an internal table containing two fields EBELN (PO number) and EBELP (PO item no).
    DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.     “Local variable to hold the parameters                                                                               
    for a particular field of the field catalog
      CLEAR L_FIELDCAT.
      L_FIELDCAT-TABNAME   = 'I_PO_DETAILS'.
      L_FIELDCAT-FIELDNAME = 'EBELN'.
      L_FIELDCAT-KEY = 'X'.         “The PO no is made the key field,
                          “Colored and non scrollable
      L_FIELDCAT-HOTSPOT = 'X'.     “The po no becomes a hotspot
      L_FIELDCAT-SELTEXT_S = ‘P.O No’.
      L_FIELDCAT-SELTEXT_M = 'P order No'.
      L_FIELDCAT-SELTEXT_L = 'Purchase order No'.
      APPEND L_FIELDCAT TO I_FIELDTAB.
      CLEAR L_FIELDCAT
      L_FIELDCAT-TABNAME   = 'I_PO_DETAILS'.
      L_FIELDCAT-FIELDNAME = 'EBELN'.
      L_FIELDCAT-KEY = 'X'.         “The po item no is made the key field,
                               “Colored and non scrollable
      L_FIELDCAT-SELTEXT_S = 'Item No'.
      L_FIELDCAT-SELTEXT_M = 'Item No`.
      L_FIELDCAT-SELTEXT_L = 'PO Item No'.
      APPEND L_FIELDCAT TO I_FIELDTAB.
      CLEAR L_FIELDCAT
    Thus the catalog for the report output is prepared.
    Step 4
    The next step is to build an event table, which are used for firing both user commands and the system dependent events i.e. top of page, end of page etc.
    A list of possible events is populated into an event table (I_EVENTS) when this table is passed to the function module REUSE_ALV_EVENT_NAMES_GET. The return table from this function module contains all the possible events.
    The function module contains following import and export parameters.
    IMPORTING PARAMETERS: I_LIST_TYPE
    This parameter has possible values from 0-4.
    The parameter I_LIST_TYPE is of TYPE SLIS_LIST_TYPE and is DEFAULT 0 .
    EXPORTING PARAMETERS:  I_EVENTS table.
    This table is of TYPE SLIS_T_EVENT and returns to the program the name of all the possible events.
    The table structure contains the fields:
         I_EVENTS-NAME: Name of the Callback event.
    I_EVENTS-FORM: Name of the form routine that should be called in the calling program at the event.
    Only events with a form routine name are processed.
    The I_EVENTS table returns with the following possible constants:
    1.     Slis_ev_item_data_expand TYPE slis_formname VALUE 'ITEM_DATA_EXPAND'.     
    Only relevant for hierarchical-sequential lists using the layout parameter IS_LAYOUT-EXPAND_FIELDNAME of the structure IS_LAYOUT. Exit for passing item entries (ITEM table) for a header record that was expanded interactively by the user.
    2.     Slis_ev_reprep_sel_modify TYPE slis_formname VALUE 'REPREP_SEL_MODIFY'.
    RS_SELFIELD-TABINDEX contains the header table index for which the item entries are to       be put in the global item output table (T_OUTTAB_SLAVE). The Callback is only called if ALV has no items for a header that is to be expanded.
    RFLG_ALL is passed with 'X' if the user shows all items. The application must ensure that    entries are not repeated in the item table.
        RS_SELFIELD is initial in this case.         
    3.     Slis_ev_caller_exit_at_start TYPE slis_formname VALUE 'CALLER_EXIT'.
    Is called at the beginning of the function module to make special settings. It is not usually used.          
    4.     Slis_ev_user_command TYPE slis_formname VALUE 'USER_COMMAND'.
    As this is a frequently-used Callback event, the form routine can also be passed        directly in the interface by passing the user command in the IMPORTING parameter           I_CALLBACK_USER_COMMAND.
    5.     Slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
       Equivalent to the list processing TOP-OF-PAGE event.           
    6.     Slis_ev_top_of_coverpage TYPE slis_formname VALUE 'TOP_OF_COVERPAGE'.       
    The selection information and list status are output together (if they exist) on a separate page by default
    7.     Slis_ev_end_of_coverpage TYPE slis_formname VALUE 'END_OF_COVERPAGE'.       
    Analogously to TOP_OF_COVERPAGE the user can add other information
    to the information output by ALV (selection information, list status) at this event.
    8.     Slis_ev_foreign_top_of_page TYPE slis_formname VALUE ‘FOREIGN_TOP_OF_PAGE'.
    The Top-of-page event is always processed in ALV and is only passed to the caller via the Callback mechanism. This is still the case if the caller, e.g. by a user action, processes a branch list which was not formatted by ALV (e.g. a popup with additional information about the list record selected and displayed by ALV).
    In this case, top-of-page cannot be formatted by ALV analogously to the basic list, it must be handled completely by the caller. The event top-of-page still occurs in ALV. When ALV notices a top-of-page which was not caused by an ALV output, the form routine in FOREIGN_TOP_OF_PAGE is called.
    9.     Slis_ev_foreign_end_of_page TYPE slis_formname VALUE 'FOREIGN_END_OF_PAGE'.  
    The event end-of-page is always processed in ALV and only passed to the caller via callback. This is still the case, e.g. when the caller processes a details list which was not formatted by ALV (e.g. a popup with further information about selected list records which were displayed by ALV).
    In this case, end-of-page cannot be formatted by ALV analogously to the basic list, it must be handled completely by the caller. The event end-of-page still occurs in ALV. When ALV notices an end-of-page that was not caused by an ALV output, the form routine in FOREIGN_END_OF_PAGE is called.                             
    10.     Slis_ev_pf_status_set TYPE slis_formname VALUE 'PF_STATUS_SET'.
    If a user list status is to be set, it must be done in the form routine assigned to this event. The ALV function codes, which must not be active, are in the Parameter RT_EXTAB. This table must be passed with the SET PF-STATUS command (with inactive user function codes as well, if necessary).
    The STANDARD status of the function group SALV should be used as a          template for a user-specific status. As this is a frequently used Callback event, its form routine can also be passed directly in the interface in the IMPORTING parameter I_CALLBACK_PF_STATUS_SET.
    11.     Slis_ev_list_modify TYPE slis_formname VALUE 'LIST_MODIFY'.     
    LIST_MODIFY USING R_TABNAME TYPE SLIS_TABNAME
                                             R_INDEX LIKE SY-TABIX
                                             R_INDEX_ITEM LIKE SY-TABIX
                                             R_INDEX_SUM LIKE SY-TABIX.
    12.     Slis_ev_top_of_list TYPE slis_formname VALUE 'TOP_OF_LIST'.  
    Information output at the start of the list     
    13.     Slis_ev_end_of_page TYPE slis_formname VALUE 'END_OF_PAGE'.
    Information output at the end of a page. This is only called for printing.
    14.     Slis_ev_end_of_list TYPE slis_formname VALUE 'END_OF_LIST'.     
    Information output at the end of the list
    15.     Slis_ev_after_line_output TYPE slis_formname VALUE 'AFTER_LINE_OUTPUT'.
    Output information after each output line. Should only be used in justified cases because it costs a lot of performance.
    16.     Slis_ev_before_line_output TYPE slis_formname VALUE   'BEFORE_LINE_OUTPUT'.       
    Output information before each output line. Should only be used in justified cases because it costs a lot of performance.         
    17.     Slis_ev_subtotal_text TYPE slis_formname VALUE  'SUBTOTAL_TEXT'.                        
    This event table (I_EVENTS) is now checked with the desired constants. If the desired constant is found, then the corresponding field for the FORM NAME is populated with the name of the routine containing the corresponding event.
    Sample code :
    FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
    FORMNAME_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE', FORMNAME_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.
    DATA: L_I_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
               I_LIST_TYPE = 0
           IMPORTING
                ET_EVENTS   = I_EVENTS.
      READ TABLE I_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                               INTO L_I_EVENT.
      IF SY-SUBRC = 0.
        MOVE FORMNAME_TOP_OF_PAGE TO L_I_EVENT-FORM.
        APPEND L_I_EVENT TO I_EVENTS.
      ENDIF.
      READ TABLE I_EVENTS WITH KEY NAME = SLIS_EV_END_OF_PAGE
                               INTO L_I_EVENT.
      IF SY-SUBRC = 0.
        MOVE FORMNAME_END_OF_PAGE TO L_I_EVENT-FORM.
        APPEND L_I_EVENT TO I_EVENTS.
      ENDIF.
      CLEAR L_I_EVENT.
      READ TABLE I_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
                               INTO L_I_EVENT.
      IF SY-SUBRC = 0.
        MOVE FORMNAME_USER_COMMAND TO L_I_EVENT-FORM.
        APPEND L_I_EVENT TO I_EVENTS.
      ENDIF.
    This will prepare the events table for the report.
    The report will contain three forms for the above events:
    1.     FORM TOP_OF_PAGE : This form will contain the top of page event for the report i.e header etc
    Using the function module ‘REUSE_ALV_COMMENTARY_WRITE’, the internal table containing the headings for top of page event can be passed to the list output. Also, any logo specific to the report can be passed to the function module.
    2.     FORM END_OF_PAGE : This form will contain the end of page event for the report i.e footer etc
    3.     FORM USER_COMMAND : This form will contain the desired user command i.e pick/line selection
    Step 5
    A layout is build for the report output list description USING the internal table declared above (I_LAYOUT).
    Output list description structure.
         The parameters are described under the following heads:
    •     Display options
    •     Exceptions
    •     Totals
    •     Interaction
    •     Detail screen
    •     Display variants (only for hierarchical-sequential lists)
    •     Color
    •     Other
    The layout table is of type slis_layout_alv_spec and has the following fields:
    Display options                                                
    1. Colwidth_optimize (1) TYPE c: This parameter optimizes the length of the different columns in the output. The width of the different col. now depends on the max. Length of the data in the column.
    Value set: SPACE, 'X'
    'X' = optimizes the column width so that all contents are displayed completely.                   
    2. No_colhead(1) TYPE c : This parameter suppresses the column headings                    
    Value set: SPACE, 'X'.
    'X' = column headers are not output
    3. No_hotspot(1) TYPE c :  The heading of the report output are not output as hotspot.       
    Value set: SPACE, 'X'.
    'X' = column headers are not output as hotspot
    4. Zebra(1) TYPE c : The report is output in the striped pattern.             
    Value set: SPACE, 'X'.
    'X' = striped pattern (e.g. for wide lists)
    5. No_vline(1) TYPE c : The report output contains columns only separated by space and no lines.  It is not relevant for: hierarchical-sequential lists and multiple-line lists.
    Value set: SPACE, 'X'.
    'X' = columns separated by SPACE
    6. No_min_linesize(1) TYPE c : The report  line size is equal to the width of the list. It is not relevant for block lists.
    Value set: SPACE, 'X’.
    'X' = line size depends on list width
    '  ' = Line size is set to 80 or MIN_LINESIZE (if > 0) .
    7. Min_linesize LIKE sy-linsz: The report output contains a minimum possible length of line. If initial min_linesize is set to 80 by default, then this parameter is used to customize it. The prerequisite for this is that the parameter no_min_linesize should be ' '.
    Value set: 0, 10 - 250
    If the list is wider, the format uses the list width (maximum 250 or MAX_LINESIZE (if > 0)).
    8. Max_linesize LIKE sy-linsz: The default max. Linesize is 250. To change this default value, this parameter can interactively-define the maximum list width setting.
    Value set: 0, 80 - 1020
    9. Window_titlebar LIKE rsmpe-tittext: To set the titlebar on the report output.                            
               10. No_uline_hs(1) TYPE c.
    Exceptions                                                 
    11. Lights_fieldname TYPE slis_fieldname: Internal output table field containing the codes of exceptions to be output.
                      Output table field code:  '1' = red traffic light
                                    '2' = yellow traffic light
                                         '3' = green traffic light Fieldname for exception 
         Value set: SPACE, internal output table field name.
    12. Lights_tabname TYPE slis_tabname: Name of the internal output table that contains the field in the parameter LIGHTS_FIELDNAME. If LIGHTS_FIELDNAME is not empty, this field must also be filled for hierarchical-sequential lists. Only relevant for hierarchical-sequential lists.
    .     Value set: SPACE, internal output table name.
    13. Lights_rollname LIKE dfies-rollname: The documentation of this data element is displayed when you call F1 help for an exception column.
    Value set: SPACE, data element name.
               14. Lights_condense(1) TYPE c : If a list record is output with 'red traffic light', each
               Subtotal that includes this record is also output with 'red traffic light'.
               Value set: SPACE, 'X'
               'X' = the 'maximum' exception of the items in the subtotal is output at subtotal level.
    Sums                                                       
    15. No_sumchoice(1) TYPE c : This parameter allows the choice for summing up
    Only by fieldcatalog.
    Value set: SPACE, 'X'
    'X' = fields which are to be summed, passed by the calling program (FIELDCAT-DO_SUM = 'X'). The user should not be able to change this value interactively.
    16. No_totalline(1) TYPE c : Removes the option of having totals after sub-totals.
    Value set: SPACE, 'X'
    'X' = no total record is to be output. Subtotals can still be calculated and output. The fields in the subtotals are flagged DO_SUM = 'X' in the field list.
    17. No_subchoice(1) TYPE c : Does not allow the user to interactively change the field chosen for subtotals.
    Value set: SPACE, 'X'
    'X' = value whose change triggers subtotals, provided by the calling program. The user should not be able to change this value interactively.
    18. No_subtotals(1) TYPE c : No subtotals possible          
    Value set: SPACE, 'X'
    'X' = no subtotals.
    19. Numc_sum(1)  TYPE c : Totals only possible for NUMC-Fields.
    20. No_unit_splitting TYPE c: No separate total lines by inh.units   
    21.totals_before_items TYPE c: Display totals before the items   
    22. Totals_only(1) TYPE c :  Show only totals      
    Value set: SPACE, 'X'
    'X' = only total records are output.
    23. Totals_text(60) TYPE c : Text for 1st col. in totals   
    Value set: SPACE, string (max.60)
    ' ' = The first column in the total record contains an appropriate number of '*'s to indicate the total by default. If the first column is wide enough, the string 'Total' is output after the asterisks.
    'String’ = The string passed is output after the total indicated by '*', if the column is wide enough.
    24. Subtotals_text(60) TYPE c : Texts for subtotals
    Value set: SPACE, string (max.60)
    ' ' = In the first column of subtotal records, the subtotal is indicated by an appropriate number of '*' by default. If the first column is not a subtotal criterion, the string 'Total' is output after the asterisks, if the column is wide enough.
    'String’ = the string passed is output after the subtotal indicated by '*', if the column is wide enough and the first column is not a subtotal criterion. If it is a subtotal criterion, its value is repeated after the total, if the column is wide enough.
    Interaction                                                      
    25. Box_fieldname TYPE slis_fieldname: Fieldname for checkbox in the report output. If the list has checkboxes at the start of records (for selecting several records), this parameter contains the internal output table field name indicated by the checkbox selection column. The field is a checkbox at the start of list records without a list header.
    Value set: SPACE, internal output table field name
    26. Box_tabname TYPE slis_tabname: Name of the internal output table that contains the field in the parameter BOX_FIELDNAME. If BOX_FIELDNAME is not empty, this field must also be filled for hierarchical-sequential lists.
    Value set: SPACE, internal output table name.
    27. Box_rollname LIKE dd03p-rollname: rollname for checkbox          
    28. Expand_fieldname TYPE slis_fieldname: fieldname flag ‘expand’. The user can show or hide the items by clicking on the folder symbol (hotspot). If the items for a header entry are only to be read by the calling program and passed to ALV when a header has been expanded interactively, this can be controlled via the CALLBACK event        'ITEM_DATA_EXPAND'.
    29. Hotspot_fieldname TYPE slis_fieldname: Used to make the fieldname flag hotspot.
    30. No_input(1) TYPE c : The fields are only display fields.
            Value set: SPACE, 'X'
    'X' = all ready-for-input fields in a list are displayed as not ready-for-input. (Record selection checkboxes and fields which can be made ready-for-input via the field list parameter FIELDCAT-INPUT = 'X')
    31. F2code LIKE sy-ucomm: To assign an ALV standard function code to double-click (F2), assign the function code to this parameter. Ex.: to assign the ALV standard function 'Detail' ('&ETA') to F2.
                      => LAYOUT-F2CODE = '&ETA'.
    Value set: SPACE, function code
    32. Confirmation_prompt: confirm. Prompt when leaving       
    Value set: SPACE, 'X'
    'X' = if one of the functions ‘Back (F03)', ‘Exit (F15)' or ‘Cancel (F12)' occurs, a confirmation prompt appears.
    33. Key_hotspot(1) TYPE c : The key fields are displayed as hotspot. The columns defined in the field catalog as key fields (FIELDCAT-KEY = 'X') are output as hotspots, i.e. clicking on a key column (highlighted in color in the list) calls the function under F2.
    Value set: SPACE, 'X'.
    34. Reprep(1) TYPE c :  report report interface active.     
    35. Group_buttons(1) TYPE c :  group-buttons for COL1 - COL5 . Group output fields via FIELDCAT-SP_GROUP in the field list, and pass the group name to the list module in the interface parameter IT_SPECIAL_GROUPS.           
    Value set: SPACE, 'X'.
    36. No_keyfix(1) TYPE c : Used to make the key fields scrollable.
    Value set: SPACE, 'X'.
    ' ' = The key columns defined in the field catalog by FIELDCAT-KEY = 'X' are fixed in the list output. These columns do not scroll horizontally. The item table key columns are fixed in hierarchical-sequential lists. The header table key fields are not considered here.
    'X' = key columns not fixed
    37. Get_selinfos(1) TYPE c : To read selection screen.
    Value set: SPACE, 'X'.
    If the calling program is a report with an ABAP/4 selection screen, setting this parameter makes ALV read the selection screen again. If the selections are read successfully, a pushbutton, via which the user can call a popup which lists the report selections in a simple form, becomes active on the results list output by ALV.
    38.     group_change_edit(1) TYPE c :  Settings by user for new group     
    Value set: SPACE, 'X'
    'X' = the user can enter a format option for each sort criterion in the sort/subtotal popup, for the list format when this value changes (e.g. new page or underline).
    39.     No_scrolling(1) TYPE c : Does not allow scrolling of the list to the right.
    Value set: SPACE, 'X'.
    40. Expand_all(1) TYPE c : Expand all positions                   
    Detailed screen                                                    
    40.     Detail_popup(1) TYPE c : show detail in popup.
    Value set: SPACE, 'X'
    '  '  = List record detail display in full-screen mode, with top-of-page.
    'X'  = list record detail display in popup (without top-of-page).
    41. Detail_initial_lines(1) TYPE c : show also initial lines   
    Value set: SPACE, 'X'
    '  ' = Only fields whose contents are not initial are output in the detail view.
    'X' = initial field contents are also output in detail.
    41.     detail_titlebar(30) type c : Titlebar for detail screen
    Value set: SPACE, string (max.30)
    ` ' = ' Detail: Display' is output as the title of the detail window.
                  'String’ = the string passed is output as the title of the detail window. 
    Display variants                                                   
    42. Header_text (20) TYPE c: Text for header button. Only relevant for hierarchical-sequential lists. You can toggle between display field and field list views via pushbuttons in the display variant definition popup for hierarchical-sequential lists. The views refer to the hierarchy level of the fields. This is technically a toggle between the header table and item table fields.   
    Value set: SPACE, CHAR (20)
    ' ' = The header table field pushbutton text is 'Header' by default.
    CHAR (20) = header table field pushbutton text.
    43.item_text(20) TYPE c : Text for item button. Only relevant for hierarchical-sequential lists. You can toggle the view between the display fields and the field list via pushbuttons in the display variant definition popup for hierarchical-sequential lists. The views refer to the hierarchy level of the fields. This is technically a toggle between the header table and item table fields.        
    Value set: SPACE, CHAR (20)
    ' ' = The pushbutton text for the item table fields is 'Item' by default.
    CHAR (20) = item table field pushbutton text.
    44.default_ item(1) TYPE c : Items as default. Only relevant for hierarchical-sequential lists.
         Value set: SPACE, 'X'
    ' ' = The header table fields are displayed by default in the display variant definition popup. The user can switch to the item table fields interactively.
    'X' = the item table fields are displayed by default in the display variant Definition Popup.    The user can switch to the header table fields interactively.
    Colour                                                       
    45. Info_fieldname TYPE slis_fieldname: infofield for listoutput. A whole list record can be colored individually using a color code in a column of the internal output table for the record. Assign the name of the field containing the color code to this parameter.
    Value set: SPACE, internal output table field name
    The internal output table field must be of type CHAR(3).
    The code must have the following syntax:  'Cxy':
            C = color (all codes must start with 'C')
            X = color number ('1'-'9')
            Y = bold ('0' = off, '1' = on)
    46. Coltab_fieldname TYPE slis_fieldname: Cells can be colored individually using a color code which is contained in a column of the internal output table for the record containing the cell. Assign the name of the field to this parameter.       
    Others                                                
    47. List_append(1) TYPE c :  no call screen. It is only useful to output block-lists without specifying the above modules if the number of list blocks exceeds, or may exceed, the maximum number specified in the block module documentation. These operations are not possible for user-defined block lists.
    Example code :
           I_LAYOUT-f2code       = ws_fcode.
           I_LAYOUT-zebra        = 'X'.
    I_LAYOUT-colwidth_optimize = 'X'.
    I_LAYOUT-no_keyfix = 'X'.
    I_LAYOUT-get_selinfos = 'X'.
    I_LAYOUT-no_hotspot = 'X'.
           I_LAYOUT-no_input = 'X'.
    I_LAYOUT-hotspot_fieldname = FIELDNAME.
    I_LAYOUT-no_input          = ‘X’.
    I_LAYOUT-no_vline          = `X’.
    I_LAYOUT-no_colhead        = ‘ ‘.
    I_LAYOUT-lights_condense   = ` `.
    I_LAYOUT-totals_text       = ` `.
    I_LAYOUT-subtotals_text    = ` `.
    I_LAYOUT-totals_only       = ` `.
    I_LAYOUT-key_hotspot       = ‘X’.
    I_LAYOUT-detail_popup      = ‘X’.
    I_LAYOUT-group_change_edit = ‘X’.
    I_LAYOUT-GROUP_BUTTONS     = ‘X’.
    Step 6
    This step is required to get the selection screen information in the report output.
    The prerequisite for this is to set the parameter LAYOUT-GET_SELINFOS of the IMPORTING structure.
    The parameters to be passed in the IS_SEL_HIDE table are:
    o mode:              'R' = only the entries passed in the internal table IS_SEL_HIDE-T_ENTRIES       
    Are output in the pop up. Selection info, which the list tool read in the selection screen (when called by a report with a selection screen), is replaced by the values passed.
    'S' = the selection info which the list tool read in the selection screen of the calling report are modified by the entries in the table IS_SEL_HIDE-T_ENTRIES.
    o t_entries:         Selection info table
    o t_entries-mode:   'A' = output the selection info for the current table record in the info popup.
    'D' = do not output select option or SELNAME parameter selection info in   the popup.
    o t_entries-selname: (only used in t_entries-mode = 'D') : Name of the select option or parameter.
    The following table fields are only used in t_entries-mode = 'A'. They contain the selection information to be added.
    •     t_entries-field:  DDIC field name of the field for which selection information is to be output.
    •     t_entries-table:  DDIC table names of t_entries-field.
    •     t_entries-stext:  Field name in info popup.
    •     If t_entries-field and t_entries-table have been entered, this text is taken from DDIC.
    •     t_entries-valuf:  Selection condition 'from' value (external format)
    •     t_entries-valut:  Selection condition 'to' value (external format)
    •     t_entries-sign0:  (I)nclusive (E)xclusive
    •     t_entries-option:  All values of the select options Option field allowed.
    Step 6
    The Table IT_SORT is populated with the sort criteria for the different fields.
    The caller specifies the sorting and/or subtotaling of the basic list in the internal table IT_SORT.
    This internal table has the following fields:
         o spos :  Sort sequence
         o fieldname :  Internal output table field name
         o tabname : Only relevant for hierarchical-sequential lists. Name of the internal output table.
         o up : 'X' = sort in ascending order
         o down : 'X' = sort in descending order
         o subtot : 'X' = subtotal at group value change
         o group : '* ' = new page at group value change ,'UL' = underline at group value change
                             Step 7
    The final step in the output of the report is the use of two ALV functions modules.
    1.     REUSE_ALV_FIELDCATALOG_MERGE
    2.     REUSE_ALV_LIST_DISPLAY
    The first function module is used to pass the field catalog to the report output and merge it with the internal output table.
    FUNCTION reuse_alv_fieldcatalog_merge.                                
    ""Lokale Schnittstelle:                                             
    *” IMPORTING                                                    
    *"             VALUE(I_PROGRAM_NAME) LIKE  SY-REPID OPTIONAL          
    *"             VALUE(I_INTERNAL_TABNAME) TYPE  SLIS_TABNAME OPTIONAL  
    *"             VALUE(I_STRUCTURE_NAME) LIKE  DD02L-TABNAME OPTIONAL   
    *"             VALUE(I_CLIENT_NEVER_DISPLAY) TYPE  SLIS_CHAR_1        
    *"                             DEFAULT 'X'                            
    *"             VALUE(I_INCLNAME) LIKE  TRDIR-NAME OPTIONAL            
    *"       CHANGING                                                     
    *"             VALUE(CT_FIELDCAT) TYPE  SLIS_T_FIELDCAT_ALV           
    *"       EXCEPTIONS                                                   
    *"              INCONSISTENT_INTERFACE                                
    *"              PROGRAM_ERROR                                         
    Import parameters 
    I_PROGRAM_NAME: Program in which the internal output table is declared and populated   
    I_INTERNAL_TABNAME: Internal output table name
    I_STRUCTURE_NAME: Structure name (structure, table, and view)
    I_CLIENT_NEVER_DISPL: Hide client fields default ‘X’
    I_INCLNAME: Data declarations include name
    CHANGING parameter
    CT_FIELDCAT: Field catalog with field descriptions
    The variant based on a program-internal table should only be used for rapid prototyping since the following restrictions apply:                                                                               
    1.   Performance is affected since the code of the table definition must always be read and interpreted at runtime.                                                                               
    2.   Dictionary reference are only considered if the keywords LIKE or  INCLUDE STRUCTURE (not TYPE) are used.
    Step 8
    The other function module is used to display the internal output table with the contents
    FUNCTION reuse_alv_list_display.                                          
    ""Lokale Schnittstelle:                                                 
    *” IMPORTING                                                        
    *"             VALUE(I_INTERFACE_CHECK) DEFAULT SPACE                     
    *"             VALUE(I_CALLBACK_PROGRAM) LIKE  SY-REPID DEFAULT SPACE     
    *"             VALUE(I_CALLBACK_PF_STATUS_SET) TYPE  SLIS_FORMNAME        
    *"                             DEFAULT SPACE                              
    *"             VALUE(I_CALLBACK_USER_COMMAND) TYPE  SLIS_FORMNAME         
    *"                             DEFAULT SPACE                              
    *"             VALUE(I_STRUCTURE_NAME) LIKE  DD02L-TABNAME OPTIONAL       
    *"             VALUE(IS_LAYOUT) TYPE  SLIS_LAYOUT_ALV OPTIONAL            
    *"             VALUE(IT_FIELDCAT) TYPE  SLIS_T_FIELDCAT_ALV OPTIONAL      
    *"             VALUE(IT_EXCLUDING) TYPE  SLIS_T_EXTAB OPTIONAL            
    *"             VALUE(IT_SPECIAL_GROUPS) TYPE  SLIS_T_SP_GROUP_ALV         
    *"                             OPTIONAL                                   
    *"             VALUE(IT_SORT) TYPE  SLIS_T_SORTINFO_ALV OPTIONAL          
    *"             VALUE(IT_FILTER) TYPE  SLIS_T_FILTER_ALV OPTIONAL          
    *"             VALUE(IS_SEL_HIDE) TYPE  SLIS_SEL_HIDE_ALV OPTIONAL        
    *"           VALUE(I_DEFAULT) DEFAULT 'X'
    "             VALUE(I_SAVE) DEFAULT SPACE                             
    "             VALUE(IS_VARIANT) LIKE  DISVARIANT                      
    "                             STRUCTURE  DISVARIANT DEFAULT SPACE     
    "             VALUE(IT_EVENTS) TYPE  SLIS_T_EVENT OPTIONAL            
    "             VALUE(IT_EVENT_EXIT) TYPE  SLIS_T_EVENT_EXIT OPTIONAL   
    "             VALUE(IS_PRINT) TYPE  SLIS_PRINT_ALV OPTIONAL           
    "             VALUE(IS_REPREP_ID) TYPE  SLIS_REPREP_ID OPTIONAL       
    "             VALUE(I_SCREEN_START_COLUMN) DEFAULT 0                  
    "             VALUE(I_SCREEN_START_LINE) DEFAULT 0                    
    "             VALUE(I_SCREEN_END_COLUMN) DEFAULT 0                    
    "             VALUE(I_SCREEN_END_LINE) DEFAULT 0                      
    "       EXPORTING                                                     
    "             VALUE(E_EXIT_CAUSED_BY_CALLER)                          
    "             VALUE(ES_EXIT_CAUSED_BY_USER) TYPE  SLIS_EXIT_BY_USER   
    "       TABLES                                                        
    "              T_OUTTAB                                               
    "       EXCEPTIONS                                                    
    "              PROGRAM_ERROR
    Import parameters
    I_INTERFACE_CHECK: Interface consistency check log output.
    I_CALLBACK_PROGRAM: Name of the calling program
    I_CALLBACK_PF_STATUS_SET: Set EXIT routine to status.   
    I_CALLBACK_USER_COMMAND: EXIT routine for command handling
    I_STRUCTURE_NAME: Internal output table structure name     
    IS_LAYOUT: List layout specifications 
    IT_FIELDCAT: Field catalog with field descriptions
    IT_EXCLUDING: Table of inactive function codes   
    IT_SPECIAL_GROUPS: Grouping fields for column selection
    IT_SORT: Sort criteria for first list display
    IT_FILTER: Filter criteria for first list output
    IS_SEL_HIDE     : Selection information modification
    I_DEFAULT:      Initial variant active/inactive logic
    I_SAVE: Variants can be saved
    IS_VARIANT     : Variant information
    IT_EVENTS: Table of events to perform  IT_EVENT_EXIT :  Standard fcode exit requests table 
    IS_PRINT: Print information
    IS_REPREP_ID: Initialization keys for Re/Re interface
    I_SCREEN_START_COLUMN: Coordinates for list in dialog box
    I_SCREEN_START_LINE: Coordinates for list in dialog box
    I_SCREEN_END_COLUMN: Coordinates for list in dialog box        
    I_SCREEN_END_LINE: Coordinates f

  • How to hide some fields in ABAP Query

    Hi,
    My ABAP Query has a long list of extracted fields. I wanted to set some of these output to "HIDE".
    This allow User the flexibility to decide what fields to show.
    How can I set the field to "HIDE" in my query?
    Thanks
    bye

    Hi Tim,
    You can do this by setting the Report layout variant in following steps:
    1. First define the parameter on selection screent for report variant.
    2. Data decelaration for variant.
    3. Value request to get already present variants on report:
    4. If doesn't choose the layout take out the default report layout.
    5. Initialize the report variant.
    6. Apply the variant to the REUSE_ALV_GRID_DISPLAY funtion module.
             Here to generate report variant first to open report output and then as per according to user set the layout of report using the layout icon of ALV with summation on value fields (as required) and create layout name.
    *Data Deceleration as below:
    Data :g_save(1) TYPE c,
    **      g_default(1) TYPE c,
    g_exit(1) TYPE c,
    gx_variant TYPE disvariant,
    g_variant TYPE disvariant.
    *First Define the parameter to give layout of Report variant.
    SELECTION-SCREEN BEGIN OF BLOCK 3 WITH FRAME TITLE text-003.
    PARAMETERS: p_vari TYPE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK 3.
    * Process on value request
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM f4_for_variant.
    * Selection-Screen Checking
    AT SELECTION-SCREEN.
    PERFORM pai_of_selection_screen.
    INITIALIZATION.
    w_repid = sy-repid.
    PERFORM variant_init.
    * 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.
    FORM f4_for_variant .
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
    is_variant = g_variant
    i_save     = g_save
    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.
    **    ENDIF.
    ENDIF.
    ENDFORM.                    " f4_for_variant
    FORM pai_of_selection_screen .
    IF NOT p_vari IS INITIAL.
    MOVE g_variant TO gx_variant.
    MOVE p_vari TO gx_variant-variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
    i_save     = g_save
    CHANGING
    cs_variant = gx_variant.
    g_variant = gx_variant.
    ELSE.
    PERFORM variant_init.
    ENDIF.
    ENDFORM.                    " pai_of_selection_screen
    FORM variant_init .
    CLEAR g_variant.
    g_variant-report = w_repid.
    ENDFORM.                    " variant_init
    **While Showing report pass the variant :::
    g_save = 'A'.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = w_repid
    i_structure_name   = 'IT_MAIN'
    is_layout          = i_layout
    is_print           = i_print
    it_fieldcat        = i_fieldcat[]
    it_events          = i_events[]
    i_save             = g_save
    is_variant         = g_variant
    TABLES
    t_outtab           = it_main
    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.
    Many Thanks / Himanshu Gupta

Maybe you are looking for

  • Windows 8.1 issue explorer.exe error on shutdown NOT resolved and painfully slow bootup

    Hi, I have a brand new HP Pavilion Laptop with Windows 8 64bit. I just downloaded the free update to 8.1. And then problems started.  First off, the boot up time has almost doubled. Just before the desktop becomes visible, there is a 10 second period

  • I can't see my full wish list

    I can only see the top 30 or so songs on my wish list, but i have way more than that

  • Numbers range overlap

    Range overlapping the problem I'd like to solve : given a table ranges (range_id#,external_key, from, to) I need to detect overlapping grouping by external key, ie: range_id external_key from to ------------------------+---- 1 A 1 5      2 A 8 10    

  • Background colour change for WebDynpro Application has to changed

    Hi All, One of my custom built web dynpro application background color has to be changed, is it possible to do that? Satish

  • Why is CBS Sports not loading properly

    Ever since last night when I access cbsports.com all that appears is a jumbled mess. There are a lot of blue question marks, content and photos missing, etc. It looks as if it was not formatted properly. Also, it doesn't matter what browser I use (Sa