2LIS_02_SCL-BANFN,BNFPO

Hi, the 2 fields I mentioned are in ROOSOURCE with selection 'P'.  I changed the selection to 'X' with the code.
update roosfield
set selection = 'X'
where oltpsource = '2LIS_02_SCL'
and   field      = 'BNFPO'
and   objvers    = 'D'.
When I executed, the selection is chenged to 'X', but I don't have the objvers to 'A'.  And also I am not able to see those fields in the structure.  how do I get it to BW?  All the other fields have 2 versions A and D.
Am I missing anything?  Please answer me
Thanks,
Radha

Hello Radha,
Here is the note.
Summary
Symptom
The BANFN fields (purchase requisition number) and BNFPO (purchase requisition item) were not assigned within the 2LIS_02_SCL InfoSource.
Other terms
2LIS_02_SCL, BANFN
Solution
In transaction RSA1, replicate the corresponding DataSource for the 2LIS_02_SCL InfoSource and copy the fields into the transfer structure by accessing the transfer rules of the corresponding source system. Then activate the transfer rules.
Hope that helps.

Similar Messages

  • Custom purchase requsitionto vendor open and cleared payment report

    dear all i develop report but i cant ableto show in that open amount and cleared amount of vender in that report so please see this report and feedback me for logic to show open and clear amount of vendor purchase orderwise or vendorwise
    report zpo_purchase_history no standard page heading message-id 00.
    TABLES : bsik, bsak, lfa1, lfb1, skb1, t001, bapifvdexp_vzzbepp.
    type-pools:slis,ICON.
    types :begin of ty_po,
            banfn type eban-banfn,
            "Purchase Requisition Number
            bnfpo type eban-bnfpo,
            "Item Number of Purchase Requisition
            ekgrp type eban-ekgrp,                 "Purchasing Group
            badat type eban-badat,
            "Requisition (Request) Date
            menge type eban-menge,
            KNTTP TYPE EBAN-KNTTP,
             PSTYP type eban-PSTYP,
            "Purchase Requisition Quantity
            meins type eban-meins,
            "Purchase Requisition Unit of Measure
            lifnr type ekko-lifnr,                 "Vendor Account Number
            bedat type ekko-bedat,                 "Purchasing Document Date
            ebeln type ekpo-ebeln,
            "Purchasing Document Number
            ebelp type ekpo-ebelp,
            "Item Number of Purchasing Document
            matkl type ekpo-matkl,                 "Material Group
            mtart type ekpo-mtart,                 "Material Type
            matnr type ekpo-matnr,                 "Material Number
            txz01 type ekpo-txz01,                 "Short Text
            menge1 type ekpo-menge,                "Purchase Order Quantity
            meins1 type ekpo-meins,
            "Purchase Order Unit of Measure
            balqty type ekpo-menge,                "Balance Quantity
            netpr type ekpo-netpr,
            "Net Price in Purchasing Document
            peinh type ekpo-peinh,                 "Price Unit
            mblnr type mseg-mblnr,
            "Number of Material Document
            zeile type mseg-zeile,                 "Item in Material Document
            menge2 type mseg-menge,                "GR Quantity
            meins2 type mseg-meins,                "GR Unit of Measure
            werks type mseg-werks,                 "Plant
            charg type mseg-charg,                 "Batch
            belnr type rbkp-belnr,
            "Document Number of an Invoice Document
            bldat type ekbe-bldat,                 "Document Date in Document
            belnr_b type rbkp-belnr,
            SHKZG type ekbe-SHKZG ,                "Debit/Credit Indicator
            DMBTR type   bsik-dmbtr,                "Amount in Local Currency
            DMBTR_C type   bsAk-dmbtr,                "Amount in Local Currency
            thick(10) type c,                      "Thickness
            width(10) type c,                      "Width
            length(10) type c,                     "Length
            grade(10) type c,                        "Grade
            BELNR_d type bseg-belnr,
            xblnr type bkpf-xblnr,
            awkey  type bkpf-awkey,
            RMWWR type rbkp-RMWWR,
            WMWST1 type rbkp-WMWST1,
            end of ty_po.
    types :begin of ty_ekko,
            ebeln type ekko-ebeln,
            lifnr type ekko-lifnr,
            bedat type ekko-bedat,
            end of ty_ekko.
    types:begin of ty_ekpo,
            ebeln type ekpo-ebeln,
            ebelp type ekpo-ebelp,
            matnr type ekpo-matnr,
            txz01 type ekpo-txz01,
            menge type ekpo-menge,
            meins type ekpo-meins,
            netpr type ekpo-netpr,
            peinh type ekpo-peinh,
            banfn type ekpo-banfn,
            bnfpo type ekpo-bnfpo,
            mtart type ekpo-mtart,
            end of ty_ekpo.
    types :begin of ty_eban,
            banfn type eban-banfn,
            bnfpo type eban-bnfpo,
            matnr type eban-matnr,
            menge type eban-menge,
            meins type eban-meins,
            end of ty_eban.
    types : begin of ty_ekbe,
             ebeln type ekbe-ebeln,
             ebelp type ekbe-ebelp,
             belnr type ekbe-belnr,
             bldat type ekbe-bldat,
             gjahr type ekbe-gjahr,
             buzei type ekbe-buzei,
             matnr type ekbe-matnr,
             DMBTR type ekbe-dmbtr,
             shkzg type ekbe-shkzg,
             end of ty_ekbe.
    types : begin of ty_mseg,
             mblnr type mseg-mblnr,
             mjahr type mseg-mjahr,
             zeile type mseg-zeile,
             menge type mseg-menge,
             meins type mseg-meins,
             ebeln type mseg-ebeln,
             ebelp type mseg-ebelp,
             matnr type mseg-matnr,
             werks type mseg-werks,
             charg type mseg-charg,
             end of ty_mseg.
    types : begin of ty_rbkp,
             belnr type rbkp-belnr,
             gjahr type rbkp-gjahr,
             bldat type rbkp-bldat,
             lifnr type rbkp-lifnr,
             ZUONR type rbkp-ZUONR,
             RMWWR type rbkp-RMWWR,
             WMWST1 type rbkp-WMWST1,
             end of ty_rbkp.
    types : begin of ty_bseg,
             bukrs type bseg-bukrs,
             belnr type bseg-belnr,
             gjahr type bseg-gjahr,
             buzei type bseg-buzei,
             valut type bseg-valut,
             wrbtr type bseg-wrbtr ,
             augbl type bseg-augbl,
             matnr type bseg-matnr,
             lifnr type bseg-lifnr,
             ebeln type bseg-ebeln,
             end of ty_bseg.
    types : begin of ty_rseg,
             belnr type rseg-belnr,
             gjahr type rseg-gjahr,
             ebeln type rseg-ebeln,
             ebelp type rseg-ebelp,
             matnr type rseg-matnr,
             bukrs type rseg-bukrs,
             end of ty_rseg.
    types : begin of ty_bsik,
             belnr type bsik-belnr,
              buzei type bsik-buzei,
             DMBTR type bsik-DMBTR,
             budat type bsik-budat,
             shkzg type bsik-shkzg,
             ebeln type bsik-ebeln,
             lifnr type bsik-lifnr,
             end of ty_bsik.
    types : begin of ty_bsak,
             belnr type bsak-belnr,
       lifnr type bsak-lifnr,
        ebeln type bsak-ebeln,
             DMBTR_C type bsak-DMBTR,
    ZUONR type bsak-ZUONR,
             end of ty_bsak.
    types: begin of ty_bkpf,
             BELNR type bkpf-belnr,
             xblnr type bkpf-xblnr,
             awkey  type bkpf-awkey,
           end of ty_bkpf.
    data: it_po type standard table of ty_po,
           it_ekko type standard table of ty_ekko,
           it_ekpo type standard table of ty_ekpo,
           it_eban type standard table of ty_eban,
           it_ekbe type standard table of ty_ekbe,
           it_mseg type standard table of ty_mseg,
           it_rbkp type standard table of ty_rbkp,
           it_rseg type standard table of ty_rseg,
           it_bseg type standard table of ty_bseg,
           it_bsik type STANDARD TABLE OF ty_bsik with header line,
           it_bsak type STANDARD TABLE OF ty_bsak,
           it_bkpf type standard table of ty_bkpf,
           wa_po type ty_po,
           wa_ekko type ty_ekko,
           wa_ekpo type ty_ekpo,
           wa_eban type ty_eban,
           wa_mseg type ty_mseg,
           wa_rbkp type ty_rbkp,
           wa_rseg type ty_rseg,
           wa_bseg type ty_bseg,
           wa_ekbe type ty_ekbe,
           wa_bsik type ty_bsik,
           wa_bsak type ty_bsak,
           wa_bkpf type ty_bkpf.
    data: it_fcat type slis_t_fieldcat_alv,
           it_lshead type slis_t_listheader,
           it_sort type slis_t_sortinfo_alv,
           wa_fcat type slis_fieldcat_alv,
           wa_lshead type slis_listheader,
           wa_layout type slis_layout_alv,
           wa_sort type slis_sortinfo_alv.
    data :it_cl_data like table of clobjdat,
           wa_cl_data like clobjdat.
    data: values(10) type n.
    data: value1(4) type N.
    data: c_matkl type ekpo-matkl,
           c_matnr type ekpo-matnr,
           c_ekgrp type eban-ekgrp,
           c_badat type eban-badat,
           c_index type sy-tabix,
           c_grmenge type mseg-erfmg,
           c_low(10) type c,
           c_high(10) type c,
           c_date type string,
           c_bukrs type ekko-bukrs,
           c_WERKS type eban-WERKS.
    data: gd_date(10).
    DATA: V_EVENTS TYPE SLIS_T_EVENT,
           WA_EVENT TYPE SLIS_ALV_EVENT.
    *********Selection screen variables*********
    selection-screen:begin of block b1 with frame title text-001.
    select-options: s_bukrs for c_bukrs DEFAULT  'bmp1',
                     s_WERKS for c_WERKS,
                     s_matnr for c_matnr DEFAULT 'rm-01',
                     s_matkl for c_matkl ,
                     s_badat for c_badat ,"obligatory,
                     s_ekgrp for c_ekgrp.
    parameters: ch_bal as checkbox.
    selection-screen:end of block b1.
    *initialization.
    * PERFORM EVENT_CALL.
    *  PERFORM POPULATE_EVENT.
    start-of-selection.
         PERFORM EVENT_CALL.
       PERFORM POPULATE_EVENT.
       perform getdata.
       perform setdata.
       perform fieldcat.
       perform display.
    *&      Form  GETDATA
    form getdata .
       select a~BANFN
              a~bnfpo
              a~ekgrp
              a~badat
              a~KNTTP
              a~PSTYP
              b~ebeln
              b~ebelp
              b~matkl
              b~matnr
              b~bukrs
              into corresponding fields of table it_po
              from eban as a inner join ekpo as b
              on a~banfn = b~banfn and
                 a~bnfpo = b~bnfpo AND
                 A~KNTTP = B~KNTTP and
                 a~PSTYP = b~PSTYP
              where  a~badat in s_badat and
                     a~ekgrp in s_ekgrp and
                     a~WERKS in s_WERKS and
                     b~matnr in s_matnr and
                     b~matkl in s_matkl and
                     b~bukrs in s_bukrs and
                     b~loekz <> 'L' and
                     a~loekz <> 'X'.
       if it_po[] is not initial.
         select ebeln
                ebelp
                matnr
                txz01
                menge
                meins
                netpr
                peinh
                banfn
                bnfpo
                mtart
                from ekpo into table it_ekpo
                for all entries in it_po
                where ebeln = it_po-ebeln and
                      ebelp = it_po-ebelp and
                      loekz <> 'L'.
         select banfn
                bnfpo
                matnr
                menge
                meins
                from eban into table it_eban
                for all entries in it_po
                where banfn = it_po-banfn and
                      bnfpo = it_po-bnfpo and
                      loekz <> 'X'.
         if it_ekpo[] is not initial.
           select ebeln
                  lifnr
                  bedat
                  from ekko into table it_ekko
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln.
           select ebeln
                  ebelp
                  belnr
                  bldat
                  gjahr
                  buzei
                  matnr
                  DMBTR
                  shkzg
                  from ekbe into table it_ekbe
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln and
                        ebelp = it_ekpo-ebelp .
    *if it_ekbe-shkzg = 'H'.
    **ekbe-dmbtr = ekbe-dmbtr * -1.
    **ekbe-menge = ekbe-menge * -1.
    *endif.
    * select belnr
    *             gjahr
    *             ebeln
    *             ebelp
    *     from bseg into table it_bseg
    *             for all entries in it_ekpo
    *             where ebeln = it_ekpo-ebeln and
    *                   ebelp = it_ekpo-ebelp.
           select belnr
                  gjahr
                  ebeln
                  ebelp
                  matnr
                  bukrs
                  from rseg into table it_rseg
                  for all entries in it_ekpo
                  where ebeln = it_ekpo-ebeln and
                        ebelp = it_ekpo-ebelp.
         endif.
         if it_ekbe[] is not initial.
           select mblnr
                  mjahr
                  zeile
                  menge
                  meins
                  ebeln
                  ebelp
                  matnr
                  werks
                  charg
                  from mseg into table it_mseg
                  for all entries in it_ekbe
                  where mblnr = it_ekbe-belnr and
                        mjahr = it_ekbe-gjahr and
                        zeile = it_ekbe-buzei and
                        bwart = '101'.
         endif.
         if it_rseg[] is not initial.
           select belnr
                  gjahr
                  bldat
                  lifnr
                  ZUONR
                  RMWWR
                  WMWST1
                  from rbkp into table it_rbkp
                  for all entries in it_rseg
                  where belnr = it_rseg-belnr.
         endif.
    *if it_rseg[] is not initial.
    *      SELECT bukrs
    *              belnr
    *              gjahr
    *              buzei
    *              valut
    *              wrbtr
    *              augbl
    *              matnr
    *              lifnr
    *              ebeln
    *        INTO TABLE it_bseg
    *          FROM bseg
    *          FOR ALL ENTRIES IN it_rseg
    *          WHERE bukrs = it_rseg-bukrs and ebeln = it_rseg-ebeln and mwskz = ''.
    *endif.
    *loop at it_BKPF into wa_BKPF.
    *  values = wa_rbkp-belnr.
    *  value1 = wa_rbkp-gjahr.
       data: aekey_1 type string .
    *CONCATENATE values value1 into aekey_1.
    *  if it_BSEG[] is not initial.
    *MESSAGE aekey_1 type 'I'.
           SELECT single belnr xblnr awkey into wa_bkpf
             from bkpf
             where awkey = aekey_1.
    SELECT SINGLe belnr
    buzei
    dmbtr
    budat
       shkzg
       ebeln
       lifnr
       FROM bsik
    INTO CORRESPONDING FIELDS OF  wa_bsik
    *FOR ALL ENTRIES IN it_bseg
    WHERE
        bukrs in s_bukrs and
        lifnr = wa_rbkp-lifnr
    and
    *AND gjahr = it_bseg-gjahr
    * AND
        belnr = wa_bkpf-belnr.
    insert wa_bsik into table it_bsik.
    CLEAR wa_bsik.
    CLEAR it_bsik.
    *endloop.
    * and ebeln = it_bseg-ebeln .
    *    select BELNR
    **           SHKZG
    **           DMBTR
    *           from bkpf into table it_bkpf
    *            for ALL ENTRIES IN it_rbkp
    *            where belnr = it_rbkp-belnr.
    *        ENDif.
    IF IT_bseg[] IS NOT INITIAL.
           select belnr
             LIFNR
             ebeln
                  DMBTR
              ZUONR
                  from bsik into table it_bsik
                  for all entries in it_bseg
                  where belnr = it_bseg-belnr.
           select belnr
             LIFNR
             ebeln
                  DMBTR
              ZUONR
                  from bsak into table it_bsak
                  for all entries in it_bseg
                  where belnr = it_bseg-belnr.
    ENDIF.
       else.
         message s002.
         leave list-processing.
       endif.
    endform.                    " GETDATA
    *&      Form  SETDATA
    form setdata .
       clear wa_po.
       loop at it_po into wa_po.
         c_index = sy-tabix.
    ********Calculate PR Quantity**********
         clear wa_eban.
         read table it_eban into wa_eban
                    with key banfn = wa_po-banfn
                             bnfpo = wa_po-bnfpo.
         if sy-subrc eq 0.
           move:wa_eban-menge to wa_po-menge,
                wa_eban-meins to wa_po-meins.
         endif.
    ********Calculate PO Quantity**********
         clear wa_ekpo.
         read table it_ekpo into wa_ekpo
                    with key banfn = wa_po-banfn
                             bnfpo = wa_po-bnfpo .
         if sy-subrc eq 0.
           move:wa_ekpo-txz01 to wa_po-txz01,
                wa_ekpo-netpr to wa_po-netpr,
                wa_ekpo-peinh to wa_po-peinh,
                wa_ekpo-mtart to wa_po-mtart,
                wa_ekpo-menge to wa_po-menge1,
                wa_ekpo-meins to wa_po-meins1.
         endif.
    ********Calculate Balance Quantity******
         clear wa_mseg.
         loop at it_mseg into wa_mseg
                where ebeln = wa_po-ebeln and
                      ebelp = wa_po-ebelp.
           c_grmenge = c_grmenge + wa_mseg-menge.
         endloop.
         move:wa_mseg-mblnr to wa_po-mblnr,
              c_grmenge to wa_po-menge2,
              wa_mseg-meins to wa_po-meins2,
              wa_mseg-werks to wa_po-werks,
              wa_mseg-charg to wa_po-charg.
         wa_po-balqty = wa_eban-menge - c_grmenge.
         clear : wa_rseg,wa_rbkp.
         read table it_rseg into wa_rseg with key
                        ebeln = wa_mseg-ebeln
                        ebelp = wa_mseg-ebelp.
         read table it_rbkp into wa_rbkp
                    with key belnr = wa_rseg-belnr
                             gjahr = wa_rseg-gjahr.
         if sy-subrc eq 0.
           move : wa_rbkp-belnr to wa_po-belnr,
                  wa_rbkp-bldat to wa_po-bldat,
                  wa_rbkp-RMWWR to wa_po-RMWWR,
                  WA_RBKP-WMWST1 TO WA_PO-WMWST1.
         endif.
           read table it_bseg into wa_bseg with key
                         ebeln = wa_rseg-ebeln
                         bukrs = wa_rseg-bukrs.
           if sy-subrc eq 0.
             move wa_bseg-belnr to wa_po-belnr_d.
           endif.
    *    read table it_bkpf into wa_bkpf
    *    with key belnr = wa_ekbe-belnr.
    *    read table it_bseg into wa_bseg
    *    with key belnr = wa_bkpf-belnr.
    CLEAR wa_bsik.
    clear it_bsik.
         read table it_bsik into wa_bsik
         with key belnr = wa_bkpf-belnr.
    *    if wa_bsik-shkzg = 'H'.
    *     wa_bsik-DMBTR = wa_bsik-DMBTR * 1.
    *     endif.
           if sy-subrc eq 0.
             move : wa_bsik-belnr to wa_po-belnr,
                     wa_bsik-DMBTR to wa_po-DMBTR.
            endif.
    *    clear wa_bsik.
    *    read table it_bsik into wa_bsik
    *               with key  belnr = wa_bseg-belnr.
    *    if sy-subrc eq 0.
    *        move : wa_bsik-DMBTR to wa_po-DMBTR.
    *    endif.
    *clear wa_bsak.
    *    read table it_bsak into wa_bsak
    *               with key  belnr = wa_bseg-belnr.
    *    if sy-subrc eq 0.
    *        move : wa_bsak-DMBTR_C to wa_po-DMBTR_C.
    *    endif.
    *clear : wa_rbkp.
    *loop at it_bsik into wa_bsik.
    *read table it_bsik into wa_bsik with key belnr = wa_rbkp-belnr.
    *if sy-subrc eq 0.
    *  move : wa_bsik-DMBTR to wa_po-DMBTR.
    *    endif.
    *endloop.
    *********Assign Vendor,PO Date*********
         clear wa_ekko.
         read table it_ekko into wa_ekko
                    with key ebeln = wa_po-ebeln.
         if sy-subrc eq 0.
           move:wa_ekko-lifnr to wa_po-lifnr,
                wa_ekko-bedat to wa_po-bedat.
         endif.
    *clear wa_ekko.
    *read table it_ekko into wa_ekko
    *with key lifnr = wa_po-lifnr.
    *if sy-subrc eq 0.
    *  move: wa_bsik-DMBTR to wa_po-DMBTR.
    *  endif.
    *    call function 'ZSD_BATCH_CLASSIFICATION_DATA'
    *      exporting
    **        ch_charg                   = wa_po-charg
    *        ch_matnr                   = wa_po-matnr
    *        ch_werks                   = wa_po-werks
    *      tables
    *        cl_data                    = it_cl_data
    **       I_SEL_CHARACTERISTIC       =
         loop at it_cl_data into wa_cl_data.
           if wa_cl_data-ausp1 ne '?'.
             if wa_cl_data-atnam eq 'THICKNESS'.
               move wa_cl_data-ausp1 to wa_po-thick.
             elseif wa_cl_data-atnam eq 'LENGTH'.
               move wa_cl_data-ausp1 to wa_po-length.
             elseif wa_cl_data-atnam eq 'WIDTH'.
               move wa_cl_data-ausp1 to wa_po-width.
             elseif wa_cl_data-atnam eq 'GRADE'.
               move wa_cl_data-ausp1 to wa_po-grade.
             endif.
           endif.
         endloop.
         modify it_po from wa_po index c_index.
         clear :c_grmenge,wa_po,wa_ekpo,wa_mseg,c_index.
       endloop.
    endform.                    " SETDATA
    *&      Form  FIELDCAT
    *       text
    *  -->  p1        text
    *  <--  p2        text
    form fieldcat .
       perform buildfields using '1' 'BANFN'  'IT_PO' 'PR Number' '' ''.
    *  perform buildfields using '2' 'BNFPO'  'IT_PO' 'PR Item Number' '' ''.
       perform  buildfields using '2' 'KNTTP' 'IT_PO' 'A/c Assignment Cat' '' ''.
       perform  buildfields using '2' 'PSTYP' 'IT_PO' 'Item Cat' '' ''.
       perform buildfields using '3' 'EKGRP'  'IT_PO' 'Purchase Group' '' ''.
       perform buildfields using '4' 'BADAT'  'IT_PO' 'Request Date' '' ''.
       perform buildfields using '5' 'MENGE'  'IT_PO' 'PR Quantity'  'X' ''.
       perform buildfields using '6' 'MEINS'  'IT_PO' 'PR Unit' '' ''.
       perform buildfields using '7' 'LIFNR'  'IT_PO' 'Vendor Number' '' ''.
       perform buildfields using '8' 'EBELN'  'IT_PO' 'Purchasing Doc No' '' ''  .
       perform buildfields using '9' 'BEDAT'  'IT_PO' 'PO Date' '' ''.
       perform buildfields using '10' 'MTART' 'IT_PO' 'Material Type' '' ''.
       perform buildfields using '11' 'MATKL' 'IT_PO' 'Material Group' '' ''.
       perform buildfields using '12' 'MATNR' 'IT_PO' 'Material Number' '' ''.
       perform buildfields using '13' 'TXZ01' 'IT_PO' 'Material Desc' '' ''.
       perform buildfields using '18' 'MENGE1' 'IT_PO' 'PO Quantity' 'X' ''.
       perform buildfields using '19' 'MEINS' 'IT_PO' 'PO Unit' '' ''.
       perform buildfields using '20' 'NETPR' 'IT_PO' 'Net Price' '' ''.
       perform buildfields using '21' 'PEINH' 'IT_PO' 'Price Unit' '' ''.
       perform buildfields using '22' 'MBLNR' 'IT_PO' 'GR Number' '' ''.
       perform buildfields using '23' 'MENGE2' 'IT_PO' 'GR Quantity' 'X' ''.
       perform buildfields using '24' 'MEINS2' 'IT_PO' 'GR Unit' '' ''.
       perform buildfields using '25' 'BELNR' 'IT_PO' 'Invoice doc. number' '' ''.
       perform buildfields using '26' 'BLDAT' 'IT_PO' 'Invoice Date' '' ''.
    *  perform buildfields using '26' 'BELNR_D' 'IT_POP' 'A/C Doc. No.' '' ''.
    *  perform buildfields using '26' 'AUGBL' 'IT_PO' 'Clearing Doc No.' '' ''.
       perform buildfields using '26' 'DMBTR' 'IT_PO' 'OPEN AMOUNT' '' ''.
      perform buildfields using '26' 'DMBTR' 'IT_PO' 'clear AMOUNT' '' ''.
    *  perform buildfields using '26' 'DMBTR_C' 'IT_PO' 'Clear balance' '' ''.
       if ch_bal = 'X'.
         perform buildfields using '27' 'BALQTY' 'IT_PO' 'Balance Quantity'
         'X' ''.
       endif.
       perform buildfields using '26' 'WMWST1' 'IT_PO' 'TOTAL TAX ADDED' 'X' ''.
       perform buildfields using '26' 'RMWWR' 'IT_PO' 'TOTAL AMOUNT IN INVOICE' 'X' ''.
    endform.                    " FIELDCAT
    *&      Form  BUILDFIELDS
    *       text
    *      -->P_0449   text
    *      -->P_0450   text
    *      -->P_0451   text
    *      -->P_0452   text
    form buildfields  using    value(p_col_pos) like sy-cucol
                                value(p_fldname) type slis_fieldname
                                value(p_tabname) type slis_tabname
                                value(p_reptext) like dd03p-reptext
                                value(p_do_sum) type char1
                                value(hotspot) type char1.
       wa_fcat-col_pos = p_col_pos.
       wa_fcat-fieldname = p_fldname.
       wa_fcat-tabname = p_tabname.
       wa_fcat-reptext_ddic = p_reptext.
       wa_fcat-do_sum = p_do_sum.
       wa_fcat-hotspot = hotspot.
       append wa_fcat to it_fcat.
       clear wa_fcat.
    endform.                    " BUILDFIELDS
    *&      Form  DISPLAY
    form display .
       clear wa_layout.
       wa_layout-zebra = 'X'.
       wa_layout-colwidth_optimize = 'X'.
    * wa_layout-box_fieldname     = 'SEL'.
    * wa_layout-edit = 'X'.
       perform build_sort using 'BANFN' '1' 'X'.
       call function 'REUSE_ALV_GRID_DISPLAY'
        exporting
    *   I_INTERFACE_CHECK                 = ' '
    *   I_BYPASSING_BUFFER                = ' '
    *   I_BUFFER_ACTIVE                   = ' '
          i_callback_program               = sy-cprog
    *   I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = 'USER_COMMAND '
          i_callback_top_of_page           = 'TOP_OF_PAGE'
    *   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
    *   I_CALLBACK_HTML_END_OF_LIST       = ' '
    *   I_STRUCTURE_NAME                  =
        i_background_id                   = 'ALV_BACKGROUND'
    *   I_GRID_TITLE                      =
    *   I_GRID_SETTINGS                   =
          is_layout                        = wa_layout
          it_fieldcat                      = it_fcat
    *   IT_EXCLUDING                      =
    *   IT_SPECIAL_GROUPS                 =
         it_sort                           = it_sort
    *   IT_FILTER                         =
    *   IS_SEL_HIDE                       =
    *   I_DEFAULT                         = 'X'
        I_SAVE                            = 'A'
    *   IS_VARIANT                        =
    *   IT_EVENTS                         =
    *   IT_EVENT_EXIT                     =
    *   IS_PRINT                          =
    *   IS_REPREP_ID                      =
    *   I_SCREEN_START_COLUMN             = 0
    *   I_SCREEN_START_LINE               = 0
    *   I_SCREEN_END_COLUMN               = 0
    *   I_SCREEN_END_LINE                 = 0
    *   I_HTML_HEIGHT_TOP                 = 0
    *   I_HTML_HEIGHT_END                 = 0
    *   IT_ALV_GRAPHICS                   =
    *   IT_HYPERLINK                      =
    *   IT_ADD_FIELDCAT                   =
    *   IT_EXCEPT_QINFO                   =
    *   IR_SALV_FULLSCREEN_ADAPTER        =
    * IMPORTING
    *   E_EXIT_CAUSED_BY_CALLER           =
    *   ES_EXIT_CAUSED_BY_USER            =
         tables
           t_outtab                          = it_po[]
      exceptions
        program_error                     = 1
        others                            = 2
       if sy-subrc <> 0.
         message id sy-msgid type sy-msgty number sy-msgno
                 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       endif.
    endform.                    " DISPLAY
    *&      Form  top_of_page
    *       text
    form top_of_page.                                           "#EC *
    **********Create report header*********
       refresh it_lshead.
       clear wa_lshead.
    **********To display date in header*********
    *  write: s_badat-low to c_low dd/mm/yyyy,s_badat-high to c_high
    *  dd/mm/yyyy.
    *  if s_badat-high is initial.
    *    concatenate 'Dated on' c_low into c_date separated by space.
    *  else.
    *    concatenate 'Dated between' c_low 'and' c_high into c_date separated
    *    by space.
    *  endif.
       wa_lshead-typ = 'H'.
       wa_lshead-info = 'PR To Payment History'.
    *  'Pending Indents History -

    We had a requirement to retrieve "aging of receiveables" by customer. Basically, it goes thru each record and depending on the due date places the amounts in the following buckets (example). 0-30 day Overdue, 31-60 days Overdue, 61-90 days overdue, 30+ days overdue, 60+ days overdue) etc all the way to 6+ years overdue.
    There are also cooresponding buckets for coming due analysis. For example, what is: 0-30 days coming due, 31-60 days coming due, 30+ days coming due, etc...
    To do this, first I needed to be able be able to produce an open items statement at any given time in the past. Now, this seems impossible because of how the items go from open to cleared all the time. And an item that was open one month ago, may not be open anymore.
    What I did was first remove any selections on item status. Then compare the posting date with teh key date in the past, if the posting date is less than or equal to the key date, keep the record.
    Then compare the clearing date with the key date. First, keep all that are #. (This keeps all records still open from that posting date/key date)
    Then, add another check for all items that were cleared after the key date (GT Key Date). This gives you the open items on that date.
    Hope that makes sense. Let me know if you want clarification.
    /smw

  • Not Able to Generate Out of the Report by adding the new 2 fields

    Hi,
    I'm Very new to ABAP. I have created one report. after 2 new fields added they are EKNAM and EKGRP.
    The Thing is the remaining fields are displaying in the output. The Newly added fields are not displaying the out. I was able to add this 2 fields in the head of the report. But issue is not able to get the data on these 2 fields.
    Please see the below program and any one please help me out to display the data in this report for the fields eknam and ekgrp.
    TABLES: eban,
            lfa1,
            ekko,
            t024,
            v_username.
    DATA: BEGIN OF i_req_items OCCURS 10,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            ebeln LIKE eban-ebeln,         "PO Number
            ebelp LIKE eban-ebelp,         "PO Item
            eknam LIKE t024-eknam,         "Pur.Grp Name
            ekgrp LIKE t024-ekgrp,         "Pur.Grp Number
            flief LIKE eban-flief,         "Fixed vendor
            name1 LIKE lfa1-name1,         "Vendor name
            badat LIKE eban-badat,         "Creation date
            erdat LIKE eban-erdat,         "Change date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            bsart LIKE eban-bsart,         "Document type
            knttp LIKE eban-knttp,         "Acct.assgmt category
            txz01 LIKE eban-txz01,         "PO item description
            menge LIKE eban-menge,         "Quantity
            preis LIKE eban-preis,         "Price
            peinh LIKE eban-peinh,         "Price unit
            value(14) TYPE p DECIMALS 2,   "Item Value
          END OF i_req_items.
    DATA: BEGIN OF i_reqs OCCURS 10,
            ernam LIKE eban-ernam,         "Created by
            persn LIKE usr21-persnumber,   "Person number
            uname LIKE adrp-name_text,     "User name
            lifnr LIKE eban-lifnr,         "Vendor
            name1 LIKE lfa1-name1,         "Vendor name
            badat LIKE eban-badat,         "Creation date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            bsart LIKE eban-bsart,         "Document type
            knttp LIKE eban-knttp,         "Acct.assgmt category
            txz01 LIKE eban-txz01,         "PO item description
            eknam like t024-eknam,         "Purchase Grp Name
            ekgrp like t024-ekgrp,         "Purchase Grp Number
            value(14) TYPE p DECIMALS 2,   "Item Value
          END OF i_reqs.
    DATA: BEGIN OF i_req_keys OCCURS 0,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            erdat LIKE eban-erdat,         "Create or Change date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            eknam like t024-eknam,         "Purchase Grp Name
            ekgrp like t024-ekgrp,         "Purchase Grp number
          END OF i_req_keys.
    DATA: BEGIN OF i_req_keeper OCCURS 0,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            banfn LIKE eban-banfn,         "Requisition no
          END OF i_req_keeper.
    DATA: wa_reqitems LIKE i_req_items.
    DATA: BEGIN OF i_export OCCURS 10,
           record(150) TYPE c,
          END OF i_export.
    CONSTANTS
    CONSTANTS:
          c_doccat       LIKE eban-bstyp  VALUE 'B',
          c_creind       LIKE eban-estkz  VALUE 'R',
          c_delflag      LIKE eban-loekz  VALUE 'L',
          c_write(5)     TYPE c   VALUE 'WRITE',
          c_slash(1)     TYPE c   VALUE '/',
    *start ESPZC U8DK900439
         c_delimiter    TYPE x   VALUE '09',
           c_delimiter    TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
    *end ESPZC U8DK900439
          c_sc(1)        TYPE c   VALUE ';',
          c_x(1)         TYPE c   VALUE 'X',
          c_usd(1)       TYPE c   VALUE '2',
          c_export LIKE authb-filename VALUE '/BAY2/UBEM_SPLIT_REQS'.
    WORKING VARIABLES
    DATA: w_report_id   LIKE syst-repid,
          w_sttime      LIKE syst-uzeit,
          w_rpt_pagno   LIKE syst-pagno,
          w_rc          LIKE sy-subrc,
          w_datelow     LIKE eban-badat,
          w_datehigh    LIKE eban-badat,
          w_export      LIKE c_export,
          w_records     TYPE i,
          w_message(50) TYPE c.
    TYPES number TYPE i.
    SELECTION SCREEN / PARAMETERS
    SELECTION-SCREEN BEGIN OF BLOCK org WITH FRAME TITLE text-001.
    PARAMETERS: p_purorg LIKE eban-ekorg OBLIGATORY DEFAULT 'US02'.
    SELECT-OPTIONS: s_doctyp FOR eban-bsart,
                    s_date FOR eban-badat.
    PARAMETERS: p_timper(2) TYPE n.
    SELECTION-SCREEN: COMMENT 37(37) text-002.
    SELECTION-SCREEN END OF BLOCK org.
    SELECTION-SCREEN BEGIN OF BLOCK outp WITH FRAME TITLE text-003.
    PARAMETERS: p_onlin  RADIOBUTTON GROUP outp DEFAULT 'X',
                p_servr  RADIOBUTTON GROUP outp.
    SELECTION-SCREEN END OF BLOCK outp.
    AT SELECTION SCREEN
    AT SELECTION-SCREEN.
      IF p_servr = c_x.
        CLEAR w_rc.
        PERFORM authority_check_dataset USING    w_export
                                        CHANGING w_rc.
        IF w_rc <> 0.
          MESSAGE e532 WITH text-006 w_export.
        ENDIF.
        CLEAR w_rc.
        PERFORM verify_unix_path_and_file CHANGING w_rc.
        IF w_rc <> 0.
          MESSAGE e531 WITH w_message.
        ENDIF.
      ENDIF.
      INITIALIZATION EVENT
    INITIALIZATION.
      PERFORM get_filename.
      MOVE  syst-uzeit  TO   w_sttime.
      MOVE  syst-repid  TO   w_report_id.
      CLEAR: w_rpt_pagno.
    START-OF-SELECTION.
      PERFORM get_data.
      IF p_onlin = c_x.
        IF w_records GT 0.
          PERFORM print_report_header.
          PERFORM write_report.
        ELSE.
          MESSAGE i531 WITH text-007.
        ENDIF.
      ELSEIF p_servr = c_x.
        PERFORM write_export.
      ENDIF.
    END-OF-SELECTION.
    ---- F O R M   R O U T I N E S -
    *&     FORM get_filename
    FORM get_filename.
      CALL FUNCTION 'FILE_GET_NAME'
        EXPORTING
          logical_filename = c_export
        IMPORTING
          file_name        = w_export
        EXCEPTIONS
          file_not_found   = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
      ENDIF.
    ENDFORM.                    " get_filename
      FORM authority_check_dataset
    FORM authority_check_dataset USING    p_filename
                                 CHANGING p_rc.
      CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
        EXPORTING
          activity         = c_write
          filename         = p_filename
        EXCEPTIONS
          no_authority     = 1
          activity_unknown = 2
          OTHERS           = 3.
      p_rc = sy-subrc.
    ENDFORM.                    "authority_check_dataset
        FORM verify_unix_path_and_file
    FORM verify_unix_path_and_file CHANGING p_rc.
    *start ESPZC U8DK900439
    OPEN DATASET w_export FOR OUTPUT IN TEXT MODE
         MESSAGE w_message.
      OPEN DATASET w_export FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
          MESSAGE w_message.
    *end ESPZC U8DK900439
      p_rc = sy-subrc.
    ENDFORM.                    "verify_unix_path_and_file
      FORM get_data
    FORM get_data.
      CLEAR w_datelow.
      CLEAR w_datehigh.
      w_datelow = s_date-low - p_timper.
    w_datehigh = s_date-high + p_timper.
      w_datehigh = s_date-high.
      SELECT ernam lifnr ebeln ebelp flief badat erdat banfn bnfpo bsart
            knttp menge preis peinh txz01
       FROM eban
       INTO CORRESPONDING FIELDS OF TABLE i_req_items
          WHERE bstyp = c_doccat
            AND estkz = c_creind
            AND knttp <> space
            AND bsart IN s_doctyp
            AND loekz <> c_delflag
            AND ekorg EQ p_purorg
           AND ( ( badat BETWEEN w_datelow and w_datehigh ) OR
            ( erdat BETWEEN w_datelow AND w_datehigh ) ).
            AND  erdat BETWEEN w_datelow AND w_datehigh.
      IF sy-subrc = 0.
        LOOP AT i_req_items.
          IF i_req_items-lifnr IS INITIAL.
            IF NOT i_req_items-flief IS INITIAL.
              MOVE i_req_items-flief TO i_req_items-lifnr.
              MODIFY i_req_items.
            ENDIF.
            IF NOT i_req_items-ebeln IS INITIAL.
              SELECT lifnr FROM ekko
                  INTO i_req_items-lifnr
                  WHERE ebeln = i_req_items-ebeln.
              ENDSELECT.
              MODIFY i_req_items.
            ENDIF.
          ENDIF.
          IF i_req_items-erdat GT i_req_items-badat.
            MOVE i_req_items-erdat TO i_req_items-badat.
            MODIFY i_req_items.
          ENDIF.
        ENDLOOP.
        PERFORM weed_out_unique_records.
        PERFORM apply_time_period.
        SORT i_req_items BY ernam lifnr banfn bnfpo.
        LOOP AT i_req_items.
          i_req_items-value = ( i_req_items-menge *
               ( i_req_items-preis / i_req_items-peinh ) ).
          MODIFY i_req_items.
        ENDLOOP.
    Getting vendor name from table LFA1 -
        CLEAR i_req_items.
        LOOP AT i_req_items.
          SELECT SINGLE name1 FROM lfa1
            INTO i_req_items-name1
              WHERE lifnr = i_req_items-lifnr.
          MODIFY i_req_items.
        ENDLOOP.
        LOOP AT i_req_items.
          MOVE-CORRESPONDING i_req_items TO i_reqs.
    Getting user name from view v_username -
          SELECT SINGLE name_text
           FROM v_username INTO i_reqs-uname
          WHERE bname = i_reqs-ernam.
          APPEND i_reqs.
        ENDLOOP.
      ENDIF.
      DESCRIBE TABLE i_reqs LINES w_records.
    ENDFORM.                        "Get_data
      FORM print_report_header
    FORM print_report_header.
      ADD  1   TO   w_rpt_pagno.
      CALL FUNCTION '/BAY2/UBEXBH_BAYER_HEADR_FUN'
        EXPORTING
          f_jobname        = text-020
          f_business_group = text-021
          f_report_title   = text-022
          f_repid          = w_report_id
          f_sysid          = syst-sysid
          f_linsz          = syst-linsz
          f_pagno          = w_rpt_pagno
          f_mandt          = syst-mandt
          f_datum          = syst-datum
          f_uzeit          = w_sttime.
      FORMAT COLOR COL_HEADING.
      WRITE:  /1     text-010,      "Created by CWID & user name
              29     text-011,      "Vendor #
              38     text-012,      "Vendor Name
              69     text-013,      "Req Number
              79     text-014,      "/Item
              87     text-015,      "Created On
              98     text-017,      "A (AcctAssgmtCat)
             100(14) text-019 RIGHT-JUSTIFIED,  "Item Value
             116(30) text-018,      "Item Description
             148     text-030,      "Pur.Grp Name
             170     text-031.      "Pur.Grp Number
      FORMAT COLOR OFF.
      ULINE.
    ENDFORM.                             "print_report_header
    *&      Form  WRITE_REPORT
    FORM write_report.
      LOOP AT i_reqs.
        WRITE: /1 i_reqs-ernam,
                9(18) i_reqs-uname,
               29 i_reqs-lifnr,
               38(30) i_reqs-name1,
               69 i_reqs-banfn,
               79 c_slash,
               80 i_reqs-bnfpo,
               87 i_reqs-badat,
               98 i_reqs-knttp,
              100(14) i_reqs-value CURRENCY c_usd,
              116(30) i_reqs-txz01,
              145 i_reqs-eknam,
              160 i_reqs-ekgrp.
      ENDLOOP.
    ENDFORM.                    "write_report
    *&      Form  WRITE_EXPORT
    FORM write_export.
      DATA: l_value(14)    TYPE c,
            l_bsart(100)   TYPE c,
            l_uname(7)     TYPE c,
            l_records(5)   TYPE c,
            l_header(150)  TYPE c,
            l_params(150)  TYPE c,
            i_char         TYPE i.
      LOOP AT i_reqs.
        CLEAR l_value.
        CLEAR l_uname.
        l_value = i_reqs-value.
        l_uname = sy-uname.
        CONCATENATE: i_reqs-uname
                     i_reqs-ernam
                     i_reqs-lifnr
                     i_reqs-name1
                     i_reqs-banfn
                     i_reqs-bnfpo
                     i_reqs-badat
                     i_reqs-knttp
                     l_value
                     i_reqs-txz01 INTO i_export
                                  SEPARATED BY c_delimiter.
        APPEND i_export.
      ENDLOOP.
      CONCATENATE: text-008   "Created By Name
                   text-009   "CWID
                   text-011   "Vendor No
                   text-012   "Vendor Name
                   text-013   "Req Number
                   text-023   "Item
                   text-015   "Created On
                   text-017   "A
                   text-019   "Item Value
                   text-018   "Item Description
                   text-030   "Purchase Grp name
                   text-031   "Purchase Grp number
                   INTO l_header SEPARATED BY c_delimiter.
      INSERT l_header INTO i_export INDEX 1.
      IF sy-batch IS INITIAL.
        MOVE sy-uname TO l_uname.
      ELSE.
        MOVE text-024 TO l_uname.
      ENDIF.
      PERFORM collect_bsart CHANGING l_bsart
                                     i_char.
      l_records = w_records.
      CONCATENATE: sy-sysid
                   p_purorg
                   l_bsart(i_char)
                   s_date-low
                   s_date-high
                   p_timper
                   l_uname
                   sy-datum
                   l_records INTO l_params
                             SEPARATED BY c_delimiter.
      INSERT l_params INTO i_export INDEX 1.
      LOOP AT i_export.
        CONDENSE i_export NO-GAPS.
        TRANSFER i_export TO w_export.
      ENDLOOP.
      CLOSE DATASET w_export.
      MESSAGE s533 WITH text-028 w_export text-029.
    ENDFORM.                    "write_export
    *&      FORM collect_bsart
    FORM collect_bsart CHANGING p_bsart
                                p_char.
      CLEAR p_bsart.
      LOOP AT s_doctyp.
        IF sy-tabix = 1.
          p_bsart = s_doctyp-low.
        ELSE.
          CONCATENATE: p_bsart c_sc s_doctyp-low INTO p_bsart.
        ENDIF.
      ENDLOOP.
      CONDENSE p_bsart NO-GAPS.
      p_char = strlen( p_bsart ).
    ENDFORM.                      "collect_bsart
    *&      Form  WEED_OUT_UNIQUE_RECORDS
    FORM weed_out_unique_records.
      DATA: i_l_req_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
      DATA: i_l_req_final_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
      DATA: l_count TYPE i,
            l_sy_tabix LIKE sy-tabix,
            l_banfn    LIKE eban-banfn.
      REFRESH i_l_req_items.
      REFRESH i_l_req_final_items.
      CLEAR l_banfn.
      i_l_req_items[]       = i_req_items[].
      i_l_req_final_items[] = i_req_items[].
      SORT i_req_items         BY ernam lifnr.
      SORT i_l_req_items       BY ernam lifnr.
      SORT i_l_req_final_items BY ernam lifnr.
      LOOP AT i_l_req_items.
        l_banfn = i_l_req_items-banfn.
        CLEAR l_count.
        LOOP AT i_req_items
            WHERE ernam = i_l_req_items-ernam
              AND lifnr = i_l_req_items-lifnr.
          IF i_req_items-banfn <> l_banfn.
            ADD +1 TO l_count.
          ENDIF.
        ENDLOOP.
        IF NOT ( l_count > 0 ).
          LOOP AT i_l_req_final_items
            WHERE ernam = i_l_req_items-ernam
              AND lifnr = i_l_req_items-lifnr.
            DELETE i_l_req_final_items.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
      REFRESH i_req_items.
      i_req_items[] = i_l_req_final_items[].
    ENDFORM.                    " WEED_OUT_UNIQUE_RECORDS
    *&      Form  APPLY_TIME_PERIOD
    FORM apply_time_period.
      DATA: l_i_req_keys LIKE i_req_keys.
      DATA: l_days_diff          TYPE p,
            l_no_of_key_recs     TYPE i,
            l_next_item          LIKE sy-tabix,
            l_finished_with_keys TYPE c VALUE 'N',
            l_add_line           TYPE c VALUE 'N',
            l_count              TYPE i,
            l_req_ernam          LIKE eban-ernam,
            l_req_lifnr          LIKE lfa1-lifnr,
            l_req_banfn          LIKE eban-banfn,
            l_save_tabix         like sy-tabix.
      REFRESH: i_req_keys, i_req_keeper.
      LOOP AT i_req_items.
        MOVE-CORRESPONDING i_req_items TO
                           i_req_keys.
        IF i_req_items-erdat IS INITIAL.
          i_req_keys-erdat = i_req_items-badat.
        ENDIF.
        APPEND i_req_keys.
      ENDLOOP.
      SORT i_req_keys BY ernam lifnr erdat.
      CLEAR l_no_of_key_recs.
      DESCRIBE TABLE i_req_keys LINES l_no_of_key_recs.
      LOOP AT i_req_keys.
        IF l_add_line = 'Y'.
          MOVE-CORRESPONDING i_req_keys
                          TO i_req_keeper.
          APPEND i_req_keeper.
          l_add_line = 'N'.
        ENDIF.
        IF l_finished_with_keys = 'Y'.
          EXIT.
        ENDIF.
        CLEAR l_next_item.
        l_save_tabix = sy-tabix.
        COMPUTE l_next_item = sy-tabix + 1.
        IF l_next_item = l_no_of_key_recs.
          l_finished_with_keys = 'Y'.
        ENDIF.
        clear: l_i_req_keys.
        READ TABLE i_req_keys INDEX l_next_item
            INTO l_i_req_keys.
        sy-tabix = l_save_tabix.
        CLEAR l_days_diff.
        l_days_diff = l_i_req_keys-erdat -
                      i_req_keys-erdat.
        IF l_i_req_keys-ernam  =
           i_req_keys-ernam                  AND
           l_i_req_keys-lifnr  =
           i_req_keys-lifnr                  AND
           l_i_req_keys-banfn  <>
           i_req_keys-banfn                  AND
           l_days_diff         <= p_timper.
          MOVE-CORRESPONDING i_req_keys
                          TO i_req_keeper.
          APPEND i_req_keeper.
          l_add_line = 'Y'.
        ENDIF.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM i_req_keeper
                            COMPARING ALL FIELDS.
      SORT i_req_keeper BY ernam lifnr banfn.
      LOOP AT i_req_items.
        CLEAR l_count.
        CLEAR: l_req_ernam,
               l_req_lifnr,
               l_req_banfn.
        l_req_ernam = i_req_items-ernam.
        l_req_lifnr = i_req_items-lifnr.
        l_req_banfn = i_req_items-banfn.
        LOOP AT i_req_keeper
            WHERE ernam = i_req_items-ernam
              AND lifnr = i_req_items-lifnr
              AND banfn = i_req_items-banfn.
          ADD +1 TO l_count.
        ENDLOOP.
        IF NOT ( l_count > 0 ).
          LOOP AT i_req_items
            WHERE ernam = l_req_ernam
              AND lifnr = l_req_lifnr
              AND banfn = l_req_banfn.
            DELETE i_req_items.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " APPLY_TIME_PERIOD

    Rajesh,
    Put a breakpoint and try to debug the report step by step.
    You will findout the reason very easily.
    Whenever you have a select and are trying to append into an internal table, keep checking your internal table if it is been populated with the correct records.
    This way, you will findout the cause and can correct is accordingly.
    Thanks,
    Suresh Ganti

  • PO number and PO qunatity for a given WBS element

    hello all,
    in which table does PO  number and PO quantity are stored for a given WBS element...
    or do i need to use any function module....
    i need to use it in an ALV report...
    thanks in advance.....

    For service PO's or  material PO's you can get only by using PR reference.
    for  material you will be having only one PR for One material so there is no problem with Materials.
    for ref find the below screenshot
    for services number of activities comes under single PR so this is some critical to bring the datafor ref find below screenshot
    as mentioned in the screenshot all the service numbers will come under PR 40 line item so by using PR 40 you will be creating PO ,
    Pass order(NPLNR)/W.B.S.E(PS_PSP_PNR) in EBKN get  BANFN & BNFPO  pass this in EKPO for service PO's package number (PACKNO) will be updated by using this go to ESLL pass package number(PACKNO)  and take package (SUB_PACKNO) and pass in package number(PACKNO) you will get the service items for that PO
    Regards
    Ambarish

  • Hi very urgent  How to improve the performence of the program

    Hi all please tell me how to improve the performence of this program......
    REPORT z03_gil010 NO STANDARD PAGE HEADING LINE-SIZE 130.
                                 INCLUDE                                 *
    INCLUDE: z00_bci010.                   " Gestion des anomalies.
                          Déclaration des données                        *
                       Tables de la bases de données                     *
    TABLES:
            ekpo,        " Poste document d'achat.
            lfa1,        " Base fournisseurs (généralités).
            marc,        " Données division de l'article.
            z03_bw_cmp1,
            eord,        "Répertoire des sources appro. Achats
            eina,        "Fiche infos-achats - données générales
            t024,        "Groupes d'acheteurs
            tvarv.                                              "FAE17345+
                       Déclaration des données internes                  *
    Déclaration de la table interne qui permet de recuperer les mois.
    DATA: BEGIN OF itb_months OCCURS 12.
            INCLUDE STRUCTURE t247.
    DATA: END OF itb_months.
    Table pour récupération d'infos sur les divisions
    DATA: BEGIN OF itb_t001w OCCURS 0,
            werks LIKE t001w-werks,
            fabkl LIKE t001w-fabkl," Clé du calendrier d'entreprise
          END OF itb_t001w.
    Déclaration de la table interne contenant les infos sur l'adresse du
    fournisseur.
    DATA: BEGIN OF itb_adresse OCCURS 0,
            lifnr LIKE lfa1-lifnr,           " Numéro de compte fournisseur.
            name1 LIKE lfa1-name1,                              " Nom 1.
            name2 LIKE lfa1-name2,                              " Nom 2.
            name3 LIKE lfa1-name3,                              " Nom 3.
            name4 LIKE lfa1-name4,                              " Nom 4.
            stras LIKE lfa1-stras,           " N° de rue et nom de la rue.
            pstlz LIKE lfa1-pstlz,           " Code postal.
            ort01 LIKE lfa1-ort01,           " Localité.
            pfach LIKE lfa1-pfach,           " Boîte postale.
            pstl2 LIKE lfa1-pstl2,           " Code de la boîte postale.
            land1 LIKE lfa1-land1,           " Clé de pays.
            landx LIKE t005t-landx,          " Pays.
            spras LIKE lfa1-spras,           " Code langue
    END OF itb_adresse.
    Déclaration d'une table interne pour les informations sur les
    prévisions de commande.
    DATA: BEGIN OF itb_prev_cde OCCURS 0,
            werks LIKE marc-werks,            " Division
            idnlf LIKE eina-idnlf,            " ADDsde ref article frn
            lifnr LIKE eord-lifnr,            " N° fournisseur.
            ekgrp LIKE marc-ekgrp,            " Groupe d'acheteurs
            dispo LIKE marc-dispo,            " Code gestionnaire MRP
            matnr LIKE eord-matnr,            " Article.
            maktx LIKE makt-maktx,            " Désignation article.
            bstmi LIKE marc-bstmi,            " Quantité de commande.
            men00 LIKE plaf-gsmng,            " Quantité du mois en cours M.
            men01 LIKE plaf-gsmng,            " Quantité pour le mois M+1.
            men02 LIKE plaf-gsmng,            " Quantité pour le mois M+2.
            men03 LIKE plaf-gsmng,            " Quantité pour le mois M+3.
            men04 LIKE plaf-gsmng,            " Quantité pour le mois M+4.
            men05 LIKE plaf-gsmng,            " Quantité pour le mois M+5.
            men06 LIKE plaf-gsmng.            " Quantité pour le mois M+6.
    DATA: END OF itb_prev_cde.
    Structure de travail pour les commandes convernant les PFC
    DATA str_pca_pfc  LIKE itb_prev_cde.
    *add sde
    DATA str_eord_pfc  LIKE itb_prev_cde.
    Structure de travail pour les prévisons PFC
    DATA str_prev_pfc LIKE itb_prev_cde.
    Déclaration d'une table interne pour les informations sur le
    portefeuille des commandes d'achat.
    DATA: BEGIN OF itb_pca OCCURS 0,
            werks LIKE ekpo-werks,    " Division
            idnlf LIKE eina-idnlf,     " ADDsde ref article frn
            lifnr LIKE eord-lifnr,    " N° fournisseur.
            ekgrp LIKE marc-ekgrp,    " Groupe d'acheteurs
            dispo LIKE marc-dispo,    " Code gestionnaire MRP
            matnr LIKE eord-matnr,    " Article.
            maktx LIKE makt-maktx,    " Désignation article.
            ebeln LIKE ekes-ebeln,    " Numéro du document d'achat.
            ebelp LIKE ekes-ebelp,    " Numéro de poste du document d'achat.
            slfdt LIKE eket-slfdt,    " Date de livraison statistique
            eindt LIKE ekes-eindt,    " Date de livraison indiquée dans la
                                      " confirmation de la cde.
            menge LIKE ekes-menge,    " Quantité indiquée dans la confirma-
                                      " tion de la commande.
            attdu LIKE eket-wemng,    " Portefeuille fournisseur.
            netpr LIKE ekpo-brtwr,    " Prix net du document d'achat dans
                                      " la devise du document.
            rtard TYPE i,             " Retard en jours ouvres.
            wemng LIKE eket-wemng,    " Quantité de l'entrée de marchandise.
            bldat LIKE mkpf-bldat,    " Date inscrite sur la pièce/sur le
                                      " document.
            qtran LIKE ekes-menge,    " Quantité en transit.
            dtran LIKE ekes-eindt.    " Date du dernier avis de transit.
    DATA: END OF itb_pca.
    DATA: w_i TYPE i,                "Compteur
          w_i_char(1) TYPE c,        "Texte pour récupérer compteur
          w_nm_zone(20) TYPE c,      "Nom zone pour assign au field-symbols
          w_nb_j TYPE i,             "Nb de jours ouvrés jusqu'à fin mois
          w_nb_j_tot TYPE i.         "Nb de jours ouvrés du mois
    FIELD-SYMBOLS:       TYPE ANY.
    Déclaration d'une table contenant les fiches info achat.
    DATA: BEGIN OF itb_eina OCCURS 0,
            matnr LIKE eina-matnr,
            lifnr LIKE eina-lifnr,
            idfnl LIKE eina-idnlf.
    DATA: END OF itb_eina.
    Déclaration d'une table contenant les infos groupe acheteur.
    *DATA: BEGIN OF itb_t024 OCCURS 0,
           ekgrp LIKE t024-ekgrp,
           eknam LIKE t024-eknam,
           ektel LIKE t024-ektel,
           telfx LIKE t024-telfx.
    *DATA: END OF itb_t024.
    Déclaration d'une table pour le transfert du fichier.
    DATA: BEGIN OF itb_transfert OCCURS 0,
            col00(8),                 "division
            col00bis(20),             "Reference article
            col01(18),                "No article
            col02(45),                "libelle article
            col021(17),               "Groupe acheteur
            col022(13),               "gestionnaire
            col03(17),                "qte commandée ou No de commande
            col04(13),                "Mois 1 ou No poste cde
            col05(20),                "Mois 2 ou délai initial
            col06(33),                "Mois 3 ou délai négocié
            col07(13),                "Mois 4 ou qté cdée
            col08(13),                "Mois 5 ou qté attendue
            col09(13),                "Mois 6 ou Montant attendu
            col10(13),                "Mois 7 ou retard
            col11(13),                "qte partielle livree
            col12(13),                "date livraison partielle
            col13(13),                "qté en transit
            col14(13).                "date
    DATA: END OF itb_transfert.
    Déclaration d'une table contenant la liste des fournisseurs.
    DATA: BEGIN OF itb_lifnr OCCURS 0,
            werks LIKE marc-werks,
            idfnl LIKE eina-idnlf,
            lifnr LIKE eord-lifnr,
            ekgrp LIKE marc-ekgrp,
            spras LIKE lfa1-spras,
            eknam LIKE t024-eknam,
            ektel LIKE t024-ektel,
            telfx LIKE t024-telfx.
    DATA: END OF itb_lifnr.
    Déclaration d'une structure pour la selection dans la table MSEG.
    DATA : BEGIN OF itb_mseg OCCURS 0,
             mblnr LIKE mseg-mblnr,
             mjahr LIKE mseg-mjahr,
             ebeln LIKE mseg-ebeln,
             ebelp LIKE mseg-ebelp,
           END OF itb_mseg.
    déclaration d'une structure pour la selection dans EKPO.
    DATA : BEGIN OF itb_ekpo OCCURS 0,
             lifnr LIKE ekko-lifnr,
             ebeln LIKE ekpo-ebeln,
             ebelp LIKE ekpo-ebelp,
             menge LIKE ekpo-menge,
             bpumz LIKE ekpo-bpumz,
             bpumn LIKE ekpo-bpumn,
             matnr LIKE ekpo-matnr,
             werks LIKE ekpo-werks,
             netpr LIKE ekpo-netpr,
             peinh LIKE ekpo-peinh,  "Base de prix FAE17345+
             ekgrp LIKE ekko-ekgrp,   "AFT++
             dispo LIKE marc-dispo,   "AFT++
           END OF itb_ekpo.
    déclaration d'une structure pour la selection dans EKPO.
    DATA : BEGIN OF itb_ekko OCCURS 0,
             ebeln LIKE ekko-ebeln,
             lifnr LIKE ekko-lifnr,
             spras LIKE ekko-spras,
           END OF itb_ekko.
    déclaration d'une structure pour la selection dans EKES.
    DATA : BEGIN OF itb_ekes OCCURS 0,
             ebeln LIKE eket-ebeln,
             ebelp LIKE eket-ebelp,
             ebtyp LIKE ekes-ebtyp,
             eindt LIKE ekes-eindt,
             menge LIKE ekes-menge,
             dabmg LIKE ekes-dabmg,
             etens LIKE ekes-etens,
           END OF itb_ekes.
    déclaration d'une structure pour la selection dans EKET
    DATA : BEGIN OF itb_eket OCCURS 0,
             ebeln LIKE eket-ebeln,
             ebelp LIKE eket-ebelp,
             menge LIKE eket-menge,
             wemng LIKE eket-wemng,
             eindt LIKE eket-eindt,
             slfdt LIKE eket-slfdt,
           END OF itb_eket.
    déclaration d'une structure pour la selection dans MKPF.
    DATA : BEGIN OF itb_mkpf OCCURS 0,
             mblnr LIKE mkpf-mblnr,
             mjahr LIKE mkpf-mjahr,
             bldat LIKE mkpf-bldat,
           END OF itb_mkpf.
    Déclaration d'une structure pour la sélection dans EORD.
    DATA : BEGIN OF itb_eord OCCURS 0,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
             lifnr LIKE eord-lifnr,
             ekgrp LIKE marc-ekgrp,
             dispo LIKE marc-dispo,                             "DE3K924352
             disls LIKE marc-disls,
             bstfe LIKE marc-bstfe,
             bstrf LIKE marc-bstrf,
             bstmi LIKE marc-bstmi,
             bstma LIKE marc-bstma,
           END OF itb_eord.
    DATA : BEGIN OF itb_eordw OCCURS 0.
            INCLUDE STRUCTURE itb_eord.
    DATA : END OF itb_eordw.
    Déclaration d'une structure pour la sélection dans MAKT.
    DATA : BEGIN OF itb_makt OCCURS 0,
             matnr LIKE makt-matnr,
             spras LIKE makt-spras,
             maktx LIKE makt-maktx,
           END OF itb_makt.
    Déclaration d'une structure pour la sélection dans EBAN.
    DATA : BEGIN OF itb_eban OCCURS 0,
             matnr LIKE eban-matnr,
             werks LIKE eban-werks,
             flief LIKE eban-flief,
             lfdat LIKE eban-lfdat,
             menge LIKE eban-menge,
             bsmng LIKE eban-bsmng,
             webaz LIKE eban-webaz,
             ekgrp LIKE eban-ekgrp,
             ebeln LIKE eban-ebeln,
             banfn LIKE eban-banfn,
             bnfpo LIKE eban-bnfpo, "DB3K900702+
           END OF itb_eban.
    Déclaration d'une structure pour la sélection dans PLAF.
    DATA : BEGIN OF itb_plaf OCCURS 0,
             plnum LIKE plaf-plnum, "DB3K900702+
             matnr LIKE plaf-matnr,
             plwrk LIKE plaf-plwrk,
             flief LIKE plaf-flief,
             pedtr LIKE plaf-pedtr,
             gsmng LIKE plaf-gsmng,
             webaz LIKE plaf-webaz,
           END OF itb_plaf.
    Déclaration d'une structure pour la sélection dans MARC.
    DATA : BEGIN OF itb_marc OCCURS 0,
             matnr LIKE marc-matnr,
             werks LIKE marc-werks,
             disls LIKE marc-disls,
             bstrf LIKE marc-bstrf,
             bstmi LIKE marc-bstmi,
             bstma LIKE marc-bstma,
             bstfe LIKE marc-bstfe,
             ekgrp LIKE marc-ekgrp,
             dispo LIKE marc-dispo,
           END OF itb_marc.
    DATA : BEGIN OF itb_marc_eord OCCURS 0,
              matnr LIKE marc-matnr,
              werks LIKE marc-werks,
              strgr LIKE marc-strgr,   "groupe de stratégie planif
           END OF itb_marc_eord.
    DATA : BEGIN OF itb_z03_bw_cmp1 OCCURS 0,
             matnr LIKE z03_bw_cmp1-matnr,
             werks LIKE z03_bw_cmp1-werks,
             pdatu LIKE z03_bw_cmp1-pdatu,
             plnmg LIKE z03_bw_cmp1-plnmg,
           END OF itb_z03_bw_cmp1.
    Begin change BNI <DE3K937051>
    DATA : BEGIN OF itb_z03_bw_cmp2 OCCURS 0,
             matnr LIKE z03_bw_cmp2-matnr,
             werks LIKE z03_bw_cmp2-werks,
             pdatu LIKE z03_bw_cmp2-pdatu,
             plnmg LIKE z03_bw_cmp2-plnmg,
           END OF itb_z03_bw_cmp2.
    *End change BNI
    DATA : BEGIN OF str_index1,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index1.
    DATA : BEGIN OF str_index2,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index2.
    DATA : BEGIN OF str_index3_eord,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index3_eord.
    DATA : BEGIN OF str_index4,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index4.
    DATA : BEGIN OF str_index5,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index5.
    DATA : BEGIN OF str_index6,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index6.
    DATA : BEGIN OF str_index7,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index7.
    Déclaration des variables de debut et de fin de mois.
    DATA: w_debut_mois    LIKE sy-datum,
          w_debut_periode LIKE sy-datum,
          w_fin_mois      LIKE sy-datum,
          w_fin_periode   LIKE sy-datum.
    Déclaration des variables pour les dates.
    DATA: w_date0 LIKE sy-datum,
          w_date1 LIKE sy-datum,
          w_date2 LIKE sy-datum,
          w_date3 LIKE sy-datum,
          w_date4 LIKE sy-datum,
          w_date5 LIKE sy-datum,
          w_date6 LIKE sy-datum,
          w_datejour LIKE sy-datum,                             "FAE15269
          w_dat_da LIKE eban-lfdat,
          w_dat_op LIKE plaf-pedtr,
          w_mois0 LIKE t247-ltx,
          w_mois1 LIKE t247-ltx,
          w_mois2 LIKE t247-ltx,
          w_mois3 LIKE t247-ltx,
          w_mois4 LIKE t247-ltx,
          w_mois5 LIKE t247-ltx,
          w_mois6 LIKE t247-ltx,
          w_lendemain LIKE sy-datum.                            "FAE17345+
    Temoin d'un AR dans la commande d'achat.
    DATA: w_temoin_ar.
    Numéro de la confirmation de la commande
    DATA : w_etens LIKE ekes-etens.
    Déclaration des variables pour le nom des fichiers.
    DATA: w_nom_fichier LIKE rlgrap-filename,
          w_fichier LIKE rlgrap-filename,
          w_racine LIKE rlgrap-filename,
          w_file LIKE rlgrap-filename.
    Déclaration d'une table interne pour le transfert.
    DATA: BEGIN OF itb_trans OCCURS 0,
            w_ligne(320).
    DATA: END OF itb_trans.
    Déclaration d'une variable pour rechercher les enregistrements vides.
    DATA: w_compteur     TYPE i,
          w_compteur1    TYPE i,
          w_compteur2    TYPE i,
          w_retard       TYPE i,          " Retard en jours ouvres.
          w_trouve_pfc   TYPE c, "addsde
          w_trouve_pfs   TYPE c, "+DE3K937051
          w_trouve       TYPE c.
    *Index pour les LOOP
    DATA : w_index_ekpo LIKE sy-tabix,
           w_index_ekes LIKE sy-tabix,
           w_index_eket LIKE sy-tabix,
           w_index_mseg LIKE sy-tabix,
           w_index_eban LIKE sy-tabix,
           w_index_plaf LIKE sy-tabix,
           w_index_pca  LIKE sy-tabix,
           w_index_z03_bw_cmp1 LIKE sy-tabix,
           w_index_z03_bw_cmp2 LIKE sy-tabix."+DE3K937051
    RANGES : r_type_pfs   FOR marc-strgr.
    *fichier sur serveur +EDR231003
    DATA : w_chemin LIKE filename-fileintern,  "nom du fichier
           w_date_fichier(12) TYPE c,          "Date format DD_MM_AA
           w_csv(307) TYPE c.                  "ligne du fichier format CSV
    CONSTANTS: k_imputation_m LIKE eban-knttp VALUE 'M'.        "FAE19001+
                     Description de l écran de sélection                 *
                         Paramètres "UTILISATION"                        *
    Ouverture d'un block de sélection pour le(s) fournisseur(s).
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-bl1.
    Sélection division(s)
    SELECT-OPTIONS: s_werks FOR ekpo-werks.
    Sélection fournisseur(s).
    SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr OBLIGATORY.
    Sélection du Groupe d'acheteur
    *SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.   "-FAE26446
    *SELECT-OPTIONS: s_dispo FOR marc-dispo.   "-FAE26446
    SELECTION-SCREEN END OF BLOCK block1.
    FAE 26446 : ajout
    SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE text-bl3.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETER p_ekgrp RADIOBUTTON GROUP g3.
    SELECTION-SCREEN COMMENT 5(24) text-001 FOR FIELD p_ekgrp.
    SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETER p_dispo RADIOBUTTON GROUP g3.
    SELECTION-SCREEN COMMENT 5(24) text-002 FOR FIELD p_dispo.
    SELECT-OPTIONS: s_dispo FOR marc-dispo.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK block3.
    FAE 26446 : fin ajout
                           Paramètres "SYSTEME"                          *
    Saut de 2 lignes.
    SELECTION-SCREEN: SKIP 2.
    Ouverture d'un block de sélection pour l'adresse physique du fichier.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-bl2.
    PARAMETERS: p_pc       RADIOBUTTON GROUP rad1 DEFAULT 'X',  "+EDR231003
                p_fic_pc LIKE rlgrap-filename.                  "+EDR231003
    SELECTION-SCREEN SKIP.                                      "+EDR231003
    PARAMETERS     : p_serve   RADIOBUTTON GROUP rad1,          "+EDR231003
                     p_fic_se LIKE filename-fileintern          "+EDR231003
                              DEFAULT 'Z03_PREV_COMMANDES'.     "+EDR231003
    SELECTION-SCREEN END OF BLOCK block2.
                           Logique de traitement                         *
                              INITIALIZATION                             *
    INITIALIZATION.
    Date du jour
      MOVE sy-datum TO w_datejour.                              "FAE15269
    Gestion des anomalies.
      MOVE text-lb1 TO w_lb_traitement.
      PERFORM f930_init USING sy-cprog '30'.
    Fin de la gestions des anomalies.
    Récuperation des mois dans la table interne 'ITB_MONTHS'.
      CALL FUNCTION 'MONTH_NAMES_GET'
           EXPORTING
                language              = sy-langu
           TABLES
                month_names           = itb_months
           EXCEPTIONS
                month_names_not_found = 1
                OTHERS                = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    Récupération des differentes periodes.
      PERFORM f100_recuperation_date TABLES itb_months.
    Récupération du debut du mois.
      CONCATENATE sy-datlo(6) '01' INTO w_debut_mois.
      MOVE: w_debut_mois TO w_debut_periode.
    Récupération du dernier jour du mois.
      CALL FUNCTION 'LAST_DAY_OF_MONTHS'
           EXPORTING
                day_in            = sy-datlo
           IMPORTING
                last_day_of_month = w_fin_mois
           EXCEPTIONS
                day_in_no_date    = 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.
                              TOP-OF-PAGE                                *
    TOP-OF-PAGE.
      CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'
           EXPORTING
                p_linsz   = k_ligne
                p_pagno   = sy-pagno
                p_prog    = sy-cprog
                p_projet  = k_projet
                p_societe = k_societe
                p_sujet   = sy-title.
                              END-OF-PAGE                                *
    END-OF-PAGE.
                            AT SELECTION-SCREEN                          *
    FAE 26446 : ajout
    AT SELECTION-SCREEN ON BLOCK block3.
      IF NOT ( s_ekgrp IS INITIAL )
      AND  NOT ( s_dispo IS INITIAL ).
        MESSAGE e394(z03_mm).
      ENDIF.
      IF p_ekgrp = 'X'.
        IF s_ekgrp IS INITIAL.
          MESSAGE e395(z03_mm).
        ENDIF.
      ELSE.
        IF s_dispo IS INITIAL.
          MESSAGE e396(z03_mm).
        ENDIF.
      ENDIF.
    fae26446 fin ajout
    AT SELECTION-SCREEN ON BLOCK block2.
      IF p_pc = 'X'.
        IF p_fic_pc IS INITIAL.
    *Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
          MESSAGE e021(z03_mm).
        ENDIF.
      ELSE.
        IF p_fic_se IS INITIAL.
    *Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
          MESSAGE e021(z03_mm).
        ENDIF.
      ENDIF.
    Création du matchcode pour la selection du fichier local.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fic_pc.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_filename     = p_fic_pc
                def_path         = 'C:'
                mask             = text-ma1
                mode             = 'S'
                title            = text-sel
           IMPORTING
                filename         = p_fic_pc
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
      IF sy-subrc NE 0 AND sy-subrc NE 3.
        MESSAGE e032(z03_mm).
      ENDIF.
                            START-OF-SELECTION                           *
    START-OF-SELECTION.
      PERFORM select_donnees.
    =================================================
    Liste des ARTICLES impactés pour les prévisions *
    =================================================
    ===================================
    PORTEFEUILLE DE COMMANDES D'ACHAT *
    ===================================
    Construction itb_pca à partir de EKKO/EKPO.
      w_index_ekpo  = 1.
      w_index_ekes  = 1.
      w_index_eket  = 1.
      w_index_mseg  = 1.
    SORT itb_ekko BY ebeln.           "-FAE26446
      SORT itb_ekpo BY ebeln ebelp.
      SORT itb_makt BY matnr spras.
      SORT itb_eket BY ebeln ebelp.
      SORT itb_ekes BY ebeln ebelp.
      SORT itb_mseg BY ebeln ebelp.
      SORT itb_mkpf BY mblnr mjahr.
      SORT itb_marc BY matnr werks.                             "+FAE26446
    FAE 26446 remplacement
    LOOP AT itb_ekko.
       LOOP AT itb_ekpo.
               FROM w_index_ekpo.
         IF itb_ekko-ebeln = itb_ekpo-ebeln.
      LOOP AT itb_ekpo.
        READ TABLE itb_marc WITH KEY
           matnr = itb_ekpo-matnr
           werks = itb_ekpo-werks BINARY SEARCH.
        CHECK sy-subrc = 0.
    FAE 26446 fin remplacement
        itb_pca-ebeln = itb_ekpo-ebeln.
        itb_pca-ebelp = itb_ekpo-ebelp.
      itb_pca-lifnr = itb_ekko-lifnr.   "-FAE26446
        itb_pca-lifnr = itb_ekpo-lifnr.                         "+FAE26446
        itb_pca-ekgrp = itb_ekpo-ekgrp.                         "+FAE26446
        itb_pca-dispo = itb_ekpo-dispo.                         "+FAE26446
        itb_pca-matnr = itb_ekpo-matnr.
        itb_pca-werks = itb_ekpo-werks.
      Recherche du libellé article
        READ TABLE itb_makt
                   WITH KEY matnr = itb_ekpo-matnr
                            spras = text-fra
                   BINARY SEARCH.
        IF sy-subrc = 0.
          itb_pca-maktx = itb_makt-maktx.
        ELSE.
          READ TABLE itb_makt
                    WITH KEY matnr = itb_ekpo-matnr
                             spras = text-ang
                    BINARY SEARCH.
          IF sy-subrc = 0.
            itb_pca-maktx = itb_makt-maktx.
          ENDIF.
        ENDIF.
        IF NOT itb_ekpo-bpumn IS INITIAL.
          itb_pca-menge = itb_ekpo-menge * itb_ekpo-bpumz /
                                           itb_ekpo-bpumn.
        ENDIF.
      Sélect° ds la table EKES des dates de livraisons et des qtés
      en transit
        CLEAR w_temoin_ar.
        CLEAR w_etens.
        LOOP AT itb_ekes
                FROM w_index_ekes.
          IF  itb_ekes-ebeln = itb_ekpo-ebeln
          AND itb_ekes-ebelp = itb_ekpo-ebelp.
            IF itb_ekes-ebtyp = text-arn.
              itb_pca-eindt = itb_ekes-eindt.
              w_temoin_ar = 'X'.
            ELSE.
            Si c'est une qté en transit alors on recupere
            la quantité et la date.
              IF itb_ekes-dabmg < itb_ekes-menge.
                itb_pca-qtran = itb_pca-qtran + itb_ekes-menge -
                                itb_ekes-dabmg.
              ENDIF.
              IF itb_ekes-etens > w_etens.
                w_etens = itb_ekes-etens.
                itb_pca-dtran = itb_ekes-eindt.
              ENDIF.
            ENDIF.
          ELSEIF itb_ekes-ebeln > itb_ekpo-ebeln
          OR ( itb_ekes-ebeln = itb_ekpo-ebeln
          AND itb_ekes-ebelp > itb_ekpo-ebelp ).
            w_index_ekes = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
      S'il n'y a pas d'AR alors récupérat° de la date livraison dans EKET.
        LOOP AT itb_eket
                FROM w_index_eket.
          IF  itb_eket-ebeln = itb_ekpo-ebeln
          AND itb_eket-ebelp = itb_ekpo-ebelp.
            IF w_temoin_ar IS INITIAL.
              itb_pca-eindt = itb_eket-eindt.
            ENDIF.
            itb_pca-slfdt = itb_eket-slfdt.
          Calcul du portefeuille fournisseur à partir de la
          qté commandée et la qté reçue
            itb_pca-attdu = itb_pca-attdu + itb_eket-menge -
                            itb_eket-wemng.
          Calcul du montant du poste
            itb_pca-netpr = itb_ekpo-netpr * itb_pca-attdu.
            IF itb_ekpo-peinh NE 0.
              itb_pca-netpr = itb_pca-netpr / itb_ekpo-peinh.
            ENDIF.
          Calcul quantité réceptionnée.
            itb_pca-wemng = itb_pca-wemng + itb_eket-wemng.
          Calcul du retard en nombre de jours calendaires
          Le calcul du retard  ne doit pas prendre en compte
          le jour de livraison
            ADD 1 TO itb_eket-eindt.
            IF NOT itb_pca-attdu  IS INITIAL
            AND    itb_eket-eindt LT sy-datum.
            Calcul du retard en nombre de jours ouvrés
              CLEAR w_retard.
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
                   EXPORTING
                        date_deb = itb_eket-eindt
                        date_fin = sy-datum
                   IMPORTING
                        jours    = w_retard.
              itb_pca-rtard = itb_pca-rtard + w_retard .
            ENDIF.
          ELSEIF itb_eket-ebeln > itb_ekpo-ebeln
          OR (   itb_eket-ebeln = itb_ekpo-ebeln
          AND    itb_eket-ebelp > itb_ekpo-ebelp ).
            w_index_eket = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
      Recherche de la derniere date de livraison.
        LOOP AT itb_mseg
                FROM w_index_mseg.
          IF  itb_mseg-ebeln = itb_ekpo-ebeln
          AND itb_mseg-ebelp = itb_ekpo-ebelp.
            READ TABLE itb_mkpf
                       WITH KEY mblnr = itb_mseg-mblnr
                                mjahr = itb_mseg-mjahr
                       BINARY SEARCH.
            IF sy-subrc = 0.
              IF itb_mkpf-bldat > itb_pca-bldat.
                itb_pca-bldat = itb_mkpf-bldat.
              ENDIF.
            ENDIF.
          ELSEIF itb_mseg-ebeln > itb_ekpo-ebeln
          OR (   itb_mseg-ebeln = itb_ekpo-ebeln
          AND    itb_mseg-ebelp > itb_ekpo-ebelp ).
            w_index_mseg = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
        APPEND itb_pca.
        CLEAR itb_pca.
    FAE26446 suppression parag. suivant
         ELSEIF itb_ekpo-ebeln > itb_ekko-ebeln.
           w_index_ekpo = sy-tabix.
           EXIT.
         ENDIF.
       ENDLOOP.
    Fin FAE26446
      ENDLOOP.
    =========================
    PREVISIONS DE COMMANDES *
    =========================
      SORT itb_eord        BY matnr werks lifnr ekgrp.
      SORT itb_eban        BY matnr werks flief ekgrp.
      SORT itb_plaf        BY matnr plwrk flief.
      SORT itb_z03_bw_cmp1 BY matnr werks.
      SORT itb_z03_bw_cmp2 BY matnr werks."+DE3K937051
      SORT itb_pca         BY matnr werks lifnr.
      w_index_eban = 1.
      w_index_plaf = 1.
      w_index_z03_bw_cmp1 = 1.
      w_index_pca = 1.
      w_index_z03_bw_cmp2 = 1."+DE3K937051
    Remplissage de la table des prévisions de commande.
      LOOP AT itb_eord.
        CLEAR: str_prev_pfc,
               w_trouve.
        MOVE-CORRESPONDING itb_eord TO str_index1.
        MOVE-CORRESPONDING itb_eord TO str_index3_eord.
        MOVE-CORRESPONDING itb_eord TO itb_prev_cde.
      Recherche dans table division/article (MARC) afin de déterminer si
      article PFS (prod fabriqué à stock) ou PFC (Prod fabriqué sur cde)
        AT NEW werks.
          READ TABLE itb_marc_eord
                     WITH KEY matnr = itb_eord-matnr
                              werks = itb_eord-werks
                     BINARY SEARCH.
          IF sy-subrc NE 0.
            CLEAR itb_marc_eord.
          ENDIF.
        ENDAT.
    a - Prévisions pour les PFS : DA + OP *
    *Calcul des quantités de commande.
        IF itb_eord-disls = text-tl1.
          itb_prev_cde-bstmi =  itb_eord-bstfe.
        ELSEIF itb_eord-disls = text-tl2
        OR     itb_eord-disls = text-tl3.
          IF  itb_eord-bstrf NE 0
          AND itb_eord-bstmi = 0
          AND itb_eord-bstma = 0.
            itb_prev_cde-bstmi = itb_eord-bstrf.
          ELSEIF itb_eord-bstrf NE 0
          AND    itb_eord-bstmi NE 0.
            itb_prev_cde-bstmi = itb_eord-bstmi.
          ELSEIF itb_eord-bstrf = itb_eord-bstma
          AND    itb_eord-bstrf NE 0
          AND    itb_eord-bstmi = 0.
            itb_prev_cde-bstmi = itb_eord-bstma.
          ENDIF.
        ENDIF.
      si article PFS (Prod fabriqué à stock) recherche des
      demandes d'achat ou ordres planfiés
        IF itb_marc_eord-strgr IN r_type_pfs.
      Récupérat° calendrier de la division pour calcul correct lors de
      l'ajout de eban-webaz ou plaf-webaz jours ouvrés
          CLEAR w_trouve_pfs ."+DE3K937051
          READ TABLE itb_t001w
                     WITH KEY werks = itb_eord-werks
                     BINARY SEARCH.
          IF sy-subrc = 0.
            LOOP AT itb_eban
                    FROM w_index_eban.
              MOVE-CORRESPONDING itb_eban TO str_index2.
              IF str_index1 = str_index2.
                w_trouve_pfs = 'X'."+DE3K937051
              si qte commandées pour la DA  < quantité de la DA
                IF itb_eban-bsmng < itb_eban-menge.
                ajout de quantité de la DA - qte  commandée pour la DA
                  PERFORM affect_da.
                ENDIF.
              ELSEIF str_index2 > str_index1.
                w_index_eban = sy-tabix.
                EXIT.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ajout des quantité des OP (ordres planifiés)
          LOOP AT itb_plaf
                  FROM w_index_plaf.
            MOVE-CORRESPONDING itb_plaf TO str_index4.
            str_index4-werks = itb_plaf-plwrk.
          str_index4-lifnr = itb_plaf-flief.
            IF str_index4 = str_index3_eord.
            Ajout de webaz jours ouvrés à pedtr
              CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'
                   EXPORTING
                        i_date        = itb_plaf-pedtr
                        i_calendar_id = itb_t001w-fabkl
                        i_nb_days     = itb_plaf-webaz
                   IMPORTING
                        o_date        = w_dat_op
                   EXCEPTIONS
                        conv_error    = 1
                        OTHERS        = 2.
              IF sy-subrc
       If forecasts found in Z03_BW_CMP2 for the article
       IF w_trouve_pfs = 'X'."-DE3K937602
    Recalculation prev month M in fct of Nb of wrought days of the month
        IF NOT itb_prev_cde-men00 IS INITIAL.
       one does not hold any more account of the day in progress
          w_lendemain = w_date0 + 1.
          CLEAR:w_nb_j,w_nb_j_tot.         "DE3K938206+
          CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
               EXPORTING
                    date_deb = w_lendemain
                    date_fin = w_fin_mois
               IMPORTING
                    jours    = w_nb_j.
          CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
               EXPORTING
                    date  = w_lendemain
               IMPORTING
                    jours = w_nb_j_tot.
          itb_prev_cde-men00  = itb_prev_cde-men00 * w_nb_j / w_nb_j_tot
    *CLA DE3K925301 FAE27197
    *to round has the higher entirety
        itb_prev_cde-men00  = ceil( itb_prev_cde-men00 ). "DE3K938206-
        ENDIF.
       ENDIF."-DE3K937602
    *End change BNI
    b - Prévisions pour les PFC (Z03_BW_CMP1 puis rééquilibrage) *
      Recherche des previsions dans Z03_BW_CMP1
      si article PFC (Prod fabriqué sur cde) recherche des prévisions
        IF  NOT itb_marc_eord-strgr IN r_type_pfs.
          CLEAR str_prev_pfc.
          MOVE-CORRESPONDING itb_eord TO str_prev_pfc.
          CLEAR w_trouve_pfc .
          LOOP AT itb_z03_bw_cmp1
                  FROM w_index_z03_bw_cmp1.
            MOVE-CORRESPONDING itb_z03_bw_cmp1 TO str_index7.
            MOVE-CORRESPONDING itb_eord TO str_index6.
            IF str_index6 = str_index7.
          si on trouve des prévisions dans z03_bw_cmp1 pour la source
          d'appro eord alors c'est un article  PFC
              w_trouve_pfc = 'X'.
              CASE itb_z03_bw_cmp1-pdatu+0(6).
                WHEN w_date0+0(6).
                  str_prev_pfc-men00 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date1+0(6).
                  str_prev_pfc-men01 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date2+0(6).
                  str_prev_pfc-men02 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date3+0(6).
                  str_prev_pfc-men03 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date4+0(6).
                  str_prev_pfc-men04 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date5+0(6).
                  str_prev_pfc-men05 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date6+0(6).
                  str_prev_pfc-men06 = itb_z03_bw_cmp1-plnmg.
                WHEN OTHERS.
              ENDCASE.
            ELSEIF str_index7 > str_index6.
              w_index_z03_bw_cmp1 = sy-tabix.
              EXIT.
            ENDIF.
          ENDLOOP.
    *Begin change BNI
        Si des prévisions trouvées dans Z03_BW_CMP1 pour l'article
          IF w_trouve_pfc = 'X'.
          Recalcul prev mois M en fct du nb de jours ouvrés du mois
            IF NOT str_prev_pfc-men00 IS INITIAL.
            on ne tient plus compte du jour en cours
              w_lendemain = w_date0 + 1.
              CLEAR:w_nb_j,w_nb_j_tot.               "DE3K938206+
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
                   EXPORTING
                        date_deb = w_lendemain
                        date_fin = w_fin_mois
                   IMPORTING
                        jours    = w_nb_j.
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
                   EXPORTING
                        date  = w_lendemain
                   IMPORTING
                        jours = w_nb_j_tot.
              str_prev_pfc-men00 = str_prev_pfc-men00 * w_nb_j / w_nb_j_tot.
    *CLA DE3K925301 FAE27197
    *arrondir a l'entier supèrieur
              str_prev_pfc-men00 = ceil( str_prev_pfc-men00 ).
            ENDIF.
          Equilibrage PFC : commande/prévision du mois
          Recherche COMMANDES cumulées pour M à M+6
            CLEAR str_pca_pfc.
            LOOP AT itb_pca
                    FROM w_index_pca.
              MOVE-CORRESPONDING itb_pca TO str_index5.
              IF str_index5 = str_index3_eord.
                IF NOT itb_pca-menge IS INITIAL.
                  CASE itb_pca-eindt+0(6).
                    WHEN w_date0+0(6).
                      IF itb_pca-eindt >= w_date0.
                      str_pca_pfc-men00 = str_pca_pfc-men00 + itb_pca-menge.
                      ENDIF.
                    WHEN w_date1+0(6).
                      str_pca_pfc-men01 = str_pca_pfc-men01 + itb_pca-menge.
                    WHEN w_date2+0(6).
                      str_pca_pfc-men02 = str_pca_pfc-men02 + itb_pca-menge.
                    WHEN w_date3+0(6).
                      str_pca_pfc-men03 = str_pca_pfc-men03 + itb_pca-menge.
                    WHEN w_date4+0(6).
                      str_pca_pfc-men04 = str_pca_pfc-men04 + itb_pca-menge.
                    WHEN w_date5+0(6).
                      str_pca_pfc-men05 = str_pca_pfc-men05 + itb_pca-menge.
                    WHEN w_date6+0(6).
                      str_pca_pfc-men06 = str_pca_pfc-men06 + itb_pca-menge.
                  ENDCASE.
                ENDIF."NOT itb_pca-menge IS INITIAL
              ELSEIF str_index5 > str_index3_eord.
                w_index_pca = sy-tabix.
                EXIT.
              ENDIF.
            ENDLOOP."itb_pca
    *. Equilibrer commande / prévision des mois : diminuer la quantité de
    prévision de chaque mois par le portefeuille de commande client du
    mois*. Si ce solde est négatif alors lui donner la valeur 0.
            w_i = 0.
          Ajustement commandes/prévisions pour les mois M à M+6
            WHILE w_i .
            Pour un mois, SI Prévisions > Commandes en cours
              IF .
              Prévisions = Prévisions - Commandes en cours
                 = 0.
              ENDIF.
            On passe au mois suivant
              w_i = w_i + 1.
            ENDWHILE.
            MOVE str_prev_pfc-men00 TO itb_prev_cde-men00.
            MOVE str_prev_pfc-men01 TO itb_prev_cde-men01.
            MOVE str_prev_pfc-men02 TO itb_prev_cde-men02.
            MOVE str_prev_pfc-men03 TO itb_prev_cde-men03.
            MOVE str_prev_pfc-men04 TO itb_prev_cde-men04.
            MOVE str_prev_pfc-men05 TO itb_prev_cde-men05.
            MOVE str_prev_pfc-men06 TO itb_prev_cde-men06.
     

    Hi
    You check in SM50 by executing the programing, You will come to know which select is taking more time and accordingly you modify that select.
    You can do SQL trace and Run time analysis and analyse and see.
    check this and use
    1) Dont use nested select statements
    2) If possible use for all entries in addition
    3) In the where addition make sure you give all the primary key
    4) Use Index for the selection criteria.
    5) You can also use inner joins
    6) You can try to put the data from the first select statement into an Itab and then in order to select the data from the second table use for all entries in.
    7) Use the runtime analysis SE30 and SQL Trace (ST05) to identify the performance and also to identify where the load is heavy, so that you can change the code accordingly
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/5d0db4c9-0e01-0010-b68f-9b1408d5f234
    ABAP performance depends upon various factors and in devicded in three parts:
    1. Database
    2. ABAP
    3. System
    Run Any program using SE30 (performance analys) to improve performance refer to tips and trics section of SE30, Always remember that ABAP perfirmance is improved when there is least load on Database.
    u can get an interactive grap in SE30 regarding this with a file.
    also if u find runtime of parts of codes then use :
    Switch on RTA Dynamically within ABAP Code
    *To turn runtim analysis on within ABAP code insert the following code
    SET RUN TIME ANALYZER ON.
    *To turn runtim analysis off within ABAP code insert the following code
    SET RUN TIME ANALYZER OFF.
    Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
    Avoid for all entries in JOINS
    Try to avoid joins and use FOR ALL ENTRIES.
    Try to restrict the joins to 1 level only ie only for tables
    Avoid using Select *.
    Avoid having multiple Selects from the same table in the same object.
    Try to minimize the number of variables to save memory.
    The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
    Avoid creation of index as far as possible
    Avoid operators like <>, > , < & like % in where clause conditions
    Avoid select/select single statements in loops.
    Try to use 'binary search' in READ internal table. Ensure table is sorted before using BINARY SEARCH.
    Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)
    Avoid using ORDER BY in selects
    Avoid Nested Selects
    Avoid Nested Loops of Internal Tables
    Try to use FIELD SYMBOLS.
    Try to avoid into Corresponding Fields of
    Avoid using Select Distinct, Use DELETE ADJACENT
    Check the following Links
    Re: performance tuning
    Re: Performance tuning of program
    http://www.sapgenie.com/abap/performance.htm
    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
    check the below link
    http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
    See the following link if it's any help:
    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
    Check also http://service.sap.com/performance
    and
    books like
    http://www.sap-press.com/product.cfm?account=&product=H951
    http://www.sap-press.com/product.cfm?account=&product=H973
    http://www.sap-img.com/abap/more-than-100-abap-interview-faqs.htm
    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
    Performance tuning for Data Selection Statement
    http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
    Debugger
    http://help.sap.com/saphelp_47x200/helpdata/en/c6/617ca9e68c11d2b2ab080009b43351/content.htm
    http://www.cba.nau.edu/haney-j/CIS497/Assignments/Debugging.doc
    http://help.sap.com/saphelp_erp2005/helpdata/en/b3/d322540c3beb4ba53795784eebb680/frameset.htm
    Run Time Analyser
    http://help.sap.com/saphelp_47x200/helpdata/en/c6/617cafe68c11d2b2ab080009b43351/content.htm
    SQL trace
    http://help.sap.com/saphelp_47x200/helpdata/en/d1/801f7c454211d189710000e8322d00/content.htm
    CATT - Computer Aided Testing Too
    http://help.sap.com/saphelp_47x200/helpdata/en/b3/410b37233f7c6fe10000009b38f936/frameset.htm
    Test Workbench
    http://help.sap.com/saphelp_47x200/helpdata/en/a8/157235d0fa8742e10000009b38f889/frameset.htm
    Coverage Analyser
    http://help.sap.com/saphelp_47x200/helpdata/en/c7/af9a79061a11d4b3d4080009b43351/content.htm
    Runtime Monitor
    http://help.sap.com/saphelp_47x200/helpdata/en/b5/fa121cc15911d5993d00508b6b8b11/content.htm
    Memory Inspector
    http://help.sap.com/saphelp_47x200/helpdata/en/a2/e5fc84cc87964cb2c29f584152d74e/content.htm
    ECATT - Extended Computer Aided testing tool.
    http://help.sap.com/saphelp_47x200/helpdata/en/20/e81c3b84e65e7be10000000a11402f/frameset.htm
    Just refer to these links...
    performance
    Performance
    Performance Guide
    performance issues...
    Performance Tuning
    Performance issues
    performance tuning
    performance tuning
    You can go to the transaction SE30 to have the runtime analysis of your program.Also try the transaction SCI , which is SAP Code Inspector.
    1 Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
    2 Avoid for all entries in JOINS
    3 Try to avoid joins and use FOR ALL ENTRIES.
    4 Try to restrict the joins to 1 level only ie only for 2 tables
    5 Avoid using Select *.
    6 Avoid having multiple Selects from the same table in the same object.
    7 Try to minimize the number of variables to save memory.
    8 The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
    9 Avoid creation of index as far as possible
    10 Avoid operators like <>, > , < & like % in where clause conditions
    11 Avoid select/select single statements in loops.
    12 Try to use 'binary search' in READ internal table. Ensure table is sorted before using BINARY SEARCH.
    13 Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)
    14 Avoid using ORDER BY in selects
    15 Avoid Nested Selects
    16 Avoid Nested Loops of Internal Tables
    17 Try to use FIELD SYMBOLS.
    18 Try to avoid into Corresponding Fields of
    19 Avoid using Select Distinct, Use DELETE ADJACENT.
    Regards
    Anji

  • Hi how to improve performence of this program

    Hi all,
    How to improve the performence of this program.....................
    REPORT z03_gil010 NO STANDARD PAGE HEADING LINE-SIZE 130.
                                 INCLUDE                                 *
    INCLUDE: z00_bci010.                   " Gestion des anomalies.
                          Déclaration des données                        *
                       Tables de la bases de données                     *
    TABLES:
            ekpo,        " Poste document d'achat.
            lfa1,        " Base fournisseurs (généralités).
            marc,        " Données division de l'article.
            z03_bw_cmp1,
            eord,        "Répertoire des sources appro. Achats
            eina,        "Fiche infos-achats - données générales
            t024,        "Groupes d'acheteurs
            tvarv.                                              "FAE17345+
                       Déclaration des données internes                  *
    Déclaration de la table interne qui permet de recuperer les mois.
    DATA: BEGIN OF itb_months OCCURS 12.
            INCLUDE STRUCTURE t247.
    DATA: END OF itb_months.
    Table pour récupération d'infos sur les divisions
    DATA: BEGIN OF itb_t001w OCCURS 0,
            werks LIKE t001w-werks,
            fabkl LIKE t001w-fabkl," Clé du calendrier d'entreprise
          END OF itb_t001w.
    Déclaration de la table interne contenant les infos sur l'adresse du
    fournisseur.
    DATA: BEGIN OF itb_adresse OCCURS 0,
            lifnr LIKE lfa1-lifnr,           " Numéro de compte fournisseur.
            name1 LIKE lfa1-name1,                              " Nom 1.
            name2 LIKE lfa1-name2,                              " Nom 2.
            name3 LIKE lfa1-name3,                              " Nom 3.
            name4 LIKE lfa1-name4,                              " Nom 4.
            stras LIKE lfa1-stras,           " N° de rue et nom de la rue.
            pstlz LIKE lfa1-pstlz,           " Code postal.
            ort01 LIKE lfa1-ort01,           " Localité.
            pfach LIKE lfa1-pfach,           " Boîte postale.
            pstl2 LIKE lfa1-pstl2,           " Code de la boîte postale.
            land1 LIKE lfa1-land1,           " Clé de pays.
            landx LIKE t005t-landx,          " Pays.
            spras LIKE lfa1-spras,           " Code langue
    END OF itb_adresse.
    Déclaration d'une table interne pour les informations sur les
    prévisions de commande.
    DATA: BEGIN OF itb_prev_cde OCCURS 0,
            werks LIKE marc-werks,            " Division
            idnlf LIKE eina-idnlf,            " ADDsde ref article frn
            lifnr LIKE eord-lifnr,            " N° fournisseur.
            ekgrp LIKE marc-ekgrp,            " Groupe d'acheteurs
            dispo LIKE marc-dispo,            " Code gestionnaire MRP
            matnr LIKE eord-matnr,            " Article.
            maktx LIKE makt-maktx,            " Désignation article.
            bstmi LIKE marc-bstmi,            " Quantité de commande.
            men00 LIKE plaf-gsmng,            " Quantité du mois en cours M.
            men01 LIKE plaf-gsmng,            " Quantité pour le mois M+1.
            men02 LIKE plaf-gsmng,            " Quantité pour le mois M+2.
            men03 LIKE plaf-gsmng,            " Quantité pour le mois M+3.
            men04 LIKE plaf-gsmng,            " Quantité pour le mois M+4.
            men05 LIKE plaf-gsmng,            " Quantité pour le mois M+5.
            men06 LIKE plaf-gsmng.            " Quantité pour le mois M+6.
    DATA: END OF itb_prev_cde.
    Structure de travail pour les commandes convernant les PFC
    DATA str_pca_pfc  LIKE itb_prev_cde.
    *add sde
    DATA str_eord_pfc  LIKE itb_prev_cde.
    Structure de travail pour les prévisons PFC
    DATA str_prev_pfc LIKE itb_prev_cde.
    Déclaration d'une table interne pour les informations sur le
    portefeuille des commandes d'achat.
    DATA: BEGIN OF itb_pca OCCURS 0,
            werks LIKE ekpo-werks,    " Division
            idnlf LIKE eina-idnlf,     " ADDsde ref article frn
            lifnr LIKE eord-lifnr,    " N° fournisseur.
            ekgrp LIKE marc-ekgrp,    " Groupe d'acheteurs
            dispo LIKE marc-dispo,    " Code gestionnaire MRP
            matnr LIKE eord-matnr,    " Article.
            maktx LIKE makt-maktx,    " Désignation article.
            ebeln LIKE ekes-ebeln,    " Numéro du document d'achat.
            ebelp LIKE ekes-ebelp,    " Numéro de poste du document d'achat.
            slfdt LIKE eket-slfdt,    " Date de livraison statistique
            eindt LIKE ekes-eindt,    " Date de livraison indiquée dans la
                                      " confirmation de la cde.
            menge LIKE ekes-menge,    " Quantité indiquée dans la confirma-
                                      " tion de la commande.
            attdu LIKE eket-wemng,    " Portefeuille fournisseur.
            netpr LIKE ekpo-brtwr,    " Prix net du document d'achat dans
                                      " la devise du document.
            rtard TYPE i,             " Retard en jours ouvres.
            wemng LIKE eket-wemng,    " Quantité de l'entrée de marchandise.
            bldat LIKE mkpf-bldat,    " Date inscrite sur la pièce/sur le
                                      " document.
            qtran LIKE ekes-menge,    " Quantité en transit.
            dtran LIKE ekes-eindt.    " Date du dernier avis de transit.
    DATA: END OF itb_pca.
    DATA: w_i TYPE i,                "Compteur
          w_i_char(1) TYPE c,        "Texte pour récupérer compteur
          w_nm_zone(20) TYPE c,      "Nom zone pour assign au field-symbols
          w_nb_j TYPE i,             "Nb de jours ouvrés jusqu'à fin mois
          w_nb_j_tot TYPE i.         "Nb de jours ouvrés du mois
    FIELD-SYMBOLS:       TYPE ANY.
    Déclaration d'une table contenant les fiches info achat.
    DATA: BEGIN OF itb_eina OCCURS 0,
            matnr LIKE eina-matnr,
            lifnr LIKE eina-lifnr,
            idfnl LIKE eina-idnlf.
    DATA: END OF itb_eina.
    Déclaration d'une table contenant les infos groupe acheteur.
    *DATA: BEGIN OF itb_t024 OCCURS 0,
           ekgrp LIKE t024-ekgrp,
           eknam LIKE t024-eknam,
           ektel LIKE t024-ektel,
           telfx LIKE t024-telfx.
    *DATA: END OF itb_t024.
    Déclaration d'une table pour le transfert du fichier.
    DATA: BEGIN OF itb_transfert OCCURS 0,
            col00(8),                 "division
            col00bis(20),             "Reference article
            col01(18),                "No article
            col02(45),                "libelle article
            col021(17),               "Groupe acheteur
            col022(13),               "gestionnaire
            col03(17),                "qte commandée ou No de commande
            col04(13),                "Mois 1 ou No poste cde
            col05(20),                "Mois 2 ou délai initial
            col06(33),                "Mois 3 ou délai négocié
            col07(13),                "Mois 4 ou qté cdée
            col08(13),                "Mois 5 ou qté attendue
            col09(13),                "Mois 6 ou Montant attendu
            col10(13),                "Mois 7 ou retard
            col11(13),                "qte partielle livree
            col12(13),                "date livraison partielle
            col13(13),                "qté en transit
            col14(13).                "date
    DATA: END OF itb_transfert.
    Déclaration d'une table contenant la liste des fournisseurs.
    DATA: BEGIN OF itb_lifnr OCCURS 0,
            werks LIKE marc-werks,
            idfnl LIKE eina-idnlf,
            lifnr LIKE eord-lifnr,
            ekgrp LIKE marc-ekgrp,
            spras LIKE lfa1-spras,
            eknam LIKE t024-eknam,
            ektel LIKE t024-ektel,
            telfx LIKE t024-telfx.
    DATA: END OF itb_lifnr.
    Déclaration d'une structure pour la selection dans la table MSEG.
    DATA : BEGIN OF itb_mseg OCCURS 0,
             mblnr LIKE mseg-mblnr,
             mjahr LIKE mseg-mjahr,
             ebeln LIKE mseg-ebeln,
             ebelp LIKE mseg-ebelp,
           END OF itb_mseg.
    déclaration d'une structure pour la selection dans EKPO.
    DATA : BEGIN OF itb_ekpo OCCURS 0,
             lifnr LIKE ekko-lifnr,
             ebeln LIKE ekpo-ebeln,
             ebelp LIKE ekpo-ebelp,
             menge LIKE ekpo-menge,
             bpumz LIKE ekpo-bpumz,
             bpumn LIKE ekpo-bpumn,
             matnr LIKE ekpo-matnr,
             werks LIKE ekpo-werks,
             netpr LIKE ekpo-netpr,
             peinh LIKE ekpo-peinh,  "Base de prix FAE17345+
             ekgrp LIKE ekko-ekgrp,   "AFT++
             dispo LIKE marc-dispo,   "AFT++
           END OF itb_ekpo.
    déclaration d'une structure pour la selection dans EKPO.
    DATA : BEGIN OF itb_ekko OCCURS 0,
             ebeln LIKE ekko-ebeln,
             lifnr LIKE ekko-lifnr,
             spras LIKE ekko-spras,
           END OF itb_ekko.
    déclaration d'une structure pour la selection dans EKES.
    DATA : BEGIN OF itb_ekes OCCURS 0,
             ebeln LIKE eket-ebeln,
             ebelp LIKE eket-ebelp,
             ebtyp LIKE ekes-ebtyp,
             eindt LIKE ekes-eindt,
             menge LIKE ekes-menge,
             dabmg LIKE ekes-dabmg,
             etens LIKE ekes-etens,
           END OF itb_ekes.
    déclaration d'une structure pour la selection dans EKET
    DATA : BEGIN OF itb_eket OCCURS 0,
             ebeln LIKE eket-ebeln,
             ebelp LIKE eket-ebelp,
             menge LIKE eket-menge,
             wemng LIKE eket-wemng,
             eindt LIKE eket-eindt,
             slfdt LIKE eket-slfdt,
           END OF itb_eket.
    déclaration d'une structure pour la selection dans MKPF.
    DATA : BEGIN OF itb_mkpf OCCURS 0,
             mblnr LIKE mkpf-mblnr,
             mjahr LIKE mkpf-mjahr,
             bldat LIKE mkpf-bldat,
           END OF itb_mkpf.
    Déclaration d'une structure pour la sélection dans EORD.
    DATA : BEGIN OF itb_eord OCCURS 0,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
             lifnr LIKE eord-lifnr,
             ekgrp LIKE marc-ekgrp,
             dispo LIKE marc-dispo,                             "DE3K924352
             disls LIKE marc-disls,
             bstfe LIKE marc-bstfe,
             bstrf LIKE marc-bstrf,
             bstmi LIKE marc-bstmi,
             bstma LIKE marc-bstma,
           END OF itb_eord.
    DATA : BEGIN OF itb_eordw OCCURS 0.
            INCLUDE STRUCTURE itb_eord.
    DATA : END OF itb_eordw.
    Déclaration d'une structure pour la sélection dans MAKT.
    DATA : BEGIN OF itb_makt OCCURS 0,
             matnr LIKE makt-matnr,
             spras LIKE makt-spras,
             maktx LIKE makt-maktx,
           END OF itb_makt.
    Déclaration d'une structure pour la sélection dans EBAN.
    DATA : BEGIN OF itb_eban OCCURS 0,
             matnr LIKE eban-matnr,
             werks LIKE eban-werks,
             flief LIKE eban-flief,
             lfdat LIKE eban-lfdat,
             menge LIKE eban-menge,
             bsmng LIKE eban-bsmng,
             webaz LIKE eban-webaz,
             ekgrp LIKE eban-ekgrp,
             ebeln LIKE eban-ebeln,
             banfn LIKE eban-banfn,
             bnfpo LIKE eban-bnfpo, "DB3K900702+
           END OF itb_eban.
    Déclaration d'une structure pour la sélection dans PLAF.
    DATA : BEGIN OF itb_plaf OCCURS 0,
             plnum LIKE plaf-plnum, "DB3K900702+
             matnr LIKE plaf-matnr,
             plwrk LIKE plaf-plwrk,
             flief LIKE plaf-flief,
             pedtr LIKE plaf-pedtr,
             gsmng LIKE plaf-gsmng,
             webaz LIKE plaf-webaz,
           END OF itb_plaf.
    Déclaration d'une structure pour la sélection dans MARC.
    DATA : BEGIN OF itb_marc OCCURS 0,
             matnr LIKE marc-matnr,
             werks LIKE marc-werks,
             disls LIKE marc-disls,
             bstrf LIKE marc-bstrf,
             bstmi LIKE marc-bstmi,
             bstma LIKE marc-bstma,
             bstfe LIKE marc-bstfe,
             ekgrp LIKE marc-ekgrp,
             dispo LIKE marc-dispo,
           END OF itb_marc.
    DATA : BEGIN OF itb_marc_eord OCCURS 0,
              matnr LIKE marc-matnr,
              werks LIKE marc-werks,
              strgr LIKE marc-strgr,   "groupe de stratégie planif
           END OF itb_marc_eord.
    DATA : BEGIN OF itb_z03_bw_cmp1 OCCURS 0,
             matnr LIKE z03_bw_cmp1-matnr,
             werks LIKE z03_bw_cmp1-werks,
             pdatu LIKE z03_bw_cmp1-pdatu,
             plnmg LIKE z03_bw_cmp1-plnmg,
           END OF itb_z03_bw_cmp1.
    Begin change BNI <DE3K937051>
    DATA : BEGIN OF itb_z03_bw_cmp2 OCCURS 0,
             matnr LIKE z03_bw_cmp2-matnr,
             werks LIKE z03_bw_cmp2-werks,
             pdatu LIKE z03_bw_cmp2-pdatu,
             plnmg LIKE z03_bw_cmp2-plnmg,
           END OF itb_z03_bw_cmp2.
    *End change BNI
    DATA : BEGIN OF str_index1,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index1.
    DATA : BEGIN OF str_index2,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index2.
    DATA : BEGIN OF str_index3_eord,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index3_eord.
    DATA : BEGIN OF str_index4,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
          END OF str_index4.
    DATA : BEGIN OF str_index5,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index5.
    DATA : BEGIN OF str_index6,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index6.
    DATA : BEGIN OF str_index7,
             matnr LIKE eord-matnr,
             werks LIKE eord-werks,
    END OF str_index7.
    Déclaration des variables de debut et de fin de mois.
    DATA: w_debut_mois    LIKE sy-datum,
          w_debut_periode LIKE sy-datum,
          w_fin_mois      LIKE sy-datum,
          w_fin_periode   LIKE sy-datum.
    Déclaration des variables pour les dates.
    DATA: w_date0 LIKE sy-datum,
          w_date1 LIKE sy-datum,
          w_date2 LIKE sy-datum,
          w_date3 LIKE sy-datum,
          w_date4 LIKE sy-datum,
          w_date5 LIKE sy-datum,
          w_date6 LIKE sy-datum,
          w_datejour LIKE sy-datum,                             "FAE15269
          w_dat_da LIKE eban-lfdat,
          w_dat_op LIKE plaf-pedtr,
          w_mois0 LIKE t247-ltx,
          w_mois1 LIKE t247-ltx,
          w_mois2 LIKE t247-ltx,
          w_mois3 LIKE t247-ltx,
          w_mois4 LIKE t247-ltx,
          w_mois5 LIKE t247-ltx,
          w_mois6 LIKE t247-ltx,
          w_lendemain LIKE sy-datum.                            "FAE17345+
    Temoin d'un AR dans la commande d'achat.
    DATA: w_temoin_ar.
    Numéro de la confirmation de la commande
    DATA : w_etens LIKE ekes-etens.
    Déclaration des variables pour le nom des fichiers.
    DATA: w_nom_fichier LIKE rlgrap-filename,
          w_fichier LIKE rlgrap-filename,
          w_racine LIKE rlgrap-filename,
          w_file LIKE rlgrap-filename.
    Déclaration d'une table interne pour le transfert.
    DATA: BEGIN OF itb_trans OCCURS 0,
            w_ligne(320).
    DATA: END OF itb_trans.
    Déclaration d'une variable pour rechercher les enregistrements vides.
    DATA: w_compteur     TYPE i,
          w_compteur1    TYPE i,
          w_compteur2    TYPE i,
          w_retard       TYPE i,          " Retard en jours ouvres.
          w_trouve_pfc   TYPE c, "addsde
          w_trouve_pfs   TYPE c, "+DE3K937051
          w_trouve       TYPE c.
    *Index pour les LOOP
    DATA : w_index_ekpo LIKE sy-tabix,
           w_index_ekes LIKE sy-tabix,
           w_index_eket LIKE sy-tabix,
           w_index_mseg LIKE sy-tabix,
           w_index_eban LIKE sy-tabix,
           w_index_plaf LIKE sy-tabix,
           w_index_pca  LIKE sy-tabix,
           w_index_z03_bw_cmp1 LIKE sy-tabix,
           w_index_z03_bw_cmp2 LIKE sy-tabix."+DE3K937051
    RANGES : r_type_pfs   FOR marc-strgr.
    *fichier sur serveur +EDR231003
    DATA : w_chemin LIKE filename-fileintern,  "nom du fichier
           w_date_fichier(12) TYPE c,          "Date format DD_MM_AA
           w_csv(307) TYPE c.                  "ligne du fichier format CSV
    CONSTANTS: k_imputation_m LIKE eban-knttp VALUE 'M'.        "FAE19001+
                     Description de l écran de sélection                 *
                         Paramètres "UTILISATION"                        *
    Ouverture d'un block de sélection pour le(s) fournisseur(s).
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-bl1.
    Sélection division(s)
    SELECT-OPTIONS: s_werks FOR ekpo-werks.
    Sélection fournisseur(s).
    SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr OBLIGATORY.
    Sélection du Groupe d'acheteur
    *SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.   "-FAE26446
    *SELECT-OPTIONS: s_dispo FOR marc-dispo.   "-FAE26446
    SELECTION-SCREEN END OF BLOCK block1.
    FAE 26446 : ajout
    SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE text-bl3.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETER p_ekgrp RADIOBUTTON GROUP g3.
    SELECTION-SCREEN COMMENT 5(24) text-001 FOR FIELD p_ekgrp.
    SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETER p_dispo RADIOBUTTON GROUP g3.
    SELECTION-SCREEN COMMENT 5(24) text-002 FOR FIELD p_dispo.
    SELECT-OPTIONS: s_dispo FOR marc-dispo.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK block3.
    FAE 26446 : fin ajout
                           Paramètres "SYSTEME"                          *
    Saut de 2 lignes.
    SELECTION-SCREEN: SKIP 2.
    Ouverture d'un block de sélection pour l'adresse physique du fichier.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-bl2.
    PARAMETERS: p_pc       RADIOBUTTON GROUP rad1 DEFAULT 'X',  "+EDR231003
                p_fic_pc LIKE rlgrap-filename.                  "+EDR231003
    SELECTION-SCREEN SKIP.                                      "+EDR231003
    PARAMETERS     : p_serve   RADIOBUTTON GROUP rad1,          "+EDR231003
                     p_fic_se LIKE filename-fileintern          "+EDR231003
                              DEFAULT 'Z03_PREV_COMMANDES'.     "+EDR231003
    SELECTION-SCREEN END OF BLOCK block2.
                           Logique de traitement                         *
                              INITIALIZATION                             *
    INITIALIZATION.
    Date du jour
      MOVE sy-datum TO w_datejour.                              "FAE15269
    Gestion des anomalies.
      MOVE text-lb1 TO w_lb_traitement.
      PERFORM f930_init USING sy-cprog '30'.
    Fin de la gestions des anomalies.
    Récuperation des mois dans la table interne 'ITB_MONTHS'.
      CALL FUNCTION 'MONTH_NAMES_GET'
           EXPORTING
                language              = sy-langu
           TABLES
                month_names           = itb_months
           EXCEPTIONS
                month_names_not_found = 1
                OTHERS                = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    Récupération des differentes periodes.
      PERFORM f100_recuperation_date TABLES itb_months.
    Récupération du debut du mois.
      CONCATENATE sy-datlo(6) '01' INTO w_debut_mois.
      MOVE: w_debut_mois TO w_debut_periode.
    Récupération du dernier jour du mois.
      CALL FUNCTION 'LAST_DAY_OF_MONTHS'
           EXPORTING
                day_in            = sy-datlo
           IMPORTING
                last_day_of_month = w_fin_mois
           EXCEPTIONS
                day_in_no_date    = 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.
                              TOP-OF-PAGE                                *
    TOP-OF-PAGE.
      CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'
           EXPORTING
                p_linsz   = k_ligne
                p_pagno   = sy-pagno
                p_prog    = sy-cprog
                p_projet  = k_projet
                p_societe = k_societe
                p_sujet   = sy-title.
                              END-OF-PAGE                                *
    END-OF-PAGE.
                            AT SELECTION-SCREEN                          *
    FAE 26446 : ajout
    AT SELECTION-SCREEN ON BLOCK block3.
      IF NOT ( s_ekgrp IS INITIAL )
      AND  NOT ( s_dispo IS INITIAL ).
        MESSAGE e394(z03_mm).
      ENDIF.
      IF p_ekgrp = 'X'.
        IF s_ekgrp IS INITIAL.
          MESSAGE e395(z03_mm).
        ENDIF.
      ELSE.
        IF s_dispo IS INITIAL.
          MESSAGE e396(z03_mm).
        ENDIF.
      ENDIF.
    fae26446 fin ajout
    AT SELECTION-SCREEN ON BLOCK block2.
      IF p_pc = 'X'.
        IF p_fic_pc IS INITIAL.
    *Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
          MESSAGE e021(z03_mm).
        ENDIF.
      ELSE.
        IF p_fic_se IS INITIAL.
    *Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)
          MESSAGE e021(z03_mm).
        ENDIF.
      ENDIF.
    Création du matchcode pour la selection du fichier local.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fic_pc.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_filename     = p_fic_pc
                def_path         = 'C:'
                mask             = text-ma1
                mode             = 'S'
                title            = text-sel
           IMPORTING
                filename         = p_fic_pc
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
      IF sy-subrc NE 0 AND sy-subrc NE 3.
        MESSAGE e032(z03_mm).
      ENDIF.
                            START-OF-SELECTION                           *
    START-OF-SELECTION.
      PERFORM select_donnees.
    =================================================
    Liste des ARTICLES impactés pour les prévisions *
    =================================================
    ===================================
    PORTEFEUILLE DE COMMANDES D'ACHAT *
    ===================================
    Construction itb_pca à partir de EKKO/EKPO.
      w_index_ekpo  = 1.
      w_index_ekes  = 1.
      w_index_eket  = 1.
      w_index_mseg  = 1.
    SORT itb_ekko BY ebeln.           "-FAE26446
      SORT itb_ekpo BY ebeln ebelp.
      SORT itb_makt BY matnr spras.
      SORT itb_eket BY ebeln ebelp.
      SORT itb_ekes BY ebeln ebelp.
      SORT itb_mseg BY ebeln ebelp.
      SORT itb_mkpf BY mblnr mjahr.
      SORT itb_marc BY matnr werks.                             "+FAE26446
    FAE 26446 remplacement
    LOOP AT itb_ekko.
       LOOP AT itb_ekpo.
               FROM w_index_ekpo.
         IF itb_ekko-ebeln = itb_ekpo-ebeln.
      LOOP AT itb_ekpo.
        READ TABLE itb_marc WITH KEY
           matnr = itb_ekpo-matnr
           werks = itb_ekpo-werks BINARY SEARCH.
        CHECK sy-subrc = 0.
    FAE 26446 fin remplacement
        itb_pca-ebeln = itb_ekpo-ebeln.
        itb_pca-ebelp = itb_ekpo-ebelp.
      itb_pca-lifnr = itb_ekko-lifnr.   "-FAE26446
        itb_pca-lifnr = itb_ekpo-lifnr.                         "+FAE26446
        itb_pca-ekgrp = itb_ekpo-ekgrp.                         "+FAE26446
        itb_pca-dispo = itb_ekpo-dispo.                         "+FAE26446
        itb_pca-matnr = itb_ekpo-matnr.
        itb_pca-werks = itb_ekpo-werks.
      Recherche du libellé article
        READ TABLE itb_makt
                   WITH KEY matnr = itb_ekpo-matnr
                            spras = text-fra
                   BINARY SEARCH.
        IF sy-subrc = 0.
          itb_pca-maktx = itb_makt-maktx.
        ELSE.
          READ TABLE itb_makt
                    WITH KEY matnr = itb_ekpo-matnr
                             spras = text-ang
                    BINARY SEARCH.
          IF sy-subrc = 0.
            itb_pca-maktx = itb_makt-maktx.
          ENDIF.
        ENDIF.
        IF NOT itb_ekpo-bpumn IS INITIAL.
          itb_pca-menge = itb_ekpo-menge * itb_ekpo-bpumz /
                                           itb_ekpo-bpumn.
        ENDIF.
      Sélect° ds la table EKES des dates de livraisons et des qtés
      en transit
        CLEAR w_temoin_ar.
        CLEAR w_etens.
        LOOP AT itb_ekes
                FROM w_index_ekes.
          IF  itb_ekes-ebeln = itb_ekpo-ebeln
          AND itb_ekes-ebelp = itb_ekpo-ebelp.
            IF itb_ekes-ebtyp = text-arn.
              itb_pca-eindt = itb_ekes-eindt.
              w_temoin_ar = 'X'.
            ELSE.
            Si c'est une qté en transit alors on recupere
            la quantité et la date.
              IF itb_ekes-dabmg < itb_ekes-menge.
                itb_pca-qtran = itb_pca-qtran + itb_ekes-menge -
                                itb_ekes-dabmg.
              ENDIF.
              IF itb_ekes-etens > w_etens.
                w_etens = itb_ekes-etens.
                itb_pca-dtran = itb_ekes-eindt.
              ENDIF.
            ENDIF.
          ELSEIF itb_ekes-ebeln > itb_ekpo-ebeln
          OR ( itb_ekes-ebeln = itb_ekpo-ebeln
          AND itb_ekes-ebelp > itb_ekpo-ebelp ).
            w_index_ekes = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
      S'il n'y a pas d'AR alors récupérat° de la date livraison dans EKET.
        LOOP AT itb_eket
                FROM w_index_eket.
          IF  itb_eket-ebeln = itb_ekpo-ebeln
          AND itb_eket-ebelp = itb_ekpo-ebelp.
            IF w_temoin_ar IS INITIAL.
              itb_pca-eindt = itb_eket-eindt.
            ENDIF.
            itb_pca-slfdt = itb_eket-slfdt.
          Calcul du portefeuille fournisseur à partir de la
          qté commandée et la qté reçue
            itb_pca-attdu = itb_pca-attdu + itb_eket-menge -
                            itb_eket-wemng.
          Calcul du montant du poste
            itb_pca-netpr = itb_ekpo-netpr * itb_pca-attdu.
            IF itb_ekpo-peinh NE 0.
              itb_pca-netpr = itb_pca-netpr / itb_ekpo-peinh.
            ENDIF.
          Calcul quantité réceptionnée.
            itb_pca-wemng = itb_pca-wemng + itb_eket-wemng.
          Calcul du retard en nombre de jours calendaires
          Le calcul du retard  ne doit pas prendre en compte
          le jour de livraison
            ADD 1 TO itb_eket-eindt.
            IF NOT itb_pca-attdu  IS INITIAL
            AND    itb_eket-eindt LT sy-datum.
            Calcul du retard en nombre de jours ouvrés
              CLEAR w_retard.
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
                   EXPORTING
                        date_deb = itb_eket-eindt
                        date_fin = sy-datum
                   IMPORTING
                        jours    = w_retard.
              itb_pca-rtard = itb_pca-rtard + w_retard .
            ENDIF.
          ELSEIF itb_eket-ebeln > itb_ekpo-ebeln
          OR (   itb_eket-ebeln = itb_ekpo-ebeln
          AND    itb_eket-ebelp > itb_ekpo-ebelp ).
            w_index_eket = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
      Recherche de la derniere date de livraison.
        LOOP AT itb_mseg
                FROM w_index_mseg.
          IF  itb_mseg-ebeln = itb_ekpo-ebeln
          AND itb_mseg-ebelp = itb_ekpo-ebelp.
            READ TABLE itb_mkpf
                       WITH KEY mblnr = itb_mseg-mblnr
                                mjahr = itb_mseg-mjahr
                       BINARY SEARCH.
            IF sy-subrc = 0.
              IF itb_mkpf-bldat > itb_pca-bldat.
                itb_pca-bldat = itb_mkpf-bldat.
              ENDIF.
            ENDIF.
          ELSEIF itb_mseg-ebeln > itb_ekpo-ebeln
          OR (   itb_mseg-ebeln = itb_ekpo-ebeln
          AND    itb_mseg-ebelp > itb_ekpo-ebelp ).
            w_index_mseg = sy-tabix.
            EXIT.
          ENDIF.
        ENDLOOP.
        APPEND itb_pca.
        CLEAR itb_pca.
    FAE26446 suppression parag. suivant
         ELSEIF itb_ekpo-ebeln > itb_ekko-ebeln.
           w_index_ekpo = sy-tabix.
           EXIT.
         ENDIF.
       ENDLOOP.
    Fin FAE26446
      ENDLOOP.
    =========================
    PREVISIONS DE COMMANDES *
    =========================
      SORT itb_eord        BY matnr werks lifnr ekgrp.
      SORT itb_eban        BY matnr werks flief ekgrp.
      SORT itb_plaf        BY matnr plwrk flief.
      SORT itb_z03_bw_cmp1 BY matnr werks.
      SORT itb_z03_bw_cmp2 BY matnr werks."+DE3K937051
      SORT itb_pca         BY matnr werks lifnr.
      w_index_eban = 1.
      w_index_plaf = 1.
      w_index_z03_bw_cmp1 = 1.
      w_index_pca = 1.
      w_index_z03_bw_cmp2 = 1."+DE3K937051
    Remplissage de la table des prévisions de commande.
      LOOP AT itb_eord.
        CLEAR: str_prev_pfc,
               w_trouve.
        MOVE-CORRESPONDING itb_eord TO str_index1.
        MOVE-CORRESPONDING itb_eord TO str_index3_eord.
        MOVE-CORRESPONDING itb_eord TO itb_prev_cde.
      Recherche dans table division/article (MARC) afin de déterminer si
      article PFS (prod fabriqué à stock) ou PFC (Prod fabriqué sur cde)
        AT NEW werks.
          READ TABLE itb_marc_eord
                     WITH KEY matnr = itb_eord-matnr
                              werks = itb_eord-werks
                     BINARY SEARCH.
          IF sy-subrc NE 0.
            CLEAR itb_marc_eord.
          ENDIF.
        ENDAT.
    a - Prévisions pour les PFS : DA + OP *
    *Calcul des quantités de commande.
        IF itb_eord-disls = text-tl1.
          itb_prev_cde-bstmi =  itb_eord-bstfe.
        ELSEIF itb_eord-disls = text-tl2
        OR     itb_eord-disls = text-tl3.
          IF  itb_eord-bstrf NE 0
          AND itb_eord-bstmi = 0
          AND itb_eord-bstma = 0.
            itb_prev_cde-bstmi = itb_eord-bstrf.
          ELSEIF itb_eord-bstrf NE 0
          AND    itb_eord-bstmi NE 0.
            itb_prev_cde-bstmi = itb_eord-bstmi.
          ELSEIF itb_eord-bstrf = itb_eord-bstma
          AND    itb_eord-bstrf NE 0
          AND    itb_eord-bstmi = 0.
            itb_prev_cde-bstmi = itb_eord-bstma.
          ENDIF.
        ENDIF.
      si article PFS (Prod fabriqué à stock) recherche des
      demandes d'achat ou ordres planfiés
        IF itb_marc_eord-strgr IN r_type_pfs.
      Récupérat° calendrier de la division pour calcul correct lors de
      l'ajout de eban-webaz ou plaf-webaz jours ouvrés
          CLEAR w_trouve_pfs ."+DE3K937051
          READ TABLE itb_t001w
                     WITH KEY werks = itb_eord-werks
                     BINARY SEARCH.
          IF sy-subrc = 0.
            LOOP AT itb_eban
                    FROM w_index_eban.
              MOVE-CORRESPONDING itb_eban TO str_index2.
              IF str_index1 = str_index2.
                w_trouve_pfs = 'X'."+DE3K937051
              si qte commandées pour la DA  < quantité de la DA
                IF itb_eban-bsmng < itb_eban-menge.
                ajout de quantité de la DA - qte  commandée pour la DA
                  PERFORM affect_da.
                ENDIF.
              ELSEIF str_index2 > str_index1.
                w_index_eban = sy-tabix.
                EXIT.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ajout des quantité des OP (ordres planifiés)
          LOOP AT itb_plaf
                  FROM w_index_plaf.
            MOVE-CORRESPONDING itb_plaf TO str_index4.
            str_index4-werks = itb_plaf-plwrk.
          str_index4-lifnr = itb_plaf-flief.
            IF str_index4 = str_index3_eord.
            Ajout de webaz jours ouvrés à pedtr
              CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'
                   EXPORTING
                        i_date        = itb_plaf-pedtr
                        i_calendar_id = itb_t001w-fabkl
                        i_nb_days     = itb_plaf-webaz
                   IMPORTING
                        o_date        = w_dat_op
                   EXCEPTIONS
                        conv_error    = 1
                        OTHERS        = 2.
              IF sy-subrc
       If forecasts found in Z03_BW_CMP2 for the article
       IF w_trouve_pfs = 'X'."-DE3K937602
    Recalculation prev month M in fct of Nb of wrought days of the month
        IF NOT itb_prev_cde-men00 IS INITIAL.
       one does not hold any more account of the day in progress
          w_lendemain = w_date0 + 1.
          CLEAR:w_nb_j,w_nb_j_tot.         "DE3K938206+
          CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
               EXPORTING
                    date_deb = w_lendemain
                    date_fin = w_fin_mois
               IMPORTING
                    jours    = w_nb_j.
          CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
               EXPORTING
                    date  = w_lendemain
               IMPORTING
                    jours = w_nb_j_tot.
          itb_prev_cde-men00  = itb_prev_cde-men00 * w_nb_j / w_nb_j_tot
    *CLA DE3K925301 FAE27197
    *to round has the higher entirety
        itb_prev_cde-men00  = ceil( itb_prev_cde-men00 ). "DE3K938206-
        ENDIF.
       ENDIF."-DE3K937602
    *End change BNI
    b - Prévisions pour les PFC (Z03_BW_CMP1 puis rééquilibrage) *
      Recherche des previsions dans Z03_BW_CMP1
      si article PFC (Prod fabriqué sur cde) recherche des prévisions
        IF  NOT itb_marc_eord-strgr IN r_type_pfs.
          CLEAR str_prev_pfc.
          MOVE-CORRESPONDING itb_eord TO str_prev_pfc.
          CLEAR w_trouve_pfc .
          LOOP AT itb_z03_bw_cmp1
                  FROM w_index_z03_bw_cmp1.
            MOVE-CORRESPONDING itb_z03_bw_cmp1 TO str_index7.
            MOVE-CORRESPONDING itb_eord TO str_index6.
            IF str_index6 = str_index7.
          si on trouve des prévisions dans z03_bw_cmp1 pour la source
          d'appro eord alors c'est un article  PFC
              w_trouve_pfc = 'X'.
              CASE itb_z03_bw_cmp1-pdatu+0(6).
                WHEN w_date0+0(6).
                  str_prev_pfc-men00 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date1+0(6).
                  str_prev_pfc-men01 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date2+0(6).
                  str_prev_pfc-men02 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date3+0(6).
                  str_prev_pfc-men03 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date4+0(6).
                  str_prev_pfc-men04 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date5+0(6).
                  str_prev_pfc-men05 = itb_z03_bw_cmp1-plnmg.
                WHEN w_date6+0(6).
                  str_prev_pfc-men06 = itb_z03_bw_cmp1-plnmg.
                WHEN OTHERS.
              ENDCASE.
            ELSEIF str_index7 > str_index6.
              w_index_z03_bw_cmp1 = sy-tabix.
              EXIT.
            ENDIF.
          ENDLOOP.
    *Begin change BNI
        Si des prévisions trouvées dans Z03_BW_CMP1 pour l'article
          IF w_trouve_pfc = 'X'.
          Recalcul prev mois M en fct du nb de jours ouvrés du mois
            IF NOT str_prev_pfc-men00 IS INITIAL.
            on ne tient plus compte du jour en cours
              w_lendemain = w_date0 + 1.
              CLEAR:w_nb_j,w_nb_j_tot.               "DE3K938206+
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'
                   EXPORTING
                        date_deb = w_lendemain
                        date_fin = w_fin_mois
                   IMPORTING
                        jours    = w_nb_j.
              CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'
                   EXPORTING
                        date  = w_lendemain
                   IMPORTING
                        jours = w_nb_j_tot.
              str_prev_pfc-men00 = str_prev_pfc-men00 * w_nb_j / w_nb_j_tot.
    *CLA DE3K925301 FAE27197
    *arrondir a l'entier supèrieur
              str_prev_pfc-men00 = ceil( str_prev_pfc-men00 ).
            ENDIF.
          Equilibrage PFC : commande/prévision du mois
          Recherche COMMANDES cumulées pour M à M+6
            CLEAR str_pca_pfc.
            LOOP AT itb_pca
                    FROM w_index_pca.
              MOVE-CORRESPONDING itb_pca TO str_index5.
              IF str_index5 = str_index3_eord.
                IF NOT itb_pca-menge IS INITIAL.
                  CASE itb_pca-eindt+0(6).
                    WHEN w_date0+0(6).
                      IF itb_pca-eindt >= w_date0.
                      str_pca_pfc-men00 = str_pca_pfc-men00 + itb_pca-menge.
                      ENDIF.
                    WHEN w_date1+0(6).
                      str_pca_pfc-men01 = str_pca_pfc-men01 + itb_pca-menge.
                    WHEN w_date2+0(6).
                      str_pca_pfc-men02 = str_pca_pfc-men02 + itb_pca-menge.
                    WHEN w_date3+0(6).
                      str_pca_pfc-men03 = str_pca_pfc-men03 + itb_pca-menge.
                    WHEN w_date4+0(6).
                      str_pca_pfc-men04 = str_pca_pfc-men04 + itb_pca-menge.
                    WHEN w_date5+0(6).
                      str_pca_pfc-men05 = str_pca_pfc-men05 + itb_pca-menge.
                    WHEN w_date6+0(6).
                      str_pca_pfc-men06 = str_pca_pfc-men06 + itb_pca-menge.
                  ENDCASE.
                ENDIF."NOT itb_pca-menge IS INITIAL
              ELSEIF str_index5 > str_index3_eord.
                w_index_pca = sy-tabix.
                EXIT.
              ENDIF.
            ENDLOOP."itb_pca
    *. Equilibrer commande / prévision des mois : diminuer la quantité de
    prévision de chaque mois par le portefeuille de commande client du
    mois*. Si ce solde est négatif alors lui donner la valeur 0.
            w_i = 0.
          Ajustement commandes/prévisions pour les mois M à M+6
            WHILE w_i .
            Pour un mois, SI Prévisions > Commandes en cours
              IF .
              Prévisions = Prévisions - Commandes en cours
                 = 0.
              ENDIF.
            On passe au mois suivant
              w_i = w_i + 1.
            ENDWHILE.
            MOVE str_prev_pfc-men00 TO itb_prev_cde-men00.
            MOVE str_prev_pfc-men01 TO itb_prev_cde-men01.
            MOVE str_prev_pfc-men02 TO itb_prev_cde-men02.
            MOVE str_prev_pfc-men03 TO itb_prev_cde-men03.
            MOVE str_prev_pfc-men04 TO itb_prev_cde-men04.
            MOVE str_prev_pfc-men05 TO itb_prev_cde-men05.
            MOVE str_prev_pfc-men06 TO itb_prev_cde-men06.
          ENDIF.  "w_trouve_pfc = 'X'.
        ENDIF.
    *recherche du libellé article

    Hi,
    see this link, useful tips, links and transactions for best performance, by Anji.
    https://forums.sdn.sap.com/click.jspa?searchID=5967263&messageID=4260111
    Regards

  • One example for edit the grid in oops and provide f4 help for particular field in Grid

    Hi all
    Here is the code for that editable Grid
    *& Report  YVAMC_EDIT_GRID
    REPORT  YVAMC_EDIT_GRID.
    DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID .
    *--- Name of the custom control added on the screen
    DATA GC_CUSTOM_CONTROL_NAME TYPE SCRFNAME VALUE 'CC1_ALV' .
    *--- Custom container instance reference
    DATA GR_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
    *--- Field catalog table
    DATA GT_FIELDCAT TYPE LVC_T_FCAT .
    TYPES: BEGIN OF IT_LIST,
             BANFN TYPE EBAN-BANFN,
             BNFPO TYPE EBAN-BNFPO,
             BSART TYPE EBAN-BSART,
             BSTYP TYPE EBAN-BSTYP,
             BSAKZ TYPE EBAN-BSAKZ,
             LOEKZ TYPE EBAN-LOEKZ,
             STATU TYPE EBAN-STATU,
             ESTKZ TYPE EBAN-ESTKZ,
             FRGKZ TYPE EBAN-FRGKZ,
             FRGZU TYPE EBAN-FRGZU,
           END OF IT_LIST.
    DATA: GT_LIST TYPE STANDARD TABLE OF IT_LIST,
           WA_LIST TYPE IT_LIST.
    DATA GS_LAYOUT TYPE LVC_S_LAYO .
    DATA OK_CODE TYPE SY-UCOMM.
    DATA ZFLAG.
    ** data for event handling
    DATA: GS_F4 TYPE LVC_S_F4,
           GT_F4 TYPE LVC_T_F4.
    START-OF-SELECTION.
       SELECT BANFN
              BNFPO
              BSART
              BSTYP
              BSAKZ
              LOEKZ
              STATU
              ESTKZ
              FRGKZ
              FRGZU
         FROM  EBAN INTO TABLE GT_LIST.
       CALL SCREEN 9000.
    *&      Module  DISPLAY_ALV  OUTPUT
    *       text
    MODULE STATUS_9000 OUTPUT.
       set pf-status 'ZNEW_STS'.
       PERFORM DISPLAY_ALV.
    ENDMODULE.                 " DISPLAY_ALV  OUTPUT
    *&      Module  USER_COMMAND_9000  INPUT
    *       text
    MODULE USER_COMMAND_9000 INPUT.
       OK_CODE = SY-UCOMM.
       CASE OK_CODE.
         WHEN 'BACK'.
           LEAVE TO SCREEN 0.
         WHEN 'EXIT'.
           LEAVE PROGRAM.
         WHEN 'EDIT'.
           ZFLAG = '1'.
           PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
           PERFORM REGISTER_EDIT.
         WHEN 'DISPLAY'.
           ZFLAG = '0'.
           PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
       ENDCASE.
    ENDMODULE.                 " USER_COMMAND_9000  INPUT
    *&      Form  DISPLAY_ALV
    *       text
    FORM DISPLAY_ALV.
       IF GR_ALVGRID IS INITIAL.
         CREATE OBJECT GR_CCONTAINER
           EXPORTING
    *        parent                      =
             CONTAINER_NAME              = GC_CUSTOM_CONTROL_NAME  .
         IF SY-SUBRC <> 0.
    *     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
         CREATE OBJECT GR_ALVGRID
           EXPORTING
             I_PARENT = GR_CCONTAINER.
         IF SY-SUBRC <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
    *----Preparing field catalog.
         PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .
         CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
          IS_LAYOUT                     = GS_LAYOUT
       CHANGING
             IT_OUTTAB                     = GT_LIST[]
             IT_FIELDCATALOG               = GT_FIELDCAT
         IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
       ELSE.
         CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY
    *    EXPORTING
    *      is_stable      =
    *      i_soft_refresh =
    *    EXCEPTIONS
    *      finished       = 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.
       ENDIF.
    ENDFORM.                    "DISPLAY_ALV
    *&      Form  prepare_field_catalog
    *       text
    *      -->PT_FIELDCAT  text
    FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
       DATA LS_FCAT TYPE LVC_S_FCAT .
       LS_FCAT-FIELDNAME = 'BANFN' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '10' .
       LS_FCAT-COLTEXT = 'Requisition no' .
    *  LS_FCAT-SELTEXT = 'Requisition no' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BNFPO' .
       LS_FCAT-INTTYPE = 'N' .
    *ls_fcat-outputlen = '5' .
       LS_FCAT-COLTEXT = 'Item no' .
       LS_FCAT-SELTEXT = 'Item no' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSART' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '5' .
       LS_FCAT-COLTEXT = 'Doc Type' .
       LS_FCAT-SELTEXT = 'Doc Type' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSTYP' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Doc Category' .
       LS_FCAT-SELTEXT = 'Doc Category' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSAKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Control Indicator' .
       LS_FCAT-SELTEXT = 'Control Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'LOEKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Deletion Indicator' .
       LS_FCAT-SELTEXT = 'Deletion Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'STATU' .
       LS_FCAT-INTTYPE = 'C' .
       LS_FCAT-F4AVAILABL = 'X'.
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Processing status' .
       LS_FCAT-SELTEXT = 'Processing Status' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'ESTKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Creation Indicator' .
       LS_FCAT-SELTEXT = 'Creation Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'FRGKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *  ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Release Indicator' .
       LS_FCAT-SELTEXT = 'Release Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'FRGZU' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '8' .
       LS_FCAT-COLTEXT = 'Release Status' .
       LS_FCAT-SELTEXT = 'Release Status' .
       APPEND LS_FCAT TO PT_FIELDCAT .
    ENDFORM.                    "prepare_field_catalog
    *&      Form  update_field_catalog
    *       text
    *      -->PT_FIELDCAT  text
    FORM UPDATE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
       DATA LS_FCAT TYPE LVC_S_FCAT .
       CALL METHOD GR_ALVGRID->GET_FRONTEND_FIELDCATALOG
         IMPORTING
           ET_FIELDCATALOG = PT_FIELDCAT[].
       LOOP AT PT_FIELDCAT INTO LS_FCAT .
         IF ZFLAG = '1'.
           IF LS_FCAT-FIELDNAME = 'BSART' .
             LS_FCAT-EDIT = 'X' .
             LS_FCAT-F4AVAILABL = 'X'.
             LS_FCAT-REF_TABLE = 'T161T'.
             LS_FCAT-REF_FIELD = 'BSART'.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSTYP' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSAKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'LOEKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'STATU' .
             LS_FCAT-EDIT = 'X' .
             LS_FCAT-F4AVAILABL = 'X'.
    *        ls_fcat-drdn_hndl = '1'.
    *        ls_fcat-outputlen = 15.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'ESTKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGKZ' .
             LS_FCAT-EDIT = 'X' .
    * for laready attcahed search help
             LS_FCAT-F4AVAILABL = 'X'.
             LS_FCAT-REF_TABLE = 'T161U'.
             LS_FCAT-REF_FIELD = 'FRGKZ'.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF.
           IF LS_FCAT-FIELDNAME = 'FRGZU' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
    * add customise f4 help on feild STATU
           CLEAR GT_F4.
           GS_F4-FIELDNAME  = 'STATU'.
           GS_F4-REGISTER   = 'X'.
    *      gs_f4-getbefore  = check_be.               "§7a
    *      gs_f4-chngeafter = chn_aft.               "§7b
           APPEND GS_F4 TO GT_F4.
           CALL METHOD GR_ALVGRID->REGISTER_F4_FOR_FIELDS
             EXPORTING
               IT_F4 = GT_F4.
         ELSEIF ZFLAG = '2'.
           IF LS_FCAT-FIELDNAME = 'BANFN' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BNFPO' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
         ELSE.
           IF LS_FCAT-FIELDNAME = 'BSART' .
             LS_FCAT-EDIT = SPACE.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSTYP' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSAKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'LOEKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'STATU' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'ESTKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGZU' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
         ENDIF.
       ENDLOOP .
       CALL METHOD GR_ALVGRID->SET_FRONTEND_FIELDCATALOG
         EXPORTING
           IT_FIELDCATALOG = PT_FIELDCAT[].
    ENDFORM.                    "update_field_catalog
    *&      Form  register_edit
    *       text
    FORM REGISTER_EDIT .
       CALL METHOD GR_ALVGRID->REGISTER_EDIT_EVENT
         EXPORTING
           I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
    ENDFORM.                    "register_edit

    Hi all
    Here is the code for that editable Grid
    *& Report  YVAMC_EDIT_GRID
    REPORT  YVAMC_EDIT_GRID.
    DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID .
    *--- Name of the custom control added on the screen
    DATA GC_CUSTOM_CONTROL_NAME TYPE SCRFNAME VALUE 'CC1_ALV' .
    *--- Custom container instance reference
    DATA GR_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
    *--- Field catalog table
    DATA GT_FIELDCAT TYPE LVC_T_FCAT .
    TYPES: BEGIN OF IT_LIST,
             BANFN TYPE EBAN-BANFN,
             BNFPO TYPE EBAN-BNFPO,
             BSART TYPE EBAN-BSART,
             BSTYP TYPE EBAN-BSTYP,
             BSAKZ TYPE EBAN-BSAKZ,
             LOEKZ TYPE EBAN-LOEKZ,
             STATU TYPE EBAN-STATU,
             ESTKZ TYPE EBAN-ESTKZ,
             FRGKZ TYPE EBAN-FRGKZ,
             FRGZU TYPE EBAN-FRGZU,
           END OF IT_LIST.
    DATA: GT_LIST TYPE STANDARD TABLE OF IT_LIST,
           WA_LIST TYPE IT_LIST.
    DATA GS_LAYOUT TYPE LVC_S_LAYO .
    DATA OK_CODE TYPE SY-UCOMM.
    DATA ZFLAG.
    ** data for event handling
    DATA: GS_F4 TYPE LVC_S_F4,
           GT_F4 TYPE LVC_T_F4.
    START-OF-SELECTION.
       SELECT BANFN
              BNFPO
              BSART
              BSTYP
              BSAKZ
              LOEKZ
              STATU
              ESTKZ
              FRGKZ
              FRGZU
         FROM  EBAN INTO TABLE GT_LIST.
       CALL SCREEN 9000.
    *&      Module  DISPLAY_ALV  OUTPUT
    *       text
    MODULE STATUS_9000 OUTPUT.
       set pf-status 'ZNEW_STS'.
       PERFORM DISPLAY_ALV.
    ENDMODULE.                 " DISPLAY_ALV  OUTPUT
    *&      Module  USER_COMMAND_9000  INPUT
    *       text
    MODULE USER_COMMAND_9000 INPUT.
       OK_CODE = SY-UCOMM.
       CASE OK_CODE.
         WHEN 'BACK'.
           LEAVE TO SCREEN 0.
         WHEN 'EXIT'.
           LEAVE PROGRAM.
         WHEN 'EDIT'.
           ZFLAG = '1'.
           PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
           PERFORM REGISTER_EDIT.
         WHEN 'DISPLAY'.
           ZFLAG = '0'.
           PERFORM UPDATE_FIELD_CATALOG CHANGING GT_FIELDCAT.
       ENDCASE.
    ENDMODULE.                 " USER_COMMAND_9000  INPUT
    *&      Form  DISPLAY_ALV
    *       text
    FORM DISPLAY_ALV.
       IF GR_ALVGRID IS INITIAL.
         CREATE OBJECT GR_CCONTAINER
           EXPORTING
    *        parent                      =
             CONTAINER_NAME              = GC_CUSTOM_CONTROL_NAME  .
         IF SY-SUBRC <> 0.
    *     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
         CREATE OBJECT GR_ALVGRID
           EXPORTING
             I_PARENT = GR_CCONTAINER.
         IF SY-SUBRC <> 0.
    *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
    *----Preparing field catalog.
         PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .
         CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
          IS_LAYOUT                     = GS_LAYOUT
       CHANGING
             IT_OUTTAB                     = GT_LIST[]
             IT_FIELDCATALOG               = GT_FIELDCAT
         IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
       ELSE.
         CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY
    *    EXPORTING
    *      is_stable      =
    *      i_soft_refresh =
    *    EXCEPTIONS
    *      finished       = 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.
       ENDIF.
    ENDFORM.                    "DISPLAY_ALV
    *&      Form  prepare_field_catalog
    *       text
    *      -->PT_FIELDCAT  text
    FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
       DATA LS_FCAT TYPE LVC_S_FCAT .
       LS_FCAT-FIELDNAME = 'BANFN' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '10' .
       LS_FCAT-COLTEXT = 'Requisition no' .
    *  LS_FCAT-SELTEXT = 'Requisition no' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BNFPO' .
       LS_FCAT-INTTYPE = 'N' .
    *ls_fcat-outputlen = '5' .
       LS_FCAT-COLTEXT = 'Item no' .
       LS_FCAT-SELTEXT = 'Item no' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSART' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '5' .
       LS_FCAT-COLTEXT = 'Doc Type' .
       LS_FCAT-SELTEXT = 'Doc Type' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSTYP' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Doc Category' .
       LS_FCAT-SELTEXT = 'Doc Category' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'BSAKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Control Indicator' .
       LS_FCAT-SELTEXT = 'Control Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'LOEKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Deletion Indicator' .
       LS_FCAT-SELTEXT = 'Deletion Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'STATU' .
       LS_FCAT-INTTYPE = 'C' .
       LS_FCAT-F4AVAILABL = 'X'.
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Processing status' .
       LS_FCAT-SELTEXT = 'Processing Status' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'ESTKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Creation Indicator' .
       LS_FCAT-SELTEXT = 'Creation Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'FRGKZ' .
       LS_FCAT-INTTYPE = 'C' .
    *  ls_fcat-outputlen = '1' .
       LS_FCAT-COLTEXT = 'Release Indicator' .
       LS_FCAT-SELTEXT = 'Release Indicator' .
       APPEND LS_FCAT TO PT_FIELDCAT .
       LS_FCAT-FIELDNAME = 'FRGZU' .
       LS_FCAT-INTTYPE = 'C' .
    *ls_fcat-outputlen = '8' .
       LS_FCAT-COLTEXT = 'Release Status' .
       LS_FCAT-SELTEXT = 'Release Status' .
       APPEND LS_FCAT TO PT_FIELDCAT .
    ENDFORM.                    "prepare_field_catalog
    *&      Form  update_field_catalog
    *       text
    *      -->PT_FIELDCAT  text
    FORM UPDATE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
       DATA LS_FCAT TYPE LVC_S_FCAT .
       CALL METHOD GR_ALVGRID->GET_FRONTEND_FIELDCATALOG
         IMPORTING
           ET_FIELDCATALOG = PT_FIELDCAT[].
       LOOP AT PT_FIELDCAT INTO LS_FCAT .
         IF ZFLAG = '1'.
           IF LS_FCAT-FIELDNAME = 'BSART' .
             LS_FCAT-EDIT = 'X' .
             LS_FCAT-F4AVAILABL = 'X'.
             LS_FCAT-REF_TABLE = 'T161T'.
             LS_FCAT-REF_FIELD = 'BSART'.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSTYP' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSAKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'LOEKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'STATU' .
             LS_FCAT-EDIT = 'X' .
             LS_FCAT-F4AVAILABL = 'X'.
    *        ls_fcat-drdn_hndl = '1'.
    *        ls_fcat-outputlen = 15.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'ESTKZ' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGKZ' .
             LS_FCAT-EDIT = 'X' .
    * for laready attcahed search help
             LS_FCAT-F4AVAILABL = 'X'.
             LS_FCAT-REF_TABLE = 'T161U'.
             LS_FCAT-REF_FIELD = 'FRGKZ'.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF.
           IF LS_FCAT-FIELDNAME = 'FRGZU' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
    * add customise f4 help on feild STATU
           CLEAR GT_F4.
           GS_F4-FIELDNAME  = 'STATU'.
           GS_F4-REGISTER   = 'X'.
    *      gs_f4-getbefore  = check_be.               "§7a
    *      gs_f4-chngeafter = chn_aft.               "§7b
           APPEND GS_F4 TO GT_F4.
           CALL METHOD GR_ALVGRID->REGISTER_F4_FOR_FIELDS
             EXPORTING
               IT_F4 = GT_F4.
         ELSEIF ZFLAG = '2'.
           IF LS_FCAT-FIELDNAME = 'BANFN' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BNFPO' .
             LS_FCAT-EDIT = 'X' .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
         ELSE.
           IF LS_FCAT-FIELDNAME = 'BSART' .
             LS_FCAT-EDIT = SPACE.
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSTYP' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'BSAKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'LOEKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'STATU' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'ESTKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGKZ' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
           IF LS_FCAT-FIELDNAME = 'FRGZU' .
             LS_FCAT-EDIT = SPACE .
             MODIFY PT_FIELDCAT FROM LS_FCAT .
           ENDIF .
         ENDIF.
       ENDLOOP .
       CALL METHOD GR_ALVGRID->SET_FRONTEND_FIELDCATALOG
         EXPORTING
           IT_FIELDCATALOG = PT_FIELDCAT[].
    ENDFORM.                    "update_field_catalog
    *&      Form  register_edit
    *       text
    FORM REGISTER_EDIT .
       CALL METHOD GR_ALVGRID->REGISTER_EDIT_EVENT
         EXPORTING
           I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
    ENDFORM.                    "register_edit

  • Get double return for join table

    Dear Experts:
    SELECT eban~banfn      "PR number
             eban~bnfpo      "PR item
             eban~bsart      "Doc Type
             eban~bednr      "Requistion tracking number
             eban~ebeln
             eban~ebelp
             eban~zzloc      "GEO code
             ztmm_ccp~zzclli "zzclli code
      INTO CORRESPONDING FIELDS OF TABLE gi_pr_extract
      FROM  ( eban
             INNER JOIN ztmm_ccp
                    ON  eban~bednr = ztmm_ccp~bednr
                   AND  eban~ebeln = ztmm_ccp~ebeln
                   AND  eban~ebelp = ztmm_ccp~ebelp )
      WHERE eban~bsart IN s_bsart.  "11 input doc type
    The s_bsart are:
    NB
    UB
    ZNB
    ZSC
    ZUC
    ZVC
    ZXC
    ZZO
    ZZX
    ZZY
    ZZZ
    From above SQL, I got double returen for each  ebanbanfn  and ebanbnfpo
    Row     BANFN     BNFPO     BSART     BEDNR     ZZLOC     ZZCLLI
    1      3100000056     00010     NB               
    2      3100000056     00010     NB               CLLICD DRTP
    3      3100000057     00010     NB               
    4      3100000057     00010     NB               CLLICD DRTP
    5      3100000058     00010     NB               
    6      3100000058     00010     NB               CLLICD DRTP
    7      3100000061     00010     NB               
    8      3100000061     00010     NB               CLLICD DRTP
    9      3100000062     00010     NB               
    10      3100000062     00010     NB               CLLICD DRTP
    Do you know why and how do I get the unique one?
    Thank you very much!
    Helen
    Edited by: Thomas Zloch on Oct 4, 2010 3:49 PM - please use code tags

    Hi Helen,
    Please check with the below code snippet. Hope it will work.
    SELECT eban~banfn     
              eban~bnfpo    
              eban~bsart     
              eban~bednr    
              eban~ebeln
              eban~ebelp
              eban~zzloc     
              ztmm_ccp~zzclli
       INTO CORRESPONDING FIELDS OF TABLE gi_pr_extract
       FROM  eban
              INNER JOIN ztmm_ccp
                      ON    ztmm_ccp~bednr = eban~bednr
                    AND  ztmm_ccp~ebeln = eban~ebeln
                    AND  ztmm_ccp~ebelp = eban~ebelp
       WHERE eban~bsart IN s_bsart.
    Thanks
    Nitesh

  • Performance issue on a select statement

    Hi all @ SAPforums and thanks for your attention,
    the task is quite simple: given a Purchase Requisition number and position (banfn, bnfpo) I have to check if a contract with the same PR as source exists in the EKPO table.
    In order to check for it, I simply typed the following select:
    SELECT SINGLE * FROM EKPO INTO wa_checkekpo
          WHERE bstyp EQ 'K'
            AND banfn EQ l_eban-banfn
            AND bnfpo EQ l_eban-bnfpo.
    This kind of query is quite consuming (more than three seconds in my process) due to the fact that banfn and bnfpo don't belong to a key for the table.
    Any idea/workaround that can lead to better performance? Please note I'm not interested in retrieving the contract number (KONNR), it's sufficient to know it exists.

    Hi,
    > Do not use select * if you just want to check existence of the record.
    so far so good.
    > Use a single variable to store teh count.
    But why should we count the records if we just want to know if a key exists in
    the db or not? change the second half of the recommendation to:
    Use a single field of the used index for the select list to check (sy-subrc or result
    of that field) if the record exists or not.
    Kind regards,
    Hermann

  • Error while creating service PO by BAPI_PO_CREATE1

    Hi,
    I am trying to create a service PO using the BAPI_PO_CREATE1 with reference to service PR and I am getting an "In case of account assignment, please enter acc. assignment data for item" for which i found so many threads but none had resolved this error in my case eventhough i filled up all the required structure such as
      LOOP AT gt_esll INTO gs_esll.
          gs_services-pckg_no    = gs_esll-packno.
          gs_services-line_no    = gs_esll-introw.
          gs_services-subpckg_no = gs_esll-sub_packno.
          gs_services-quantity   = gs_esll-menge.
          gs_services-base_uom   = gs_esll-meins.
          gs_services-gr_price   = gs_esll-brtwr.
          gs_services-outl_ind   = 'X'.
          APPEND gs_services TO gt_services.
          CLEAR gs_services.
      ENDLOOP.
      LOOP AT gt_esll1 INTO gs_esll1.
        gs_services-pckg_no  = gs_esll1-packno.
        gs_services-line_no  = gs_esll1-introw.
        gs_services-ext_line = gs_esll1-extrow.
        gs_services-quantity = gs_esll1-menge.
        gs_services-base_uom = gs_esll1-meins.
        gs_services-gr_price   = gs_esll1-brtwr.
        APPEND gs_services TO gt_services.
        CLEAR gs_services.
        gs_servalues-pckg_no   = gs_esll1-packno.
        gs_servalues-line_no   = gs_esll1-introw.
        gs_servalues-serno_line = '01'.
        gs_servalues-quantity  = gs_esll1-menge.
        gs_servalues-net_value = gs_esll1-brtwr.
        APPEND gs_servalues TO gt_servalues.
        CLEAR:  gs_servalues, gs_esll1.
      ENDLOOP.
      gs_poacct-po_item = gv_poitm.
      gs_poacct-serial_no = gs_ebkn-zebkn.
      gs_poacct-quantity  = gs_ebkn-menge.
      gs_poacct-gl_account = gs_ebkn-sakto.
      gs_poacct-costcenter = gs_ebkn-kostl.
      gs_poacct-co_area = gs_ebkn-kokrs.
      APPEND gs_poacct TO gt_poacct.
      CLEAR gs_poacct.
      gs_poacctx-po_item = gv_poitm.
      gs_poacctx-serial_no = gs_ebkn-zebkn.
      gs_poacctx-po_itemx = 'X'.
      gs_poacctx-serial_nox = 'X'.
      gs_poacctx-quantity  = 'X'.
      gs_poacctx-gl_account = 'X'.
      gs_poacctx-costcenter = 'X'.
      gs_poacctx-co_area = 'X'.
      APPEND gs_poacctx TO gt_poacctx.
      CLEAR : gs_poacctx, gs_ebkn.
    LOOP AT gt_ppsitm INTO gs_ppsitm.
      CLEAR: gs_poitm. " gt_poitm.
      READ TABLE gt_matnr INTO gs_matnr WITH KEY banfn = gs_ppsitm-banfn bnfpo = gs_ppsitm-bnfpo.
      CLEAR: gs_poitm.
      gv_poitm = gv_poitm + 10.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT         = gv_poitm
       IMPORTING
          OUTPUT        = gv_poitm.
      gs_poitm-po_item    = gv_poitm.
      gs_poitm-quantity   = gs_ppsitm-menge.
      gs_poitm-po_unit    = gs_matnr-meins.
      gs_poitm-net_price  = gs_ppsitm-quote_price.
    *  gs_poitm-price_unit = '1'.
      gs_poitm-tax_code   = gs_ppsitm-mwskz.
      gs_poitm-preq_no    = gs_ppsitm-banfn.
      gs_poitm-preq_item  = gs_ppsitm-bnfpo.
      IF gs_matnr-packno IS NOT INITIAL.
        gs_poitm-pckg_no    = gs_matnr-packno.        " ADDED BY SKE FOR SERVICE PO
      ENDIF.
      gs_poitm-item_cat    = gs_matnr-pstyp.
      gs_poitm-acctasscat = gs_matnr-knttp.
      APPEND gs_poitm TO gt_poitm.
    ENDLOOP.
    aftrer executing this bapi, the accounts structure has been cleared whereas other sturcture has values.
    Please give me some hints to fix this.
    Thanks in Advance,
    Kalidass.

    Hi pranav,
    from EBAN table i got the package no for a PR and passing that package No into ESLL table i am getting the subpaack No.
       SELECT banfn bnfpo txz01 matnr bsart ekgrp meins pstyp knttp packno FROM eban
         INTO TABLE gt_matnr
          FOR ALL ENTRIES IN gt_ppsitm
        WHERE banfn = gt_ppsitm-banfn
          AND bnfpo = gt_ppsitm-bnfpo.
        SELECT packno introw package sub_packno FROM esll
               INTO CORRESPONDING FIELDS OF TABLE gt_esll
               FOR ALL ENTRIES IN gt_matnr
               WHERE packno = gt_matnr-packno.
    IF gt_esll IS NOT INITIAL.
        SELECT packno introw extrow package sub_packno menge meins brtwr ktext1 FROM ESLL
               INTO TABLE gt_esll1
               FOR ALL ENTRIES IN gt_esll
               WHERE packno = gt_esll-sub_packno.
    ENDIF.
      LOOP AT gt_esll INTO gs_esll.
          gs_services-pckg_no    = gs_esll-packno.
          gs_services-line_no    = gs_esll-introw.
          gs_services-subpckg_no = gs_esll-sub_packno.
          gs_services-quantity   = gs_esll-menge.
          gs_services-base_uom   = gs_esll-meins.
          gs_services-gr_price   = gs_esll-brtwr.
          gs_services-outl_ind   = 'X'.
          APPEND gs_services TO gt_services.
          CLEAR gs_services.
      ENDLOOP.
      LOOP AT gt_esll1 INTO gs_esll1.
        gs_services-pckg_no  = gs_esll1-packno.
        gs_services-line_no  = gs_esll1-introw.
        gs_services-ext_line = gs_esll1-extrow.
        gs_services-quantity = gs_esll1-menge.
        gs_services-base_uom = gs_esll1-meins.
        gs_services-gr_price   = gs_esll1-brtwr.
        APPEND gs_services TO gt_services.
        CLEAR gs_services.
        gs_servalues-pckg_no   = gs_esll1-packno.
        gs_servalues-line_no   = gs_esll1-introw.
        gs_servalues-serno_line = '01'.
        gs_servalues-quantity  = gs_esll1-menge.
        gs_servalues-net_value = gs_esll1-brtwr.
        APPEND gs_servalues TO gt_servalues.
        CLEAR:  gs_servalues, gs_esll1.
      ENDLOOP.
    Edited by: Kalidass Etienne.S on Jan 31, 2012 11:07 AM

  • Error In Program

    Hi Frds
    In my program im displaying Open PO's Number and Quantity and Open PR's Number and Quantity based on Material ,Plant, and Storage location of Material.
    In Output its only displaying Open PR's and Quantity ,if it has Open PO's also, for a same material.
    Kindly anyone correct my mistake.
    TYPE-POOLS: SLIS.
    TABLES : EKPO,MARC,EBAN,MSEG,MARD,MARA,MAKT,MBEW.
    DATA:BODY        TYPE SLIS_T_FIELDCAT_ALV,
         HEADER      TYPE SLIS_FIELDCAT_ALV,
         GD_LAYOUT   TYPE SLIS_LAYOUT_ALV,
         GD_REPID    LIKE SY-REPID.
    DATA : TGR TYPE I,
           CHECK TYPE I.
    TGR   = 0.
    CHECK = 0.
    DATA : MAT_NO LIKE MARA-MATNR, "MATERIAL CODE
           PLA_NO LIKE MARD-WERKS, "PLANT
           STORE  LIKE MARD-LGORT, "STORAGE LOCATION
           COM_NO LIKE EKPO-BUKRS. "COMPANY CODE
    DATA : BEGIN OF ITAB OCCURS 0,
           MATNR LIKE MARA-MATNR, "MATERIAL CODE
           MEINS LIKE MARA-MEINS, "UOM
           MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
           MINBE LIKE MARC-MINBE, "ROL
           LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
           LGORT LIKE MARD-LGORT, "STORAGE
           EBELN LIKE EKPO-EBELN, "PO NUMBER
           EBELP LIKE EKPO-EBELP, "PO LINEITEM
           MENGE LIKE EKPO-MENGE, "OPEN PO QTY
           MENG1 LIKE MSEG-MENGE, "GR QTY
           DQTY  LIKE MSEG-MENGE, "OPEN PO QTY
           BANFN LIKE EBAN-BANFN, "OPEN PR NUMBER
           MENG2 LIKE EBAN-MENGE, "OPEN PR QTY
           BNFPO LIKE EBAN-BANFN, "PR LINEITEM
           END OF ITAB.
    DATA : BEGIN OF IMAT OCCURS 0,
           MATNR LIKE MARA-MATNR, "MATERIAL CODE
           MEINS LIKE MARA-MEINS, "UOM
           LVORM LIKE MARA-LVORM, "DELETED MATERIAL FLAG
           MSTAE LIKE MARA-MSTAE, "BLOCKED MATERIAL
           WERKS LIKE MARD-WERKS, "PLANT
           LGORT LIKE MARD-LGORT, "STORAGE
           END OF IMAT.
    DATA : BEGIN OF IMAKT OCCURS 0,
           MATNR LIKE MAKT-MATNR, "MATERIAL CODE
           MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
           END OF IMAKT.
    DATA : BEGIN OF IMARC OCCURS 0,
           MATNR LIKE MARC-MATNR, "MATERIAL CODE
           MINBE LIKE MARC-MINBE, "ROL
           LVORM LIKE MARC-LVORM, "DELETED MATERIAL FLAG
           END OF IMARC.
    DATA : BEGIN OF IMBEW OCCURS 0,
           MATNR LIKE MBEW-MATNR, "MATERIAL CODE
           LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
           END OF IMBEW.
    DATA : BEGIN OF IEKPO OCCURS 0,
           EBELN LIKE EKPO-EBELN, "PO NUMBER
           EBELP LIKE EKPO-EBELP, "PO LINEITEM
           LOEKZ LIKE EKPO-LOEKZ, "DELETED PO'S
           MATNR LIKE EKPO-MATNR, "MATERIAL CODE
           BUKRS LIKE EKPO-BUKRS, "COMPANY
           WERKS LIKE EKPO-WERKS, "PLANT
           LGORT LIKE EKPO-LGORT, "STORAGE
           MENGE LIKE EKPO-MENGE, "PO QUANTITY
           END OF IEKPO.
    DATA : BEGIN OF IMSEG OCCURS 0,
           BWART LIKE MSEG-BWART, "MOVEMENT TYPE
           MATNR LIKE MSEG-MATNR, "MATERIAL CODE
           WERKS LIKE MSEG-WERKS, "PLANT
           MENGE LIKE MSEG-MENGE, "GR QUANTITY
           EBELN LIKE MSEG-EBELN, "PO NUMBER
           EBELP LIKE MSEG-EBELP, "PO LINEITEM
           END OF IMSEG.
    DATA : BEGIN OF IEBAN OCCURS 0,
           BANFN LIKE EBAN-BANFN, "PR NUMBER
           BNFPO LIKE EBAN-BNFPO, "PR LINEITEM
           LOEKZ LIKE EBAN-LOEKZ, "DELETED PR
           STATU LIKE EBAN-STATU, "OPEN PR FLAG
           MATNR LIKE EBAN-MATNR, "MATERIAL NUMBER
           MENGE LIKE EBAN-MENGE, "PR QUANTITY
           WERKS LIKE EBAN-WERKS, "PLANT
           LGORT LIKE EBAN-LGORT, "STORAGE
           END OF IEBAN.
    SELECTION-SCREEN: BEGIN OF BLOCK 01.
    SELECTION-SCREEN: BEGIN OF BLOCK 02 WITH FRAME .
    SELECT-OPTIONS MATERIAL FOR MAT_NO.
    SELECT-OPTIONS COMPANY  FOR COM_NO .
    SELECT-OPTIONS PLANT    FOR PLA_NO OBLIGATORY.
    SELECT-OPTIONS STORAGE  FOR STORE.
    SELECTION-SCREEN: END OF BLOCK 02.
    SELECTION-SCREEN: END OF BLOCK 01.
    AT SELECTION-SCREEN.
      PERFORM MATERIAL. "GET MATERIAL
    START-OF-SELECTION.
      PERFORM P_MAKT. "GET MATERIAL DESC.,
      PERFORM P_MARC. "GET ROL
      PERFORM P_MBEW. "GET WAREHOUSE STOCK
      PERFORM POS.    "GET POS
      SORT IEKPO BY EBELN EBELP.
      PERFORM GRS.    "GET GR QTY
      PERFORM PRS.    "GET OPEN PR NUMBER
      PERFORM READ.
      PERFORM FIELDCATALOG.
      PERFORM BUILD_LAYOUT.
    GET ALV DISPLAY
      PERFORM ALVDISPLAY.
    *&      FORM  MATERIAL
          TEXT
    FORM MATERIAL.
      SELECT MARAMATNR MARAMEINS MARALVORM MARAMSTAE
             MARDWERKS MARDLGORT
        INTO CORRESPONDING FIELDS OF TABLE IMAT
        FROM MARA INNER JOIN MARD ON MARDMATNR = MARAMATNR
        WHERE MARA~MATNR IN MATERIAL AND
              MARD~WERKS IN PLANT AND
              MARD~LGORT IN STORAGE AND
              MARA~LVORM <> 'X' AND
              MARA~MSTAE EQ SPACE.
      IF SY-SUBRC <> 0.
        MESSAGE 'NO DATA FOUND FOR THE SELECTION ' TYPE 'E'.
        EXIT.
      ENDIF.
    ENDFORM.                    "MATERIAL
    *&      FORM  P_MAKT
          TEXT
    FORM P_MAKT.
      LOOP AT IMAT.
        SELECT MATNR MAKTX FROM MAKT APPENDING TABLE IMAKT
             WHERE MATNR = IMAT-MATNR.
      ENDLOOP.
      CLEAR : IMAT, IMAKT.
    ENDFORM. "P_MAKT
    *&      FORM  P_MARC
          TEXT
    FORM P_MARC.
      LOOP AT IMAT.
        SELECT MATNR MINBE LVORM FROM MARC APPENDING TABLE IMARC
          WHERE MATNR = IMAT-MATNR AND
                LVORM <> 'X'.
      ENDLOOP.
      CLEAR : IMAT, IMARC.
    ENDFORM. "P_MARC
    *&      FORM  P_MBEW
          TEXT
    FORM P_MBEW.
      LOOP AT IMAT.
        SELECT MATNR LBKUM FROM MBEW APPENDING TABLE IMBEW
          WHERE MATNR = IMAT-MATNR.
      ENDLOOP.
      CLEAR : IMAT, IMBEW.
    ENDFORM.                    "P_MBEW
    *&      FORM  POS
          TEXT
    FORM POS.
      LOOP AT IMAT.
        SELECT EBELN EBELP LOEKZ MATNR BUKRS WERKS LGORT MENGE
          FROM EKPO APPENDING TABLE IEKPO
          WHERE MATNR = IMAT-MATNR AND
                WERKS = IMAT-WERKS AND
                LGORT = IMAT-LGORT AND
                LOEKZ EQ SPACE.
      ENDLOOP.
      CLEAR : IMAT, IEKPO.
    ENDFORM.                    "POS
    *&      FORM  GRS
          TEXT
    FORM GRS.
      LOOP AT IEKPO.
        SELECT BWART MATNR WERKS MENGE EBELN EBELP FROM MSEG
    APPENDING TABLE IMSEG
            WHERE MATNR = IEKPO-MATNR AND
                  WERKS = IEKPO-WERKS AND
                  EBELN = IEKPO-EBELN AND
                  EBELP = IEKPO-EBELP AND
                  ( BWART = '101' OR BWART = '103' ).
      ENDLOOP.
      CLEAR: IEKPO, IMSEG.
    ENDFORM.                    "GRS
    *&      FORM  PRS
          TEXT
    FORM PRS.
    LOOP AT IMAT.
    IF IEKPO[] IS NOT INITIAL.
        SELECT BANFN BNFPO LOEKZ STATU MATNR MENGE WERKS LGORT FROM EBAN
    INTO TABLE IEBAN
          FOR ALL ENTRIES IN IMAT
         FROM EBAN APPENDING TABLE IEBAN
         WHERE MATNR = IMAT-MATNR AND
               STATU EQ 'N' AND
               LOEKZ EQ SPACE AND
               WERKS IN PLANT .
    ENDLOOP.
    ENDIF.
      CLEAR: IMAT, IEBAN.
    ENDFORM.                    "PRS
    *&      FORM  READ
          TEXT
    FORM READ.
      LOOP AT IMAT. " MAIN LOOP
        ITAB-MATNR = IMAT-MATNR.
        ITAB-MEINS = IMAT-MEINS.
        ITAB-LGORT = IMAT-LGORT.
        READ TABLE IMAKT WITH KEY MATNR = IMAT-MATNR.
        ITAB-MAKTX = IMAKT-MAKTX.
        READ TABLE IMARC WITH KEY MATNR = IMAT-MATNR.
        ITAB-MINBE = IMARC-MINBE.
        READ TABLE IMBEW WITH KEY MATNR = IMAT-MATNR.
        ITAB-LBKUM = IMBEW-LBKUM.
    SELECTING OPEN PO'S *************************
        CHECK = 0.
        LOOP AT IEKPO WHERE MATNR = IMAT-MATNR. " INNER LOOP
          ITAB-EBELN = IEKPO-EBELN.
          ITAB-EBELP = IEKPO-EBELP.
          ITAB-MENGE = IEKPO-MENGE.
          LOOP AT IMSEG WHERE EBELN = IEKPO-EBELN AND EBELP = IEKPO-EBELP.
            " INNER INNER LOOP.
            TGR = TGR + IMSEG-MENGE.
          ENDLOOP.
          ITAB-DQTY = IEKPO-MENGE - TGR.
          IF ITAB-DQTY > 0.
            CHECK = 1.
          APPEND ITAB.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
          ENDIF.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
          ENDLOOP.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
    SELECTING OPEN PR'S ********************
        LOOP AT IEBAN WHERE MATNR = IMAT-MATNR.
          ITAB-BANFN = IEBAN-BANFN.
          ITAB-BNFPO = IEBAN-BNFPO.
          ITAB-MENG2 = IEBAN-MENGE.
          APPEND ITAB.
          CHECK = 1.
          CLEAR : ITAB-BANFN ,ITAB-MENG2.
        ENDLOOP.
        IF CHECK = 0.
          APPEND ITAB.
        ELSEIF CHECK = 1.
        ENDIF.
        CLEAR : IEKPO,ITAB-EBELN,ITAB-EBELP,ITAB-MENGE,ITAB-DQTY,
    ITAB-BANFN,ITAB-BNFPO,ITAB-MENG2.
      ENDLOOP.
      CLEAR : ITAB,IEKPO,IMAT,IEBAN.
    ENDFORM.                    "READ
    Thanks
    Pari

    Hi Frds
    In my program im displaying Open PO's Number and Quantity and Open PR's Number and Quantity based on Material ,Plant, and Storage location of Material.
    In Output its only displaying Open PR's and Quantity ,if it has Open PO's also, for a same material.
    Kindly anyone correct my mistake.
    TYPE-POOLS: SLIS.
    TABLES : EKPO,MARC,EBAN,MSEG,MARD,MARA,MAKT,MBEW.
    DATA:BODY        TYPE SLIS_T_FIELDCAT_ALV,
         HEADER      TYPE SLIS_FIELDCAT_ALV,
         GD_LAYOUT   TYPE SLIS_LAYOUT_ALV,
         GD_REPID    LIKE SY-REPID.
    DATA : TGR TYPE I,
           CHECK TYPE I.
    TGR   = 0.
    CHECK = 0.
    DATA : MAT_NO LIKE MARA-MATNR, "MATERIAL CODE
           PLA_NO LIKE MARD-WERKS, "PLANT
           STORE  LIKE MARD-LGORT, "STORAGE LOCATION
           COM_NO LIKE EKPO-BUKRS. "COMPANY CODE
    DATA : BEGIN OF ITAB OCCURS 0,
           MATNR LIKE MARA-MATNR, "MATERIAL CODE
           MEINS LIKE MARA-MEINS, "UOM
           MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
           MINBE LIKE MARC-MINBE, "ROL
           LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
           LGORT LIKE MARD-LGORT, "STORAGE
           EBELN LIKE EKPO-EBELN, "PO NUMBER
           EBELP LIKE EKPO-EBELP, "PO LINEITEM
           MENGE LIKE EKPO-MENGE, "OPEN PO QTY
           MENG1 LIKE MSEG-MENGE, "GR QTY
           DQTY  LIKE MSEG-MENGE, "OPEN PO QTY
           BANFN LIKE EBAN-BANFN, "OPEN PR NUMBER
           MENG2 LIKE EBAN-MENGE, "OPEN PR QTY
           BNFPO LIKE EBAN-BANFN, "PR LINEITEM
           END OF ITAB.
    DATA : BEGIN OF IMAT OCCURS 0,
           MATNR LIKE MARA-MATNR, "MATERIAL CODE
           MEINS LIKE MARA-MEINS, "UOM
           LVORM LIKE MARA-LVORM, "DELETED MATERIAL FLAG
           MSTAE LIKE MARA-MSTAE, "BLOCKED MATERIAL
           WERKS LIKE MARD-WERKS, "PLANT
           LGORT LIKE MARD-LGORT, "STORAGE
           END OF IMAT.
    DATA : BEGIN OF IMAKT OCCURS 0,
           MATNR LIKE MAKT-MATNR, "MATERIAL CODE
           MAKTX LIKE MAKT-MAKTX, "MATERIAL DESC.,
           END OF IMAKT.
    DATA : BEGIN OF IMARC OCCURS 0,
           MATNR LIKE MARC-MATNR, "MATERIAL CODE
           MINBE LIKE MARC-MINBE, "ROL
           LVORM LIKE MARC-LVORM, "DELETED MATERIAL FLAG
           END OF IMARC.
    DATA : BEGIN OF IMBEW OCCURS 0,
           MATNR LIKE MBEW-MATNR, "MATERIAL CODE
           LBKUM LIKE MBEW-LBKUM, "WAREHOUSE STOCK
           END OF IMBEW.
    DATA : BEGIN OF IEKPO OCCURS 0,
           EBELN LIKE EKPO-EBELN, "PO NUMBER
           EBELP LIKE EKPO-EBELP, "PO LINEITEM
           LOEKZ LIKE EKPO-LOEKZ, "DELETED PO'S
           MATNR LIKE EKPO-MATNR, "MATERIAL CODE
           BUKRS LIKE EKPO-BUKRS, "COMPANY
           WERKS LIKE EKPO-WERKS, "PLANT
           LGORT LIKE EKPO-LGORT, "STORAGE
           MENGE LIKE EKPO-MENGE, "PO QUANTITY
           END OF IEKPO.
    DATA : BEGIN OF IMSEG OCCURS 0,
           BWART LIKE MSEG-BWART, "MOVEMENT TYPE
           MATNR LIKE MSEG-MATNR, "MATERIAL CODE
           WERKS LIKE MSEG-WERKS, "PLANT
           MENGE LIKE MSEG-MENGE, "GR QUANTITY
           EBELN LIKE MSEG-EBELN, "PO NUMBER
           EBELP LIKE MSEG-EBELP, "PO LINEITEM
           END OF IMSEG.
    DATA : BEGIN OF IEBAN OCCURS 0,
           BANFN LIKE EBAN-BANFN, "PR NUMBER
           BNFPO LIKE EBAN-BNFPO, "PR LINEITEM
           LOEKZ LIKE EBAN-LOEKZ, "DELETED PR
           STATU LIKE EBAN-STATU, "OPEN PR FLAG
           MATNR LIKE EBAN-MATNR, "MATERIAL NUMBER
           MENGE LIKE EBAN-MENGE, "PR QUANTITY
           WERKS LIKE EBAN-WERKS, "PLANT
           LGORT LIKE EBAN-LGORT, "STORAGE
           END OF IEBAN.
    SELECTION-SCREEN: BEGIN OF BLOCK 01.
    SELECTION-SCREEN: BEGIN OF BLOCK 02 WITH FRAME .
    SELECT-OPTIONS MATERIAL FOR MAT_NO.
    SELECT-OPTIONS COMPANY  FOR COM_NO .
    SELECT-OPTIONS PLANT    FOR PLA_NO OBLIGATORY.
    SELECT-OPTIONS STORAGE  FOR STORE.
    SELECTION-SCREEN: END OF BLOCK 02.
    SELECTION-SCREEN: END OF BLOCK 01.
    AT SELECTION-SCREEN.
      PERFORM MATERIAL. "GET MATERIAL
    START-OF-SELECTION.
      PERFORM P_MAKT. "GET MATERIAL DESC.,
      PERFORM P_MARC. "GET ROL
      PERFORM P_MBEW. "GET WAREHOUSE STOCK
      PERFORM POS.    "GET POS
      SORT IEKPO BY EBELN EBELP.
      PERFORM GRS.    "GET GR QTY
      PERFORM PRS.    "GET OPEN PR NUMBER
      PERFORM READ.
      PERFORM FIELDCATALOG.
      PERFORM BUILD_LAYOUT.
    GET ALV DISPLAY
      PERFORM ALVDISPLAY.
    *&      FORM  MATERIAL
          TEXT
    FORM MATERIAL.
      SELECT MARAMATNR MARAMEINS MARALVORM MARAMSTAE
             MARDWERKS MARDLGORT
        INTO CORRESPONDING FIELDS OF TABLE IMAT
        FROM MARA INNER JOIN MARD ON MARDMATNR = MARAMATNR
        WHERE MARA~MATNR IN MATERIAL AND
              MARD~WERKS IN PLANT AND
              MARD~LGORT IN STORAGE AND
              MARA~LVORM <> 'X' AND
              MARA~MSTAE EQ SPACE.
      IF SY-SUBRC <> 0.
        MESSAGE 'NO DATA FOUND FOR THE SELECTION ' TYPE 'E'.
        EXIT.
      ENDIF.
    ENDFORM.                    "MATERIAL
    *&      FORM  P_MAKT
          TEXT
    FORM P_MAKT.
      LOOP AT IMAT.
        SELECT MATNR MAKTX FROM MAKT APPENDING TABLE IMAKT
             WHERE MATNR = IMAT-MATNR.
      ENDLOOP.
      CLEAR : IMAT, IMAKT.
    ENDFORM. "P_MAKT
    *&      FORM  P_MARC
          TEXT
    FORM P_MARC.
      LOOP AT IMAT.
        SELECT MATNR MINBE LVORM FROM MARC APPENDING TABLE IMARC
          WHERE MATNR = IMAT-MATNR AND
                LVORM <> 'X'.
      ENDLOOP.
      CLEAR : IMAT, IMARC.
    ENDFORM. "P_MARC
    *&      FORM  P_MBEW
          TEXT
    FORM P_MBEW.
      LOOP AT IMAT.
        SELECT MATNR LBKUM FROM MBEW APPENDING TABLE IMBEW
          WHERE MATNR = IMAT-MATNR.
      ENDLOOP.
      CLEAR : IMAT, IMBEW.
    ENDFORM.                    "P_MBEW
    *&      FORM  POS
          TEXT
    FORM POS.
      LOOP AT IMAT.
        SELECT EBELN EBELP LOEKZ MATNR BUKRS WERKS LGORT MENGE
          FROM EKPO APPENDING TABLE IEKPO
          WHERE MATNR = IMAT-MATNR AND
                WERKS = IMAT-WERKS AND
                LGORT = IMAT-LGORT AND
                LOEKZ EQ SPACE.
      ENDLOOP.
      CLEAR : IMAT, IEKPO.
    ENDFORM.                    "POS
    *&      FORM  GRS
          TEXT
    FORM GRS.
      LOOP AT IEKPO.
        SELECT BWART MATNR WERKS MENGE EBELN EBELP FROM MSEG
    APPENDING TABLE IMSEG
            WHERE MATNR = IEKPO-MATNR AND
                  WERKS = IEKPO-WERKS AND
                  EBELN = IEKPO-EBELN AND
                  EBELP = IEKPO-EBELP AND
                  ( BWART = '101' OR BWART = '103' ).
      ENDLOOP.
      CLEAR: IEKPO, IMSEG.
    ENDFORM.                    "GRS
    *&      FORM  PRS
          TEXT
    FORM PRS.
    LOOP AT IMAT.
    IF IEKPO[] IS NOT INITIAL.
        SELECT BANFN BNFPO LOEKZ STATU MATNR MENGE WERKS LGORT FROM EBAN
    INTO TABLE IEBAN
          FOR ALL ENTRIES IN IMAT
         FROM EBAN APPENDING TABLE IEBAN
         WHERE MATNR = IMAT-MATNR AND
               STATU EQ 'N' AND
               LOEKZ EQ SPACE AND
               WERKS IN PLANT .
    ENDLOOP.
    ENDIF.
      CLEAR: IMAT, IEBAN.
    ENDFORM.                    "PRS
    *&      FORM  READ
          TEXT
    FORM READ.
      LOOP AT IMAT. " MAIN LOOP
        ITAB-MATNR = IMAT-MATNR.
        ITAB-MEINS = IMAT-MEINS.
        ITAB-LGORT = IMAT-LGORT.
        READ TABLE IMAKT WITH KEY MATNR = IMAT-MATNR.
        ITAB-MAKTX = IMAKT-MAKTX.
        READ TABLE IMARC WITH KEY MATNR = IMAT-MATNR.
        ITAB-MINBE = IMARC-MINBE.
        READ TABLE IMBEW WITH KEY MATNR = IMAT-MATNR.
        ITAB-LBKUM = IMBEW-LBKUM.
    SELECTING OPEN PO'S *************************
        CHECK = 0.
        LOOP AT IEKPO WHERE MATNR = IMAT-MATNR. " INNER LOOP
          ITAB-EBELN = IEKPO-EBELN.
          ITAB-EBELP = IEKPO-EBELP.
          ITAB-MENGE = IEKPO-MENGE.
          LOOP AT IMSEG WHERE EBELN = IEKPO-EBELN AND EBELP = IEKPO-EBELP.
            " INNER INNER LOOP.
            TGR = TGR + IMSEG-MENGE.
          ENDLOOP.
          ITAB-DQTY = IEKPO-MENGE - TGR.
          IF ITAB-DQTY > 0.
            CHECK = 1.
          APPEND ITAB.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
          ENDIF.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
          ENDLOOP.
          CLEAR : ITAB-EBELN,ITAB-EBELP,IEKPO-MENGE,TGR,ITAB-DQTY.
    SELECTING OPEN PR'S ********************
        LOOP AT IEBAN WHERE MATNR = IMAT-MATNR.
          ITAB-BANFN = IEBAN-BANFN.
          ITAB-BNFPO = IEBAN-BNFPO.
          ITAB-MENG2 = IEBAN-MENGE.
          APPEND ITAB.
          CHECK = 1.
          CLEAR : ITAB-BANFN ,ITAB-MENG2.
        ENDLOOP.
        IF CHECK = 0.
          APPEND ITAB.
        ELSEIF CHECK = 1.
        ENDIF.
        CLEAR : IEKPO,ITAB-EBELN,ITAB-EBELP,ITAB-MENGE,ITAB-DQTY,
    ITAB-BANFN,ITAB-BNFPO,ITAB-MENG2.
      ENDLOOP.
      CLEAR : ITAB,IEKPO,IMAT,IEBAN.
    ENDFORM.                    "READ
    Thanks
    Pari

  • Problem in Mtart and Bsart in a report

    hi,
    I am working on report in which i am able to display the all the different material types (MTART) and purchasing doc (BSART) but ZCAP(Capital goods) are not being able to display in it.
    When i make inner join in the select statement with mara for mtart field ,it is not displaying the data but when i remove the inner join of mara from select statement is displaying the data.
    I don't know why it is happening ? Is dere any customization problem i.e. why it is not displaying the capital guds data.
    Plzz provide me the guide lines for it.

    Hi  ricx,
    U must keep the value of varible which r char type in single quotes in your where condition...
    Try it out..
    TABLES: EBAN,MSEG.
    DATA: BEGIN OF ITR1 OCCURS 0,
    MBLNR LIKE MSEG-MBLNR,
    matnr like mseg-matnr,
    EBELN LIKE MSEG-EBELN,
    EBELN LIKE CDHDR-OBJECTID,
    CPUDT LIKE MKPF-CPUDT,
    BANFN LIKE EBAN-BANFN,
    MTART LIKE EKPO-MTART,
    BANFN LIKE CDHDR-OBJECTID,
    BADAT LIKE EBAN-BADAT,
    BSART LIKE EBAN-BSART,
    MTART LIKE MARA-MTART,
    erdat like erev-erdat,
    fgdat like erev-fgdat,
    stage1 type i,
    stage2 type i,
    stage3 type i,
    stage4 type i,
    OUTPUT TYPE I,
    DESC LIKE MAKT-MAKTX,
    FRGDT LIKE EBAN-FRGDT,
    FRGDT1 LIKE EBAN-FRGDT,
    END OF ITR1.
    PARAMETERS : PLANT LIKE MSEG-WERKS.
    SELECT-OPTIONS: P_BSART FOR EBAN-BSART.
    select a~mblnr a~matnr a~ebeln b~CPUDT C~MTART C~banfn d~badat D~BSART "E~MTART
    into table itr1 from mseg as a
    inner join mkpf as b on b~mblnr = a~mblnr
    inner join ekpo as c on c~ebeln = a~ebeln and c~ebelp = a~ebelp
    inner join eban as d on d~banfn = c~banfn and d~bnfpo = c~bnfpo
    inner join mara as e on e~matnr = a~matnr
    where
    a~bwart = '101'  " U must write it in single quotes because its of char type...
    and b~tcode2 = 'MIGO_GR' and
    a~werks = plant AND D~BSART IN P_BSART.
    " AND ( C~MTART = 'ROH' OR C~MTART = 'ZBOP' OR C~MTART = 'ZCON' OR C~MTART = 'ERSA' OR C~MTART = 'HAWA' ).
    AND ( E~MTART = 'ROH' OR E~MTART = 'ZBOP' OR E~MTART = 'ZCON' OR E~MTART = 'ERSA' OR E~MTART = 'HAWA' ).
    LOOP AT ITR1.
    WRITE: / ITR1-EBELN,ITR1-BSART,ITR1-MATNR,ITR1-MBLNR,ITR1-CPUDT.
    ENDLOOP.
    Try to go through EKKO and EKPO tables if possible for ur requirement....
    See the below Query for Help... and modify it according to your need...
    select ebeln ebelp werks matkl mtart from ekpo into table git_ekpo
    where werks in so_werks
       and matkl in so_matkl
       and mtart in so_mtart.
    if sy-subrc = 0.
    if not git_ekpo[] is initial.
      select lifnr bstyp ekgrp bsart zzreldt from ekko into table git_ekko
        for all entries in git_ekpo
          where ebeln = git_ekpo-ebeln
            and bstyp in so_bstyp
            and lifnr in so_lifnr
            and ekgrp in so_ekgrp
            and bsart in so_bsart.
      if sy-subrc = 0.
       delete git_ekpo where banfn = ' '.
       select ebeln ebelp slfdt from eket into table git_eket
        for all entries in git_ekpo
         where ebeln = git_ekpo-ebeln
           and ebelp = git_ekpo-ebelp
           and etenr = '1'.
       if sy-subrc = 0.
         select ebeln ebelp budat banfn bnfpo from ekbe into table git_ekbe
          for all entries in git_ekpo
           where ebeln = git_ekpo-ebeln
             and ebelp = git_ekpo-ebelp
             and budat in so_budat.
         if sy-subrc = 0.
          select <fields> from mseg into table git_mseg
           for all entries in git_ekpo
            where ebeln = git_ekpo-ebeln
              and ebelp = git_ekpo-ebelp
              and bwart = '101'
              and insmk = '3'.
         endif.
       endif.
      endif.
    endif.
    endif.
    Hope it will solve your problem..
    Thanks & Regards
    ilesh 24x7

  • Problem in displaying 2nd secondary list

    Hi ABAP Gurus,
    Here i got an assignment to develope interactive report (basic list, 1st secondary, 2nd secondary list)
    according to my report i am able to get 1st secondary list perfectly but i am not able to get 2nd secondary list .pls solve my problem
    below is my code.
    *& Report  ZCRPT_MM_MRP
    REPORT  zcrpt_mm_mrp .
    *& Report       : ZRPT_MM_PR_HISTORY                               *
    Dev. Class   : ZCVS                                             *
    Program Name : ZRPT_MM_PR_HISTORY                               *
    Description  : PO History Details List                          *
    Author       : Sujit   Created on : 12.11.2007          *
    SAP Release  : SAP ERP Central Component 5.0                    *
    Tcode        : Req DKIK905199  N-160                            *
                  :     DKIK905248  N-160 For Deletion indicator     *
    S O U R C E   C O D E   C H A N G E   H I S T O R Y             *
    CODE     | AUTHOR     | DATE     |   Description                *
              |            |          |                              *
          TABLE  DECLARATIONS                                        *
    TABLES: ekko,ekpo,mara, makt,ekes,eban,mard,s994.
    Internal tables decleration
    TYPE-POOLS: slis.
    DATA: BEGIN OF it_vbrkvbrp OCCURS 0,
            vbeln TYPE vbrk-vbeln,
            fktyp TYPE vbrk-fktyp,
            matnr TYPE vbrp-matnr,
            fkimg TYPE vbrp-fkimg,
            fklmg TYPE vbrp-fklmg,
            vrkme TYPE vbrp-vrkme,
            meins TYPE vbrp-meins,
            shkzg TYPE vbrp-shkzg,
          END OF it_vbrkvbrp.
    DATA: BEGIN OF it_vbrk OCCURS 0,
            matnr TYPE vbrp-matnr,
            fkimg TYPE vbrp-fkimg,
            meins TYPE vbrp-meins,
          END OF it_vbrk.
    DATA: BEGIN OF it_ekko OCCURS 0,
            ebeln TYPE ekko-ebeln,
            bukrs TYPE ekko-bukrs,
            frggr TYPE ekko-frggr,
            frgsx TYPE ekko-frgsx,
            frgke TYPE ekko-frgke,
            frgzu TYPE ekko-frgzu,
          END OF it_ekko.
    DATA: BEGIN OF it_ekbe OCCURS 0,
          ebeln type ekbe-ebeln,
          ebelp type ekbe-ebelp,
          belnr type ekbe-belnr,
          buzei type ekbe-buzei,
          xblnr type ekbe-xblnr,
          END OF it_ekbe.
    DATA: BEGIN OF it_lips OCCURS 0,
          vbeln type lips-vbeln,
          posnr type lips-posnr,
          matnr type lips-matnr,
          vgbel type lips-vgbel,
          lfimg type lips-lfimg,
          meins type lips-meins,
          END OF it_lips.
    data : it1_lips like it_lips occurs 0 with header line.
    DATA: BEGIN OF itab OCCURS 1 ,
          banfn     LIKE eban-banfn,    " Purchase requisition number
          bnfpo     LIKE eban-bnfpo,    " PR Item Number
          werks     LIKE ekpo-werks,    " Plant
          matnr     LIKE ekpo-matnr,    " Material
          maktx     LIKE makt-maktx,    " Name of Material
          pr_menge  LIKE eban-menge,    " PR Quantity
          meins     LIKE ekpo-meins,    " Unit
          ebeln     LIKE ekpo-ebeln,    " PO No
          bsart     LIKE ekko-bsart,    " Purchasing Document Type
          ebelp     LIKE ekpo-ebelp,    " Item
          menge     LIKE ekpo-menge,    " PO Qty
          grn_menge LIKE ekpo-menge,    " GRN Qty
          trn_menge LIKE ekpo-menge,    " Transit Qty
          bal_menge LIKE ekpo-menge,    " Balance PO Qty
          labst     LIKE mard-labst,    " Valuated stock with unrestricted
          fkimg     LIKE vbrp-fkimg,    " Actual billed quantity
          minbe TYPE marc-minbe,
          mabst TYPE marc-mabst,
          fixkz TYPE eban-fixkz,
          zfixkz(7) TYPE c,
          matkl TYPE mara-matkl,
          mvgr1 TYPE mvke-mvgr1,
          bezei TYPE tvm1t-bezei,
          zconfirm1(3) TYPE c,
          zconfirm2(3) TYPE c,
          zconfirm3(3) TYPE c,
        END OF itab.
    DATA: BEGIN OF itab_sale OCCURS 1 ,
          matnr     LIKE ekpo-matnr,    " Material
          werks     LIKE ekpo-werks,    " Plant
          maktx     LIKE makt-maktx,    " Name of Material
          labst     LIKE mard-labst,    " Valuated stock with unrestricted
        END OF itab_sale.
    DATA : i_eban LIKE eban OCCURS 0 WITH HEADER LINE.
    DATA : del_menge LIKE ekes-menge,
           grn_dabmg LIKE ekes-dabmg.
    DATA: BEGIN OF it_marc OCCURS 0,
            matnr TYPE marc-matnr,
            werks TYPE marc-werks,
            minbe TYPE marc-minbe,
            mabst TYPE marc-mabst,
          END OF it_marc.
    DATA: BEGIN OF it_eban OCCURS 0,
            banfn TYPE eban-banfn,
            bnfpo TYPE eban-bnfpo,
            fixkz TYPE eban-fixkz,
            ebeln type eban-ebeln,
          END OF it_eban.
    DATA: BEGIN OF it_mara OCCURS 0,
            matnr TYPE mara-matnr,
            matkl TYPE mara-matkl,
          END OF it_mara.
    DATA: BEGIN OF it_mvke OCCURS 0,
            matnr TYPE mvke-matnr,
            mvgr1 TYPE mvke-mvgr1,
            mvgr2 TYPE mvke-mvgr2,
            mvgr3 TYPE mvke-mvgr3,
            mvgr4 TYPE mvke-mvgr4,
          END OF it_mvke.
    DATA: BEGIN OF it_tvm1t OCCURS 0,
            mvgr1 TYPE tvm1t-mvgr1,
            bezei TYPE tvm1t-bezei,
          END OF it_tvm1t.
    DATA:  fcat TYPE slis_t_fieldcat_alv,
           fcat1 TYPE slis_t_fieldcat_alv,
           fcat2 TYPE slis_t_fieldcat_alv,
           heading  TYPE slis_t_listheader,
           heading1  TYPE slis_t_listheader,
           heading2  TYPE slis_t_listheader,
           events   TYPE slis_t_event,
           events1   TYPE slis_t_event,
           events2   TYPE slis_t_event,
           repname  LIKE sy-repid.
    DATA: keyinfo  TYPE slis_keyinfo_alv.
    CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
    CONSTANTS: formname_top_of_page1 TYPE slis_formname VALUE 'TOP_OF_PAGE1'
    CONSTANTS: formname_top_of_page2 TYPE slis_formname VALUE 'TOP_OF_PAGE2'
    RANGES : s_erdat FOR vbrk-erdat.
    DATA: ss_date TYPE mkpf-budat.
    DATA: ss_period(3) TYPE n.
    Screen Selection
    SELECTION-SCREEN BEGIN OF BLOCK  s1 WITH FRAME TITLE text-001.
    *SELECT-OPTIONS : s_ebeln FOR ekpo-ebeln,
                    s_werks FOR ekpo-werks.
    SELECT-OPTIONS : s_banfn FOR eban-banfn,  "Purchase requisition number
                     s_badat FOR eban-badat,  "Requisition (request) date
                     s_matnr FOR eban-matnr,  "Material Number
                     s_werks FOR eban-werks,  "Plant
                     s_lgort FOR eban-lgort,  "Storage Location
                     s_matkl FOR eban-matkl,  "Material group
                     s_flief FOR eban-flief,  "Fixed Vendor
                     s_bsart FOR ekko-bsart NO INTERVALS.   " Purchasing
    SELECTION-SCREEN  END    OF BLOCK  s1 .
    SELECTION-SCREEN BEGIN OF BLOCK  s2 WITH FRAME TITLE text-002.
    PARAMETERS: s_period(3) TYPE n .
    SELECTION-SCREEN  END    OF BLOCK  s2 .
    initialization.
    repname = sy-repid.
      PERFORM build_eventtab  USING events[].
      PERFORM build_eventtab1  USING events1[].
      PERFORM build_eventtab2  USING events2[].
      PERFORM build_comment USING heading[].
      PERFORM build_comment1 USING heading1[].
      PERFORM build_comment2 USING heading2[].
    Strat-of-Selection
    START-OF-SELECTION.
      PERFORM getdata.
      PERFORM getfieldcatalog USING fcat[].
      PERFORM getfieldcatalog1 USING fcat1[].
      PERFORM getfieldcatalog2 USING fcat2[].
      PERFORM alvdisplaydata.
    END-OF-SELECTION.
    *&      Form  getdata
          text
    -->  p1        text
    <--  p2        text
    FORM getdata.
      SELECT * FROM eban INTO CORRESPONDING FIELDS OF TABLE i_eban
               WHERE banfn IN s_banfn      "Purchase requisition number
               AND   badat IN s_badat      "Requisition (request) date
               AND   matnr IN s_matnr      "Material Number
               AND   werks IN s_werks      "Plant
               AND   lgort IN s_lgort      "Storage Location
               AND   matkl IN s_matkl      "Material group
               AND   flief IN s_flief      "Fixed Vendor
               AND   loekz NE 'X'          "Deletion Pocument
               AND   afnam EQ 'MRP'.       "Name of requisitioner/requester
      IF NOT i_eban[] IS INITIAL.
        LOOP AT i_eban.
          CLEAR itab.
          itab-banfn     =  i_eban-banfn.
          itab-bnfpo     =  i_eban-bnfpo.
          itab-pr_menge  =  i_eban-menge.
          itab-meins     =  i_eban-meins.
          itab-ebeln     =  i_eban-ebeln.
          itab-ebelp     =  i_eban-ebelp.
          itab-matnr     =  i_eban-matnr.
          itab-werks     =  i_eban-werks.
    **----Get Material Description
          IF NOT i_eban-matnr IS INITIAL.
            SELECT SINGLE * FROM  makt
                            WHERE matnr EQ i_eban-matnr.
            IF sy-subrc EQ 0.
              itab-maktx = makt-maktx.
            ENDIF.
          ELSE.
            itab-maktx = i_eban-txz01.
          ENDIF.
    *----Get PO & GRN Quantity
          IF i_eban-ebeln GT 0 AND i_eban-ebelp GT 0.
            SELECT SINGLE * FROM ekpo
                            WHERE ebeln = i_eban-ebeln
                            AND   ebelp = i_eban-ebelp.
            IF sy-subrc EQ 0.
              itab-menge     = ekpo-menge.
            ENDIF.
            SELECT SINGLE * FROM ekko
                            WHERE ebeln = i_eban-ebeln.
            IF sy-subrc EQ 0.
              itab-bsart     = ekko-bsart.
            ENDIF.
    *-------Get GRN Quantity
            CLEAR : del_menge,grn_dabmg.
            IF  ekpo-bstae = '0004'.  " GRN Against InbondDelivery
              SELECT SUM( menge ) SUM( dabmg )
                      FROM ekes
                      INTO (del_menge,grn_dabmg)
                      WHERE ebeln =  i_eban-ebeln
                      AND   ebelp =  i_eban-ebelp
                      AND   ebtyp = 'LA'.
              IF sy-subrc EQ 0.
                itab-grn_menge = grn_dabmg.
                itab-trn_menge = del_menge - grn_dabmg.
              itab-bal_menge = ekpo-menge - del_menge.
                IF itab-bal_menge < 0.
                 itab-bal_menge = 0.
                ENDIF.
              ELSE.
               itab-bal_menge = itab-menge.
              ENDIF.
            ELSE.          " Regular GRN
              SELECT SUM( menge )
                      FROM ekbe
                      INTO (grn_dabmg)
                      WHERE ebeln =  i_eban-ebeln
                      AND   ebelp =  i_eban-ebelp
                      AND   bewtp = 'E'
                      AND   bwart = '101'.
              IF sy-subrc EQ 0.
                itab-grn_menge = grn_dabmg.
              itab-trn_menge = del_menge - grn_dabmg.
              ENDIF.
    For Cancelled GRN
              SELECT SUM( menge )
                      FROM ekbe
                      INTO (grn_dabmg)
                      WHERE ebeln =  i_eban-ebeln
                      AND   ebelp =  i_eban-ebelp
                      AND   bewtp = 'E'
                      AND   bwart = '102'.
              IF sy-subrc EQ 0.
                itab-grn_menge = itab-grn_menge - grn_dabmg.
              itab-trn_menge = del_menge - grn_dabmg.
              ENDIF.
              IF itab-bsart = 'UB'.
                CLEAR : grn_dabmg,grn_dabmg.
                SELECT SUM( menge )
                        FROM ekbe
                        INTO (grn_dabmg)
                        WHERE ebeln =  i_eban-ebeln
                        AND   ebelp =  i_eban-ebelp
                        AND   bewtp = 'U'
                        AND   bwart = '641'.
                IF sy-subrc EQ 0.
                  itab-trn_menge  = grn_dabmg.
                ENDIF.
    For Reversal of Issue Document
                SELECT SUM( menge )
                        FROM ekbe
                        INTO (grn_dabmg)
                        WHERE ebeln =  i_eban-ebeln
                        AND   ebelp =  i_eban-ebelp
                        AND   bewtp = 'U'
                        AND   bwart = '642'.
                IF sy-subrc EQ 0.
                  itab-trn_menge  = itab-trn_menge  - grn_dabmg.
                ENDIF.
                IF itab-grn_menge <> 0.
                  itab-trn_menge = 0.
                ENDIF.
              ENDIF.
    End
            ENDIF.
    *-------End
          ENDIF.
          itab-bal_menge = itab-menge - ( itab-grn_menge + itab-trn_menge ).
          CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
            EXPORTING
              input  = itab-matnr
            IMPORTING
              output = itab-matnr.
          itab_sale-matnr = itab-matnr.
          itab_sale-werks = itab-werks.
          itab_sale-maktx = itab-maktx.
          COLLECT itab_sale.
          APPEND itab.
        ENDLOOP.
      ENDIF.
      IF NOT s_bsart[] IS INITIAL.
        DELETE itab WHERE bsart NOT IN s_bsart.
      ENDIF.
      IF NOT itab_sale IS INITIAL.
        LOOP AT itab_sale.
    *-----Get Sales Quantity
          CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
            EXPORTING
              input  = itab_sale-matnr
            IMPORTING
              output = itab_sale-matnr.
    *-----Change as on 08.12.2007
          SELECT SUM( clabs ) INTO  itab_sale-labst
                              FROM  mchb
                              WHERE matnr = itab_sale-matnr
                              AND   werks = itab_sale-werks.
    *-----End
          MODIFY itab_sale TRANSPORTING labst matnr.
        ENDLOOP.
        LOOP AT itab.
          READ TABLE itab_sale WITH KEY matnr = itab-matnr
                               werks = itab-werks.
          IF sy-subrc = 0.
            CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
              EXPORTING
                input  = itab_sale-matnr
              IMPORTING
                output = itab_sale-matnr.
            MOVE itab_sale-labst TO itab-labst.
          ENDIF.
          MODIFY itab TRANSPORTING labst.
          CLEAR itab.
        ENDLOOP.
      ENDIF.
      CHECK itab[] IS NOT INITIAL.
      SELECT * FROM marc CLIENT SPECIFIED
                              INTO CORRESPONDING FIELDS OF TABLE it_marc
                              FOR ALL ENTRIES IN itab
                              WHERE mandt = sy-mandt
                              AND matnr EQ itab-matnr
                              AND werks EQ itab-werks.
      SELECT * FROM eban CLIENT SPECIFIED
                             INTO CORRESPONDING FIELDS OF TABLE it_eban
                             FOR ALL ENTRIES IN itab
                             WHERE mandt = sy-mandt
                             AND banfn EQ itab-banfn
                             AND bnfpo EQ itab-bnfpo.
      SELECT * FROM mara CLIENT SPECIFIED
                            INTO CORRESPONDING FIELDS OF TABLE it_mara
                            FOR ALL ENTRIES IN itab
                            WHERE mandt = sy-mandt
                            AND matnr EQ itab-matnr.
      SELECT * FROM mvke CLIENT SPECIFIED
                           INTO CORRESPONDING FIELDS OF TABLE it_mvke
                           FOR ALL ENTRIES IN itab
                           WHERE mandt = sy-mandt
                           AND matnr EQ itab-matnr.
      IF sy-subrc = 0.
        SELECT * FROM tvm1t CLIENT SPECIFIED
                       INTO CORRESPONDING FIELDS OF TABLE it_tvm1t
                       FOR ALL ENTRIES IN it_mvke
                       WHERE mandt = sy-mandt
                       AND mvgr1 EQ it_mvke-mvgr1.
      ENDIF.
      IF s_period IS NOT INITIAL.
        ss_period = s_period.
        ss_period = ss_period + 1.
        s_erdat-sign = 'I'.
        s_erdat-option = 'BT'.
        s_erdat-high = sy-datum.
        ss_date = sy-datum - ss_period.
        s_erdat-low = ss_date.
        APPEND s_erdat.
        CLEAR s_erdat.
        SELECT * FROM zcvi_vbrk_vbrp CLIENT SPECIFIED
                             INTO CORRESPONDING FIELDS OF TABLE it_vbrkvbrp
                                     FOR ALL ENTRIES IN itab
                                     WHERE mandt = sy-mandt
                                     AND matnr = itab-matnr
                                     AND   fkart IN ('Z3PS','ZVIT',
                                           'ZVDT','ZFRV',
                                           'ZDRV','ZCMR')
                                     AND fkdat IN s_erdat
                                     AND fksto EQ space
                                     AND sfakn EQ space
                                     AND rfbsk NE 'E'
                                     AND fkimg NE 0.
        LOOP AT it_vbrkvbrp.
          IF it_vbrkvbrp-fktyp NE 'L'.
            DELETE it_vbrkvbrp.
            CONTINUE.
          ENDIF.
          IF it_vbrkvbrp-vrkme NE it_vbrkvbrp-meins.
            it_vbrkvbrp-fkimg = it_vbrkvbrp-fklmg.
            it_vbrkvbrp-meins = it_vbrkvbrp-vrkme.
          ENDIF.
          IF it_vbrkvbrp-shkzg = 'X'.
            it_vbrkvbrp-fkimg = it_vbrkvbrp-fkimg * -1.
          ENDIF.
          it_vbrk-matnr = it_vbrkvbrp-matnr.
          it_vbrk-fkimg = it_vbrkvbrp-fkimg.
          it_vbrk-meins = it_vbrkvbrp-meins.
          IF it_vbrk[] IS INITIAL.
            APPEND it_vbrk.
            CLEAR it_vbrk.
          ELSE.
            COLLECT it_vbrk.
            CLEAR it_vbrk.
          ENDIF.
        ENDLOOP.
      ENDIF.
      SORT it_vbrkvbrp BY matnr.
      SELECT * FROM ekko CLIENT SPECIFIED
                                 INTO CORRESPONDING FIELDS OF TABLE it_ekko
                                  FOR ALL ENTRIES IN itab
                                  WHERE mandt = sy-mandt
                                  AND ebeln = itab-ebeln.
      SORT it_ekko BY ebeln.
      LOOP AT itab.
        READ TABLE it_ekko BINARY SEARCH WITH KEY
                                                ebeln = itab-ebeln.
        IF sy-subrc = 0.
          IF it_ekko-frgke = 'R'.
            itab-zconfirm1 = 'YES'.
            itab-zconfirm2 = 'YES'.
            itab-zconfirm3 = 'YES'.
          ELSEIF it_ekko-frgzu = 'X'.
            itab-zconfirm1 = 'YES'.
          ELSEIF it_ekko-frgzu = 'XX'.
            itab-zconfirm1 = 'YES'.
            itab-zconfirm2 = 'YES'.
          ENDIF.
        ENDIF.
        IF s_period IS NOT INITIAL.
          READ TABLE it_vbrk BINARY SEARCH
                                           WITH KEY matnr = itab-matnr.
          IF sy-subrc = 0.
            itab-fkimg = it_vbrk-fkimg.
          ENDIF.
        ENDIF.
        READ TABLE it_marc WITH KEY matnr = itab-matnr
                                    werks = itab-werks.
        IF sy-subrc = 0.
          MOVE it_marc-minbe TO itab-minbe.
          MOVE it_marc-mabst TO itab-mabst.
        ENDIF.
        READ TABLE it_eban WITH KEY banfn = itab-banfn
                                    bnfpo = itab-bnfpo.
        IF sy-subrc = 0.
          IF it_eban-fixkz EQ 'X'.
            itab-zfixkz = 'Firmed'.
          ENDIF.
        ENDIF.
        READ TABLE it_mara WITH KEY matnr = itab-matnr.
        IF sy-subrc = 0.
          MOVE it_mara-matkl TO itab-matkl.
        ENDIF.
        READ TABLE it_mvke WITH KEY matnr = itab-matnr.
        IF sy-subrc = 0.
          MOVE it_mvke-mvgr1 TO itab-mvgr1.
          READ TABLE it_tvm1t WITH KEY mvgr1 = itab-mvgr1.
          IF sy-subrc = 0.
            MOVE it_tvm1t-bezei TO itab-bezei.
          ENDIF.
        ENDIF.
        MODIFY itab.
        CLEAR itab.
      ENDLOOP.
    ENDFORM.                    " getdata
    *&      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.
      CLEAR: hline.
      hline-info = 'Purchase Requision History'.
      hline-typ  = 'H'.
      APPEND hline TO p_heading.
      CLEAR hline.
    ENDFORM.                    " build_comment
    *&      Form  getfieldcatalog
          text
    -->  p1        text
    <--  p2        text
    FORM getfieldcatalog USING  p_fcat TYPE slis_t_fieldcat_alv.
      DATA : w_fcat TYPE slis_fieldcat_alv.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'BANFN'.
      w_fcat-seltext_l    = 'PR No '.
      w_fcat-key          = 'X'.
      w_fcat-col_pos      = 1.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'BNFPO'.
      w_fcat-seltext_l    = 'PR Item '.
      w_fcat-key          = 'X'.
      w_fcat-col_pos      = 2.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MATNR'.
      w_fcat-seltext_l    = 'Material '.
      w_fcat-col_pos      = 3.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MAKTX'.
      w_fcat-seltext_l    = 'Name of the Mateiral '.
      w_fcat-col_pos      = 4.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'WERKS'.
      w_fcat-seltext_l    = 'Plant '.
      w_fcat-col_pos      = 5.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'EBELN'.
      w_fcat-seltext_l    = 'PO No '.
      w_fcat-hotspot        = 'X'.
      w_fcat-col_pos      = 6.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'EBELP'.
      w_fcat-seltext_l    = 'PO Item '.
      w_fcat-col_pos      = 7.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'PR_MENGE'.
      w_fcat-seltext_l    = 'PR Qty '.
      w_fcat-col_pos      = 8.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MEINS'.
      w_fcat-seltext_l    = 'Unit'.
      w_fcat-col_pos      = 9.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MENGE'.
      w_fcat-seltext_l    = 'PO Quantity '.
      w_fcat-col_pos      = 10.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'GRN_MENGE'.
      w_fcat-seltext_l    = 'GRN Qty '.
      w_fcat-col_pos      = 11.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'TRN_MENGE'.
      w_fcat-seltext_l    = 'Transit Qty '.
      w_fcat-col_pos      = 12.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'BAL_MENGE'.
      w_fcat-seltext_l    = 'Balance PO Qty '.
      w_fcat-col_pos      = 13.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'LABST'.
      w_fcat-seltext_l    = 'Current Stock'.
      w_fcat-col_pos      = 14.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'FKIMG'.
      w_fcat-seltext_l    = 'Sales Qty '.
      w_fcat-col_pos      = 15.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MINBE'.
      w_fcat-seltext_l    = 'Reorder Point'.
      w_fcat-col_pos      = 16.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MABST'.
      w_fcat-seltext_l    = 'Maximum stock level'.
      w_fcat-col_pos      = 17.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'ZFIXKZ'.
      w_fcat-seltext_l    = 'Fixed Indicator'.
      w_fcat-col_pos      = 18.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MATKL'.
      w_fcat-seltext_l    = 'Design'.
      w_fcat-col_pos      = 19.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'MVGR1'.
      w_fcat-seltext_l    = 'Size'.
      w_fcat-col_pos      = 20.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'BEZEI'.
      w_fcat-seltext_l    = 'Size Desc.'.
      w_fcat-col_pos      = 21.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'FKIMG'.
      w_fcat-seltext_l    = 'Sales Qty '.
      w_fcat-col_pos      = 22.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'ZCONFIRM1'.
      w_fcat-seltext_l    = 'Release1'.
      w_fcat-col_pos      = 23.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'ZCONFIRM2'.
      w_fcat-seltext_l    = 'Release2'.
      w_fcat-col_pos      = 24.
      APPEND w_fcat TO fcat.
      CLEAR w_fcat.
      w_fcat-tabname      = 'ITAB'.
      w_fcat-fieldname    = 'ZCONFIRM3'.
      w_fcat-seltext_l    = 'Release3'.
      w_fcat-col_pos      = 25.
      APPEND w_fcat TO fcat.
    ENDFORM.                    " getfieldcatalog
    *&      Form  alvdisplaydata
          text
    -->  p1        text
    <--  p2        text
    FORM alvdisplaydata .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program      = repname
          i_callback_user_command = 'USER_COMMAND'
          it_fieldcat             = fcat
          it_events               = events[]
        TABLES
          t_outtab                = itab.
      IF sy-subrc <> 0.
        WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
      ENDIF.
    ENDFORM.                    " alvdisplaydata
          FORM TOP_OF_PAGE                                              *
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = heading.
    ENDFORM.                    "TOP_OF_PAGE
    *&      Form  build_eventtab1
          text
         -->P_EVENTS[]  text
    FORM build_eventtab1  USING   p_events1 TYPE slis_t_event.
      DATA: ls_event1 TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type = 0
        IMPORTING
          et_events   = p_events1.
      READ TABLE p_events1 WITH KEY name = slis_ev_top_of_page
                               INTO ls_event1.
      IF sy-subrc = 0.
        MOVE formname_top_of_page1 TO ls_event1-form.
        APPEND ls_event1 TO p_events1.
      ENDIF.
    endform.
    *&      Form  build_comment
          text
         -->P_HEADING[]  text
    FORM build_comment1  USING    p_heading1 TYPE slis_t_listheader.
      DATA: hline1 TYPE slis_listheader.
      hline1-info = '1 Secondary List'.
      hline1-typ  = 'H'.
      APPEND hline1 TO p_heading1.
      CLEAR hline1.
    ENDFORM.                    " build_comment
    *&      Form  getfieldcatalog1
          text
         -->P_FCAT1[]  text
    form getfieldcatalog1  using    p_fcat1 TYPE slis_t_fieldcat_alv.
    DATA : w_fcat1 TYPE slis_fieldcat_alv.
      CLEAR w_fcat1.
      w_fcat1-tabname      = 'IT_LIPS'.
      w_fcat1-fieldname    = 'VBELN'.
      w_fcat1-seltext_l    = 'Pr.No'.
      w_fcat1-hotspot   = 'X'.
      w_fcat1-col_pos      = 1.
      APPEND w_fcat1 to fcat1.
      CLEAR w_fcat1.
      w_fcat1-tabname      = 'IT_LIPS'.
      w_fcat1-fieldname    = 'POSNR'.
      w_fcat1-seltext_l    = 'PR Item'.
      w_fcat1-col_pos      = 2.
      APPEND w_fcat1 to fcat1.
      CLEAR w_fcat1.
      w_fcat1-tabname      = 'IT_LIPS'.
      w_fcat1-fieldname    = 'MATNR'.
      w_fcat1-seltext_l    = 'Material'.
      w_fcat1-col_pos      = 3.
      APPEND w_fcat1 to fcat1.
      CLEAR w_fcat1.
      w_fcat1-tabname      = 'IT_LIPS'.
      w_fcat1-fieldname    = 'LFIMG'.
      w_fcat1-seltext_l    = 'Actual quantity delivered'.
      w_fcat1-col_pos      = 4.
      APPEND w_fcat1 to fcat1.
      CLEAR w_fcat1.
      w_fcat1-tabname      = 'IT_LIPS'.
      w_fcat1-fieldname    = 'MEINS'.
      w_fcat1-seltext_l    = 'Base Unit of Measure'.
      w_fcat1-col_pos      = 5.
      APPEND w_fcat1 to fcat1.
    endform.                    " getfieldcatalog1
    *&      Form  USER_COMMAND
          text
         -->R_UCOMM      text
         -->RS_SELFIELD  text
    FORM user_command  USING r_ucomm LIKE sy-ucomm
          rs_selfield TYPE slis_selfield.
    READ TABLE itab INDEX rs_selfield-tabindex.
      IF sy-subrc EQ 0.
      select vbeln
             posnr
             matnr
             vgbel
             lfimg
             meins from lips into table it_lips
             where vgbel = itab-ebeln.
      ENDIF.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program      = repname
          i_callback_user_command = 'USER_COMMAND'
          it_fieldcat             = fcat1
          it_events               = events1[]
        TABLES
          t_outtab                = it_lips.
      IF sy-subrc <> 0.
        WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
      ENDIF.
    ENDFORM.                    "USER_COMMAND
          FORM TOP_OF_PAGE1                                              *
    FORM top_of_page1.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = heading1.
    ENDFORM.                    "TOP_OF_PAGE1
    *&      Form  build_eventtab1
          text
         -->P_EVENTS[]  text
    FORM build_eventtab2  USING   p_events2 TYPE slis_t_event.
      DATA: ls_event2 TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type = 0
        IMPORTING
          et_events   = p_events2.
      READ TABLE p_events2 WITH KEY name = slis_ev_top_of_page
                               INTO ls_event2.
      IF sy-subrc = 0.
        MOVE formname_top_of_page2 TO ls_event2-form.
        APPEND ls_event2 TO p_events2.
      ENDIF.
    endform.
    *&      Form  build_comment
          text
         -->P_HEADING[]  text
    FORM build_comment2  USING    p_heading2 TYPE slis_t_listheader.
      DATA: hline2 TYPE slis_listheader.
      hline2-info = '2 Secondary List'.
      hline2-typ  = 'H'.
      APPEND hline2 TO p_heading2.
      CLEAR hline2.
    ENDFORM.                    " build_comment
    *&      Form  getfieldcatalog1
          text
         -->P_FCAT1[]  text
    form getfieldcatalog2  using    p_fcat2 TYPE slis_t_fieldcat_alv.
    DATA : w_fcat2 TYPE slis_fieldcat_alv.
      CLEAR w_fcat2.
      w_fcat2-tabname      = 'IT_EKBE'.
      w_fcat2-fieldname    = 'EBELN'.
      w_fcat2-seltext_l    = 'Pr.Doc No'.
      w_fcat2-col_pos      = 1.
      APPEND w_fcat2 to fcat2.
      CLEAR w_fcat2.
      w_fcat2-tabname      = 'IT_EKBE'.
      w_fcat2-fieldname    = 'EBELP'.
      w_fcat2-seltext_l    = 'PR Doc Item'.
      w_fcat2-col_pos      = 2.
      APPEND w_fcat2 to fcat2.
      CLEAR w_fcat2.
      w_fcat2-tabname      = 'IT_EKBE'.
      w_fcat2-fieldname    = 'BELNR'.
      w_fcat2-seltext_l    = 'No.Mat Doc'.
      w_fcat2-col_pos      = 3.
      APPEND w_fcat2 to fcat2.
      CLEAR w_fcat2.
      w_fcat2-tabname      = 'IT_EKBE'.
      w_fcat2-fieldname    = 'BUZEI'.
      w_fcat2-seltext_l    = 'Item in Mat Doc'.

    Hi,
    You did mistakes hear.
    check for >>>>
    *& Report ZCRPT_MM_MRP
    REPORT zcrpt_mm_mrp .
    *& Report : ZRPT_MM_PR_HISTORY *
    Dev. Class : ZCVS *
    Program Name : ZRPT_MM_PR_HISTORY *
    Description : PO History Details List *
    Author : Sujit Created on : 12.11.2007 *
    SAP Release : SAP ERP Central Component 5.0 *
    Tcode : Req DKIK905199 N-160 *
    : DKIK905248 N-160 For Deletion indicator *
    S O U R C E C O D E C H A N G E H I S T O R Y *
    CODE | AUTHOR | DATE | Description *
    | | | *
    TABLE DECLARATIONS *
    TABLES: ekko,ekpo,mara, makt,ekes,eban,mard,s994.
    Internal tables decleration
    TYPE-POOLS: slis.
    DATA: BEGIN OF it_vbrkvbrp OCCURS 0,
    vbeln TYPE vbrk-vbeln,
    fktyp TYPE vbrk-fktyp,
    matnr TYPE vbrp-matnr,
    fkimg TYPE vbrp-fkimg,
    fklmg TYPE vbrp-fklmg,
    vrkme TYPE vbrp-vrkme,
    meins TYPE vbrp-meins,
    shkzg TYPE vbrp-shkzg,
    END OF it_vbrkvbrp.
    DATA: BEGIN OF it_vbrk OCCURS 0,
    matnr TYPE vbrp-matnr,
    fkimg TYPE vbrp-fkimg,
    meins TYPE vbrp-meins,
    END OF it_vbrk.
    DATA: BEGIN OF it_ekko OCCURS 0,
    ebeln TYPE ekko-ebeln,
    bukrs TYPE ekko-bukrs,
    frggr TYPE ekko-frggr,
    frgsx TYPE ekko-frgsx,
    frgke TYPE ekko-frgke,
    frgzu TYPE ekko-frgzu,
    END OF it_ekko.
    DATA: BEGIN OF it_ekbe OCCURS 0,
    ebeln type ekbe-ebeln,
    ebelp type ekbe-ebelp,
    belnr type ekbe-belnr,
    buzei type ekbe-buzei,
    xblnr type ekbe-xblnr,
    END OF it_ekbe.
    DATA: BEGIN OF it_lips OCCURS 0,
    vbeln type lips-vbeln,
    posnr type lips-posnr,
    matnr type lips-matnr,
    vgbel type lips-vgbel,
    lfimg type lips-lfimg,
    meins type lips-meins,
    END OF it_lips.
    data : it1_lips like it_lips occurs 0 with header line.
    DATA: BEGIN OF itab OCCURS 1 ,
    banfn LIKE eban-banfn, " Purchase requisition number
    bnfpo LIKE eban-bnfpo, " PR Item Number
    werks LIKE ekpo-werks, " Plant
    matnr LIKE ekpo-matnr, " Material
    maktx LIKE makt-maktx, " Name of Material
    pr_menge LIKE eban-menge, " PR Quantity
    meins LIKE ekpo-meins, " Unit
    ebeln LIKE ekpo-ebeln, " PO No
    bsart LIKE ekko-bsart, " Purchasing Document Type
    ebelp LIKE ekpo-ebelp, " Item
    menge LIKE ekpo-menge, " PO Qty
    grn_menge LIKE ekpo-menge, " GRN Qty
    trn_menge LIKE ekpo-menge, " Transit Qty
    bal_menge LIKE ekpo-menge, " Balance PO Qty
    labst LIKE mard-labst, " Valuated stock with unrestricted
    fkimg LIKE vbrp-fkimg, " Actual billed quantity
    minbe TYPE marc-minbe,
    mabst TYPE marc-mabst,
    fixkz TYPE eban-fixkz,
    zfixkz(7) TYPE c,
    matkl TYPE mara-matkl,
    mvgr1 TYPE mvke-mvgr1,
    bezei TYPE tvm1t-bezei,
    zconfirm1(3) TYPE c,
    zconfirm2(3) TYPE c,
    zconfirm3(3) TYPE c,
    END OF itab.
    DATA: BEGIN OF itab_sale OCCURS 1 ,
    matnr LIKE ekpo-matnr, " Material
    werks LIKE ekpo-werks, " Plant
    maktx LIKE makt-maktx, " Name of Material
    labst LIKE mard-labst, " Valuated stock with unrestricted
    END OF itab_sale.
    DATA : i_eban LIKE eban OCCURS 0 WITH HEADER LINE.
    DATA : del_menge LIKE ekes-menge,
    grn_dabmg LIKE ekes-dabmg.
    DATA: BEGIN OF it_marc OCCURS 0,
    matnr TYPE marc-matnr,
    werks TYPE marc-werks,
    minbe TYPE marc-minbe,
    mabst TYPE marc-mabst,
    END OF it_marc.
    DATA: BEGIN OF it_eban OCCURS 0,
    banfn TYPE eban-banfn,
    bnfpo TYPE eban-bnfpo,
    fixkz TYPE eban-fixkz,
    ebeln type eban-ebeln,
    END OF it_eban.
    DATA: BEGIN OF it_mara OCCURS 0,
    matnr TYPE mara-matnr,
    matkl TYPE mara-matkl,
    END OF it_mara.
    DATA: BEGIN OF it_mvke OCCURS 0,
    matnr TYPE mvke-matnr,
    mvgr1 TYPE mvke-mvgr1,
    mvgr2 TYPE mvke-mvgr2,
    mvgr3 TYPE mvke-mvgr3,
    mvgr4 TYPE mvke-mvgr4,
    END OF it_mvke.
    DATA: BEGIN OF it_tvm1t OCCURS 0,
    mvgr1 TYPE tvm1t-mvgr1,
    bezei TYPE tvm1t-bezei,
    END OF it_tvm1t.
    DATA: fcat TYPE slis_t_fieldcat_alv,
    fcat1 TYPE slis_t_fieldcat_alv,
    fcat2 TYPE slis_t_fieldcat_alv,
    heading TYPE slis_t_listheader,
    heading1 TYPE slis_t_listheader,
    heading2 TYPE slis_t_listheader,
    events TYPE slis_t_event,
    events1 TYPE slis_t_event,
    events2 TYPE slis_t_event,
    repname LIKE sy-repid.
    DATA: keyinfo TYPE slis_keyinfo_alv.
    CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
    CONSTANTS: formname_top_of_page1 TYPE slis_formname VALUE 'TOP_OF_PAGE1'
    CONSTANTS: formname_top_of_page2 TYPE slis_formname VALUE 'TOP_OF_PAGE2'
    RANGES : s_erdat FOR vbrk-erdat.
    DATA: ss_date TYPE mkpf-budat.
    DATA: ss_period(3) TYPE n.
    Screen Selection
    SELECTION-SCREEN BEGIN OF BLOCK s1 WITH FRAME TITLE text-001.
    *SELECT-OPTIONS : s_ebeln FOR ekpo-ebeln,
    s_werks FOR ekpo-werks.
    SELECT-OPTIONS : s_banfn FOR eban-banfn, "Purchase requisition number
    s_badat FOR eban-badat, "Requisition (request) date
    s_matnr FOR eban-matnr, "Material Number
    s_werks FOR eban-werks, "Plant
    s_lgort FOR eban-lgort, "Storage Location
    s_matkl FOR eban-matkl, "Material group
    s_flief FOR eban-flief, "Fixed Vendor
    s_bsart FOR ekko-bsart NO INTERVALS. " Purchasing
    SELECTION-SCREEN END OF BLOCK s1 .
    SELECTION-SCREEN BEGIN OF BLOCK s2 WITH FRAME TITLE text-002.
    PARAMETERS: s_period(3) TYPE n .
    SELECTION-SCREEN END OF BLOCK s2 .
    initialization.
    repname = sy-repid.
    PERFORM build_eventtab USING events[].
    PERFORM build_eventtab1 USING events1[].
    PERFORM build_eventtab2 USING events2[].
    PERFORM build_comment USING heading[].
    PERFORM build_comment1 USING heading1[].
    PERFORM build_comment2 USING heading2[].
    Strat-of-Selection
    START-OF-SELECTION.
    PERFORM getdata.
    PERFORM getfieldcatalog USING fcat[].
    PERFORM getfieldcatalog1 USING fcat1[].
    PERFORM getfieldcatalog2 USING fcat2[].
    PERFORM alvdisplaydata.
    END-OF-SELECTION.
    *& Form getdata
    text
    --> p1 text
    <-- p2 text
    FORM getdata.
    SELECT * FROM eban INTO CORRESPONDING FIELDS OF TABLE i_eban
    WHERE banfn IN s_banfn "Purchase requisition number
    AND badat IN s_badat "Requisition (request) date
    AND matnr IN s_matnr "Material Number
    AND werks IN s_werks "Plant
    AND lgort IN s_lgort "Storage Location
    AND matkl IN s_matkl "Material group
    AND flief IN s_flief "Fixed Vendor
    AND loekz NE 'X' "Deletion Pocument
    AND afnam EQ 'MRP'. "Name of requisitioner/requester
    IF NOT i_eban[] IS INITIAL.
    LOOP AT i_eban.
    CLEAR itab.
    itab-banfn = i_eban-banfn.
    itab-bnfpo = i_eban-bnfpo.
    itab-pr_menge = i_eban-menge.
    itab-meins = i_eban-meins.
    itab-ebeln = i_eban-ebeln.
    itab-ebelp = i_eban-ebelp.
    itab-matnr = i_eban-matnr.
    itab-werks = i_eban-werks.
    **----Get Material Description
    IF NOT i_eban-matnr IS INITIAL.
    SELECT SINGLE * FROM makt
    WHERE matnr EQ i_eban-matnr.
    IF sy-subrc EQ 0.
    itab-maktx = makt-maktx.
    ENDIF.
    ELSE.
    itab-maktx = i_eban-txz01.
    ENDIF.
    *----Get PO & GRN Quantity
    IF i_eban-ebeln GT 0 AND i_eban-ebelp GT 0.
    SELECT SINGLE * FROM ekpo
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp.
    IF sy-subrc EQ 0.
    itab-menge = ekpo-menge.
    ENDIF.
    SELECT SINGLE * FROM ekko
    WHERE ebeln = i_eban-ebeln.
    IF sy-subrc EQ 0.
    itab-bsart = ekko-bsart.
    ENDIF.
    *-------Get GRN Quantity
    CLEAR : del_menge,grn_dabmg.
    IF ekpo-bstae = '0004'. " GRN Against InbondDelivery
    SELECT SUM( menge ) SUM( dabmg )
    FROM ekes
    INTO (del_menge,grn_dabmg)
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp
    AND ebtyp = 'LA'.
    IF sy-subrc EQ 0.
    itab-grn_menge = grn_dabmg.
    itab-trn_menge = del_menge - grn_dabmg.
    itab-bal_menge = ekpo-menge - del_menge.
    IF itab-bal_menge < 0.
    itab-bal_menge = 0.
    ENDIF.
    ELSE.
    itab-bal_menge = itab-menge.
    ENDIF.
    ELSE. " Regular GRN
    SELECT SUM( menge )
    FROM ekbe
    INTO (grn_dabmg)
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp
    AND bewtp = 'E'
    AND bwart = '101'.
    IF sy-subrc EQ 0.
    itab-grn_menge = grn_dabmg.
    itab-trn_menge = del_menge - grn_dabmg.
    ENDIF.
    For Cancelled GRN
    SELECT SUM( menge )
    FROM ekbe
    INTO (grn_dabmg)
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp
    AND bewtp = 'E'
    AND bwart = '102'.
    IF sy-subrc EQ 0.
    itab-grn_menge = itab-grn_menge - grn_dabmg.
    itab-trn_menge = del_menge - grn_dabmg.
    ENDIF.
    IF itab-bsart = 'UB'.
    CLEAR : grn_dabmg,grn_dabmg.
    SELECT SUM( menge )
    FROM ekbe
    INTO (grn_dabmg)
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp
    AND bewtp = 'U'
    AND bwart = '641'.
    IF sy-subrc EQ 0.
    itab-trn_menge = grn_dabmg.
    ENDIF.
    For Reversal of Issue Document
    SELECT SUM( menge )
    FROM ekbe
    INTO (grn_dabmg)
    WHERE ebeln = i_eban-ebeln
    AND ebelp = i_eban-ebelp
    AND bewtp = 'U'
    AND bwart = '642'.
    IF sy-subrc EQ 0.
    itab-trn_menge = itab-trn_menge - grn_dabmg.
    ENDIF.
    IF itab-grn_menge <> 0.
    itab-trn_menge = 0.
    ENDIF.
    ENDIF.
    End
    ENDIF.
    *-------End
    ENDIF.
    itab-bal_menge = itab-menge - ( itab-grn_menge + itab-trn_menge ).
    CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
    EXPORTING
    input = itab-matnr
    IMPORTING
    output = itab-matnr.
    itab_sale-matnr = itab-matnr.
    itab_sale-werks = itab-werks.
    itab_sale-maktx = itab-maktx.
    COLLECT itab_sale.
    APPEND itab.
    ENDLOOP.
    ENDIF.
    IF NOT s_bsart[] IS INITIAL.
    DELETE itab WHERE bsart NOT IN s_bsart.
    ENDIF.
    IF NOT itab_sale IS INITIAL.
    LOOP AT itab_sale.
    *-----Get Sales Quantity
    CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
    EXPORTING
    input = itab_sale-matnr
    IMPORTING
    output = itab_sale-matnr.
    *-----Change as on 08.12.2007
    SELECT SUM( clabs ) INTO itab_sale-labst
    FROM mchb
    WHERE matnr = itab_sale-matnr
    AND werks = itab_sale-werks.
    *-----End
    MODIFY itab_sale TRANSPORTING labst matnr.
    ENDLOOP.
    LOOP AT itab.
    READ TABLE itab_sale WITH KEY matnr = itab-matnr
    werks = itab-werks.
    IF sy-subrc = 0.
    CALL FUNCTION 'CONVERSION_EXIT_CCMAT_OUTPUT'
    EXPORTING
    input = itab_sale-matnr
    IMPORTING
    output = itab_sale-matnr.
    MOVE itab_sale-labst TO itab-labst.
    ENDIF.
    MODIFY itab TRANSPORTING labst.
    CLEAR itab.
    ENDLOOP.
    ENDIF.
    CHECK itab[] IS NOT INITIAL.
    SELECT * FROM marc CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_marc
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND matnr EQ itab-matnr
    AND werks EQ itab-werks.
    SELECT * FROM eban CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_eban
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND banfn EQ itab-banfn
    AND bnfpo EQ itab-bnfpo.
    SELECT * FROM mara CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_mara
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND matnr EQ itab-matnr.
    SELECT * FROM mvke CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_mvke
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND matnr EQ itab-matnr.
    IF sy-subrc = 0.
    SELECT * FROM tvm1t CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_tvm1t
    FOR ALL ENTRIES IN it_mvke
    WHERE mandt = sy-mandt
    AND mvgr1 EQ it_mvke-mvgr1.
    ENDIF.
    IF s_period IS NOT INITIAL.
    ss_period = s_period.
    ss_period = ss_period + 1.
    s_erdat-sign = 'I'.
    s_erdat-option = 'BT'.
    s_erdat-high = sy-datum.
    ss_date = sy-datum - ss_period.
    s_erdat-low = ss_date.
    APPEND s_erdat.
    CLEAR s_erdat.
    SELECT * FROM zcvi_vbrk_vbrp CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_vbrkvbrp
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND matnr = itab-matnr
    AND fkart IN ('Z3PS','ZVIT',
    'ZVDT','ZFRV',
    'ZDRV','ZCMR')
    AND fkdat IN s_erdat
    AND fksto EQ space
    AND sfakn EQ space
    AND rfbsk NE 'E'
    AND fkimg NE 0.
    LOOP AT it_vbrkvbrp.
    IF it_vbrkvbrp-fktyp NE 'L'.
    DELETE it_vbrkvbrp.
    CONTINUE.
    ENDIF.
    IF it_vbrkvbrp-vrkme NE it_vbrkvbrp-meins.
    it_vbrkvbrp-fkimg = it_vbrkvbrp-fklmg.
    it_vbrkvbrp-meins = it_vbrkvbrp-vrkme.
    ENDIF.
    IF it_vbrkvbrp-shkzg = 'X'.
    it_vbrkvbrp-fkimg = it_vbrkvbrp-fkimg * -1.
    ENDIF.
    it_vbrk-matnr = it_vbrkvbrp-matnr.
    it_vbrk-fkimg = it_vbrkvbrp-fkimg.
    it_vbrk-meins = it_vbrkvbrp-meins.
    IF it_vbrk[] IS INITIAL.
    APPEND it_vbrk.
    CLEAR it_vbrk.
    ELSE.
    COLLECT it_vbrk.
    CLEAR it_vbrk.
    ENDIF.
    ENDLOOP.
    ENDIF.
    SORT it_vbrkvbrp BY matnr.
    SELECT * FROM ekko CLIENT SPECIFIED
    INTO CORRESPONDING FIELDS OF TABLE it_ekko
    FOR ALL ENTRIES IN itab
    WHERE mandt = sy-mandt
    AND ebeln = itab-ebeln.
    SORT it_ekko BY ebeln.
    LOOP AT itab.
    READ TABLE it_ekko BINARY SEARCH WITH KEY
    ebeln = itab-ebeln.
    IF sy-subrc = 0.
    IF it_ekko-frgke = 'R'.
    itab-zconfirm1 = 'YES'.
    itab-zconfirm2 = 'YES'.
    itab-zconfirm3 = 'YES'.
    ELSEIF it_ekko-frgzu = 'X'.
    itab-zconfirm1 = 'YES'.
    ELSEIF it_ekko-frgzu = 'XX'.
    itab-zconfirm1 = 'YES'.
    itab-zconfirm2 = 'YES'.
    ENDIF.
    ENDIF.
    IF s_period IS NOT INITIAL.
    READ TABLE it_vbrk BINARY SEARCH
    WITH KEY matnr = itab-matnr.
    IF sy-subrc = 0.
    itab-fkimg = it_vbrk-fkimg.
    ENDIF.
    ENDIF.
    READ TABLE it_marc WITH KEY matnr = itab-matnr
    werks = itab-werks.
    IF sy-subrc = 0.
    MOVE it_marc-minbe TO itab-minbe.
    MOVE it_marc-mabst TO itab-mabst.
    ENDIF.
    READ TABLE it_eban WITH KEY banfn = itab-banfn
    bnfpo = itab-bnfpo.
    IF sy-subrc = 0.
    IF it_eban-fixkz EQ 'X'.
    itab-zfixkz = 'Firmed'.
    ENDIF.
    ENDIF.
    READ TABLE it_mara WITH KEY matnr = itab-matnr.
    IF sy-subrc = 0.
    MOVE it_mara-matkl TO itab-matkl.
    ENDIF.
    READ TABLE it_mvke WITH KEY matnr = itab-matnr.
    IF sy-subrc = 0.
    MOVE it_mvke-mvgr1 TO itab-mvgr1.
    READ TABLE it_tvm1t WITH KEY mvgr1 = itab-mvgr1.
    IF sy-subrc = 0.
    MOVE it_tvm1t-bezei TO itab-bezei.
    ENDIF.
    ENDIF.
    MODIFY itab.
    CLEAR itab.
    ENDLOOP.
    ENDFORM. " getdata
    *& 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.
    CLEAR: hline.
    hline-info = 'Purchase Requision History'.
    hline-typ = 'H'.
    APPEND hline TO p_heading.
    CLEAR hline.
    ENDFORM. " build_comment
    *& Form getfieldcatalog
    text
    --> p1 text
    <-- p2 text
    FORM getfieldcatalog USING p_fcat TYPE slis_t_fieldcat_alv.
    DATA : w_fcat TYPE slis_fieldcat_alv.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'BANFN'.
    w_fcat-seltext_l = 'PR No '.
    w_fcat-key = 'X'.
    w_fcat-col_pos = 1.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'BNFPO'.
    w_fcat-seltext_l = 'PR Item '.
    w_fcat-key = 'X'.
    w_fcat-col_pos = 2.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MATNR'.
    w_fcat-seltext_l = 'Material '.
    w_fcat-col_pos = 3.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MAKTX'.
    w_fcat-seltext_l = 'Name of the Mateiral '.
    w_fcat-col_pos = 4.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'WERKS'.
    w_fcat-seltext_l = 'Plant '.
    w_fcat-col_pos = 5.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'EBELN'.
    w_fcat-seltext_l = 'PO No '.
    w_fcat-hotspot = 'X'.
    w_fcat-col_pos = 6.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'EBELP'.
    w_fcat-seltext_l = 'PO Item '.
    w_fcat-col_pos = 7.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'PR_MENGE'.
    w_fcat-seltext_l = 'PR Qty '.
    w_fcat-col_pos = 8.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MEINS'.
    w_fcat-seltext_l = 'Unit'.
    w_fcat-col_pos = 9.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MENGE'.
    w_fcat-seltext_l = 'PO Quantity '.
    w_fcat-col_pos = 10.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'GRN_MENGE'.
    w_fcat-seltext_l = 'GRN Qty '.
    w_fcat-col_pos = 11.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'TRN_MENGE'.
    w_fcat-seltext_l = 'Transit Qty '.
    w_fcat-col_pos = 12.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'BAL_MENGE'.
    w_fcat-seltext_l = 'Balance PO Qty '.
    w_fcat-col_pos = 13.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'LABST'.
    w_fcat-seltext_l = 'Current Stock'.
    w_fcat-col_pos = 14.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'FKIMG'.
    w_fcat-seltext_l = 'Sales Qty '.
    w_fcat-col_pos = 15.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MINBE'.
    w_fcat-seltext_l = 'Reorder Point'.
    w_fcat-col_pos = 16.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MABST'.
    w_fcat-seltext_l = 'Maximum stock level'.
    w_fcat-col_pos = 17.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'ZFIXKZ'.
    w_fcat-seltext_l = 'Fixed Indicator'.
    w_fcat-col_pos = 18.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MATKL'.
    w_fcat-seltext_l = 'Design'.
    w_fcat-col_pos = 19.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'MVGR1'.
    w_fcat-seltext_l = 'Size'.
    w_fcat-col_pos = 20.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'BEZEI'.
    w_fcat-seltext_l = 'Size Desc.'.
    w_fcat-col_pos = 21.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'FKIMG'.
    w_fcat-seltext_l = 'Sales Qty '.
    w_fcat-col_pos = 22.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'ZCONFIRM1'.
    w_fcat-seltext_l = 'Release1'.
    w_fcat-col_pos = 23.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'ZCONFIRM2'.
    w_fcat-seltext_l = 'Release2'.
    w_fcat-col_pos = 24.
    APPEND w_fcat TO fcat.
    CLEAR w_fcat.
    w_fcat-tabname = 'ITAB'.
    w_fcat-fieldname = 'ZCONFIRM3'.
    w_fcat-seltext_l = 'Release3'.
    w_fcat-col_pos = 25.
    APPEND w_fcat TO fcat.
    ENDFORM. " getfieldcatalog
    *& Form alvdisplaydata
    text
    --> p1 text
    <-- p2 text
    FORM alvdisplaydata .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = repname
    i_callback_user_command = 'USER_COMMAND'
    it_fieldcat = fcat
    it_events = events[]
    TABLES
    t_outtab = itab.
    IF sy-subrc <> 0.
    WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
    ENDIF.
    ENDFORM. " alvdisplaydata
    FORM TOP_OF_PAGE *
    FORM top_of_page.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = heading.
    ENDFORM. "TOP_OF_PAGE
    *& Form build_eventtab1
    text
    -->P_EVENTS[] text
    FORM build_eventtab1 USING p_events1 TYPE slis_t_event.
    DATA: ls_event1 TYPE slis_alv_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = p_events1.
    READ TABLE p_events1 WITH KEY name = slis_ev_top_of_page
    INTO ls_event1.
    IF sy-subrc = 0.
    MOVE formname_top_of_page1 TO ls_event1-form.
    APPEND ls_event1 TO p_events1.
    ENDIF.
    endform.
    *& Form build_comment
    text
    -->P_HEADING[] text
    FORM build_comment1 USING p_heading1 TYPE slis_t_listheader.
    DATA: hline1 TYPE slis_listheader.
    hline1-info = '1 Secondary List'.
    hline1-typ = 'H'.
    APPEND hline1 TO p_heading1.
    CLEAR hline1.
    ENDFORM. " build_comment
    *& Form getfieldcatalog1
    text
    -->P_FCAT1[] text
    form getfieldcatalog1 using p_fcat1 TYPE slis_t_fieldcat_alv.
    DATA : w_fcat1 TYPE slis_fieldcat_alv.
    CLEAR w_fcat1.
    w_fcat1-tabname = 'IT_LIPS'.
    w_fcat1-fieldname = 'VBELN'.
    w_fcat1-seltext_l = 'Pr.No'.
    w_fcat1-hotspot = 'X'.
    w_fcat1-col_pos = 1.
    APPEND w_fcat1 to fcat1.
    CLEAR w_fcat1.
    w_fcat1-tabname = 'IT_LIPS'.
    w_fcat1-fieldname = 'POSNR'.
    w_fcat1-seltext_l = 'PR Item'.
    w_fcat1-col_pos = 2.
    APPEND w_fcat1 to fcat1.
    CLEAR w_fcat1.
    w_fcat1-tabname = 'IT_LIPS'.
    w_fcat1-fieldname = 'MATNR'.
    w_fcat1-seltext_l = 'Material'.
    w_fcat1-col_pos = 3.
    APPEND w_fcat1 to fcat1.
    CLEAR w_fcat1.
    w_fcat1-tabname = 'IT_LIPS'.
    w_fcat1-fieldname = 'LFIMG'.
    w_fcat1-seltext_l = 'Actual quantity delivered'.
    w_fcat1-col_pos = 4.
    APPEND w_fcat1 to fcat1.
    CLEAR w_fcat1.
    w_fcat1-tabname = 'IT_LIPS'.
    w_fcat1-fieldname = 'MEINS'.
    w_fcat1-seltext_l = 'Base Unit of Measure'.
    w_fcat1-col_pos = 5.
    APPEND w_fcat1 to fcat1.
    endform. " getfieldcatalog1
    *& Form USER_COMMAND
    text
    -->R_UCOMM text
    -->RS_SELFIELD text
    FORM user_command USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    READ TABLE itab INDEX rs_selfield-tabindex.
    IF sy-subrc EQ 0.
    select vbeln
    posnr
    matnr
    vgbel
    lfimg
    meins from lips into table it_lips
    where vgbel = itab-ebeln.
    ENDIF.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = repname
    >>>> i_callback_user_command = 'USER_COMMAND1'
    it_fieldcat = fcat1
    it_events = events1[]
    TABLES
    t_outtab = it_lips.
    IF sy-subrc 0.
    WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
    ENDIF.
    ENDFORM. "USER_COMMAND
    FORM TOP_OF_PAGE1 *
    FORM top_of_page1.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = heading1.
    ENDFORM. "TOP_OF_PAGE1
    *& Form build_eventtab1
    text
    -->P_EVENTS[] text
    FORM build_eventtab2 USING p_events2 TYPE slis_t_event.
    DATA: ls_event2 TYPE slis_alv_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = p_events2.
    READ TABLE p_events2 WITH KEY name = slis_ev_top_of_page
    INTO ls_event2.
    IF sy-subrc = 0.
    MOVE formname_top_of_page2 TO ls_event2-form.
    APPEND ls_event2 TO p_events2.
    ENDIF.
    endform.
    *& Form build_comment
    text
    -->P_HEADING[] text
    FORM build_comment2 USING p_heading2 TYPE slis_t_listheader.
    DATA: hline2 TYPE slis_listheader.
    hline2-info = '2 Secondary List'.
    hline2-typ = 'H'.
    APPEND hline2 TO p_heading2.
    CLEAR hline2.
    ENDFORM. " build_comment
    *& Form getfieldcatalog1
    text
    -->P_FCAT1[] text
    form getfieldcatalog2 using p_fcat2 TYPE slis_t_fieldcat_alv.
    DATA : w_fcat2 TYPE slis_fieldcat_alv.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'EBELN'.
    w_fcat2-seltext_l = 'Pr.Doc No'.
    w_fcat2-col_pos = 1.
    APPEND w_fcat2 to fcat2.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'EBELP'.
    w_fcat2-seltext_l = 'PR Doc Item'.
    w_fcat2-col_pos = 2.
    APPEND w_fcat2 to fcat2.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'BELNR'.
    w_fcat2-seltext_l = 'No.Mat Doc'.
    w_fcat2-col_pos = 3.
    APPEND w_fcat2 to fcat2.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'BUZEI'.
    w_fcat2-seltext_l = 'Item in Mat Doc'.
    w_fcat2-col_pos = 4.
    APPEND w_fcat2 to fcat2.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'MENGE'.
    w_fcat2-seltext_l = 'Quantity'.
    w_fcat2-col_pos = 5.
    APPEND w_fcat2 to fcat2.
    CLEAR w_fcat2.
    w_fcat2-tabname = 'IT_EKBE'.
    w_fcat2-fieldname = 'XBLNR'.
    w_fcat2-seltext_l = 'Ref Doc Num'.
    w_fcat2-col_pos = 5.
    APPEND w_fcat2 to fcat2.
    endform. " getfieldcatalog2
    *& Form USER_COMMAND1
    text
    -->R_UCOMM text
    -->RS_SELFIELD text
    FORM user_command1 USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    READ TABLE it_lips INDEX rs_selfield-tabindex.
    IF sy-subrc EQ 0.
    select ebeln
    ebelp
    belnr
    buzei
    menge
    xblnr from ekbe into table it_ekbe
    where xblnr = it_lips-vbeln.
    endif.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = repname
    i_callback_user_command = 'USER_COMMAND1'
    it_fieldcat = fcat2
    it_events = events2[]
    TABLES
    t_outtab = it_ekbe.
    IF sy-subrc 0.
    WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
    ENDIF.
    ENDFORM. "USER_COMMAND
    FORM TOP_OF_PAGE1
    FORM top_of_page2.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = heading2.
    ENDFORM. "TOP_OF_PAGE2

  • At selection screen output not responding

    Hi ppl,
    I've 4 selection options in my screen. however I just need user to insert only 1 of the 4 for searching. Therefore i included 4 radio buttons. when user select <i>rbf</i>, <i>sfileno</i> will activer and other 3 will be grayed out, when user select <i>rbi</i>, <i>sidnum</i> will active and other will not be active and so forth. You can see the codes below.
    However, during the program running, I found out when i select <i>rbf,</i> the other select options fields - <i>sfileno</i>, <i>sidnum</i> n <i>scompsno</i> are not inactive/grayed. It is the same when I seledt the other radio button. I just seem that i receive no response from the program. What have i done wrong here. please help. TQ
    SELECTION-SCREEN BEGIN OF BLOCK frm1 WITH FRAME TITLE text-t01 .
    SELECT-OPTIONS : sfileno FOR zlic_masterdb-nofailpermohonan modif id f01
                      sidnum FOR zcustomer-idnumber modif id i01,
                      sconame FOR zcustomer-contactname modif id n01,
                      scompsno FOR zcom_compdhdr-compsno modif id c01.
    PARAMETERS: rbf RADIOBUTTON GROUP g1 ,
    rbi RADIOBUTTON GROUP g1,
    rbn RADIOBUTTON GROUP g1,
    rbc RADIOBUTTON GROUP g1.
    SELECTION-SCREEN END   OF BLOCK frm1.
    INITIALIZATION.
    sfileno = '00001'.
                     AT SELECTION-SCREEN OUTPUT
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
      CHECK SCREEN-GROUP1 = 'f01' OR
    SCREEN-GROUP1 = 'i01' OR
    SCREEN-GROUP1 = 'n01' OR
    SCREEN-GROUP1 = 'c01'.
    IF rbf = 'X'.
      IF SCREEN-GROUP1 EQ 'f01'.
        SCREEN-ACTIVE = 1.
      ELSEIF SCREEN-GROUP1 EQ 'i01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'n01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'c01'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ELSEIF rbi = 'X'.
      IF SCREEN-GROUP1 EQ 'i01'.
        SCREEN-ACTIVE = 1.
      ELSEIF SCREEN-GROUP1 EQ 'f01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'n01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'c01'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ELSEIF rbn = 'X'.
      IF SCREEN-GROUP1 EQ 'n01'.
        SCREEN-ACTIVE = 1.
      ELSEIF SCREEN-GROUP1 EQ 'f01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'i01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'c01'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ELSEIF rbc = 'X'.
      IF SCREEN-GROUP1 EQ 'c01'.
        SCREEN-ACTIVE = 1.
      ELSEIF SCREEN-GROUP1 EQ 'f01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'n01'.
        SCREEN-ACTIVE = 0.
      ELSEIF SCREEN-GROUP1 EQ 'i01'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
    continue.
    ENDLOOP.

    hi Enzo
    Check my sample code
    TABLES: eban,
            SSCRFIELDS.
    SELECTION-SCREEN BEGIN OF SCREEN 100 TITLE title.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
    PARAMETER:rad1 RADIOBUTTON GROUP rad USER-COMMAND frad1 DEFAULT 'X',
              rad2 RADIOBUTTON GROUP rad .
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
    PARAMETER: mtr AS CHECKBOX MODIF ID g3 USER-COMMAND chk1,
               p_matnr TYPE eban-matnr MODIF ID g1,
               sloc AS CHECKBOX MODIF ID g3 USER-COMMAND chk2,
               str_loc TYPE eban-lgort MODIF ID g4.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
    SELECT-OPTIONS: matnr1 FOR eban-matnr MODIF ID g2.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN PUSHBUTTON /20(10) name USER-COMMAND UCOM.
    SELECTION-SCREEN END OF SCREEN 100.
    name = 'FETCH'.
    title = 'Test Report'.
    CALL SELECTION-SCREEN '100'.
    TYPE-POOLS slis.
    * declaration of internal tables and work areas to be used
    DATA: BEGIN OF it_pr OCCURS 0,
          banfn TYPE eban-banfn,
          bnfpo TYPE eban-bnfpo,
          loekz TYPE eban-loekz,
          statu TYPE eban-statu,
          ekgrp TYPE eban-ekgrp,
          matnr TYPE eban-matnr,
          werks TYPE eban-werks,
          lgort TYPE eban-lgort,
          preis TYPE eban-preis,
          peinh TYPE eban-peinh,
          END OF it_pr.
    DATA: BEGIN OF it_mat OCCURS 0,
          matnr TYPE eban-matnr,
          END OF it_mat.
    *DATA:BEGIN OF ITAB1 OCCURS 0,
      DATA: l_answer.
    DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat LIKE LINE OF it_fieldcat,
          it_event TYPE slis_t_event,
          wa_event TYPE slis_alv_event.
    * declaration of variables to be used
    DATA: r_ucomm TYPE sy-ucomm,
          mat_no TYPE eban-matnr,
          len TYPE i VALUE 1,
          count TYPE i VALUE IS INITIAL,
          iflag TYPE i VALUE IS INITIAL,
          iflag1 TYPE i VALUE 0.
    DATA :pr_id TYPE sy-repid,
    rt_extab TYPE slis_t_extab.
    INITIALIZATION.
      pr_id = sy-repid.
    probably it would sol;ve ur problem
    regards
    ravish
    <b>plz dont forget to reward points if helpful</b>

  • Select-options in FM

    Hello All,
    i am creating RFC enabled function module with 2 input parameters as banfn and vbeln
    i have defined them in import paramaters as
    IMPORT
    P_M_BANFN_LOW       TYPE        BAPIEBAN-PREQ_NO
    P_M_BANFN_HIGH       TYPE        BAPIEBAN-PREQ_NO
    P_M_VBELN_LOW       TYPE        BAPIEBKN-SD_DOC
    P_M_VBELN_HIGH       TYPE        BAPIEBKN-SD_DOC
    user can enter two values or any of the 1 value or values in ranges..it shd work like select-options.
    now in source code i have defined...
    tables : eban,ebkn.
    types : BEGIN OF ITAB ,
           vbeln LIKE  EBKN-vbeln,
           banfn LIKE  EBAN-banfn,
           bnfpo like eban-bnfpo,
          end of itab.
    DATA: ITAB_MSGPF TYPE STANDARD TABLE OF ITAB WITH HEADER LINE.

    (continued source code)
    ranges : banfn1 FOR eban-banfn.
    if p_m_banfn_low is not initial  and  p_m_banfn_high is not initial.
      banfn1-sign = 'I'.
      banfn1-option = 'BT'.
      banfn1-LOW = p_m_banfn_low.
      banfn1-high = p_m_banfn_high.
      append  banfn1.
    else.
      banfn1-sign = 'I'.
      banfn1-option = 'CP'.
      banfn1-LOW = '*'.
      append  banfn1.
      endif.
    ranges : vbeln1 FOR eban-banfn.
    if p_m_vbeln_low is not initial  and  p_m_vbeln_high is not  initial.
      vbeln1-sign = 'I'.
      vbeln1-option = 'BT'.
      vbeln1-LOW = p_m_vbeln_low.
      vbeln1-high = p_m_vbeln_high.
      append  vbeln1.
    else.
      vbeln1-sign = 'I'.
      vbeln1-option = 'CP'.
      vbeln1-LOW = '*'.
      append  vbeln1.
      endif.
    select ebanbanfn ebanbnfpo ebkn~vbeln into corresponding fields of table itab_msgpf up to 10 rows
       from eban
       inner join ebkn on
      ebanbanfn = ebknbanfn
      where eban~banfn in banfn1.
    i am unable to fill my internal table itab_msgpf..what might be reason?

Maybe you are looking for

  • Insert From Master Table which is not based on EO

    Hi I have a Master-Detail relationship table page,now my requirement is to Insert data from Master VO(which is not based on any EO) Actually I have added four new columns in the VO,only these four columns are of type message Text Input,all others are

  • Error while releasing document.

    hi to all, while releasing document through vf02 error is coming "tax code does not appear in any g/l account" i have made a new tax code and copied condition type jlst and created new condition type.respective gl is also assigned in ob40.still error

  • SXPG_COMMAND_EXECUTE failed for BRTOOLS - Reason

    Hi, My CI + DB in Suse Linux and SAP Karnal level is 159 My Dialog instace in on windows server and Karnal level is 159. When i trying to open the detail log of db13 from Dialog instace it was not opened and shows the error as below ( but it showing

  • How do i get my ipod unlocked?

    My ipod is disable and it wont let me unlock it on itunes. How do i get it unlocked?

  • Premiere Pro 2.0 HDV problem

    I have installed the free version announced for Pr PRO 2.0, using the license number given. Works well for DV clips, but for HDV clips they can't be viewed. Is there a limit on this free version, as it is for the new one's (like CS5 for exemple) wher