Vbap-kdmat

hi
i need to get this field. here is what i have written but i am not getting it.
SELECT *
       FROM vbrk
         INNER JOIN vbrp ON vbrkvbeln = vbrpvbeln
         INNER JOIN kna1 ON vbrkkunag = kna1kunnr
          INTO corresponding fields of TABLE itab
        where
vbrkvbeln in p_vbeln and vbrkkunag in p_kunag and  vbrpmatnr in p_matnr and vbrpaugru_auft in p_augru and  vbrk~fkdat in P_fkdat .
loop at itab.
select kdmat into itab1-kdmat
from vbap
where vbeln = itab-vbeln .
endselect.
endloop.
there is no value showing up in itab.
is there some special approach for this ?

See the below code :
SELECT *
FROM vbrk
INNER JOIN vbrp ON vbrkvbeln = vbrpvbeln
INNER JOIN kna1 ON vbrkkunag = kna1kunnr
INTO corresponding fields of TABLE itab
where
vbrkvbeln in p_vbeln and vbrkkunag in p_kunag and vbrpmatnr in p_matnr and vbrpaugru_auft in p_augru and vbrk~fkdat in P_fkdat .
loop at itab.
select kdmat into itab1-kdmat
from vbap
where vbeln = <b>itab-aubel</b> .
endselect.
endloop.
If you want to get KDMAT(Custoemr material # ) then you need validate on vbrp-aubel(This is sales order #) and Item number
Reward Points if it is useful
Thanks
Seshu

Similar Messages

  • Copy control invoice - order - KDMAT will not be there

    Hi Experts!
    we create customer orders (in this case credit notes) with reference to an invoice.
    the problem is that the field vbap-kdmat is empty in the copy control and so it could not be filled into the new order.
    in VTAF we use the copy requirement 153 Item from bill.doc.
    in the PO tab of the invoice the customer material is filled (manually)
    We don't have set up information in VD51 but we fill the customer material with some information and this should be copied into the returns.
    does anyone have an idea how to get the copy control working?
    I tried to change the 153 to 151 where the source says:
        vbap-kdmat = cvbap-kdmat.
    but without the value in vbap (it is empty while executing this code) the field will remain empty.
    Thank you in advance
    Regards
    Daniel Hermann

    hi
    billing level PO tab customer material number comes through order , here table also VBAP, so actually this PO tab all fields are display mode only ,
    when enter the sale order item PO tab level enter the customer material number , then pass to same billing level ,
    when billing level you enter manually this data fet at VBAP table only ,
    so you assign the copy routine 151 then on kdmat copy billing to credit memo order OR we maintain same kdmat  in main order its copy to billing then also copy credit memo also
    do this
    regards
    sankar

  • How to get the open order quantity for a material

    Hi All,
    We need to get the open order quantity for materials. At present we are using the following logic...
    SELECT VBAKVBELN VBAPPOSNR VBAP~KWMENG                 
        INTO TABLE IT_VBAP                                     
      FROM VBAP
      INNER JOIN VBAK ON VBAKVBELN   = VBAPVBELN             
      INNER JOIN VAPMA ON VAPMAVBELN = VBAPVBELN
                      AND VAPMAPOSNR = VBAPPOSNR
      INNER JOIN VBUP ON VBUPVBELN = VBAPVBELN
                     AND VBUPPOSNR = VBAPPOSNR
    WHERE VAPMA~MATNR = IT_OUTPUT-MATNR
       AND VAPMA~WERKS = IT_OUTPUT-WERKS
        AND VBAK~AUART  IN S_AUART                        
         AND VBUP~GBSTA NE 'C'.     
    But the Query takes quite a long time as it does a full range scan on all the tables. Is there any way the query can be improved, may be by creating an index etc? Or is there anyother way by which i can get the required data?
    Any input is appreciated.
    Regards
    Brain.

    This could help.
    *& Report: zsdvr055                date written: 03/24/00              *
    *& Author: Brian Huntley           last update: 03/24/00               *
    *& Program Title: Open Order Report                                    *
    *& Description: This report will create a list of sales documents      *
    *&   that are open (contain at least one item that is not shipped).    *
    *&   The report will sort by ship-to customer name and by sales        *
    *&   document number.                                                  *
    *& Tables:                                                             *
    *& Files:                                                              *
    *& Transactions:                                                       *
    *& Changes:                                                            *
    REPORT ZSDVR055 LINE-SIZE 255.
    TABLES: VBPA,
            VBAP,
            VBUP,
            VBAK,
            VBKD,
            KNA1,
            VBEP,
            VBFA,
            LIKP,
            LIPS,
            EKET,
            T171T.
    define hashed table for selected ship-to and sold-to SO's
    TYPES: BEGIN OF TVBPA_TYPE,
             VBELN LIKE VBPA-VBELN,               "sales document
             POSNR LIKE VBPA-POSNR,               "item number
             PARVW LIKE VBPA-PARVW,               "partner function
             KUNNR LIKE VBPA-KUNNR,               "customer number
           END OF TVBPA_TYPE.
    DATA: TVBPA TYPE HASHED TABLE OF TVBPA_TYPE
            WITH UNIQUE KEY VBELN POSNR PARVW WITH HEADER LINE.
    define internal table for all selected SO's
    DATA: BEGIN OF ITAB0 OCCURS 0,
            VBELN LIKE VBPA-VBELN,                "sales document
          END OF ITAB0.
    define internal table for all selected SO items
    DATA: BEGIN OF ITAB OCCURS 0,
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            MATNR LIKE VBAP-MATNR,                "material
            ARKTX LIKE VBAP-ARKTX,                "description
            PSTYV LIKE VBAP-PSTYV,                "item category
            KDMAT LIKE VBAP-KDMAT,                "customer material
            NETWR LIKE VBAP-NETWR,                "net value
            WAERK LIKE VBAP-WAERK,                "currency
            KWMENG LIKE VBAP-KWMENG,              "quantity
            ERDAT LIKE VBAP-ERDAT,                "entry date
            NETPR LIKE VBAP-NETPR,                "net price
            KPEIN LIKE VBAP-KPEIN,                "pricing unit
            PRCTR LIKE VBAP-PRCTR,                "profit center
            ERNAM LIKE VBAK-ERNAM,                "entered by
            AUART LIKE VBAK-AUART,                "order type
            VKORG LIKE VBAK-VKORG,                "sales organization
            VTWEG LIKE VBAK-VTWEG,                "distribution channel
            VDATU LIKE VBAK-VDATU,                "requested date (header)
            BNAME LIKE VBAK-BNAME,                "name of orderer
            KUNNR LIKE VBAK-KUNNR,                "sold-to customer
            BZIRK LIKE VBKD-BZIRK,                "sales district
            KURSK LIKE VBKD-KURSK,                "conversion rate
            BSTKD LIKE VBKD-BSTKD,                "customer PO
            LFGSA LIKE VBUP-LFGSA,                "overall delivery status
            FKSAA LIKE VBUP-FKSAA,                "overall billing status
            KUNWE LIKE VBPA-KUNNR,                "ship-to customer
            NAME1 LIKE KNA1-NAME1,                "ship-to customer name
            ORT01 LIKE KNA1-ORT01,                "ship-to address
            REGIO LIKE KNA1-REGIO,                "ship-to region (state)
            LAND1 LIKE KNA1-LAND1,                "ship-to country
          END OF ITAB.
    create internal table for open orders
    DATA: BEGIN OF ITAB1 OCCURS 0,
            KUNNR LIKE VBAK-KUNNR,                "sold-to customer
            KUNWE LIKE VBPA-KUNNR,                "ship-to customer
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            ZDATE1 LIKE VBEP-EDATU,               "requested date
            ZDATE2 LIKE VBEP-EDATU,               "scheduled date (confirm)
            ZDATE3 LIKE VBEP-EDATU,               "committed date
            ZQTY1 LIKE VBAP-KWMENG,               "qty ordered
            ZQTY2 LIKE VBEP-BMENG,                "backlog qty
            ZEXTD LIKE VBAP-NETWR,                "backlog net value
            ZDESC(30) TYPE C,                     "backlog description
          END OF ITAB1.
    define internal table for SO schedule lines
    DATA: BEGIN OF ITAB2A OCCURS 0,
            WADAT LIKE VBEP-WADAT,                "planned goods issue date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            WMENG LIKE VBEP-WMENG,                "qty ordered
            BMENG LIKE VBEP-BMENG,                "qty confirmed
          END OF ITAB2A.
    define internal table for SO item request dates
    DATA: BEGIN OF ITAB2B OCCURS 0,
            EDATU LIKE VBEP-EDATU,                "delivery date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            WMENG LIKE VBEP-WMENG,                "qty ordered
          END OF ITAB2B.
    define internal table for SO item commit dates
    DATA: BEGIN OF ITAB2C OCCURS 0,
            EDATU LIKE VBEP-EDATU,                "delivery date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            ROMS1 LIKE VBEP-WMENG,                "committed qty
          END OF ITAB2C.
    define internal table for SO item deliveries
    DATA: BEGIN OF ITAB3 OCCURS 0,
            VGBEL LIKE LIPS-VGBEL,                "sales document
            VGPOS LIKE LIPS-VGPOS,                "sales document item
            VBELN LIKE LIKP-VBELN,                "delivery number
            POSNR LIKE LIPS-POSNR,                "delivery item number
            WADAT LIKE LIKP-WADAT,                "planned GI date
            WADAT_IST LIKE LIKP-WADAT_IST,        "actual GI date
            LFIMG LIKE LIPS-LFIMG,                "actual qty delivered
            ERDAT LIKE LIKP-ERDAT,                "date created
            ERZET LIKE LIKP-ERZET,                "time created
          END OF ITAB3.
    define internal table for SO item / delivery cross reference
    DATA: BEGIN OF ITAB4 OCCURS 0,
            VBELV LIKE VBFA-VBELV,                "sales document
            POSNV LIKE VBFA-POSNV,                "sales document item
            VBELN LIKE VBFA-VBELN,                "delivery number
            POSNN LIKE VBFA-POSNN,                "delivery item
            VBTYP_N LIKE VBFA-VBTYP_N,            "document category
            RFMNG LIKE VBFA-RFMNG,                "qty delivered
            PLMIN LIKE VBFA-PLMIN,                "plus/minus flag
          END OF ITAB4.
    define local variables
    DATA: ORDR_QTY LIKE VBEP-WMENG,          "order qty
          CONF_QTY LIKE VBEP-BMENG,          "confirmed qty
          NOCONF_QTY LIKE VBEP-BMENG,        "qty not confirmed
          DELV_QTY LIKE VBEP-WMENG,          "qty delivered
          NODELV_QTY LIKE VBEP-WMENG,        "qty not delivered
          REMAIN_QTY LIKE VBEP-WMENG,        "qty remain to get conf date
          REQ_DATE LIKE VBEP-EDATU,          "request date
          COM_DATE LIKE VBEP-EDATU,          "committed date
          DELV_QTY1 LIKE VBEP-WMENG,         "preceding delivery qty
          REMAIN_QTY1 LIKE VBEP-WMENG,       "qty remain to get reqest date
          REMAIN_QTY2 LIKE VBEP-WMENG,       "qty remain to get commit date
          THIRD_QTY LIKE VBEP-WMENG,         "3rd party no PO qty
          SO_STOCK LIKE MSKA-KALAB,          "sales order stock
          ZPRICE LIKE VBAP-NETPR,            "unit price USD
          ADRS1(40) TYPE C,                  "concatenated city and region
          ADRS2(45) TYPE C,                  "city, region and country
          ADRS3(80) TYPE C,                  "name, city, rgn, ctry
          ZCNTR TYPE I.                      "counter
    define select options
    SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG DEFAULT '1000',
      S_VTWEG FOR VBAK-VTWEG DEFAULT '10' NO-DISPLAY,
      S_SPART FOR VBAK-SPART DEFAULT '00' NO-DISPLAY,
      S_KUNNR FOR VBPA-KUNNR MATCHCODE OBJECT DEBI,
      S_KUNWE FOR VBPA-KUNNR MATCHCODE OBJECT DEBI.
    SELECTION-SCREEN SKIP.
    SELECT-OPTIONS:
      S_BZIRK FOR VBKD-BZIRK,
      S_PRCTR FOR VBAP-PRCTR,
      S_MATNR FOR VBAP-MATNR MATCHCODE OBJECT MAT1,
      S_ERNAM FOR VBAK-ERNAM,
      S_ERDAT FOR VBAP-ERDAT.
    SELECTION-SCREEN END OF BLOCK BLK1.
    AT SELECTION-SCREEN.
      IF S_KUNNR IS INITIAL AND S_KUNWE IS INITIAL.
        MESSAGE E005(ZM) WITH TEXT-100.
      ENDIF.
    MAIN PROGRAM
    INITIALIZATION.
      INCLUDE ZSYHEADR.
    START-OF-SELECTION.
      PERFORM 100_GET_SO_ITEMS.
      PERFORM 200_GET_NO_DELIVERY.
      PERFORM 300_GET_NO_GOODS_ISSUE.
      PERFORM 400_GET_PARTIAL_DELIVERY.
      PERFORM 500_GET_THIRD_PARTY.
      PERFORM 900_CREATE_LIST.
    FORM 100_GET_SO_ITEMS
    FORM 100_GET_SO_ITEMS.
    get SO's for selected ship-to and sold-to customers
      REFRESH TVBPA.
      IF NOT S_KUNNR IS INITIAL.
        SELECT VBELN POSNR PARVW KUNNR
          FROM VBPA INTO TABLE TVBPA
         WHERE KUNNR IN S_KUNNR AND PARVW = 'AG' AND VBELN < '0080000000'.
      ENDIF.
      IF NOT S_KUNWE IS INITIAL.
        SELECT VBELN POSNR PARVW KUNNR
          FROM VBPA APPENDING TABLE TVBPA
          WHERE KUNNR IN S_KUNWE AND PARVW = 'WE' AND VBELN < '0080000000'.
      ENDIF.
      DESCRIBE TABLE TVBPA LINES ZCNTR.
      IF ZCNTR = 0.
        WRITE: /1 'No data found for selection'.
        STOP.
      ENDIF.
    eliminate duplicate SO's
      LOOP AT TVBPA.
        CLEAR ITAB0.
        MOVE TVBPA-VBELN TO ITAB0-VBELN.
        APPEND ITAB0.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM ITAB0.
    get SO detail
      SELECT VBAP~VBELN VBAP~POSNR VBAP~MATNR VBAP~ARKTX VBAP~PSTYV
          VBAP~KDMAT VBAP~NETWR VBAP~WAERK VBAP~KWMENG VBAP~ERDAT
          VBAP~NETPR VBAP~KPEIN VBAP~PRCTR VBAK~ERNAM VBAK~AUART
          VBAK~VKORG VBAK~VTWEG VBAK~VDATU VBAK~BNAME VBAK~KUNNR
          VBKD~BZIRK VBKD~KURSK VBKD~BSTKD VBUP~LFGSA VBUP~FKSAA
        FROM VBAP INNER JOIN VBUP ON VBUP~VBELN = VBAP~VBELN AND
            VBUP~POSNR = VBAP~POSNR
          INNER JOIN VBKD ON VBKD~VBELN = VBAP~VBELN AND
            VBKD~POSNR = VBAP~POSNR
          INNER JOIN VBAK ON VBAK~VBELN = VBAP~VBELN
        INTO TABLE ITAB FOR ALL ENTRIES IN ITAB0
        WHERE VBAP~VBELN = ITAB0-VBELN AND VBAP~MATNR IN S_MATNR AND
          VBAP~ERDAT IN S_ERDAT AND VBAP~PRCTR IN S_PRCTR AND
          VBAP~ABGRU = SPACE AND VBKD~BZIRK IN S_BZIRK AND
          VBAK~VKORG IN S_VKORG AND VBAK~VTWEG IN S_VTWEG AND
          VBAK~SPART IN S_SPART AND VBAK~KUNNR IN S_KUNNR AND
          VBAK~ERNAM IN S_ERNAM.
      IF SY-SUBRC <> 0.
        WRITE: /1 'No data found for selection'.
        STOP.
      ENDIF.
    loop thru SO items
      LOOP AT ITAB.
    get ship-to customer
        IF NOT S_KUNWE IS INITIAL.
          CLEAR TVBPA.
          READ TABLE TVBPA WITH TABLE KEY VBELN = ITAB-VBELN
            POSNR = ITAB-POSNR PARVW = 'WE'.
          IF SY-SUBRC <> 0.
            READ TABLE TVBPA WITH TABLE KEY VBELN = ITAB-VBELN
              POSNR = '000000' PARVW = 'WE'.
          ENDIF.
          MOVE TVBPA-KUNNR TO ITAB-KUNWE.
        ELSE.
          CLEAR ITAB-KUNWE.
          SELECT SINGLE KUNNR FROM VBPA INTO ITAB-KUNWE
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              PARVW = 'WE'.
          IF SY-SUBRC <> 0.
            SELECT SINGLE KUNNR FROM VBPA INTO ITAB-KUNWE
              WHERE VBELN = ITAB-VBELN AND POSNR = '000000' AND
                PARVW = 'WE'.
          ENDIF.
        ENDIF.
        IF NOT ITAB-KUNWE IN S_KUNWE.
          DELETE ITAB.
          CONTINUE.
        ENDIF.
    get ship-to customer address info
        SELECT SINGLE NAME1 ORT01 REGIO LAND1 FROM KNA1
          INTO (ITAB-NAME1, ITAB-ORT01, ITAB-REGIO, ITAB-LAND1)
          WHERE KUNNR = ITAB-KUNWE.
        MODIFY ITAB.
      ENDLOOP.
      SORT ITAB BY VBELN POSNR.
    ENDFORM.
    FORM 200_GET_NO_DELIVERY
    get detail for SO items w/ no deliveries for order document types
      (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 200_GET_NO_DELIVERY.
      LOOP AT ITAB WHERE AUART = 'ZZOR' OR AUART = 'ZZC1' OR
        AUART = 'ZZCO' OR AUART = 'ZZRP' OR AUART = 'ZZRW' OR
        AUART = 'KE' OR AUART = 'KR' OR AUART = 'ZCHP' OR
        AUART = 'ZPSO' OR AUART = 'ZZNC'.
    select if delivery status = A (not delivered)
        IF ITAB-LFGSA = 'A'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    select schedule lines for SO item and write to internal table itab2a
          SELECT WADAT VBELN POSNR WMENG BMENG
            FROM VBEP INTO TABLE ITAB2A
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR.
    select sched lines w/request date and write to internal table itab2b
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    select sched lines w/commit date and write to internal table itab2c
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2A BY WADAT.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
          ORDR_QTY = 0.
          CONF_QTY = 0.
          NOCONF_QTY = 0.
    calculate the unconfirmed qty for a SO item
          LOOP AT ITAB2A.
            CONF_QTY = CONF_QTY + ITAB2A-BMENG.
            ORDR_QTY = ORDR_QTY + ITAB2A-WMENG.
          ENDLOOP.
          NOCONF_QTY = ORDR_QTY - CONF_QTY.
          LOOP AT ITAB2A WHERE BMENG <> 0.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING ITAB2A-BMENG REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING ITAB2A-BMENG COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = ITAB2A-WADAT.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = ITAB2A-BMENG.
            ITAB1-ZDESC = 'no delivery, confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDLOOP.
    get request date for SO item
          IF NOCONF_QTY <> 0.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING NOCONF_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING NOCONF_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = NOCONF_QTY.
            ITAB1-ZDESC = 'no delivery, not confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 300_GET_NO_GOODS_ISSUE
    get detail for SO items w/deliveries and no goods issue for
      doc types (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 300_GET_NO_GOODS_ISSUE.
    get detail for deliveries w/no goods issue
      SELECT VBELN WADAT WADAT_IST ERDAT ERZET
        FROM LIKP INTO (LIKP-VBELN, LIKP-WADAT, LIKP-WADAT_IST,
          LIKP-ERDAT, LIKP-ERZET)
        WHERE WADAT_IST = 0.
    select if actual qty delivered <> 0
        CLEAR LIPS.
        SELECT POSNR VGBEL VGPOS LFIMG
          FROM LIPS INTO (LIPS-POSNR, LIPS-VGBEL, LIPS-VGPOS, LIPS-LFIMG)
          WHERE VBELN = LIKP-VBELN AND LFIMG <> 0.
    select if goods movement status on delivery = A (no goods issue)
          CLEAR VBUP.
          SELECT SINGLE WBSTA FROM VBUP INTO VBUP-WBSTA
            WHERE VBELN = LIKP-VBELN AND POSNR = LIPS-POSNR.
          IF VBUP-WBSTA = 'A'.
            CLEAR ITAB3.
            ITAB3-VGBEL = LIPS-VGBEL.
            ITAB3-VGPOS = LIPS-VGPOS.
            ITAB3-VBELN = LIKP-VBELN.
            ITAB3-POSNR = LIPS-POSNR.
            ITAB3-WADAT = LIKP-WADAT.
            ITAB3-WADAT_IST = LIKP-WADAT_IST.
            ITAB3-LFIMG = LIPS-LFIMG.
            ITAB3-ERDAT = LIKP-ERDAT.
            ITAB3-ERZET = LIKP-ERZET.
            APPEND ITAB3.
          ENDIF.
        ENDSELECT.
      ENDSELECT.
      SORT ITAB3 BY VGBEL VGPOS VBELN POSNR.
    loop thru deliveries w/no goods issue and get SO item detail
      LOOP AT ITAB3.
        CLEAR ITAB.
        READ TABLE ITAB WITH KEY VBELN = ITAB3-VGBEL POSNR = ITAB3-VGPOS.
        IF SY-SUBRC <> 0.
          IF ITAB-AUART = 'ZZOR' OR ITAB-AUART = 'ZZC1' OR
            ITAB-AUART = 'ZZCO' OR ITAB-AUART = 'ZZRP' OR
            ITAB-AUART = 'ZZRW' OR ITAB-AUART = 'KE' OR
            ITAB-AUART = 'KR' OR ITAB-AUART = 'ZCHP' OR
            ITAB-AUART = 'ZPSO' OR ITAB-AUART = 'ZZNC'.
    assign values to detail fields
            CLEAR ITAB1.
            ITAB1-KUNNR = ITAB-KUNNR.
            ITAB1-KUNWE = ITAB-KUNWE.
            ITAB1-VBELN = ITAB-VBELN.
            ITAB1-POSNR = ITAB-POSNR.
            IF ITAB-KURSK = 0.
              ITAB-KURSK = 1.
            ENDIF.
            IF ITAB-KPEIN = 0.
              ITAB-KPEIN = 1.
            ENDIF.
    select delivery qty for SO item and write to internal table
            SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
              FROM VBFA INTO TABLE ITAB4
              WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
                ( VBTYP_N = 'J' OR VBTYP_N = 'T' ).
    calculate total delivery qty for SO item
            DELV_QTY = 0.
            DELV_QTY1 = 0.
            LOOP AT ITAB4.
              IF ITAB4-VBTYP_N = 'J' OR ( ITAB4-VBTYP_N = 'T' AND
                  ITAB-AUART = 'KR').
                IF ITAB4-PLMIN = '-'.
                  ITAB4-RFMNG = ITAB4-RFMNG * -1.
                ENDIF.
    determine if delivery for SO item precedes delivery w/no goods
      issue (to determine request date and qty)
                CLEAR LIKP.
                SELECT SINGLE ERDAT ERZET
                  FROM LIKP INTO (LIKP-ERDAT, LIKP-ERZET)
                  WHERE VBELN = ITAB4-VBELN.
                IF LIKP-ERDAT < ITAB3-ERDAT OR ( LIKP-ERDAT = ITAB3-ERDAT
                    AND LIKP-ERZET < ITAB3-ERZET ).
                  DELV_QTY1 = DELV_QTY1 + ITAB4-RFMNG.
                ENDIF.
                DELV_QTY = DELV_QTY + ITAB4-RFMNG.
              ENDIF.
            ENDLOOP.
    get request dates for SO item
            REFRESH ITAB2B.
            SELECT EDATU VBELN POSNR WMENG
              FROM VBEP INTO TABLE ITAB2B
              WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
                WMENG <> 0.
    select sched lines w/commit date and write to itab2c
            REFRESH ITAB2C.
            SELECT EDATU VBELN POSNR ROMS1
              FROM VBEP INTO TABLE ITAB2C
              WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
                ROMS1 <> 0.
            SORT ITAB2B BY EDATU.
            SORT ITAB2C BY EDATU.
    loop thru request dates and delete request date entries for
      quantity(s) for preceding deliveries
            REMAIN_QTY1 = DELV_QTY1.
            LOOP AT ITAB2B.
              IF ITAB2B-WMENG > REMAIN_QTY1.
                ITAB2B-WMENG = ITAB2B-WMENG - REMAIN_QTY1.
                MODIFY ITAB2B.
                EXIT.
              ELSEIF ITAB2B-WMENG = REMAIN_QTY1.
                DELETE ITAB2B.
                EXIT.
              ELSE.
                REMAIN_QTY1 = REMAIN_QTY1 - ITAB2B-WMENG.
                DELETE ITAB2B.
              ENDIF.
            ENDLOOP.
    loop thru commit dates and delete commit date entries for
      quantity(s) for preceding deliveries
            REMAIN_QTY2 = DELV_QTY1.
            LOOP AT ITAB2C.
              IF ITAB2C-ROMS1 > REMAIN_QTY2.
                ITAB2C-ROMS1 = ITAB2C-ROMS1 - REMAIN_QTY2.
                MODIFY ITAB2C.
                EXIT.
              ELSEIF ITAB2C-ROMS1 = REMAIN_QTY2.
                DELETE ITAB2C.
                EXIT.
              ELSE.
                REMAIN_QTY2 = REMAIN_QTY2 - ITAB2C-ROMS1.
                DELETE ITAB2C.
              ENDIF.
            ENDLOOP.
    if planned goods issue date is 0, put qty in non-confirmed
    get request date for SO item
            IF ITAB3-WADAT <> 0.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING ITAB3-LFIMG REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING ITAB3-LFIMG COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = ITAB3-WADAT.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = ITAB3-LFIMG.
              ITAB1-ZDESC = 'delivery, no goods issue'.
            ELSE.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING ITAB3-LFIMG REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING ITAB3-LFIMG COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = '99991231'.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = ITAB3-LFIMG.
              ITAB1-ZDESC = 'delivery, no goods issue date'.
            ENDIF.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 400_GET_PARTIAL_DELIVERY
    get detail for SO items w/partial deliveries for document types
      (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 400_GET_PARTIAL_DELIVERY.
    process SO items for selected order types
      LOOP AT ITAB WHERE AUART = 'ZZOR' OR AUART = 'ZZC1' OR
          AUART = 'ZZCO' OR AUART = 'ZZRP' OR AUART = 'ZZRW' OR
          AUART = 'KE' OR AUART = 'KR' OR AUART = 'ZCHP' OR
          AUART = 'ZPSO' OR AUART = 'ZZNC'.
    select if delivery status = B (partially delivered)
        IF ITAB-LFGSA = 'B'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    select delivery qty for SO item and write to internal table
          SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
            FROM VBFA INTO TABLE ITAB4
            WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
              ( VBTYP_N = 'J' OR VBTYP_N = 'T' ).
    calculate total delivery qty for SO item
          DELV_QTY = 0.
          LOOP AT ITAB4.
            IF ITAB4-VBTYP_N = 'J' OR ( ITAB4-VBTYP_N = 'T' AND
                ITAB-AUART = 'KR').
              IF ITAB4-PLMIN = '-'.
                ITAB4-RFMNG = ITAB4-RFMNG * -1.
              ENDIF.
              DELV_QTY = DELV_QTY + ITAB4-RFMNG.
            ENDIF.
          ENDLOOP.
    select schedule lines for SO item and write to internal table
          REFRESH ITAB2A.
          SELECT WADAT VBELN POSNR WMENG BMENG
            FROM VBEP INTO TABLE ITAB2A
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR.
    get request dates from schedule line table
          REFRESH ITAB2B.
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    get commit dates from schedule line table
          REFRESH ITAB2C.
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
          SORT ITAB2A BY WADAT.
    loop thru request dates and delete request date entries for
      quantity(s) already delivered
          REMAIN_QTY1 = DELV_QTY.
          LOOP AT ITAB2B.
            IF ITAB2B-WMENG > REMAIN_QTY1.
              ITAB2B-WMENG = ITAB2B-WMENG - REMAIN_QTY1.
              MODIFY ITAB2B.
              EXIT.
            ELSEIF ITAB2B-WMENG = REMAIN_QTY1.
              DELETE ITAB2B.
              EXIT.
            ELSE.
              REMAIN_QTY1 = REMAIN_QTY1 - ITAB2B-WMENG.
              DELETE ITAB2B.
            ENDIF.
          ENDLOOP.
    loop thru commit dates and delete request date entries for
      quantity(s) already delivered
          REMAIN_QTY2 = DELV_QTY.
          LOOP AT ITAB2C.
            IF ITAB2C-ROMS1 > REMAIN_QTY2.
              ITAB2C-ROMS1 = ITAB2C-ROMS1 - REMAIN_QTY2.
              MODIFY ITAB2C.
              EXIT.
            ELSEIF ITAB2C-ROMS1 = REMAIN_QTY2.
              DELETE ITAB2C.
              EXIT.
            ELSE.
              REMAIN_QTY2 = REMAIN_QTY2 - ITAB2C-ROMS1.
              DELETE ITAB2C.
            ENDIF.
          ENDLOOP.
           ORDR_QTY = 0.
           CONF_QTY = 0.
           NOCONF_QTY = 0.
    calculate the unconfirmed qty for SO item
          LOOP AT ITAB2A.
            ORDR_QTY = ORDR_QTY + ITAB2A-WMENG.
            CONF_QTY = CONF_QTY + ITAB2A-BMENG.
          ENDLOOP.
          NOCONF_QTY = ORDR_QTY - CONF_QTY.
          NODELV_QTY = ORDR_QTY - DELV_QTY.
    loop thru schedule lines and process entries with no related
      delivery(s)
          REMAIN_QTY = DELV_QTY.
          LOOP AT ITAB2A.
            IF ITAB2A-BMENG <> 0.
              IF ITAB2A-BMENG <= REMAIN_QTY.
                REMAIN_QTY = REMAIN_QTY - ITAB2A-BMENG.
              ELSE.
                ITAB2A-BMENG = ITAB2A-BMENG - REMAIN_QTY.
                PERFORM GET_REQUEST_DATE TABLES ITAB2B
                  USING ITAB2A-BMENG REQ_DATE.
                PERFORM GET_COMMIT_DATE TABLES ITAB2C
                  USING ITAB2A-BMENG COM_DATE.
                ITAB1-ZDATE1 = REQ_DATE.
                ITAB1-ZDATE2 = ITAB2A-WADAT.
                ITAB1-ZDATE3 = COM_DATE.
                ITAB1-ZQTY1 = ITAB-KWMENG.
                ITAB1-ZQTY2 = ITAB2A-BMENG.
                ITAB1-ZDESC = 'partial delivery'.
    calculate net value for backlog qty
                ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
                ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
                IF ITAB-AUART = 'KR'.
                  ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
                  ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
                  ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
                ENDIF.
                APPEND ITAB1.
                REMAIN_QTY = 0.
              ENDIF.
            ENDIF.
          ENDLOOP.
    if total unconfirmed >= total not delivered, qty is unconfirmed
          IF NOCONF_QTY >= NODELV_QTY.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING NODELV_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING NODELV_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = NODELV_QTY.
            ITAB1-ZDESC = 'partial delv, not confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 500_GET_THIRD_PARTY
    get detail for third party SO items
    FORM 500_GET_THIRD_PARTY.
    process SO items for selected order types
      LOOP AT ITAB WHERE PSTYV = 'TAS' AND ( AUART = 'ZZOR' OR
        AUART = 'ZZC1' OR AUART = 'ZZCO' OR AUART = 'ZZRP' OR
        AUART = 'ZZRW' OR AUART = 'KE' OR AUART = 'KR' OR
        AUART = 'ZCHP' OR AUART = 'ZPSO' OR AUART = 'ZZNC' ).
    select if billing status <> C (billed)
        IF ITAB-FKSAA <> 'C'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    get request dates from schedule line table
          REFRESH ITAB2B.
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    get commit dates from schedule line table
          REFRESH ITAB2C.
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
    get PO number(s) for SO item and write to internal table
          REFRESH ITAB4.
          SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
            FROM VBFA INTO TABLE ITAB4
            WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
              VBTYP_N = 'V' AND RFMNG <> 0.
    calculate total delivery qty for PO item
          DELV_QTY = 0.
          LOOP AT ITAB4.
            IF ITAB4-PLMIN = '-'.
              ITAB4-RFMNG = ITAB4-RFMNG * -1.
            ENDIF.
            DELV_QTY = DELV_QTY + ITAB4-RFMNG.
          ENDLOOP.
    loop thru PO's for SO item
          LOOP AT ITAB4.
    select delivery lines for PO item
            SELECT EINDT EBELN EBELP MENGE FROM EKET
              INTO (EKET-EINDT, EKET-EBELN, EKET-EBELP, EKET-MENGE)
              WHERE EBELN = ITAB4-VBELN AND EBELP = ITAB4-POSNN.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING EKET-MENGE REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING EKET-MENGE COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = EKET-EINDT.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = EKET-MENGE.
              ITAB1-ZDESC = '3rd party item'.
    calculate net value for backlog qty
              ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
              ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
              APPEND ITAB1.
            ENDSELECT.
          ENDLOOP.
    if total delivery qty < order qty, put remaining in non-confirmed
          IF DELV_QTY < ITAB-KWMENG.
            THIRD_QTY = ITAB-KWMENG - DELV_QTY.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING THIRD_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING THIRD_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE2 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = THIRD_QTY.
            ITAB1-ZDESC = '3rd party item, no PO'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
            APPEND ITAB1.
            CONTINUE.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 900_CREATE_LIST
    process open business detail and create list
    FORM 900_CREATE_LIST.
    if internal table is empty, write message and exit
        DESCRIBE TABLE ITAB1 LINES ZCNTR.
        IF ZCNTR = 0.
          WRITE: / 'No Data Found for Selection'.
          STOP.
        ENDIF.
        SORT ITAB1 BY KUNNR KUNWE VBELN POSNR.
    loop thru sorted table and create list
        LOOP AT ITAB1.
          IF ITAB1-ZDATE1 = SPACE.
            ITAB1-ZDATE1 = '99991231'.
          ENDIF.
          IF ITAB1-ZDATE3 = SPACE.
            ITAB1-ZDATE3 = '99991231'.
          ENDIF.
    get SO item detail
          CLEAR ITAB.
          READ TABLE ITAB WITH KEY VBELN = ITAB1-VBELN
                                   POSNR = ITAB1-POSNR BINARY SEARCH.
    print sold-to and ship-to customer header info
          AT NEW KUNWE.
            CLEAR KNA1.
            SELECT SINGLE NAME1 FROM KNA1 INTO KNA1-NAME1
              WHERE KUNNR = ITAB1-KUNNR.
            CONCATENATE ITAB-ORT01 ITAB-REGIO INTO ADRS1 SEPARATED BY ', '.
            CONCATENATE ADRS1 ITAB-LAND1 INTO ADRS2 SEPARATED BY '   '.
            CONCATENATE ITAB-NAME1 ADRS2 INTO ADRS3 SEPARATED BY '   '.
            FORMAT COLOR 1 INTENSIFIED OFF.
            WRITE: /1 'Sold-to:', 10 ITAB1-KUNNR, 18 KNA1-NAME1,
              56 'Ship-to:', 65 ITAB1-KUNWE, 73 ADRS3.
            FORMAT RESET.
            SKIP.
          ENDAT.
    print out backlog detail
          CLEAR T171T.
          SELECT SINGLE BZTXT FROM T171T INTO T171T-BZTXT
            WHERE SPRAS = SY-LANGU AND BZIRK = ITAB-BZIRK.
          WRITE: /1 ITAB1-VBELN,
            13(6) ITAB1-POSNR NO-ZERO,
            21 ITAB-MATNR,
            41 ITAB-ARKTX,
            83 ITAB1-ZDATE1,
            95 ITAB1-ZDATE3,
            107 ITAB1-ZDATE2,
            119 ITAB-ERNAM,
            129 ITAB-BZIRK, 135 T171T-BZTXT,
            157(20) ITAB-BSTKD,
            179(12) ITAB1-ZQTY1 DECIMALS 0,
            193(12) ITAB1-ZQTY2 DECIMALS 0,
            207(16) ITAB1-ZEXTD DECIMALS 2,
            225 ITAB1-ZDESC.
          AT END OF VBELN.
            SKIP.
          ENDAT.
    print footing at ship-to customer
          AT END OF KUNWE.
            SUM.
            ULINE: /193(12), 207(16).
            FORMAT COLOR 1 INTENSIFIED OFF.
            WRITE: /1 'Total:  Sold-to:', 18 ITAB1-KUNNR,
              25 '/', 27 'Ship-to:', 36 ITAB1-KUNWE,
              193(12) ITAB1-ZQTY2 DECIMALS 0,
              207(16) ITAB1-ZEXTD DECIMALS 2.
            FORMAT RESET.
            SKIP 2.
          ENDAT.
          AT LAST.
            SUM.
            ULINE: /193(12), 207(16).
            FORMAT COLOR 1 INTENSIFIED ON.
            WRITE: /1 'Report Total:',
              193(12) ITAB1-ZQTY2 DECIMALS 0,
              207(16) ITAB1-ZEXTD DECIMALS 2.
            FORMAT RESET.
          ENDAT.
        ENDLOOP.
    ENDFORM.
    FORM GET_REQUEST_DATE
    subroutine to get request date for SO item
    FORM GET_REQUEST_DATE TABLES FTAB STRUCTURE ITAB2B
                          USING CONF_QTY REQ_DATE.
    DATA: REMAIN LIKE VBEP-WMENG,                 "qty remaining
          CNTR TYPE I,                            "loop counter
          TAB_INDEX TYPE I.                       "table index
    initialize
      REMAIN = 0.
      REQ_DATE = SPACE.
    get first request date from table
      TAB_INDEX = 1.
      READ TABLE FTAB INDEX TAB_INDEX.
    if request date not found, set request date to blank
      IF SY-SUBRC <> 0.
        REQ_DATE = SPACE.
        EXIT.
      ELSE.
        REQ_DATE =  FTAB-EDATU.
      ENDIF.
    calculate quantity remaining for request date
      REMAIN = FTAB-WMENG - CONF_QTY.
    if qty remaining > 0, update request date with qty remaining
      IF REMAIN > 0.
        FTAB-WMENG = REMAIN.
        MODIFY FTAB INDEX TAB_INDEX.
    if qty remaining = 0, delete request date (so next request
      date will be used for next confirmed qty)
      ELSEIF REMAIN = 0.
        DELETE FTAB INDEX TAB_INDEX.
    if qty remaining < 0, find next request date and update
      ELSE.
        CNTR = 0.
        WHILE REMAIN < 0 OR CNTR < 10.
          DELETE FTAB INDEX TAB_INDEX.
          TAB_INDEX = TAB_INDEX + 1.
          READ TABLE FTAB INDEX TAB_INDEX.
          REMAIN = REMAIN + FTAB-WMENG.
          CNTR = CNTR + 1.
        ENDWHILE.
        IF REMAIN = 0.
          DELETE FTAB INDEX TAB_INDEX.
        ELSEIF REMAIN > 0.
          FTAB-WMENG = REMAIN.
          MODIFY FTAB INDEX TAB_INDEX.
        ENDIF.
      ENDIF.
    ENDFORM.
    FORM GET_COMMIT_DATE
    subroutine to get commit date for SO item
    FORM GET_COMMIT_DATE TABLES CTAB STRUCTURE ITAB2C
                          USING CONF_QTY COM_DATE.
    DATA: REMAIN LIKE VBEP-WMENG,                 "qty remaining
          CNTR TYPE I,                            "loop counter
          TAB_INDEX TYPE I.                       "table index
    initialize
      REMAIN = 0.
      COM_DATE = SPACE.
    get first commit date from table
      TAB_INDEX = 1.
      READ TABLE CTAB INDEX TAB_INDEX.
    if request date not found, set request date to blank
      IF SY-SUBRC <> 0.
        COM_DATE = SPACE.
        EXIT.
      ELSE.
        COM_DATE =  CTAB-EDATU.
      ENDIF.
    calculate quantity remaining for request date
      REMAIN = CTAB-ROMS1 - CONF_QTY.
    if qty remaining > 0, update request date with qty remaining
      IF REMAIN > 0.
        CTAB-ROMS1 = REMAIN.
        MODIFY CTAB INDEX TAB_INDEX.
    if qty remaining = 0, delete request date (so next request
      date will be used for next confirmed qty)
      ELSEIF REMAIN = 0.
        DELETE CTAB INDEX TAB_INDEX.
    if qty remaining < 0, find next request date and update
      ELSE.
        CNTR = 0.
        WHILE REMAIN < 0 OR CNTR < 10.
          DELETE CTAB INDEX TAB_INDEX.
          TAB_INDEX = TAB_INDEX + 1.
          READ TABLE CTAB INDEX TAB_INDEX.
          REMAIN = REMAIN + CTAB-ROMS1.
          CNTR = CNTR + 1.
        ENDWHILE.
        IF REMAIN = 0.
          DELETE CTAB INDEX TAB_INDEX.
        ELSEIF REMAIN > 0.
          CTAB-ROMS1 = REMAIN.
          MODIFY CTAB INDEX TAB_INDEX.
        ENDIF.
      ENDIF.
    ENDFORM.
    END-OF-REPORT.

  • How to Created custom report for Ship not Billed (SD/FI)?

    Hi all,
    I am anticipating  to write some abap reports..Here is one of them..
    Anyone can help  me with writing a Report , how to do 'Custom Report for shipped not Billed(SD/FI)' ..But since I am new to Abap , if you wish to reply, please use a little more detail and simple explanation, step by step so I can understand what is the idea, how it can be acheived...what kind of report should be used , techniques, tables etc...:)
    Appreciate your help!
    Regards,
    Boby

    Hi Boby,
    You need to create custom transaction to achive these results.
    you will have selection-screen ,it would be :
    Date : Here date would be mandatory  - Ranges Option
    Customer  - Optional field - Ranges
    Order #  Sales Order (Optional) Ranges
    Invoice #  - Invoice # (Optional) Ranges
    You will get the data based on ur selection-screen criteria ...
    First you will have customer order details from diffrent table
    VBAK,
    VBAP,
    LIKP
    LIPS
    VBRK,
    VBRP
    KNA1,
    VBFA Tables ( See the my sample program )
    Output would be :
    Customer #   Custome Name    Order #   Delivery #   Invoice #   Netpr, Netquantity ,
    Check the condition  whether invoice table has VBRK-RFBSK  = ''.
    See the my sample program : This is sales report by monthly..
    REPORT ZFDSALES_REPORT no standard page heading
                           message-id zwave.
    Data Declaration Part
    TYPE-POOLS
    type-pools : slis.
    Tables
    tables : VBAK,
             VBAP.
    Internal table for VBAK Table
    data : begin of i_vbak occurs 0,
           vbeln like vbak-vbeln,
           bstnk like vbak-bstnk,
           vdatu like vbak-vdatu,
           end of i_vbak.
    Internal table for VBAP and MATNR
    data : begin of i_vbap occurs 0,
           vbeln like vbap-vbeln,
           matnr like vbap-matnr,
           kdmat like vbap-kdmat,
           kwmeng like vbap-kwmeng,
           netpr like vbap-netpr,
           maktx like makt-maktx,
           end of i_vbap.
    Internal tables
    data : begin of i_sales occurs 0,
           vdatu like vbak-vdatu,
           bstnk like vbak-bstnk,
           matnr like vbap-matnr,
           maktx like makt-maktx,
           kdmat like vbap-kdmat,
           kwmeng like vbap-kwmeng,
           netpr  like vbap-netpr,
           end of i_sales.
    Variable for ALV
    data : v_repid like sy-repid,
           gt_fieldcat    type slis_t_fieldcat_alv.
    Selection-screen
    selection-screen : begin of block blk with frame title text-001.
    select-options : s_vbeln for vbak-vbeln,
                     s_erdat for vbak-erdat,
                     s_ernam for vbak-ernam,
                     s_vdatu for vbak-vdatu obligatory,
                     s_BSTNK for vbak-BSTNK,
                     s_KUNNR for vbak-kunnr,
                     s_matnr for vbap-matnr,
                     s_KDMAT for vbap-KDMAT.
    selection-screen : end of block blk.
    Initilization
    initialization.
      v_repid = sy-repid.
    S T A R T  -  O F  -  S E L E C T I O N ****************
    start-of-selection.
    Get the data from VBAK and VBAP Tables
      perform get_vbak_vbap.
    E N D  -  O F  -  S E L E C T I O N *****************
    end-of-selection.
    Display the data
      perform dispolay_data.
    *&      Form  get_vbak_vbap
          Get the data from VBAK and VBAP Table
    FORM get_vbak_vbap.
    Get the data from VBAK Table
      select vbeln bstnk vdatu from vbak into table i_vbak
                         where vbeln in s_vbeln
                         and   bstnk in s_bstnk
                         and   vdatu in s_vdatu
                         and   kunnr in s_kunnr
                         and   erdat in s_erdat
                         and   ernam in s_ernam.
      if sy-subrc ne 0.
        message e000(zwave) with 'No data found for given selection'.
      endif.
    Get the data from VBAP Table
      select avbeln amatnr akdmat akwmeng a~netpr
             b~maktx into table i_vbap
             from vbap as a inner join makt as b on bmatnr = amatnr
             for all entries in i_vbak
             where a~vbeln in s_vbeln
             and   a~kdmat in s_kdmat
             and   a~abgru = space
             and   a~matnr in s_matnr
             and   a~matnr ne '000000000000009999'
             and   a~matnr ne '000000000000004444'
             and   a~matnr ne '000000000000008888'
             and   a~matnr ne '000000000000001111'
             and   a~werks = '1000'
             and   b~spras = 'E'
             and   a~vbeln = i_vbak-vbeln.
      if sy-subrc ne 0.
        message e000(zwave) with 'No data found for given selection'.
      endif.
      sort i_vbak by vbeln.
      sort i_vbap by vbeln matnr.
      loop at i_vbap.
        read table i_vbak with key vbeln = i_vbap-vbeln
                                binary search.
        if sy-subrc eq 0.
          i_sales-bstnk = i_vbak-bstnk.
          i_sales-vdatu = i_vbak-vdatu.
          i_sales-matnr = i_vbap-matnr.
          i_sales-kdmat = i_vbap-kdmat.
          i_sales-maktx = i_vbap-maktx.
          i_sales-netpr = i_vbap-netpr.
          i_sales-kwmeng = i_vbap-kwmeng.
          append i_sales.
        else.
          continue.
        endif.
        clear : i_sales,
                i_vbap,
                i_vbak.
      endloop.
      sort i_sales by vdatu bstnk matnr.
      refresh : i_vbap,
                i_vbak.
    ENDFORM.                    " get_vbak_vbap
    *&      Form  dispolay_data
          Display the data
    FORM dispolay_data.
    Fill the Fiedlcat
      PERFORM fieldcat_init  using gt_fieldcat[].
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
      I_INTERFACE_CHECK                 = ' '
      I_BYPASSING_BUFFER                =
      I_BUFFER_ACTIVE                   = ' '
          I_CALLBACK_PROGRAM                = v_repid
      I_CALLBACK_PF_STATUS_SET          = ' '
      I_CALLBACK_USER_COMMAND           = ' '
      I_CALLBACK_TOP_OF_PAGE            = ' '
      I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
      I_CALLBACK_HTML_END_OF_LIST       = ' '
      I_STRUCTURE_NAME                  =
      I_BACKGROUND_ID                   = ' '
      I_GRID_TITLE                      =
      I_GRID_SETTINGS                   =
      IS_LAYOUT                         =
          IT_FIELDCAT                       = gt_fieldcat[]
      IT_EXCLUDING                      =
      IT_SPECIAL_GROUPS                 =
      IT_SORT                           =
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      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
      IT_ALV_GRAPHICS                   =
      IT_ADD_FIELDCAT                   =
      IT_HYPERLINK                      =
      I_HTML_HEIGHT_TOP                 =
      I_HTML_HEIGHT_END                 =
      IT_EXCEPT_QINFO                   =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
        TABLES
          T_OUTTAB                          = i_sales
    EXCEPTIONS
      PROGRAM_ERROR                     = 1
      OTHERS                            = 2
    ENDFORM.                    " dispolay_data
    *&      Form  fieldcat_init
          text
         -->P_GT_FIELDCAT[]  text
    FORM fieldcat_init USING  e01_lt_fieldcat type slis_t_fieldcat_alv.
      DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    Delivery Date
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'VDATU'.
      LS_FIELDCAT-OUTPUTLEN    = 12.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Delivery Date'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Purchase Order #Material Description
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'BSTNK'.
      LS_FIELDCAT-OUTPUTLEN    = 25.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Purchase Order #'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Material
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-REF_FIELDNAME    = 'MATNR'.
      LS_FIELDCAT-REF_TABNAME    = 'MARA'.
      LS_FIELDCAT-FIELDNAME    = 'MATNR'.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Material #'.
      ls_fieldcat-seltext_M = 'Material #'.
      ls_fieldcat-seltext_S = 'Material #'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Material Description
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MAKTX'.
      LS_FIELDCAT-OUTPUTLEN    = 40.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Material Description'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Customer Material #
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'KDMAT'.
      LS_FIELDCAT-OUTPUTLEN    = 35.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Customer material no.'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Quantity
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'KWMENG'.
      LS_FIELDCAT-OUTPUTLEN    = 15.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Quantity'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Net Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'NETPR'.
      LS_FIELDCAT-OUTPUTLEN    = 15.
      LS_FIELDCAT-TABNAME    = 'I_SALES'.
      ls_fieldcat-seltext_L = 'Net Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    ENDFORM.                    " fieldcat_init
    Reward Points if it is helpful
    Thanks
    Seshu

  • Report Not showing result

    Hi!
    I am unable to get the result for my one of the item as checkbox. Other two are working properly .Please check and let me know wheres the problem please.
    ***INCLUDE ZSD_CONTRACT_LIST_T01_RENTAL1 .
    TABLES: vbak, vbap, wbrk, zsdsched,vbkd, fplt, fpla, tvlvt.
    TYPE-POOLS: slis.
    data: BEGIN OF gt_report occurs 0,
        vbeln LIKE vbak-vbeln,              "Sales Document
        posnr LIKE vbap-posnr,              "Item
        ernam LIKE vbak-ernam,              "Created by
        erdat LIKE vbak-erdat,              "Created on
        audat LIKE vbak-audat,              "Document Date
        vbtyp LIKE vbak-vbtyp,              "SD document category
        auart LIKE vbak-auart,              "Sales Document type
        vkorg LIKE vbak-vkorg,              "Sales Org
        vtweg LIKE vbak-vtweg,              "Distribution Channel
        spart LIKE vbak-spart,              "Division
        vkbur LIKE vbak-vkbur,              "Sales Office
        guebg LIKE vbak-guebg,              "Valid from date
        gueen LIKE vbak-gueen,              "Valid to date    kunnrt LIKE kna1-name1,             "Sold-to Name
       kunwet    LIKE kna1-name1,          "Ship-to Name
       kunnrt LIKE kna1-name1,             "Sold-to Name
       kunret    LIKE kna1-name1,          "Bill-to Name
        kunnr LIKE vbak-kunnr,              "Sold-to party
        kunnrt LIKE kna1-name1,             "Sold-to Name
        kvgr4 LIKE vbak-kvgr4,              "Territory
        matnr LIKE vbap-matnr,              "Material
        arktx LIKE vbap-arktx,              "Material Short Text
        charg LIKE vbap-charg,              "Batch
        matkl LIKE vbap-matkl,              "Material Group
        pstyv LIKE vbap-pstyv,              "Item Category
        zmeng LIKE vbap-zmeng,              "Target Quantity
        zieme LIKE vbap-zieme,              "Target Unit
        kdmat LIKE vbap-kdmat,              "Customer Material Number
        werks LIKE vbap-werks,              "Plant
        lgort LIKE vbap-lgort,              "Storage Location
        vstel LIKE vbap-vstel,              "Shipping Point
        route LIKE vbap-route,              "Route
        netpr LIKE vbap-netpr,              "Net Price
        kpein LIKE vbap-kpein,              "Condition Price Unit
        kmein LIKE vbap-kmein,              "Condition Unit
        shkzg LIKE vbap-shkzg,              "Returns Item
        oidrc LIKE vbap-oidrc,              "DRC Code
        kunwe LIKE vbap-oid_ship,           "Ship-to
        aufnr LIKE vbap-aufnr,              "Order Number
        vkaus LIKE vbap-vkaus,              "Usage
        kunwet    LIKE kna1-name1,          "Ship-to Name
        zzwprofid LIKE vbap-zzwprofid,      "Waste Profile ID
        kunre     LIKE wbrk-kunre,          "Bill-to
        kunret    LIKE kna1-name1,          "Bill-to Name
        addl_schd LIKE icon-id,             "Push Button For addl line
        datab     LIKE zsdsched-datab,      "Valid-From Date
        datbi     LIKE zsdsched-datbi,     "Valid To Date
        zschdfreq  LIKE zsdsched-zschdfreq, "Contract schedule frequency
        frequency  LIKE zsdsched-frequency, "Frequency
        monday    LIKE zsdsched-monday,     "Mondays
        tuesday   LIKE zsdsched-tuesday,    "Tuesdays
        wednesday  LIKE zsdsched-wednesday, "Wednesdays
        thursday  LIKE zsdsched-thursday,   "Thursdays
        friday    LIKE zsdsched-friday,     "Fridays
        saturday  LIKE zsdsched-saturday,   "Saturdays
        sunday    LIKE zsdsched-sunday,     "Sundays
        dzieme    LIKE zsdsched-dzieme,     "Target quantity UoM
        comments  LIKE zsdsched-comments,   "Comments
       END OF gt_report.
      data: Begin of gt_report1 occurs 0,
        fksaf     LIKE fplt-fksaf,
        afdat     LIKE fplt-afdat,
        fakwr     LIKE fplt-fakwr,
        fkdat     LIKE fplt-fkdat,
        nfdat     LIKE fplt-nfdat,
        fpart     LIKE fpla-fpart,
        bedat     LIKE fpla-bedat,
        endat     LIKE fpla-endat,
        horiz     LIKE fpla-horiz,
        bezei     LIKE tvlvt-bezei,
        vbeln     LIKE vbak-vbeln,
        erdat     LIKE vbak-erdat,
        ernam     LIKE vbak-ernam,
        guebg     LIKE vbak-guebg,
        gueen     LIKE vbak-gueen,
        auart     LIKE vbak-auart,
        kunnr     LIKE vbak-kunnr,
        kvgr4     LIKE vbak-kvgr4,
        vkbur     LIKE vbak-vkbur,
        vkorg     LIKE vbak-vkorg,
        vtweg     LIKE vbak-vtweg,
        vbtyp     LIKE vbak-vbtyp,
        name1     LIKE kna1-name1,
        pstyv     LIKE vbap-pstyv,
        matnr     LIKE vbap-matnr,
        werks     LIKE vbap-werks,
        oid_ship  LIKE vbap-oid_ship,
        kpein     LIKE vbap-kpein,
        kmein     LIKE vbap-kmein,
        netpr     LIKE vbap-netpr,
        kdmat     LIKE vbap-kdmat,
        posnr     LIKE vbap-posnr,
        matkl     LIKE vbap-matkl,
        aufnr     LIKE vbap-aufnr,
        vkaus     LIKE vbap-vkaus,
        route     LIKE vbap-route,
        kunre     LIKE wbrk-kunre,          "Bill-to
        kunwe LIKE vbap-oid_ship,           "Ship-to
        kunwet    LIKE kna1-name1,          "Ship-to Name
        kunnrt LIKE kna1-name1,             "Sold-to Name
        kunret    LIKE kna1-name1,          "Bill-to Name
        End of gt_report1.
    data: gs_report    LIKE LINE OF gt_report,
          gs_report1   LIKE LINE OF gt_report1,
          gt_sched     TYPE TABLE OF zsdsched,
          gt_sched_tmp TYPE TABLE OF zsdsched,
          gs_sched     TYPE zsdsched,
          gt_sel       LIKE gt_report OCCURS 0,
          gt_sel1      LIKE  gt_report1 OCCURS 0,
          gt_vbpa  TYPE TABLE OF vbpa,
          gs_vbpa  TYPE vbpa,
          gv_auart TYPE auart,
          gv_counter TYPE i.
    **-- ALV variables
    DATA: ls_fieldcat     TYPE slis_fieldcat_alv,    "Field Catalog list
          gt_fieldcat     TYPE slis_t_fieldcat_alv,  "Field Catalog
          ls_sort         TYPE slis_sortinfo_alv,    "Sorting list
          gt_sort         TYPE slis_t_sortinfo_alv,  "Sort
          gs_layout       TYPE slis_layout_alv,      "List Layout
          gs_variant      TYPE disvariant,           "Display Variant
          gv_repid        LIKE sy-repid,
          gv_save(1)           TYPE c,
          ls_fieldcat1     TYPE slis_fieldcat_alv,    "Field Catalog list
          gt_fieldcat1     TYPE slis_t_fieldcat_alv,  "Field Catalog
          ls_sort1         TYPE slis_sortinfo_alv,    "Sorting list
          gt_sort1         TYPE slis_t_sortinfo_alv,  "Sort
          gs_layout1       TYPE slis_layout_alv,      "List Layout
          gs_variant1      TYPE disvariant,           "Display Variant
          gv_repid1        LIKE sy-repid,
          gv_exit(1)           TYPE c.
    CONSTANTS: gc_a     TYPE c VALUE 'A',
               gc_g     TYPE c VALUE 'G',
               gc_re(2) TYPE c VALUE 'RE'.
    Screen-control Variables
    CONTROLS:
      tctrl_sched TYPE TABLEVIEW USING SCREEN 1010.     " Schedule lines.
    *& Report  ZSD_CONTRACT_LIST
    *& Created on: January 21, 2007
    *& Description: List of Contracts - ALV
    REPORT  zsd_contract_list_rental1.
    INCLUDE zsd_contract_list_t01_rental1.
    Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK m1 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t02.
    SELECT-OPTIONS: s_vkorg FOR vbak-vkorg MEMORY ID vko,
                    s_vtweg FOR vbak-vtweg MEMORY ID vtw,
                    s_spart FOR vbak-spart MEMORY ID spa,
                    s_vkbur FOR vbak-vkbur MEMORY ID vkb.
    SELECTION-SCREEN SKIP 1.
    SELECT-OPTIONS: s_vbeln FOR vbak-vbeln,
                    s_erdat FOR vbak-erdat,
                    s_ernam FOR vbak-ernam,
                    s_guebg FOR vbak-guebg,
                    s_gueen FOR vbak-gueen,
                    s_auart FOR gv_auart MEMORY ID vta
                                         MATCHCODE OBJECT h_vakz,
                   s_fkarv FOR fplt-fkarv.
    SELECTION-SCREEN SKIP 1.
    SELECT-OPTIONS:
                    s_kunnr FOR vbak-kunnr,
                    s_kunwe FOR vbap-oid_ship,
                    s_kunre FOR wbrk-kunre.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t03.
    SELECT-OPTIONS: s_werks FOR vbap-werks MEMORY ID wrk,
                    s_lgort FOR vbap-lgort MEMORY ID lag,
                    s_vstel FOR vbap-vstel MEMORY ID vst,
                    s_route for vbap-route,
                    s_matnr FOR vbap-matnr.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t04.
    PARAMETERS:     p_varia TYPE disvariant-variant MEMORY ID wrk,
                    p_all   AS CHECKBOX DEFAULT 'X',
                    p_group AS CHECKBOX DEFAULT 'X',
                    p_rental AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN END OF BLOCK m1.
    Start of Selection
    START-OF-SELECTION.
      PERFORM get_data.
    Display ALV
    END-OF-SELECTION.
      IF gt_report[] IS INITIAL.
        MESSAGE s419(brain).
      ELSE.
        PERFORM create_alv.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST                                 *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.
      PERFORM f01_f4_variant CHANGING p_varia.
    *&      Form  get_data
          text
    FORM get_data .
       select the appropriate rental data.
    IF  p_rental IS NOT INITIAL AND ( ( p_all IS INITIAL ) AND ( p_group IS INITIAL ) ).
    SELECT avbeln aerdat aernam aaudat avbtyp aauart a~vkorg
           avtweg aspart avkbur aguebg agueen akunnr a~kvgr4
           bpstyv bmatnr bwerks boid_ship bkpein bkmein
           bnetpr bkdmat bposnr bmatkl baufnr bvkaus b~route
           dbezei efkarv eafdat efakwr efkdat enfdat e~fksaf
           ffpart fbedat fendat fhoriz flodat ftndat b~oid_ship AS kunwe
    INTO CORRESPONDING FIELDS OF TABLE gt_sel1
         FROM vbak AS a
             INNER JOIN vbap AS b ON avbeln = bvbeln
            INNER JOIN vbpa as c ON avbeln = cvbeln
             INNER JOIN vbkd AS g ON avbeln = gvbeln
             INNER JOIN fplt AS e ON gfplnr = efplnr
             INNER JOIN fpla AS f ON efplnr = ffplnr
             INNER JOIN tvlvt AS d ON bvkaus = dabrvw
         WHERE a~vbeln IN s_vbeln
           AND a~erdat IN s_erdat
           AND a~vbtyp = gc_g
           AND a~ernam IN s_ernam
           AND a~vkorg IN s_vkorg
           AND a~vtweg IN s_vtweg
           AND a~spart IN s_spart
           AND a~vkbur IN s_vkbur
           AND a~guebg IN s_guebg
           AND a~gueen IN s_gueen
           AND a~auart IN s_auart
           AND a~kunnr IN s_kunnr
           AND b~oid_ship IN s_kunwe
           AND b~werks IN s_werks
           AND b~lgort IN s_lgort
           AND b~vstel IN s_vstel
           and b~route in s_route
           AND b~matnr IN s_matnr
           AND e~fkarv IN s_fkarv
           AND e~fksaf = 'A'
           OR  e~fksaf = 'B'.
        sort gt_sel1.
    *ENDIF.
        IF NOT gt_sel1[] IS INITIAL.
      Get Bill-to Party's for Item Lines
        SELECT vbeln posnr parvw kunnr INTO CORRESPONDING FIELDS OF TABLE gt_vbpa
            FROM vbpa
            FOR ALL ENTRIES IN gt_sel1
            WHERE vbeln = gt_sel1-vbeln
              AND parvw = gc_re.
    Loop through captured data for additional information
      LOOP AT gt_sel1 INTO gs_report1.
      Find the bill-to party
        READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report1-vbeln
                                                 posnr = gs_report1-posnr
                                                 parvw = gc_re.
        IF sy-subrc <> 0.
          READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report1-vbeln
                                                   parvw = gc_re.
          CHECK sy-subrc = 0 AND gs_vbpa-kunnr IN s_kunre.
        ELSE.
          CHECK gs_vbpa-kunnr IN s_kunre.
        ENDIF.
        gs_report1-kunre = gs_vbpa-kunnr.
    Get the Customer's Name
        gs_report1-kunnrt = zcl_kna1=>get_name1( itp_kunnr = gs_report1-kunnr ).
        gs_report1-kunwet = zcl_kna1=>get_name1( itp_kunnr = gs_report1-kunwe ).
        gs_report1-kunret = zcl_kna1=>get_name1( itp_kunnr = gs_report1-kunre ).
      Get the scheduling lines for the item line.
        CLEAR gv_counter.
        APPEND gs_report1 TO gt_report1.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM gt_report1.
    *ENDIF.
    ELSE.
    IF ( ( p_all IS NOT INITIAL ) OR ( p_group IS NOT INITIAL ) ) AND p_rental IS INITIAL.
      Select the appropriate contract data.
      SELECT a~vbeln a~erdat a~ernam a~audat a~vbtyp a~auart a~vkorg
       a~vtweg a~spart a~vkbur a~guebg a~gueen a~kunnr a~kvgr4
       b~posnr b~matnr b~charg b~matkl b~arktx b~pstyv b~zmeng
       b~zieme b~kdmat b~werks b~lgort b~vstel b~netpr b~kpein
       b~kmein b~shkzg b~oid_extbol b~oid_miscdl b~oidrc b~oid_ship AS kunwe
       b~zzwprofid c~datbi c~datab b~route
      baufnr bvkaus d~bezei
         INTO CORRESPONDING FIELDS OF TABLE gt_sel
         FROM vbak AS a
             INNER JOIN vbap AS b ON a~vbeln = b~vbeln
            INNER JOIN tvlvt AS d ON bvkaus = dabrvw
             LEFT OUTER JOIN zsdsched AS c ON b~vbeln = c~vbeln AND
                                   b~posnr = c~posnr
         WHERE a~vbeln IN s_vbeln
           AND a~erdat IN s_erdat
           AND a~vbtyp = gc_g
           AND a~ernam IN s_ernam
           AND a~vkorg IN s_vkorg
           AND a~vtweg IN s_vtweg
           AND a~spart IN s_spart
           AND a~vkbur IN s_vkbur
           AND a~guebg IN s_guebg
           AND a~gueen IN s_gueen
           AND a~auart IN s_auart
           AND a~kunnr IN s_kunnr
           AND b~oid_ship IN s_kunwe
           AND b~werks IN s_werks
           AND b~lgort IN s_lgort
           AND b~vstel IN s_vstel
           and b~route in s_route
           AND b~matnr IN s_matnr.
      SORT gt_sel.
    ENDIF.
      IF NOT gt_sel[] IS INITIAL.
      Get Bill-to Party's for Item Lines
        SELECT vbeln posnr parvw kunnr INTO CORRESPONDING FIELDS OF TABLE gt_vbpa
            FROM vbpa
            FOR ALL ENTRIES IN gt_sel
            WHERE vbeln = gt_sel-vbeln
              AND parvw = gc_re.
    endif.
      Select the remaining records from the ZSDSCHED Table.
    IF p_group IS NOT INITIAL.
        SELECT * FROM zsdsched
            INTO TABLE gt_sched
            FOR ALL ENTRIES IN gt_sel
            WHERE vbeln = gt_sel-vbeln
              AND posnr = gt_sel-posnr.
        SORT gt_sched.
      ENDIF.
    Loop through captured data for additional information
      LOOP AT gt_sel INTO gs_report.
      Find the bill-to party
        READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                 posnr = gs_report-posnr
                                                 parvw = gc_re.
        IF sy-subrc <> 0.
          READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                   parvw = gc_re.
          CHECK sy-subrc = 0 AND gs_vbpa-kunnr IN s_kunre.
        ELSE.
          CHECK gs_vbpa-kunnr IN s_kunre.
        ENDIF.
        gs_report-kunre = gs_vbpa-kunnr.
    Get the Customer's Name
        gs_report-kunnrt = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunnr ).
        gs_report-kunwet = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunwe ).
        gs_report-kunret = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunre ).
      Get the scheduling lines for the item line.
        CLEAR gv_counter.
        IF NOT p_group IS INITIAL.
        If we are grouping the lines add the icon button.
          LOOP AT gt_sched INTO gs_sched WHERE vbeln = gs_report-vbeln
                                         AND posnr = gs_report-posnr.
            IF gv_counter > 0.
              gs_report-addl_schd = '@1E@'.
              CONTINUE.
            ENDIF.
            MOVE-CORRESPONDING gs_sched TO gs_report.
            ADD 1 TO gv_counter.
          ENDLOOP.
        ELSE.
        Otherwise get the rest of the schedule information
          READ TABLE gt_sched INTO gs_sched
            WITH KEY vbeln = gs_report-vbeln
                     posnr = gs_report-posnr
                     datbi = gs_report-datbi
                     datab = gs_report-datab.
          IF sy-subrc = 0.
            MOVE-CORRESPONDING gs_sched TO gs_report.
          ENDIF.
        ENDIF.
        APPEND gs_report TO gt_report.
      ENDLOOP.
    Remove any duplicates from the reporting table
      DELETE ADJACENT DUPLICATES FROM gt_report.
    If Show all records is initial, delete non-scheduled lines (ex. Sub-items)
      IF p_all IS INITIAL.
        DELETE gt_report WHERE datbi = 0
                            AND datab = 0.
      ENDIF.
    endif.
    endif.
    ENDFORM.                    " get_data
    *&      Form  create_alv
          text
    FORM create_alv .
    if ( ( p_all is not initial ) or ( p_group is not initial ) ) and p_rental is initial.
      PERFORM initialize_fieldcat USING gt_fieldcat[].
      PERFORM populate_layout CHANGING gs_layout
                                       gs_variant.
      PERFORM populate_sort   USING gt_sort[].
      PERFORM display_alv_report.
    else.
    if  p_rental is not initial and ( ( p_all is initial ) and ( p_group is initial ) ).
    PERFORM initialize_fieldcat1 USING gt_fieldcat1[].
    PERFORM populate_layout1 CHANGING gs_layout1
                                      gs_variant1.
    PERFORM populate_sort1   USING gt_sort1[].
    PERFORM display_alv_report1.
    *endif.
    *endif.
    ENDFORM.                    " create_alv
    *&      Form  initialize_fieldcat
      Get and enhance the field catalog data
         -->L_FIELDCAT[]  text
    FORM initialize_fieldcat USING l_fieldcat TYPE slis_t_fieldcat_alv.
    IF p_rental IS NOT INITIAL .
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_program_name         = 'ZSD_CONTRACT_LIST_RENTAL1'
          i_internal_tabname     = 'GT_REPORT1'
          i_inclname             = 'ZSD_CONTRACT_LIST_T01_RENTAL1'
        CHANGING
          ct_fieldcat            = l_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
    READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'VBELN'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Contract'.
      ls_fieldcat-hotspot     = 'X'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNNRT'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sold-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNWET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Ship-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNRET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Bill-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
    READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'ADDL_SCHD'.
      IF NOT p_group IS INITIAL.
        ls_fieldcat-seltext_s = 'Schd'.
        ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Additional Scheduling Lines'.
        ls_fieldcat-icon = 'X'.
        CLEAR: ls_fieldcat-key,
               ls_fieldcat-ref_fieldname,
               ls_fieldcat-ref_tabname,
               ls_fieldcat-reptext_ddic,
               ls_fieldcat-ddic_outputlen.
        ls_fieldcat-hotspot     = 'X'.
        MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      ELSE.
        DELETE l_fieldcat INDEX sy-tabix.
      ENDIF.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATAB'.
      ls_fieldcat-seltext_s = 'Schd From'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. From Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat1 WITH KEY fieldname = 'DATBI'.
      ls_fieldcat-seltext_s = 'Schd To'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. To Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
    ELSE.
    IF p_rental IS INITIAL.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_program_name         = 'ZSD_CONTRACT_LIST_RENTAL1'
          i_internal_tabname     = 'GT_REPORT'
          i_inclname             = 'ZSD_CONTRACT_LIST_T01_RENTAL1'
        CHANGING
          ct_fieldcat            = l_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'VBELN'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Contract'.
      ls_fieldcat-hotspot     = 'X'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNNRT'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sold-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNWET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Ship-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNRET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Bill-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'ADDL_SCHD'.
      IF NOT p_group IS INITIAL.
        ls_fieldcat-seltext_s = 'Schd'.
        ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Additional Scheduling Lines'.
        ls_fieldcat-icon = 'X'.
        CLEAR: ls_fieldcat-key,
               ls_fieldcat-ref_fieldname,
               ls_fieldcat-ref_tabname,
               ls_fieldcat-reptext_ddic,
               ls_fieldcat-ddic_outputlen.
        ls_fieldcat-hotspot     = 'X'.
        MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      ELSE.
        DELETE l_fieldcat INDEX sy-tabix.
      ENDIF.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATAB'.
      ls_fieldcat-seltext_s = 'Schd From'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. From Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat1 WITH KEY fieldname = 'DATBI'.
      ls_fieldcat-seltext_s = 'Schd To'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. To Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
    ENDIF.
    ENDIF.
    ENDFORM.                    " initialize_fieldcat
    *&      Form  populate_layout
          text
         <--GS_LAYOUT
         <--GS_VARIANT
    FORM populate_layout CHANGING  gs_layout  TYPE slis_layout_alv
                                   gs_variant TYPE disvariant.
      gs_layout-colwidth_optimize = 'X'.
      gs_layout-allow_switch_to_list = 'X'.
      gs_layout-zebra                = 'X'.
      gs_variant-report = sy-repid.
    ENDFORM.                    " populate_layout
    *&      Form  populate_sort
          text
         -->l_SORT[]  text
    FORM populate_sort USING l_sort TYPE slis_t_sortinfo_alv.
    ENDFORM.                    " populate_sort
    *&      Form  display_alv_report
    FORM display_alv_report .
      gv_repid = sy-repid.
    IF p_rental IS INITIAL.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
          i_callback_program              =  gv_repid
        I_CALLBACK_PF_STATUS_SET       = ' '
          i_callback_user_command        = 'USER_COMMAND'
          i_structure_name               =  'GT_REPORT'
          is_layout                      =   gs_layout
          it_fieldcat                     =  gt_fieldcat
        IT_EXCLUDING                   =
        IT_SPECIAL_GROUPS              =
          it_sort                        =  gt_sort
        IT_FILTER                      =
        IS_SEL_HIDE                    =
          i_default                      = 'X'
          i_save                         = gc_a
          is_variant                     = gs_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
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
          TABLES
            t_outtab                       = gt_report
         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.
    ENDIF.
    ELSE.
    IF p_rental IS NOT INITIAL.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
          i_callback_program              =  gv_repid
        I_CALLBACK_PF_STATUS_SET       = ' '
          i_callback_user_command        = 'USER_COMMAND'
          i_structure_name               =  'GT_REPORT1'
          is_layout                      =   gs_layout
          it_fieldcat                     =  gt_fieldcat
        IT_EXCLUDING                   =
        IT_SPECIAL_GROUPS              =
          it_sort                        =  gt_sort
        IT_FILTER                      =
        IS_SEL_HIDE                    =
          i_default                      = 'X'
          i_save                         = gc_a
          is_variant                     = gs_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
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
          TABLES
            t_outtab                       = GT_REPORT1
         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.
    endif.
    endif.
    ENDFORM.                    " display_alv_report
    *&      Form  initialize_fieldcat1
      Get and enhance the field catalog data for rental fields
         -->L_FIELDCAT[]  text
    *FORM initialize_fieldcat1 USING l_fieldcat1 TYPE slis_t_fieldcat_alv.
    **if ***
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
         i_program_name         = 'ZSD_CONTRACT_LIST_rental1'
         i_internal_tabname     = 'GT_SEL1'
         i_inclname             = 'ZSD_CONTRACT_LIST_T01_rental1'
       CHANGING
         ct_fieldcat            = l_fieldcat1
       EXCEPTIONS
         inconsistent_interface = 1
         program_error          = 2
         OTHERS                 = 3.
    **else.
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
         i_program_name         = 'ZSD_CONTRACT_LIST_rental1'
         i_internal_tabname     = 'GT_SEL1'
         i_inclname             = 'ZSD_CONTRACT_LIST_T01_rental1'
       CHANGING
         ct_fieldcat            = l_fieldcat1
       EXCEPTIONS
         inconsistent_interface = 1
         program_error          = 2
         OTHERS                 = 3.
    ***endfi.
    *ENDFORM.                    " initialize_fieldcat
    *&      Form  populate_layout
          text
         <--GS_LAYOUT
         <--GS_VARIANT
    *FORM populate_layout1 CHANGING  gs_layout1  TYPE slis_layout_alv
                                  gs_variant1 TYPE disvariant.
    gs_layout1-colwidth_optimize = 'X'.
    gs_layout1-allow_switch_to_list = 'X'.
    gs_layout1-zebra                = 'X'.
    gs_variant1-report = sy-repid.
    *ENDFORM.                    " populate_layout
    ***&      Form  populate_sort
          text
         -->l_SORT[]  text
    *FORM populate_sort1 USING l_sort TYPE slis_t_sortinfo_alv.
    *ENDFORM.                    " populate_sort
    ***&      Form  display_alv_report
    *FORM display_alv_report1 .
    gv_repid = sy-repid.
    if  p_rental is not initial and ( ( p_all is initial ) and ( p_group is initial ) ).
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
         i_callback_program              =  gv_repid
        I_CALLBACK_PF_STATUS_SET       = ' '
         i_callback_user_command        = 'USER_COMMAND'
         i_structure_name               =  'gt_sel1'
         is_layout                      =   gs_layout1
         it_fieldcat                     =  gt_fieldcat1
        IT_EXCLUDING                   =
        IT_SPECIAL_GROUPS              =
         it_sort                        =  gt_sort1
        IT_FILTER                      =
        IS_SEL_HIDE                    =
         i_default                      = 'X'
         i_save                         = gc_a
         is_variant                     = gs_variant1
        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
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
         TABLES
           t_outtab                       = gt_sel1
        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.
    *endif.
    *ENDFORM.                    " display_alv_report
    *&      Form  f01_f4_variant
       Get the Layout variant for the user.
    FORM f01_f4_variant CHANGING c_variant TYPE disvariant-variant.
      DATA: ls_variant TYPE disvariant,
            l_exit     TYPE char1.
      ls_variant-report = sy-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = ls_variant
                i_save              = 'A'
              it_default_fieldcat =
           IMPORTING
                e_exit              = l_exit
                es_variant          = ls_variant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF l_exit EQ space.
          c_variant = ls_variant-variant.
        ENDIF.
      ENDIF.
    ENDFORM.                    " f01_f4_variant
          FORM USER_COMMAND                                          *
          --> R_UCOMM                                                *
          --> RS_SELFIELD                                            *
    FORM user_command USING r_ucomm LIKE sy-ucomm
                      rs_selfield TYPE slis_selfield.
    Check function code
      CASE r_ucomm.
        WHEN '&IC1'.
          READ TABLE gt_report INTO gs_report INDEX rs_selfield-tabindex.
          CHECK sy-subrc = 0.
          CASE rs_selfield-fieldname.
            WHEN 'VBELN'.
          Set parameter ID for transaction screen field
              CHECK NOT gs_report-vbeln IS INITIAL.
              SET PARAMETER ID 'KTN' FIELD gs_report-vbeln.
              CALL TRANSACTION 'VA43' AND SKIP FIRST SCREEN.
            WHEN 'ADDL_SCHD'.
              CHECK NOT gs_report-addl_schd IS INITIAL.
              REFRESH gt_sched_tmp.
              LOOP AT gt_sched INTO gs_sched
                               WHERE vbeln = gs_report-vbeln
                                 AND posnr = gs_report-posnr.
                APPEND gs_sched TO gt_sched_tmp.
              ENDLOOP.
              CHECK sy-subrc = 0.
              CALL SCREEN '1010' STARTING AT 5 5.
          ENDCASE.
      ENDCASE.
    ENDFORM.                    "user_command
    *&      Module  STATUS_1010  OUTPUT
          text
    MODULE status_1010 OUTPUT.
      SET PF-STATUS 'MAIN_1010'.
      SET TITLEBAR '1010' WITH gs_report-vbeln gs_report-posnr.
    ENDMODULE.                 " STATUS_1010  OUTPUT
    *&      Module  USER_COMMAND_1010  INPUT
          text
    MODULE user_command_1010 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'CANC'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_1010  INPUT

    Hi !
    This report shows the schedule line items , group schedule line items and rental contact (billing plan) lines when particular checkbox is checked. The checkboxs p_all(non-schedule line) , p_group(group schedule line items) are working in my above alv report and showing  result but unfortunately when p_rental is checked it dosent give me result , it says  no data selected. This when checked has to show result based on a different set of selections as I have done, but its not shwoing me the result .
    Kindly help please.
    Thanks

  • Problem is When  i click the record in alv report it has to go to Va02 tran

    Hi Everyone,
    When i click on sales order number it has to go to transaction code Va02 for that i wrote code as like this....
    *& Report  ZOPEN_SALES_ORDER
    Report  ZOPEN_SALES_ORDER1.
    TYPE-POOLs : slis.
    tables:kna1,mara.
    DATA       : FIELDCAT     TYPE SLIS_T_FIELDCAT_ALV.
    DATA       : IMPORT_VARIANT LIKE DISVARIANT.
    DATA       : XREPID         LIKE SY-REPID.
    DATA       : LAYOUT         TYPE SLIS_LAYOUT_ALV.
    DATA       : P_SORT TYPE STANDARD TABLE OF SLIS_SORTINFO_ALV.
    DATA       : I_EVENTS           TYPE SLIS_T_EVENT,
                 I_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
                 T_REPID LIKE SY-REPID.
    TYPES: BEGIN OF ty_report.
       INCLUDE STRUCTURE BAPIORDERS.
    TYPES: KDMAT TYPE VBAP-KDMAT,
           aedat TYPE sy-datum,
           MENGE TYPE BAPIORDERS-DLV_QTY,
      END OF ty_report.
    DATA: it_report TYPE STANDARD TABLE OF ty_report with HEADER LINE,
          wa_report TYPE ty_report.
    data: cust type BAPI1007-CUSTOMER,
          p_sales type BAPIORDERS-SALES_ORG,
          vbeln type vbap-vbeln.
    selection-screen begin of block bk1 with frame title text-001.
    PARAMETERS :p_cust type BAPI1007-CUSTOMER .
    *PARAMETERS p_sales type BAPIORDERS-SALES_ORG .
    PARAMETERS: p_matnr type mara-matnr.
    parameters: p_sd_doc type  BAPIORDERS-SD_DOC.
    PARAMETERS: p_date type BAPIORDERS-REQ_DATE.
    PARAMETERS: p_plant type vbap-werks.
    *PARAMETERS P_KDMAT TYPE VBAP-KDMAT.
    *PARAMETERS P_WERKS TYPE VBAP-WERKS.
    *PARAMETERS P_PO TYPE EKKO-ebeln.
    selection-screen end of block bk1.
    at SELECTION-SCREEN .
    if P_cust is  INITIAL and p_matnr is  INITIAL and P_sd_doc is  INITIAL
                           and P_date is  INITIAL  and p_plant is INITIAL.                 .
        message e000(0) with 'Please Fill At Least One Field '.
        endif.
      If p_cust is not INITIAL  .
            select single VKORG from vbak  into p_sales where kunnr eq p_cust.
             message 'Execute The Repport' Type 'E'.
        elseif p_matnr is not INITIAL .
         clear p_cust.
         clear p_sales.
          select single VBELN from vbap  into vbeln where matnr eq p_matnr.
            if vbeln is not INITIAL.
              SELECT single kunnr vkorg from vbak into (cust,p_sales) where vbeln eq vbeln.
                p_cust = cust.
                p_sales = p_sales.
           endif.
       elseif P_sd_doc is not INITIAL.
         clear p_cust.
         clear p_sales.
          SELECT single kunnr vkorg from vbak into (cust,p_sales) where vbeln eq P_SD_DOC.
                p_cust = cust.
                p_sales = p_sales.
       elseif p_date is not initial.
         clear vbeln.
         clear p_cust.
         clear p_sales.
          select single VBELN from vbep  into vbeln where EDATU eq p_date and POSNR = '10' and etenr = '0001'.
            if vbeln is not INITIAL.
                  SELECT single kunnr vkorg from vbak into (cust,p_sales) where vbeln eq vbeln.
                p_cust = cust.
                p_sales = p_sales.
                endif.
       elseif p_plant is not INITIAL.
         clear vbeln.
         clear p_cust.
         clear p_sales.
         select single VBELN from vbap  into vbeln where werks eq p_plant.
            if vbeln is not INITIAL.
                 SELECT single kunnr vkorg from vbak into (cust,p_sales) where vbeln eq vbeln.
                    p_cust = cust.
                p_sales = p_sales.
       endif.
       endif.
    INITIALIZATION.
    T_REPID = SY-REPID.
      CONSTANTS:C_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
    START-OF-SELECTION.
    CALL FUNCTION 'BAPI_SALESORDER_GETLIST'
      EXPORTING
        CUSTOMER_NUMBER             = p_cust
        SALES_ORGANIZATION          = p_sales
       MATERIAL                    =  p_matnr
       DOCUMENT_DATE               =  p_date
      DOCUMENT_DATE_TO            =
      PURCHASE_ORDER              =
      TRANSACTION_GROUP           = 0
      PURCHASE_ORDER_NUMBER       =
      MATERIAL_EVG                =
    IMPORTING
      RETURN                      =
      TABLES
        SALES_ORDERS                = it_report
    LOOP AT it_report INTO wa_report.
      SELECT SINGLE KDMAT INTO wa_report-KDMAT FROM VBAP
        WHERE VBELN = wa_report-SD_DOC AND POSNR = wa_report-ITM_NUMBER.
        SELECT SINGLE aedat FROM ekko Into wa_report-aedat
          where ebeln = wa_report-PURCH_NO.
        wa_report-menge = wa_report-REQ_QTY - wa_report-dlv_qty.
    select single edatu from vbep into wa_
      MODIFY it_report FROM wa_report INDEX SY-TABIX.
    ENDLOOP.
    PERFORM DISPLAY.
    FORM DISPLAY .
      PERFORM FIELDCAT_INIT USING FIELDCAT[].
      PERFORM LAYOUT_BUILD USING LAYOUT.
      PERFORM EVENTTAB_BUILD USING I_EVENTS.
      PERFORM COMMENT_BUILD USING I_LIST_TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM = T_REPID
         I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'
          I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
          IT_FIELDCAT        = FIELDCAT
          IS_LAYOUT          = LAYOUT
          IT_EVENTS          = I_EVENTS[]
          I_DEFAULT          = 'X'
          I_SAVE             = 'A'
        TABLES
          T_OUTTAB           = it_report
        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 FIELDCAT_INIT  USING  RT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
      DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
      DATA : CNTR TYPE I.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'SD_DOC'.
      LS_FIELDCAT-SELTEXT_L = 'Sales Order'.
      LS_FIELDCAT-HOTSPOT = 'X'. " HAND APPEARS.
      LS_FIELDCAT-KEY = 'X'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'ITM_NUMBER'.
      LS_FIELDCAT-SELTEXT_L = 'Item Number'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
    CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'SOLD_TO'.
      LS_FIELDCAT-SELTEXT_L = 'Customer Number'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
    CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'NAME'.
      LS_FIELDCAT-SELTEXT_L = 'Customer NAME'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'MATERIAL'.
      LS_FIELDCAT-SELTEXT_L = 'Material'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
    CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'SHORT_TEXT'.
      LS_FIELDCAT-SELTEXT_L = 'Material Short Text'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
    CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'KDMAT'.
      LS_FIELDCAT-SELTEXT_L = 'Customer Material'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'PLANT'.
      LS_FIELDCAT-SELTEXT_L = 'Plant'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'PURCH_NO'.
      LS_FIELDCAT-SELTEXT_L = 'Purchase Order Nuber'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'AEDAT'.
      LS_FIELDCAT-SELTEXT_L = 'PO Date'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'REQ_QTY'.
      LS_FIELDCAT-SELTEXT_L = 'Sales Order Quantity'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'REQ_DATE'.
      LS_FIELDCAT-SELTEXT_L = 'Required Date'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'DLV_QTY'.
      LS_FIELDCAT-SELTEXT_L = 'Delivered Quantity'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'MENGE'.
      LS_FIELDCAT-SELTEXT_L = 'Open Quantity'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
    CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'CREATION_DATE'.
      LS_FIELDCAT-SELTEXT_L = 'Creation Date'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'DOC_STATUS'.
      LS_FIELDCAT-SELTEXT_L = 'Sales Document Status'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
        CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'NET_PRICE'.
      LS_FIELDCAT-SELTEXT_L = 'Net Price'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
        CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'COND_P_UNT'.
      LS_FIELDCAT-SELTEXT_L = 'Condition Pricing Unit'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
          CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'COND_UNIT'.
      LS_FIELDCAT-SELTEXT_L = 'Condition Unit'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
        CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'NET_VALUE'.
      LS_FIELDCAT-SELTEXT_L = 'Net Value in Document Currency'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      endform.
    FORM LAYOUT_BUILD USING LAYOUT TYPE SLIS_LAYOUT_ALV.
      LAYOUT-ZEBRA               = 'X'.
      LAYOUT-COLWIDTH_OPTIMIZE   = 'X'.
    LAYOUT-INFO_FIELDNAME      = 'LINE_COLOR'.
    LAYOUT-BOX_TABNAME         = 'ITAB'.
    LAYOUT-COLWIDTH_OPTIMIZE   = 'X'.
    ENDFORM.                    " layout_build
    *&      Form  eventtab_build
            Initialize events
         -->L_EVENTS   Table used to store the events
    FORM EVENTTAB_BUILD USING L_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   = L_EVENTS.
      READ TABLE L_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE INTO LS_EVENT.
      IF SY-SUBRC = 0.
        MOVE C_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
        APPEND LS_EVENT TO L_EVENTS.
      ENDIF.
    ENDFORM.                    "eventtab_build
    *&      Form  comment_build
         -->L_LIST_TOP_OF_PAGE Table used to store the list header
    FORM COMMENT_BUILD USING L_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
      DATA: LS_LINE TYPE SLIS_LISTHEADER.
      DATA: DATE1(200) TYPE C.
      DATA: DATE2(4) TYPE C.
      DATA: DATE3(12) TYPE C.
      DATA: DATE4(12) TYPE C.
      DATA: TIME1(200) TYPE C.
      DATA: TIME2(4) TYPE C.
      DATA: VALUE1(100).
      DATA: VALUE2(50).
      CONCATENATE  SY-UZEIT+0(2) ':'
                 SY-UZEIT+2(2) ':'
                 SY-UZEIT+4(2)  INTO TIME1.
      DATE2 = SY-DATUM+6(2).
      CONCATENATE  DATE2 '/' INTO DATE1." separated by space.
      DATE2 = SY-DATUM+4(2).
      CONCATENATE DATE1 DATE2 '/' INTO DATE1.
      DATE2 = SY-DATUM+0(4).
      CONCATENATE DATE1 DATE2 INTO  DATE1.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = 'Open Sales Report'.
      APPEND LS_LINE TO L_LIST_TOP_OF_PAGE.
      LS_LINE-TYP  = 'S'.
      LS_LINE-KEY  = 'User Name :'.
      LS_LINE-INFO = SY-UNAME.
      APPEND LS_LINE TO L_LIST_TOP_OF_PAGE.
      LS_LINE-TYP  = 'S'.
      LS_LINE-KEY  = 'Execution Date :'.
      LS_LINE-INFO = DATE1.
      APPEND LS_LINE TO L_LIST_TOP_OF_PAGE.
      LS_LINE-TYP  = 'S'.
      LS_LINE-KEY  = 'Execution Time :'.
      LS_LINE-INFO = TIME1.
      APPEND LS_LINE TO L_LIST_TOP_OF_PAGE.
    ENDFORM.                    "comment_build
    *&      Form  top_of_page
          SAP Logo on top of page
    FORM TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          IT_LIST_COMMENTARY = I_LIST_TOP_OF_PAGE.
    ENDFORM.                    "top_of_page
    *FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM
    *RS_SELFIELD TYPE SLIS_SELFIELD.
    FORM USER_COMMAND USING r_ucomm like sy-ucomm
                           ls_selfield TYPE slis_selfield.
    READ TABLE it_report ."into it_report INDEX RS_SELFIELD-TABINDEX.
    IF SY-SUBRC = 0.
        CASE r_UCOMM.
          WHEN 'SD_DOC'.
            SET PARAMETER ID 'AUN' FIELD IT_REPORT-SD_DOC.
             CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.
             clear IT_report-SD_DOC.
             endcase.
           ENDIF.
            endform.
    Pls correct me .....

    HI,
    FORM USER_COMMAND USING r_ucomm like sy-ucomm
    ls_selfield TYPE slis_selfield.
    if ls_selfield-FIELDNAME =  'SD_DOC'.                        " Change
    SET PARAMETER ID 'AUN' FIELD ls_selfield-Value.           " Change
    CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.
    clear IT_report-SD_DOC.
    endif.                                                   " Change
    endform.
    Edited by: Avinash Kodarapu on Jan 29, 2009 12:24 AM

  • Re:ALV's

    Hi,
              I have a ALV screen as that of VA05( list of sales order) but in this customised screen the problem is with open sales orders, there r many OPEN SALES ORDERS in VAO5 and in my customised screen there r very less How to find out where is the problem in this open sales order in my customised ALV's
       and second one, i need to add extra one column to this report but i get that value from sql database and store in my variable say v_opt, so how to equate this in select stmts
               select akunnr avbeln blgortbcharg ...............into orresponding fields of table itab  from vbak as a inner  join vbap as b on avbln = b~vbeln
         so iam retrieving v_opt based on the charg from sql database table, so how to use in this select query , field catalogue and in layout
    perform fill_field_of_fieldcatalog tables alv_fldcat using  'ITAB'  'WERKS'  '  '  'PLANT'  ' '  ' '  ' '  ' '  ' '                                         
       alv_fldcat-tabname = p_tabname
       alv_fldcat-fieldname = p_fieldname.
         alv_fldcat-key =  p_key.
         alv_fldcat-emphasize = '1234'.
          alv_fldcat-seltext_l = p_seltext_l
         alv_fldcat-no_zero = p_no_zero.
         alv_fldcat-just = p_just
          alv_fldcat-datatype = p_datatype
          alv_fldcat-ddictxt = 'L',
          alv_fldcat-sp_group = p_group.
    append alv_fldcat.
           i know alv_fldcat-tabname and fieldname , so what are other fields used

    Hi
    you should follow the following SAP note to add fields to VA05
    this will ensure it is supported by SAP, instead of Customer material number
    you can add any of your field
    Note 350068 - Additionl fields in VA05:Customer material number as example
    To add field VBAP-KDMAT to structure VBMTV, proceed as follows:
    1. Table VBMTV: Replace the dummy field with KDMAT in Include VBMTVZ.
    2. Table T180A: Add a new data record via Transaction SE16.                               TBNAM = 'VBMTV'
                                  FDNAM = 'KDMAT'
                                  ZUART = 'D'
    3. In Releases < 4.0A:  Adjust the display variant in Customizing (VOA3). In Releases >= 4.0A, read Note 0300633 for the settings of the display variant for the ALV lists.
    4. Update of KDMAT:User exit PERFORM MOVE_USERFIELDS USING 'VBAP' in LV05TFMO, Include V05TZZMO add the following line behind WHEN 'VBAP': MOVE LVBAP-KDMAT TO LVBMTV-KDMAT. <-- Insert
    5. Activate Include V05TZZMO.
    6. If then, you log on to the system again and call up Transaction VA05 or VA35, the system issues the 'Customer material number' field.
    Regards
    Jitesh

  • Adding New Fields to the Variant in VA05

    When we click the t code VA05 we get Display list of open sales orders. When we click on Display variants we get three fields
    1) Requests
    2) Order Item
    3) Order Schedule
    My question is when you click on these of these variants u get fields. How do u add additional fields and whats the procedure for that.????
    Regards
    Atul Keshav

    Hello Atul,
    You can review the note  350068, which describes how to add any field (as an example VBAP-KDMAT in the note)  in VA05. I hope it helps.
    Best regards,
    Lela

  • Loss or data-ALV

    Hi!
    Can anyone please help me out as to whats the problem with the report thats causing in loss of records , presently when I combine the two internal tables and try extracting the records its not showing up all the records , its just taking the entries whicg match against the two tables and giving output. Please help me ot please.
    Thanks
    *&  Include           ZSD_RENTAL_REPTEST_T01
    TABLES: vbak, vbap, wbrk, vbkd, fplt, fpla,  zsdsched.
    TYPE-POOLS: slis.
    DATA: BEGIN OF itab OCCURS 0,
        vbeln LIKE vbak-vbeln,              "Sales Document
        posnr LIKE vbap-posnr,              "Item
        ernam LIKE vbak-ernam,              "Created by
        erdat LIKE vbak-erdat,              "Created on
        audat LIKE vbak-audat,              "Document Date
        vbtyp LIKE vbak-vbtyp,              "SD document category
        auart LIKE vbak-auart,              "Sales Document type
        vkorg LIKE vbak-vkorg,              "Sales Org
        vtweg LIKE vbak-vtweg,              "Distribution Channel
        spart LIKE vbak-spart,              "Division
        vkbur LIKE vbak-vkbur,              "Sales Office
        guebg LIKE vbak-guebg,              "Valid from date
        gueen LIKE vbak-gueen,              "Valid to date
        kunnr LIKE vbak-kunnr,              "Sold-to party
        kunnrt LIKE kna1-name1,             "Sold-to Name
        kvgr4 LIKE vbak-kvgr4,              "Territory
        matnr LIKE vbap-matnr,              "Material
        arktx LIKE vbap-arktx,              "Material Short Text
        charg LIKE vbap-charg,              "Batch
        matkl LIKE vbap-matkl,              "Material Group
        pstyv LIKE vbap-pstyv,              "Item Category
        zmeng LIKE vbap-zmeng,              "Target Quantity
        zieme LIKE vbap-zieme,              "Target Unit
        kdmat LIKE vbap-kdmat,              "Customer Material Number
        werks LIKE vbap-werks,              "Plant
        lgort LIKE vbap-lgort,              "Storage Location
        vstel LIKE vbap-vstel,              "Shipping Point
        route LIKE vbap-route,              "Route
        netpr LIKE vbap-netpr,              "Net Price
        kpein LIKE vbap-kpein,              "Condition Price Unit
        kmein LIKE vbap-kmein,              "Condition Unit
        shkzg LIKE vbap-shkzg,              "Returns Item
        oidrc LIKE vbap-oidrc,              "DRC Code
        kunwe LIKE vbap-oid_ship,           "Ship-to
        kunwet    LIKE kna1-name1,          "Ship-to Name
        zzwprofid LIKE vbap-zzwprofid,      "Waste Profile ID
        kunre     LIKE wbrk-kunre,          "Bill-to
        kunret    LIKE kna1-name1,          "Bill-to Name
        addl_schd LIKE icon-id,             "Push Button For addl line
        datab     LIKE zsdsched-datab,      "Valid-From Date
        datbi      LIKE zsdsched-datbi,     "Valid To Date
        zschdfreq  LIKE zsdsched-zschdfreq, "Contract schedule frequency
        frequency  LIKE zsdsched-frequency, "Frequency
        monday    LIKE zsdsched-monday,     "Mondays
        tuesday   LIKE zsdsched-tuesday,    "Tuesdays
        wednesday  LIKE zsdsched-wednesday, "Wednesdays
        thursday  LIKE zsdsched-thursday,   "Thursdays
        friday    LIKE zsdsched-friday,     "Fridays
        saturday  LIKE zsdsched-saturday,   "Saturdays
        sunday    LIKE zsdsched-sunday,     "Sundays
        dzieme    LIKE zsdsched-dzieme,     "Target quantity UoM
        comments  LIKE zsdsched-comments,   "Comments
        fplnr     like vbkd-fplnr,
       END OF itab.
    data: begin of itab1 occurs 0,
          fksaf     LIKE fplt-fksaf,          "Billing Status
          afdat     LIKE fplt-afdat,          "Billing date
          fakwr     LIKE fplt-fakwr,          "Value to be billed
          fkdat     LIKE fplt-fkdat,          "Settelment Date
          nfdat     LIKE fplt-nfdat,          "Settelment Date
          fpart     LIKE fpla-fpart,          "Billing plan type
          bedat     LIKE fpla-bedat,          "Start day for billing
          endat     LIKE fpla-endat,          "End date for billing
          horiz     LIKE fpla-horiz,          "Horizon in billing plan
          fplnr     LIKE fplt-fplnr,
          vbeln     LIKE vbak-vbeln,
    end of itab1.
    data : begin of gt_report occurs 0,
        vbeln LIKE vbak-vbeln,              "Sales Document
        posnr LIKE vbap-posnr,              "Item
        ernam LIKE vbak-ernam,              "Created by
        erdat LIKE vbak-erdat,              "Created on
        audat LIKE vbak-audat,              "Document Date
        vbtyp LIKE vbak-vbtyp,              "SD document category
        auart LIKE vbak-auart,              "Sales Document type
        vkorg LIKE vbak-vkorg,              "Sales Org
        vtweg LIKE vbak-vtweg,              "Distribution Channel
        spart LIKE vbak-spart,              "Division
        vkbur LIKE vbak-vkbur,              "Sales Office
        guebg LIKE vbak-guebg,              "Valid from date
        gueen LIKE vbak-gueen,              "Valid to date
        kunnr LIKE vbak-kunnr,              "Sold-to party
        kunnrt LIKE kna1-name1,             "Sold-to Name
        kvgr4 LIKE vbak-kvgr4,              "Territory
        matnr LIKE vbap-matnr,              "Material
        arktx LIKE vbap-arktx,              "Material Short Text
        charg LIKE vbap-charg,              "Batch
        matkl LIKE vbap-matkl,              "Material Group
        pstyv LIKE vbap-pstyv,              "Item Category
        zmeng LIKE vbap-zmeng,              "Target Quantity
        zieme LIKE vbap-zieme,              "Target Unit
        kdmat LIKE vbap-kdmat,              "Customer Material Number
        werks LIKE vbap-werks,              "Plant
        lgort LIKE vbap-lgort,              "Storage Location
        vstel LIKE vbap-vstel,              "Shipping Point
        route LIKE vbap-route,              "Route
        netpr LIKE vbap-netpr,              "Net Price
        kpein LIKE vbap-kpein,              "Condition Price Unit
        kmein LIKE vbap-kmein,              "Condition Unit
        shkzg LIKE vbap-shkzg,              "Returns Item
        oidrc LIKE vbap-oidrc,              "DRC Code
        kunwe LIKE vbap-oid_ship,           "Ship-to
        aufnr LIKE vbap-aufnr,              "Interal Order #
        vkaus LIKE vbap-vkaus,              "Usage
        bezei LIKE tvlvt-bezei,             "Usage Description
        kunwet    LIKE kna1-name1,          "Ship-to Name
        zzwprofid LIKE vbap-zzwprofid,      "Waste Profile ID
        kunre     LIKE wbrk-kunre,          "Bill-to
        kunret    LIKE kna1-name1,          "Bill-to Name
        addl_schd LIKE icon-id,             "Push Button For addl line
        datab     LIKE zsdsched-datab,      "Valid-From Date
        datbi      LIKE zsdsched-datbi,     "Valid To Date
        zschdfreq  LIKE zsdsched-zschdfreq, "Contract schedule frequency
        frequency  LIKE zsdsched-frequency, "Frequency
        monday    LIKE zsdsched-monday,     "Mondays
        tuesday   LIKE zsdsched-tuesday,    "Tuesdays
        wednesday  LIKE zsdsched-wednesday, "Wednesdays
        thursday  LIKE zsdsched-thursday,   "Thursdays
        friday    LIKE zsdsched-friday,     "Fridays
        saturday  LIKE zsdsched-saturday,   "Saturdays
        sunday    LIKE zsdsched-sunday,     "Sundays
        dzieme    LIKE zsdsched-dzieme,     "Target quantity UoM
        comments  LIKE zsdsched-comments,   "Comments
        fksaf     LIKE fplt-fksaf,          "Billing Status
        afdat     LIKE fplt-afdat,          "Billing date
        fakwr     LIKE fplt-fakwr,          "Value to be billed
        fkdat     LIKE fplt-fkdat,          "Settelment Date
        nfdat     LIKE fplt-nfdat,          "Settelment Date
        fpart     LIKE fpla-fpart,          "Billing plan type
        bedat     LIKE fpla-bedat,          "Start day for billing
        endat     LIKE fpla-endat,          "End date for billing
        horiz     LIKE fpla-horiz,          "Horizon in billing plan
       END OF gt_report.
    DATA: gs_report    LIKE LINE OF gt_report,
          gt_sched     TYPE TABLE OF zsdsched,
          gt_sched_tmp TYPE TABLE OF zsdsched,
          gs_sched     TYPE zsdsched,
          gt_sel      LIKE gt_report OCCURS 0,
          gt_vbpa  TYPE TABLE OF vbpa,
          gs_vbpa  TYPE vbpa,
          gv_auart TYPE auart,
          gv_counter TYPE i.
    **-- ALV variables
    DATA: ls_fieldcat     TYPE slis_fieldcat_alv,    "Field Catalog list
          gt_fieldcat     TYPE slis_t_fieldcat_alv,  "Field Catalog
          ls_sort         TYPE slis_sortinfo_alv,    "Sorting list
          gt_sort         TYPE slis_t_sortinfo_alv,  "Sort
          gs_layout       TYPE slis_layout_alv,      "List Layout
          gs_variant      TYPE disvariant,           "Display Variant
          gv_repid         LIKE sy-repid,
          gv_save(1)           TYPE c,
          gv_exit(1)           TYPE c.
    CONSTANTS: gc_a     TYPE c VALUE 'A',
               gc_g     TYPE c VALUE 'G',
               gc_re(2) TYPE c VALUE 'RE'.
    * Screen-control Variables
    CONTROLS:
      tctrl_sched TYPE TABLEVIEW USING SCREEN 1010.     " Schedule lines.
    *& Report  ZSD_RENTAL_REPTEST
    REPORT  ZSD_RENTAL_REPTEST.
    *& Report  ZSD_RENTAL_REPTEST
    INCLUDE zsd_rental_reptest_t01.
    * Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK m1 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t02.
    SELECT-OPTIONS: s_vkorg FOR vbak-vkorg MEMORY ID vko,
                    s_vtweg FOR vbak-vtweg MEMORY ID vtw,
                    s_spart FOR vbak-spart MEMORY ID spa,
                    s_vkbur FOR vbak-vkbur MEMORY ID vkb.
    SELECTION-SCREEN SKIP 1.
    SELECT-OPTIONS: s_vbeln FOR vbak-vbeln,
                    s_erdat FOR vbak-erdat,
                    s_ernam FOR vbak-ernam,
                    s_guebg FOR vbak-guebg,
                    s_gueen FOR vbak-gueen,
                    s_fplnr for fplt-fplnr,
                    s_auart FOR gv_auart MEMORY ID vta
                                         MATCHCODE OBJECT h_vakz.
    SELECTION-SCREEN SKIP 1.
    SELECT-OPTIONS:
                    s_kunnr FOR vbak-kunnr,
                    s_kunwe FOR vbap-oid_ship,
                    s_kunre FOR wbrk-kunre.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t03.
    SELECT-OPTIONS: s_werks FOR vbap-werks MEMORY ID wrk,
                    s_lgort FOR vbap-lgort MEMORY ID lag,
                    s_vstel FOR vbap-vstel MEMORY ID vst,
                    s_route for vbap-route,
                    s_matnr FOR vbap-matnr.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t04.
    PARAMETERS:     p_varia TYPE disvariant-variant MEMORY ID wrk,
                    p_all   AS CHECKBOX DEFAULT 'X',
                    p_group AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN END OF BLOCK m1.
    * Start of Selection
    START-OF-SELECTION.
      PERFORM get_data.
    * Display ALV
    END-OF-SELECTION.
      IF gt_report[] IS INITIAL.
        MESSAGE s419(brain).
      ELSE.
        PERFORM create_alv.
      ENDIF.
    * AT SELECTION-SCREEN ON VALUE-REQUEST                                 *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.
      PERFORM f01_f4_variant CHANGING p_varia.
    *&      Form  get_data
    *       text
    FORM get_data .
    data: v_tabix type sy-tabix.
    *   Select the appropriate contract data.
      SELECT a~vbeln a~erdat a~ernam a~audat a~vbtyp a~auart a~vkorg
       a~vtweg a~spart a~vkbur a~guebg a~gueen a~kunnr a~kvgr4
       b~posnr b~matnr b~charg b~matkl b~arktx b~pstyv b~zmeng
       b~zieme b~kdmat b~werks b~lgort b~vstel b~netpr b~kpein
       b~kmein b~shkzg b~oid_extbol b~oid_miscdl b~oidrc b~oid_ship AS kunwe
       b~zzwprofid c~datbi c~datab b~route d~fplnr
         INTO CORRESPONDING FIELDS OF TABLE itab
         FROM vbak AS a
             INNER JOIN vbap AS b ON a~vbeln = b~vbeln
             inner join vbkd as d on b~vbeln = d~vbeln
             LEFT OUTER JOIN zsdsched AS c ON b~vbeln = c~vbeln AND
                                   b~posnr = c~posnr
         WHERE a~vbeln IN s_vbeln
           AND a~erdat IN s_erdat
           AND a~vbtyp = gc_g
           AND a~ernam IN s_ernam
           AND a~vkorg IN s_vkorg
           AND a~vtweg IN s_vtweg
           AND a~spart IN s_spart
           AND a~vkbur IN s_vkbur
           AND a~guebg IN s_guebg
           AND a~gueen IN s_gueen
           AND a~auart IN s_auart
           AND a~kunnr IN s_kunnr
           AND b~oid_ship IN s_kunwe
           AND b~werks IN s_werks
           AND b~lgort IN s_lgort
           AND b~vstel IN s_vstel
           and b~route in s_route
           AND b~matnr IN s_matnr.
       SORT itab.
    select    e~fkdat e~nfdat e~fakwr e~fksaf e~afdat
              f~fpart f~bedat f~endat f~horiz g~vbeln
              INTO CORRESPONDING FIELDS OF TABLE itab1
              FROM fplt AS e
             INNER JOIN fpla AS f ON f~fplnr = e~fplnr
             inner join vbkd as g on f~fplnr = g~fplnr
             where g~vbeln in s_vbeln and
                   e~fplnr in s_fplnr.
             sort itab1.
    loop at itab.
    read table itab1 with key vbeln = itab-vbeln.
    if sy-subrc = 0.
    move sy-tabix to v_tabix.
    move-corresponding itab to gt_report.
    move-corresponding itab1 to gt_report.
    append gt_report.
    delete itab1 index v_tabix.
    endif.
    endloop.
    loop at itab1.
    move-corresponding itab1 to gt_report.
    append gt_report.
    endloop.
      IF NOT itab[] IS INITIAL.
    *   Get Bill-to Party's for Item Lines
        SELECT vbeln posnr parvw kunnr INTO CORRESPONDING FIELDS OF TABLE gt_vbpa
            FROM vbpa
            FOR ALL ENTRIES IN itab
            WHERE vbeln = itab-vbeln
              AND parvw = gc_re.
    *   Select the remaining records from the ZSDSCHED Table.
        SELECT * FROM zsdsched
            INTO TABLE gt_sched
            FOR ALL ENTRIES IN itab
            WHERE vbeln = itab-vbeln
              AND posnr = itab-posnr.
        SORT gt_sched.
      ENDIF.
    * Loop through captured data for additional information
    *  LOOP AT itab INTO gs_report.
    LOOP AT itab.
    *   Find the bill-to party
        READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                 posnr = gs_report-posnr
                                                 parvw = gc_re.
        IF sy-subrc  0.
          READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                   parvw = gc_re.
          CHECK sy-subrc = 0 AND gs_vbpa-kunnr IN s_kunre.
        ELSE.
          CHECK gs_vbpa-kunnr IN s_kunre.
        ENDIF.
        gs_report-kunre = gs_vbpa-kunnr.
    *  Get the Customer's Name
        gs_report-kunnrt = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunnr ).
        gs_report-kunwet = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunwe ).
        gs_report-kunret = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunre ).
    *   Get the scheduling lines for the item line.
        CLEAR gv_counter.
        IF NOT p_group IS INITIAL.
    *     If we are grouping the lines add the icon button.
          LOOP AT gt_sched INTO gs_sched WHERE vbeln = gs_report-vbeln
                                         AND posnr = gs_report-posnr.
            IF gv_counter > 0.
              gs_report-addl_schd = '@1E@'.
              CONTINUE.
            ENDIF.
            MOVE-CORRESPONDING gs_sched TO gs_report.
            ADD 1 TO gv_counter.
          ENDLOOP.
        ELSE.
    *     Otherwise get the rest of the schedule information
          READ TABLE gt_sched INTO gs_sched
            WITH KEY vbeln = gs_report-vbeln
                     posnr = gs_report-posnr
                     datbi = gs_report-datbi
                     datab = gs_report-datab.
          IF sy-subrc = 0.
            MOVE-CORRESPONDING gs_sched TO gs_report.
          ENDIF.
        ENDIF.
        APPEND gs_report TO gt_report.
      ENDLOOP.
    * Remove any duplicates from the reporting table
      DELETE ADJACENT DUPLICATES FROM gt_report.
    * If Show all records is initial, delete non-scheduled lines (ex. Sub-items)
      IF p_all IS INITIAL.
        DELETE gt_report WHERE datbi = 0
                         AND datab = 0.
      ENDIF.
    ENDFORM.                    " get_data
    *&      Form  create_alv
    *       text
    FORM create_alv .
      PERFORM initialize_fieldcat USING gt_fieldcat[].
      PERFORM populate_layout CHANGING gs_layout
                                       gs_variant.
      PERFORM populate_sort   USING gt_sort[].
      PERFORM display_alv_report.
    ENDFORM.                    " create_alv
    *&      Form  initialize_fieldcat
    *   Get and enhance the field catalog data
    *      -->L_FIELDCAT[]  text
    FORM initialize_fieldcat USING l_fieldcat TYPE slis_t_fieldcat_alv.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_program_name         = 'ZSD_RENTAL_REPTEST'(002)
          i_internal_tabname     = 'GT_REPORT'
          i_inclname             = 'ZSD_RENTAL_REPTEST_T01'(001)
        CHANGING
          ct_fieldcat            = l_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'VBELN'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Contract'.
      ls_fieldcat-hotspot     = 'X'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNNRT'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sold-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNWET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Ship-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNRET'.
      ls_fieldcat-seltext_s =
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Bill-to Name'.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'ADDL_SCHD'.
      IF NOT p_group IS INITIAL.
        ls_fieldcat-seltext_s = 'Schd'.
        ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Additional Scheduling Lines'.
        ls_fieldcat-icon = 'X'.
        CLEAR: ls_fieldcat-key,
               ls_fieldcat-ref_fieldname,
               ls_fieldcat-ref_tabname,
               ls_fieldcat-reptext_ddic,
               ls_fieldcat-ddic_outputlen.
        ls_fieldcat-hotspot     = 'X'.
        MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      ELSE.
        DELETE l_fieldcat INDEX sy-tabix.
      ENDIF.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATAB'.
      ls_fieldcat-seltext_s = 'Schd From'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. From Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
      READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATBI'.
      ls_fieldcat-seltext_s = 'Schd To'.
      ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. To Date'.
      CLEAR: ls_fieldcat-key.
      MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
    ENDFORM.                    " initialize_fieldcat
    *&      Form  populate_layout
    *       text
    *      <--GS_LAYOUT
    *      <--GS_VARIANT
    FORM populate_layout CHANGING  gs_layout  TYPE slis_layout_alv
                                   gs_variant TYPE disvariant.
      gs_layout-colwidth_optimize = 'X'.
      gs_layout-allow_switch_to_list = 'X'.
      gs_layout-zebra                = 'X'.
      gs_variant-report = sy-repid.
    ENDFORM.                    " populate_layout
    *&      Form  populate_sort
    *       text
    *      -->l_SORT[]  text
    FORM populate_sort USING l_sort TYPE slis_t_sortinfo_alv.
    ENDFORM.                    " populate_sort
    *&      Form  display_alv_report
    FORM display_alv_report .
      gv_repid = sy-repid.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
    *     I_INTERFACE_CHECK              = ' '
    *     I_BYPASSING_BUFFER             =
    *     I_BUFFER_ACTIVE                = ' '
          i_callback_program              =  gv_repid
    *     I_CALLBACK_PF_STATUS_SET       = ' '
          i_callback_user_command        = 'USER_COMMAND'
          i_structure_name               =  'gt_report'
          is_layout                      =   gs_layout
          it_fieldcat                     =  gt_fieldcat
    *     IT_EXCLUDING                   =
    *     IT_SPECIAL_GROUPS              =
          it_sort                        =  gt_sort
    *     IT_FILTER                      =
    *     IS_SEL_HIDE                    =
          i_default                      = 'X'
          i_save                         = gc_a
          is_variant                     = gs_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
    *   IMPORTING
    *     E_EXIT_CAUSED_BY_CALLER        =
    *     ES_EXIT_CAUSED_BY_USER         =
          TABLES
            t_outtab                       = gt_report
         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_alv_report
    *&      Form  f01_f4_variant
    *    Get the Layout variant for the user.
    FORM f01_f4_variant CHANGING c_variant TYPE disvariant-variant.
      DATA: ls_variant TYPE disvariant,
            l_exit     TYPE char1.
      ls_variant-report = sy-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = ls_variant
                i_save              = 'A'
    *           it_default_fieldcat =
           IMPORTING
                e_exit              = l_exit
                es_variant          = ls_variant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF l_exit EQ space.
          c_variant = ls_variant-variant.
        ENDIF.
      ENDIF.
    ENDFORM.                    " f01_f4_variant
    *       FORM USER_COMMAND                                          *
    *       --> R_UCOMM                                                *
    *       --> RS_SELFIELD                                            *
    FORM user_command USING r_ucomm LIKE sy-ucomm
                      rs_selfield TYPE slis_selfield.
    * Check function code
      CASE r_ucomm.
        WHEN '&IC1'.
          READ TABLE gt_report INTO gs_report INDEX rs_selfield-tabindex.
          CHECK sy-subrc = 0.
          CASE rs_selfield-fieldname.
            WHEN 'VBELN'.
    *       Set parameter ID for transaction screen field
              CHECK NOT gs_report-vbeln IS INITIAL.
              SET PARAMETER ID 'KTN' FIELD gs_report-vbeln.
              CALL TRANSACTION 'VA43' AND SKIP FIRST SCREEN.
            WHEN 'ADDL_SCHD'.
              CHECK NOT gs_report-addl_schd IS INITIAL.
              REFRESH gt_sched_tmp.
              LOOP AT gt_sched INTO gs_sched
                               WHERE vbeln = gs_report-vbeln
                                 AND posnr = gs_report-posnr.
                APPEND gs_sched TO gt_sched_tmp.
              ENDLOOP.
              CHECK sy-subrc = 0.
              CALL SCREEN '1010' STARTING AT 5 5.
          ENDCASE.
      ENDCASE.
    ENDFORM.                    "user_command
    *&      Module  STATUS_1010  OUTPUT
    *       text
    MODULE status_1010 OUTPUT.
      SET PF-STATUS 'MAIN_1010'.
      SET TITLEBAR '1010' WITH gs_report-vbeln gs_report-posnr.
    ENDMODULE.                 " STATUS_1010  OUTPUT
    *&      Module  USER_COMMAND_1010  INPUT
    *       text
    MODULE user_command_1010 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'CANC'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_1010  INPUT

    Hi - in this section --
    if sy-subrc = 0.
    move sy-tabix to v_tabix.
    move-corresponding itab to gt_report.
    move-corresponding itab1 to gt_report.
    append gt_report.
    delete itab1 index v_tabix.
    endif.
    .. the append to gt_report should not be inside the if

  • Output type for the managed codes cut letter is hard coded

    Hello,
    Very Good afternoon!
    I have a requirement to create new Output Types for a Smart Form.
    The already existing Output types are hard coded as shown Below :
    CONSTANTS : c_kschl_order LIKE nast-kschl
                             VALUE 'ZUS0',
                c_kschl_order1 LIKE nast-kschl
                             VALUE 'ZUS1',
    Now they do not want to use ZUS1. Insted they wnat to use New Output Types.
    u2022 Remove ZUS1 as we no longer use this one.
    u2022     Add ZAU0
    u2022     Add ZNZ0
    u2022     Add ZJP0
    u2022     Add ZCN0
    u2022     Add ZKR0
    How to add these Output types without Hardcoding as shown ABove.
    Any Suggestions will be appreciated.....
    For reference..I will paste the code of the Program here.
    Here is the code  :
                     PROGRAM DECLARATION
    PROGRAM ID           Z_RVADOR01_SALES_CUT_LETTER
    TABLES: vbak,    "Sales Document: Header Data
           vbap,    "Sales Document: Item Data
           vbpa,    "Sales Document: Partner
           vbep,    "Sales Document: Schedule Line Data
           kna1,    "General Data in Customer Master
           MARA,    "Material Master
            KOMK,                          "Communicationarea for conditions
            KOMP,                          "Communicationarea for conditions
            KOMVD,                         "Communicationarea for conditions
            VBCO3,                         "Communicationarea for view
            VBDKA,                         "Headerview
            VBDPA,                         "Itemview
            VBDPAU,                        "Subitemnumbers
            CONF_OUT,                      "Configuration data
            SADR,                          "Addresses
            TVAG,                          "Reason for rejection
            VEDKA,                         "Servicecontract head data
            VEDPA,                         "Servicecontract position data
            VEDKN,                         "Servicecontract head notice data
            VEDPN,                         "Servicecontract pos. notice data
            RISERLS,                       "Serialnumbers
            KOMSER,                        "Serialnumbers for print
            TVBUR,                         "Sales office
            TVKO,                          "Sales organisation
            ADRS,                          "Communicationarea for Address
            FPLTDR,                        "billing schedules
            WTAD_ADDIS_IN_SO_PRINT,        "additional
            WTAD_BUYING_PRINT_EXTRA_TEXT,  "texts belonging to additional
            adrc,
            adr6,
            t247.
    INCLUDE RVADTABL.
    INCLUDE RVDIREKT.
    INCLUDE VEDADATA.
    data for access to central address maintenance
    INCLUDE SDZAVDAT.
    TYPE-POOLS: ADDI.
    DATA PRICE_PRINT_MODE(1) TYPE C.       "Print-mode
    DATA: RETCODE   LIKE SY-SUBRC.         "Returncode
    DATA: REPEAT(1) TYPE C.
    DATA: XSCREEN(1) TYPE C.               "Output on printer or screen
    DATA: BEGIN OF STEU,                   "Controldata for output
            VDKEX(1) TYPE C,
            VDPEX(1) TYPE C,
            KBKEX(1) TYPE C,
            KBPEX(1) TYPE C,
          END OF STEU.
    DATA: BEGIN OF TVBDPA OCCURS 0.        "Internal table for items
            INCLUDE STRUCTURE VBDPA.
    DATA: END OF TVBDPA.
    DATA: BEGIN OF TKOMV OCCURS 50.
            INCLUDE STRUCTURE KOMV.
    DATA: END OF TKOMV.
    DATA: BEGIN OF TKOMVD OCCURS 50.
            INCLUDE STRUCTURE KOMVD.
    DATA: END OF TKOMVD.
    DATA: BEGIN OF TVBDPAU OCCURS 5.
            INCLUDE STRUCTURE VBDPAU.
    DATA: END   OF TVBDPAU.
    DATA: BEGIN OF TKOMCON OCCURS 50.
            INCLUDE STRUCTURE CONF_OUT.
    DATA: END   OF TKOMCON.
    DATA: BEGIN OF TKOMSERVH OCCURS 1.
            INCLUDE STRUCTURE VEDKA.
    DATA: END   OF TKOMSERVH.
    DATA: BEGIN OF TKOMSERVP OCCURS 5.
            INCLUDE STRUCTURE VEDPA.
    DATA: END   OF TKOMSERVP.
    DATA: BEGIN OF TKOMSERVHN OCCURS 5.
            INCLUDE STRUCTURE VEDKN.
    DATA: END   OF TKOMSERVHN.
    DATA: BEGIN OF TKOMSERVPN OCCURS 5.
            INCLUDE STRUCTURE VEDPN.
    DATA: END   OF TKOMSERVPN.
    DATA: BEGIN OF TKOMSER OCCURS 5.
            INCLUDE STRUCTURE RISERLS.
    DATA: END   OF TKOMSER.
    DATA: BEGIN OF TKOMSER_PRINT OCCURS 5.
            INCLUDE STRUCTURE KOMSER.
    DATA: END   OF TKOMSER_PRINT.
    DATA: BEGIN OF TFPLTDR OCCURS 5.
            INCLUDE STRUCTURE FPLTDR.
    DATA: END   OF TFPLTDR.
    DATA: TADDI_PRINT TYPE ADDI_SO_PRINT_ITAB WITH HEADER LINE.
    TYPES:BEGIN OF ty_orders ,
         xblnr    LIKE  mkpf-xblnr,       "delivery number
         erfmg    LIKE  mseg-erfmg,       "goods issue quantity
         custname LIKE  kna1-name1,       "customer name
         bstnk    LIKE  vbak-bstnk,       "purchase order number
         ean11    LIKE  vbap-ean11,       "upc
         kdmat    LIKE  vbap-kdmat,       "customer material code
         arktx    LIKE  vbap-arktx,       "description
         csrno    LIKE  kna1-kunnr,       "customer service rep number
         spras    LIKE  kna1-spras,       "customer language key
         csrname  LIKE  kna1-name1,       "customer service rep name
         csremail LIKE  adr6-smtp_addr,   "csr email
         csrphone LIKE  kna1-telf1,       "csr telephone
         csrext   LIKE  adrc-tel_extens,  "csr extension
         csrfax   LIKE  kna1-telfx,       "csr fax
         total    LIKE  lips-lfimg,       "cut quantity
         ldate(18)    TYPE c,
       END OF ty_orders.
    CONSTANTS: c_kschl_order LIKE nast-kschl
                             VALUE 'ZUS0',
                c_kschl_order1 LIKE nast-kschl
                             VALUE 'ZUS1',            c_parvw_shipto LIKE vbpa-parvw
                             VALUE 'WE',
                c_parvw_csr    LIKE vbpa-parvw
                             VALUE 'ZS',
                 c_eng(1)       TYPE c VALUE 'E',
                 c_sep(1)       TYPE c VALUE '/',
                 c_sale(25) type c VALUE 'Sales Order'.
    DATA: WA_VBAK TYPE VBAK,
          tbl_ord TYPE ty_orders OCCURS 0 WITH HEADER LINE,
          w_csrname(30)  TYPE c,
         w_csrno(30)    TYPE c,
         w_email    LIKE adr6-smtp_addr,
         f_shipto_found     TYPE c,
         w_custname(30) TYPE c,
         w_month(2),
         w_ldate(18),
         w_total LIKE lips-lfimg,
         w_lines        TYPE i VALUE 0,
         f_mail(1)  TYPE c,
         cnt_1          TYPE i VALUE 0,
         cnt_2          TYPE i VALUE 0,
         tbl_otf     LIKE itcoo OCCURS 0 WITH HEADER LINE,
         w_type(25)     TYPE c,
         st_doc_data   LIKE sodocchgi1,
         tbl_objtxt    LIKE solisti1 OCCURS 10 WITH HEADER LINE,
         tbl_line      LIKE tline OCCURS 0 WITH HEADER LINE,
         tbl_attach    LIKE solisti1 OCCURS 10 WITH HEADER LINE,
         tbl_objhead   LIKE solisti1 OCCURS 10 WITH HEADER LINE,
         tbl_proc_para LIKE soparai1 OCCURS 10 WITH HEADER LINE,
         tbl_maillist  LIKE somlreci1 OCCURS 10 WITH HEADER LINE,
         tbl_pack_list LIKE sopcklsti1 OCCURS 10 WITH HEADER LINE,
         tbl_cpo      LIKE itcpo OCCURS 0 WITH HEADER LINE,"SAPscript output
                                                                " interface
         tbl_cpp LIKE itcpp OCCURS 0 WITH HEADER LINE,"SAPscript output
                                                       " parameters
         tbl_smtp  TYPE szadr_adsmtp_line OCCURS 0 WITH HEADER LINE,
         tbl_cdhdpos LIKE cdshw OCCURS 0 WITH HEADER LINE,
         tbl_cdpos LIKE cdshw OCCURS 0 WITH HEADER LINE,
         wrk_lines LIKE sy-tabix,
         hltlines   TYPE i,
         off1       TYPE p,
         fle1(2)    TYPE p,
         fle2(2)    TYPE p,
         htabix     LIKE sy-tabix,
         hfeld(500) TYPE c.
    FORM ENTRY USING RETURN_CODE US_SCREEN.
    if sy-tcode = 'VA01'.
      IF nast-kschl = c_kschl_order.
      SELECT SINGLE * FROM VBAK INTO WA_VBAK WHERE vbeln = nast-objky.
      IF SY-SUBRC = 0.
      CLEAR RETCODE.
      XSCREEN = US_SCREEN.
      PERFORM PROCESSING USING us_screen.
      IF RETCODE NE 0.
        RETURN_CODE = 1.
      ELSE.
        RETURN_CODE = 0.
      ENDIF.
       ELSE.
          retcode = sy-subrc.
          syst-msgid = 'ZVERROR'.
          syst-msgno = '000'.
          syst-msgty = 'E'.
          syst-msgv1 = NAST-KSCHL.
         syst-msgv1 = 'Sales Order cut letter
                       for this order already issued'.
         syst-msgv2 = ' '.
          PERFORM protocol_update.
        ENDIF.
    ELSE.
        CLEAR retcode.
        xscreen = us_screen.
        PERFORM processing USING us_screen.
        IF retcode NE 0.
          return_code = 1.
        ELSE.
          return_code = 0.
        ENDIF.
      ENDIF.
    endif.
    ENDFORM.
          FORM PROCESSING                                               *
    FORM PROCESSING USING proc_screen.
    CASE nast-kschl.
        WHEN c_kschl_order.
          PERFORM get_orders.
          CHECK retcode = 0.
          PERFORM openform USING proc_screen vbak-landtx.
          CHECK retcode = 0.
          PERFORM layout.
          CHECK retcode = 0.
          CHECK proc_screen NE 'X'.
          w_type = c_sale.
          PERFORM send_email USING proc_screen.
      WHEN c_kschl_order1.
         PERFORM get_orders.
         CHECK retcode = 0.
         CHECK proc_screen NE 'X'.
         w_type = c_sale.
         PERFORM send_email USING proc_screen.
       WHEN OTHERS.
          retcode = 1.
          syst-msgid = 'E0'.
          syst-msgno = '430'.
          syst-msgty = 'E'.
          PERFORM protocol_update.
      ENDCASE.
      IF retcode EQ 0.
        syst-msgid = '69'.
        syst-msgno = '254'.
        syst-msgty = 'S'.
        syst-msgv1 = nast-kschl.
        PERFORM protocol_update.
      ELSE.
        syst-msgid = 'CKCC'.
        syst-msgno = '036'.
        syst-msgty = 'E'.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.
          FORM PROTOCOL_UPDATE                                          *
          The messages are collected for the processing protocol.       *
    FORM PROTOCOL_UPDATE.
      IF xscreen EQ space.
        CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
           EXPORTING
                MSG_ARBGB = SYST-MSGID
                MSG_NR    = SYST-MSGNO
                MSG_TY    = SYST-MSGTY
                MSG_V1    = SYST-MSGV1
                MSG_V2    = SYST-MSGV2
                MSG_V3    = SYST-MSGV3
                MSG_V4    = SYST-MSGV4
           EXCEPTIONS
                OTHERS    = 1.
       ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       ENDIF.
    ENDFORM.
    *&      Form  get_orders
          text
    -->  p1        text
    <--  p2        text
    FORM get_orders.
    DATA : f_csr_found        TYPE c.
    SELECT SINGLE vbeln vkorg vdatu bstnk kunnr
        FROM   vbak
        INTO  (vbak-vbeln,vbak-vkorg,vbak-vdatu,vbak-bstnk,vbak-kunnr)
        WHERE vbeln EQ nast-objky.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'VN'.
        syst-msgno = '203'.
        syst-msgty = 'E'.
        syst-msgv1 = 'VBAK'.
        syst-msgv2 = sy-subrc.
        PERFORM protocol_update.
      ENDIF.
      SELECT vbeln posnr matnr pmatn arktx abgru kdmat werks
      FROM vbap
      INTO (vbap-vbeln,vbap-posnr,vbap-matnr,vbap-pmatn,
    vbap-arktx,vbap-abgru,vbap-kdmat,vbap-werks)
      WHERE vbeln = vbak-vbeln
      AND abgru NE space "select items havng Rejection Reason
      and PSTYV NE 'ZHDR'.
    to check whether the reason for rejection was picked from the
    managed codes tables
    data: war_abgru type abgru,
          w_exist type c.
    clear : war_abgru, w_exist.
      select single abgru  from ZMAT_REJ002
                    into war_abgru
                    where vkorg = vbak-vkorg
                    and kunnr <> vbak-kunnr
                    and MATNR = vbap-matnr
                    and datef <= vbak-vdatu
                    and datet >= vbak-vdatu.
       if sy-subrc <> 0.
             select single abgru from ZMAT_REJ003
                              into war_abgru
                              where vkorg = vbak-vkorg
                              and kunnr <> vbak-kunnr
                              and MATNR = vbap-matnr
                              and datef <= vbak-vdatu
                              and datet >= vbak-vdatu.
             if sy-subrc <> 0.
                    select single abgru from ZMAT_REJ001
                              into war_abgru
                              where vkorg = vbak-vkorg
                              and werks <> vbap-werks
                              and matnr = vbap-matnr
                              and datef <= vbak-vdatu
                              and datet >= vbak-vdatu.
                    if sy-subrc <> 0.
                         select single abgru from ZMAT_REJ004
                                             into war_abgru
                                             where vkorg = vbak-vkorg
                                             and matnr = vbap-matnr
                                             and datef >= vbak-vdatu
                                             and datet <= vbak-vdatu.
                         if sy-subrc <> 0.
                         else.
                         w_exist = 'X'.
                         endif.
                   else.
                   w_exist = 'X'.
                   endif.
             else.
             w_exist = 'X'.
             endif.
       else.
       w_exist = 'X'.
       endif.
    if w_exist = 'X'.
    end for check from managed codes table
    *to find the quantity fields
        SELECT SINGLE wmeng bmeng
        FROM vbep
        INTO (vbep-wmeng,vbep-bmeng)
        WHERE vbeln EQ vbap-vbeln
        AND   posnr EQ vbap-posnr.
    *to get info about the customer
        SELECT SINGLE kunnr
        FROM vbpa
        INTO vbpa-kunnr
        WHERE  vbeln EQ vbak-vbeln
        AND    parvw EQ c_parvw_shipto.
         IF sy-subrc EQ 0.
          f_shipto_found = 'X'.
          SELECT SINGLE name1 spras
            FROM kna1
            INTO (kna1-name1,kna1-spras)
            WHERE kunnr EQ vbpa-kunnr.
          IF sy-subrc EQ 0.
            w_custname = kna1-name1.
            CLEAR kna1-name1.
          ENDIF.
         ENDIF.
         SELECT SINGLE kunnr
        FROM vbpa
        INTO vbpa-kunnr
        WHERE vbeln EQ vbak-vbeln
        AND   parvw EQ c_parvw_csr.
        IF SY-SUBRC EQ 0.
         f_csr_found = 'X'.
          SELECT SINGLE kunnr name1 name2 adrnr
           FROM kna1
           INTO (kna1-kunnr,kna1-name1,kna1-name2,
                 kna1-adrnr)
           WHERE  kunnr EQ vbpa-kunnr.
          IF sy-subrc EQ 0.
            w_csrno = kna1-kunnr.
            w_csrname = kna1-name1.
            CLEAR kna1-name1.
               SELECT SINGLE tel_number tel_extens fax_number
                 FROM adrc
                 INTO (adrc-tel_number,adrc-tel_extens,
       adrc-fax_number)
                 WHERE addrnumber EQ kna1-adrnr.
            CLEAR: adr6, w_email.
            SELECT SINGLE * FROM adr6 WHERE addrnumber = kna1-adrnr.
            IF sy-subrc = 0.
              w_email = adr6-smtp_addr.
            ENDIF.
          ENDIF.
        ENDIF.
    *to get the date format in french
        IF kna1-spras NE c_eng.
          w_month = sy-datum+4(2).
          SELECT SINGLE ltx
            FROM t247
            INTO t247-ltx
            WHERE spras EQ kna1-spras
            AND mnr EQ w_month.
          CONCATENATE sy-datum+6(2)
                      t247-ltx
                      sy-datum+0(4)
                      INTO w_ldate
                      SEPARATED BY space.
          ELSE.
          CONCATENATE sy-datum+4(2)
                      sy-datum+6(2)
                      sy-datum+0(4)
                      INTO w_ldate
                      SEPARATED BY c_sep.
        ENDIF.
        w_total = vbep-wmeng - vbep-bmeng.
         IF w_total GT 0.
         PERFORM fill_orders.
        ELSE.
          IF vbap-abgru NE space.
            w_total = vbep-wmeng.
            PERFORM fill_orders.
          ENDIF.
        ENDIF.
        CLEAR vbap.
        endif.           " check for w_exist for Managed Codes entry
    ENDSELECT.
    IF tbl_ord[] IS INITIAL.
        retcode = 1.
        syst-msgid = 'FZ'.
        syst-msgno = '027'.
        syst-msgty = 'E'.
        PERFORM protocol_update.
      ENDIF.
      IF f_csr_found IS INITIAL.
        syst-msgid = '8B'.
        syst-msgno = '127'.
        syst-msgty = 'W'.
        syst-msgv1 = c_parvw_csr.
        PERFORM protocol_update.
      ENDIF.
      IF f_shipto_found IS INITIAL.
        syst-msgid = '8B'.
        syst-msgno = '127'.
        syst-msgty = 'W'.
        syst-msgv1 = c_parvw_shipto.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " get_orders
    *&      Form  layout
          text
    -->  p1        text
    <--  p2        text
    FORM layout.
    SORT tbl_ord BY bstnk kdmat.
      LOOP AT tbl_ord.
        AT FIRST.
          PERFORM writeform_text.
        ENDAT.
        PERFORM writeform.
        AT LAST.
          PERFORM writeform_footer.
        ENDAT.
      ENDLOOP.
      CLEAR : cnt_1,cnt_2.
      PERFORM closeform.
    ENDFORM.                    " layout
    *&      Form  openform
          text
    FORM openform USING us_screen us_country.
    DESCRIBE TABLE tbl_ord LINES w_lines.
      IF w_lines EQ 0.
        retcode    = '1'.
        syst-msgid = 'FE'.
        syst-msgno = '078'.
        syst-msgty = 'E'.
        PERFORM protocol_update.
      ENDIF.
      CHECK retcode EQ 0.
    INCLUDE zrvadopfo.
    ENDFORM.                    " openform
    *&      Form  send_email
          text
         -->P_PROC_SCREEN  text
    FORM send_email USING    PROC_SCREEN.
    f_mail = 'X'.
      PERFORM openform USING proc_screen vbak-landtx.
      LOOP AT tbl_ord.
        AT FIRST.
          PERFORM writeform_text.
        ENDAT.
        PERFORM writeform.
        AT LAST.
          PERFORM writeform_footer.
        ENDAT.
      ENDLOOP.
      CLEAR cnt_2.
      PERFORM closeform.
      CALL FUNCTION 'CONVERT_OTF'
           EXPORTING
                format                = 'PDF'  "'ASCII'
           IMPORTING
                bin_filesize          = st_doc_data-doc_size
           TABLES
                otf                   = tbl_otf
                lines                 = tbl_line
           EXCEPTIONS                                           "DEVK912166
                err_max_linewidth     = 1
                err_format            = 2
                err_conv_not_possible = 3
                OTHERS                = 4.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'OA'.                                      "DEVK912166
        syst-msgno = '186'.                                     "DEVK912166
        syst-msgty = 'E'.                                       "DEVK912166
        PERFORM protocol_update.
      ENDIF.
      REFRESH tbl_objtxt.
      CLEAR tbl_objtxt.
      CLEAR tbl_proc_para.
      REFRESH tbl_proc_para.
      CLEAR tbl_maillist.
      REFRESH tbl_maillist.
      CLEAR tbl_pack_list.
      REFRESH tbl_pack_list.
      st_doc_data-obj_name   = 'Sales Order Cut Letter'.
      st_doc_data-obj_langu   = 'E'.                            "DEVK905849
      st_doc_data-sensitivty  = 'F'.                            "DEVK905849
      st_doc_data-obj_prio    =  1.                             "DEVK905849
      CONCATENATE w_type 'Cut Letter' INTO          "#EC NOTEXT
                                  st_doc_data-obj_descr  SEPARATED BY space.
      DATA w_line(3) TYPE c.
      PERFORM format_pdf.                                       "DEVK905849
      concatenate VBAK-VBELN '.PDF' into tbl_objhead.
    tbl_objhead = 'Sales Order Cut Letter.PDF'.
      APPEND tbl_objhead.
           "DEVK905849
      CLEAR wrk_lines.
      DESCRIBE TABLE tbl_attach LINES wrk_lines.
    fields needed for email
      tbl_maillist-com_type = 'INT'.
      tbl_maillist-receiver =  w_email.
      tbl_maillist-rec_type = 'U'.
      APPEND tbl_maillist.
    send email
      CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
                                      STARTING NEW TASK 'MAIL'
           EXPORTING
                document_data              = st_doc_data
                document_type              = 'PDF'
                COMMIT_WORK                = 'X'    " added after ECC6.0 upgrade
           TABLES
                object_header              = tbl_objhead
                object_content             = tbl_objtxt
                receivers                  = tbl_maillist
           EXCEPTIONS                                           "DEVK912166
                too_many_receivers         = 1
                document_not_sent          = 2
                document_type_not_exist    = 3
                operation_no_authorization = 4
                parameter_error            = 5
                x_error                    = 6
                enqueue_error              = 7
                OTHERS                     = 8
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'ZA_G'.                                    "DEVK912166
        syst-msgno = '922'.                                     "DEVK912166
        syst-msgty = 'E'.                                       "DEVK912166
        syst-msgv1 = sy-subrc.                                  "DEVK912166
        syst-msgv2 = tbl_smtp-adsmtp-smtp_addr.                 "DEVK912166
        PERFORM protocol_update.
        syst-msgid = 'VW'.
        syst-msgno = '001'.
        syst-msgty = 'E'.
        syst-msgv1 = 'Print successful:email Recepient Invalid'."#EC NOTEXT
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " send_email
    *&      Form  fill_orders
          text
    -->  p1        text
    <--  p2        text
    FORM fill_orders.
    tbl_ord-bstnk    = vbak-bstnk.
      tbl_ord-kdmat    = vbap-kdmat.
      tbl_ord-xblnr    = vbak-vbeln.
      tbl_ord-ean11    = vbap-pmatn.
      tbl_ord-arktx    = vbap-arktx.
      tbl_ord-csrno    = w_csrno .
      tbl_ord-csremail = w_email.
      tbl_ord-spras    = kna1-spras .
      tbl_ord-csrphone = adrc-tel_number.
      tbl_ord-csrfax   = adrc-fax_number.
      tbl_ord-csrext   = adrc-tel_extens.
      tbl_ord-total    = w_total.
      tbl_ord-custname = w_custname.
      tbl_ord-csrname  = w_csrname .
      tbl_ord-ldate    = w_ldate.
      APPEND tbl_ord.
      CLEAR tbl_ord.
      CLEAR w_total.
      CLEAR w_ldate.
    ENDFORM.                    " fill_orders
    *&      Form  writeform_text
          text
    -->  p1        text
    <--  p2        text
    FORM writeform_text.
    CALL FUNCTION 'WRITE_FORM'
           EXPORTING
                element = 'WTEXT'
                window  = 'WINDOW2'
           EXCEPTIONS
                element = 1
                window  = 2.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'EBR'.
        syst-msgno = '056'.
        syst-msgty = 'E'.
        syst-msgv1 = 'WTEXT'.
        syst-msgv2 = 'WINDOW2'.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " writeform_text
    *&      Form  writeform
          text
    -->  p1        text
    <--  p2        text
    FORM writeform.
    CALL FUNCTION 'WRITE_FORM'
           EXPORTING
                element = 'EMAIN'
                window  = 'MAIN'
           EXCEPTIONS
                element = 1
                window  = 2.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'EBR'.
        syst-msgno = '056'.
        syst-msgty = 'E'.
        syst-msgv1 = 'WTEXT'.
        syst-msgv2 = 'WINDOW2'.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " writeform
    *&      Form  writeform_footer
          text
    -->  p1        text
    <--  p2        text
    FORM writeform_footer.
    IF nast-spras = 'N'.
        CALL FUNCTION 'WRITE_FORM'
             EXPORTING
                  element = 'FOOTER'
                  window  = 'MAIN'
             EXCEPTIONS
                  element = 1
                  window  = 2.
      ENDIF.
      CALL FUNCTION 'WRITE_FORM'
           EXPORTING
                element = 'WFOOTER'
                window  = 'WINDOW12'
           EXCEPTIONS
                element = 1
                window  = 2.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'EBR'.
        syst-msgno = '056'.
        syst-msgty = 'E'.
        syst-msgv1 = 'WFOOTER'.
        syst-msgv2 = 'WINDOW12'.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " writeform_footer
    *&      Form  closeform
          text
    -->  p1        text
    <--  p2        text
    FORM closeform.
    CALL FUNCTION 'CLOSE_FORM'
           TABLES
                otfdata                  = tbl_otf
           EXCEPTIONS
                unopened                 = 1
                bad_pageformat_for_print = 2
                OTHERS                   = 3.
      IF sy-subrc NE 0.
        retcode = sy-subrc.
        syst-msgid = 'PS'.
        syst-msgno = '005'.
        syst-msgty = 'E'.
        PERFORM protocol_update.
      ENDIF.
    ENDFORM.                    " closeform
    *&      Form  format_pdf
          text
    -->  p1        text
    <--  p2        text
    FORM format_pdf.
    FIELD-SYMBOLS <fs>.
      DESCRIBE TABLE tbl_line    LINES  hltlines.
    DESCRIBE FIELD tbl_line    LENGTH fle1 IN BYTE MODE . Defect#1579-
    DESCRIBE FIELD tbl_objtxt  LENGTH fle2 IN BYTE MODE . Defect#1579-
    Start of Defect#1579+
      DESCRIBE FIELD tbl_line    LENGTH fle1 IN CHARACTER MODE.
      DESCRIBE FIELD tbl_objtxt  LENGTH fle2 IN CHARACTER MODE.
    End of Defect#1579+
      CLEAR   tbl_objtxt.
      REFRESH tbl_objtxt.
      LOOP AT tbl_line.
        htabix = sy-tabix.
        MOVE tbl_line TO hfeld+off1.
        IF htabix = hltlines.
          fle1 = strlen( tbl_line ).
        ENDIF.
        off1 = off1 + fle1.
        IF off1 GE fle2.
          CLEAR tbl_objtxt.
          tbl_objtxt = hfeld(fle2).
          APPEND tbl_objtxt.
          SHIFT hfeld BY fle2 PLACES.
          off1 = off1 - fle2.
        ENDIF.
        IF htabix = hltlines.
          IF off1 GT 0.
            CLEAR tbl_objtxt.
            tbl_objtxt = hfeld(off1).
            APPEND tbl_objtxt.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " format_pdf
    ANy Suggestion or help will be appreciated!
    Regards,
    Kittu
    Edited by: Kittu on Jun 30, 2008 12:32 PM

    Hello Julie Waller,
    Very Good evening!
    Thank you very much for your response!
    Sometimes...I miss the basic things and start concentarcting on typical ways to fix the issue. ....which will only make my issue critical. 
    Hello Sathya,
    Thank you for your response!
    POints are rewarded..
    Have a great day ahead!
    Regards,
    Kittu

  • Headers getting repeated while running the report in background

    Hi,
    I have a report which uses ALV grid display for output display.
    I have displayed a heder in the top_of_page option. while running the program in foregound the header gets displayed only once. but when executing in background the header is getting displayed for each and every page.
    can any one tell me how to get the header displayed only once in the background also.

    REPORT  ZBACKORD MESSAGE-ID VZ
                                  NO STANDARD PAGE HEADING.
    *& TABLES AND TYPE-POOLS                                               *
    Tables used
    TABLES : VBAK,    "Sales Document: Header Data
             VBAP,    "Sales Document: Item Data
             VBPA.    "Sales Document Partner
    For ALV Display
    TYPE-POOLS: SLIS.  "Globale Typen für generische Listbausteine
    *& CONSTANTS                                                           *
    Constants Used
    CONSTANTS:
               C_X         VALUE 'X',           "Order status
               C_TAPA(4)   VALUE 'TAPA',        "For Material Determination
               C_0001(4)   VALUE '0001',        "Etenr value
               C_A         VALUE 'A',           "Enable Save
               C_US(3)  VALUE 'US$',            "US DOLLAR.
               C_B         VALUE 'B',           "for Partially processed
               C_E         VALUE 'E',           "Language
               C_C         VALUE 'C',           "for completely processed
               C_BLANK     VALUE ' ',           "Blank
               C_IC1(4) VALUE '&IC1',           "for user command
               C_ZR(2)     VALUE 'ZR',          "Cs ReP No
               C_BP(2)     VALUE 'RE',          "Bill to party
               C_SH(2)     VALUE 'WE',          "Sold to party
              C_6(6)      VALUE '000000',      "For item number
               C_20(2)  TYPE N VALUE '20',      "For the length of the field
               C_S(1)   TYPE C VALUE 'S',       "STOCK
               C_H      VALUE 'H',              "Header
               C_COL(1) TYPE C VALUE ':',       " COLUMN FOR DATA AND TIME
               C_TOP    TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
                                               "For TOP_OF_PAGE
               C_USER   TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.
    " For USER_COMMAND
    *& TYPE DEFINITIONS                                                    *
    *FOR Sales Document: Header Data
    TYPES: BEGIN OF TP_VBAK,
             VBELN TYPE VBELN_VF,   "Sales Document
             ERDAT TYPE ERDAT,      "Date on which the record was created
             AUART TYPE AUART,      "Sales document type
             LIFSK TYPE LIFSK,      "Delivery block
             VKORG TYPE VKORG,      "Sales organization
             VTWEG TYPE VTWEG,      "Distribution channel
           END OF TP_VBAK.
    *FOR Sales Document Business Data
    TYPES :BEGIN OF TP_VBKD,
            VBELN TYPE VBELN,      "Sales and distribution document number
            POSNR TYPE POSNR,      "Item number of the SD document
            INCO1 TYPE INCO1,      "Incoterms
            ZTERM TYPE DZTERM,     "Terms of payment key
            BSTKD TYPE BSTKD,      "Customer purchase order number
          END OF TP_VBKD.
    TYPES : BEGIN OF TP_VBFA,
              VBELV TYPE VBELN_VON,
              POSNV TYPE POSNR_VON,
            END OF TP_VBFA.
    *FOR Sales Document: Partner
    TYPES : BEGIN OF TP_VBPA,
              VBELN TYPE VBELN,    "Sales and distribution
              PARVW TYPE PARVW,    "Partner function
              KUNNR TYPE KUNNR,    "Customer Number 1
              ADRNR TYPE ADRNR,    "address
            END OF TP_VBPA.
    *FOR Addresses (Business Address Services)
    TYPES : BEGIN OF TP_ADRC,
              ADDRNUMBER TYPE AD_ADDRNUM,  "Address
              DATE_FROM TYPE AD_DATE_FR,   "Date valid from
              NATION TYPE AD_NATION,       "International address
              NAME1 TYPE AD_NAME1,         "name
            END OF TP_ADRC.
    *FOR Sales Document: Item Data
    TYPES: BEGIN OF TP_VBAP,
            VBELN TYPE VBELN_VA,   "Sales document
            POSNR TYPE POSNR_VA,   "Sales document item
            MATNR TYPE MATNR,      "Material Number
            PSTYV TYPE PSTYV,      "Sales document item category
            KDMAT TYPE MATNR_KU,   "Material number used by customer
            VRKME TYPE VRKME,      "Sales unit
            WERKS TYPE WERKS_EXT,  "Plant (Own or External)
            VSTEL TYPE VSTEL,      "Shipping point /Receiving point
            NETPR TYPE NETPR,      "Net p
            NETWR TYPE NETWR_AP,
            WAERK TYPE VBAP-WAERK,"Target outline doc currency
         END OF TP_VBAP.
    *for Sales Document: Schedule Line Data
    TYPES: BEGIN OF TP_VBEP,
            VBELN TYPE VBELN_VA,   "Sales document
            POSNR TYPE POSNR_VA,   "Sales Document Item
            ETENR TYPE ETENR,      "Schedule line
            EDATU TYPE EDATU,      "Schedule line data
            WMENG TYPE WMENG,      "Order quantity in sales unit
            BMENG TYPE BMENG,      "Confirmed quantity
            LMENG TYPE LMENG,      "Required quantity
            WADAT TYPE WADAT,      "Goods issue date
            LIFSP TYPE LIFSP_EP,   "Schedule line blocked for delivery
          END OF TP_VBEP.
    *For Sales Document: Header Status and Administrative Data
    TYPES : BEGIN OF TP_VBUK,
              VBELN TYPE VBELN,  "Sales and Distribution Document Number
              SPSTG TYPE SPSTG,  "Overall blocked status
              CMGST TYPE CMGST,
            END OF TP_VBUK.
    TYPES : BEGIN OF TP_TVLST,
              LIFSP TYPE LIFSP,  "Default delivery block
              VTEXT TYPE BEZEI_LIFSP, "Description
            END OF TP_TVLST.
    *FOR Sales Document: Item Status
    TYPES : BEGIN OF TP_VBUP,
              VBELN TYPE VBELN,      "Sales and distribution
              POSNR TYPE POSNR,      "Item number of the SD
              LFGSA TYPE LFGSA,      "Overall delivery status of item
            END OF TP_VBUP.
    For ALV Display-if  cs rep is checked
    TYPES: BEGIN OF TP_DISPC,
              VBELN TYPE VBELN,       "Sales and distribution Doc
              VKORG TYPE VKORG,       "Sales organization
              VTWEG TYPE VTWEG,       "Distribution channel
              AUART TYPE AUART,       "Sales document type
              BSTKD TYPE BSTKD,       "Customer purchase order
              KUNNR_1 TYPE KUNNR,     "Cs Rep Number
              NAME1_1 TYPE NAME1,     "Cs Rep Name
              KUNNR_2 TYPE KUNNR,     "Bill to Number
              NAME1_2 TYPE NAME1,     "Bill to Party
              KUNNR_3 TYPE KUNNR,     "Ship to Number
              NAME1_3 TYPE NAME1,     "Ship to Party
              POSNR TYPE POSNR_VA,    "Item number of the SD
              MATNR TYPE MATNR,       "Material Number
              KDMAT TYPE MATNR_KU,    "Material number used by
              VSTEL TYPE VSTEL,       "Shipping point /Receiving
              NETPR TYPE NETPR,       "Net price
              NETWR TYPE NETWR_AP,
              WAERK TYPE WAERK,       "Currency
              ZTERM TYPE DZTERM,      "Terms of payment key
              WMENG TYPE WMENG,       "Order quantity in sales unit
              LOGIC_1 TYPE WMENG,     "BackOrder Quantity
              VRKME TYPE STRING,      "Sales Unit
              WADAT TYPE EDATU,       "Goods issue date
              WADAT1 TYPE EDATU,
              EDATU TYPE EDATU,       "Schedule line data
              VRKME_1 TYPE STRING,    "Sales Unit
              INCO1 TYPE INCO1,       "Incoterms
              LFGSA TYPE STRING,      "Overall delivery status of item
              LIFSP TYPE STRING,      "Line Item Block
              LIFSK TYPE STRING,      "Header block
              SPSTG TYPE STRING,      "Overall blocked status
             END OF TP_DISPC.
    For ALV Display-if plant is checked
    TYPES: BEGIN OF TP_DISPP,
              VBELN TYPE VBELN,       "Sales and distribution Doc
              VKORG TYPE VKORG,       "Sales organization
              VTWEG TYPE VTWEG,       "Distribution channel
              AUART TYPE AUART,       "Sales document type
              BSTKD TYPE BSTKD,       "Customer purchase order
              KUNNR_2 TYPE KUNNR,     "Cs rep number
              NAME1_2 TYPE NAME1,     "Cs rep Name
              KUNNR_3 TYPE KUNNR,     "Ship to Number
              NAME1_3 TYPE NAME1,     "Ship to Party Name
              POSNR TYPE POSNR_VA,    "Item number of the SD
              MATNR TYPE MATNR,       "Material Number
              KDMAT TYPE MATNR_KU,    "Material number used by customer
              VSTEL TYPE VSTEL,       "Shipping point /Receiving point
              NETPR TYPE NETPR,       "Net price
              NETWR TYPE NETWR_AP,
    *}MOD02
              WAERK TYPE WAERK,       "Currency
              ZTERM TYPE DZTERM,      "Terms of payment key
              WMENG TYPE WMENG,       "Order quantity in sales unit
              LOGIC_1 TYPE WMENG,     "Backorder Quantity
              VRKME TYPE STRING,      "Sales unit
              WADAT TYPE EDATU,       "Goods issue date
              WADAT1 TYPE EDATU,
              EDATU TYPE EDATU,       "Schedule line data
              VRKME_1 TYPE STRING,    "Sales Unit
              INCO1 TYPE INCO1,       "Incoterms
              LFGSA TYPE STRING,      "Overall delivery status of item
              LIFSP TYPE STRING,      "Line Item Block
              LIFSK TYPE STRING,      "Header block
              SPSTG TYPE STRING,      "Overall blocked status
              WERKS TYPE WERKS_EXT,   "Plant (Own or External)
           END OF TP_DISPP.
    For ALV Display-if cs rep and palnt is checked
    TYPES: BEGIN OF TP_DISP,
              VKORG TYPE VKORG,        "Sales organization
              VTWEG TYPE VTWEG,        "Distribution channel
              AUART TYPE AUART,        "Sales document type
              VBELN TYPE VBELN,        "Sales and distribution Doc no
              BSTKD TYPE BSTKD,        "Customer purchase order number
              KUNNR_1 TYPE KUNNR,      "Cs Rep Number
              NAME1_1 TYPE NAME1,      "Cs Rep Name
              KUNNR_2 TYPE KUNNR,      "Bill to Number
              NAME1_2 TYPE NAME1,      "Bill to Name
              KUNNR_3 TYPE KUNNR,      "Ship to Number
              NAME1_3 TYPE NAME1,      "Ship to Name
              POSNR TYPE POSNR_VA,     "Item number of the SD
              MATNR TYPE MATNR,        "Material Number
              KDMAT TYPE MATNR_KU,     "Material number used
              VSTEL TYPE VSTEL,        "Shipping point /Receiving
              NETPR TYPE NETPR,        "Net price
              NETWR TYPE NETWR_AP,
              WAERK TYPE WAERK,        "Currency
              ZTERM TYPE DZTERM,       "Terms of payment key
              WMENG TYPE WMENG,        "Order quantity in sales
              LOGIC_1 TYPE WMENG,      "Backorder Quantity
              VRKME TYPE STRING,       "Sales unit
              WADAT TYPE EDATU,        "Goods issue date
              WADAT1 TYPE EDATU,
              VRKME_1 TYPE STRING,     "Sales Unit
              EDATU TYPE EDATU,        "Schedule line date
              INCO1 TYPE INCO1,        "Incoterms
              LFGSA TYPE STRING,       "Overall delivery status of
              LIFSP TYPE STRING,       "Line Item Block
              LIFSK TYPE STRING,       "Header block
              SPSTG TYPE STRING,       "Overall blocked status
              WERKS TYPE WERKS_EXT,    "Plant (Own or External)
           END OF TP_DISP.
    *& INTERNAL TABLES                                                     *
    Internal Tables used for Data Selection
    DATA: T_VBAK TYPE STANDARD TABLE OF TP_VBAK WITH HEADER LINE,
          T_VBPA TYPE STANDARD TABLE OF TP_VBPA WITH HEADER LINE,
          T_VBAP TYPE STANDARD TABLE OF TP_VBAP WITH HEADER LINE,
          T_VBKD TYPE STANDARD TABLE OF TP_VBKD WITH HEADER LINE,
          T_VBEP TYPE STANDARD TABLE OF TP_VBEP WITH HEADER LINE,
          T_VBEP1 TYPE STANDARD TABLE OF TP_VBEP WITH HEADER LINE,
          T_VBUP TYPE STANDARD TABLE OF TP_VBUP WITH HEADER LINE,
          T_ADRC TYPE STANDARD TABLE OF TP_ADRC WITH HEADER LINE,
          T_DISPC TYPE STANDARD TABLE OF TP_DISPC WITH HEADER LINE,
          T_DISPP TYPE STANDARD TABLE OF TP_DISPP WITH HEADER LINE,
          T_DISP TYPE STANDARD TABLE OF TP_DISP WITH HEADER LINE.
    {23-8-2007
    DATA: T_VBUK TYPE STANDARD TABLE OF TP_VBUK WITH HEADER LINE,
          T_TVLST TYPE STANDARD TABLE OF TP_TVLST WITH HEADER LINE,
          T_TVLST1 TYPE STANDARD TABLE OF TP_TVLST WITH HEADER LINE,
          T_VBFA TYPE STANDARD TABLE OF TP_VBFA WITH HEADER LINE.
                Variables used for ALV Display                           *
    DATA:
          W_REPID TYPE SY-REPID,               " Report name
          W_POS   TYPE I VALUE 0,              " Column position indicator
          W_LAYOUT TYPE SLIS_LAYOUT_ALV,       " Layout
          W_DATUM(10) TYPE C,                  " Run date
          W_TIME(8)   TYPE C.                  " Run time
                Tables used for ALV Display                              *
    DATA  :   T_GROUP TYPE SLIS_T_SP_GROUP_ALV WITH HEADER LINE,
                                                 "Grouping of field
              T_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,
                                                 "sorting of the field
              T_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
                                                " Field description
              T_TOP TYPE SLIS_T_LISTHEADER.      " Header for the ALV
                Work Area used for ALV Display
    DATA : WA_TOP LIKE LINE OF T_TOP.            " Work Area for Header
    *& SELECTION SCREEN                                                    *
    Selection
    SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-T01.
    "Sales Organization details
    SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG OBLIGATORY.
    "Sales Organization
    SELECT-OPTIONS: S_VTWEG FOR VBAK-VTWEG .
    "Distribution Channel
    SELECT-OPTIONS: S_KUNNR1 FOR VBPA-KUNNR .             "CS Rep Number
    SELECT-OPTIONS: S_WERKS FOR VBAP-WERKS.               "Plant
    SELECTION-SCREEN END OF BLOCK B01.
    SELECTION-SCREEN BEGIN OF BLOCK B02 WITH FRAME TITLE TEXT-T02.
    "Additional Selections
    SELECT-OPTIONS: S_KUNNR2 FOR VBPA-KUNNR .      "Bill to party
    SELECT-OPTIONS: S_KUNNR3 FOR VBPA-KUNNR .      "Ship to party
    SELECT-OPTIONS: S_VBELN FOR VBAK-VBELN .       "Saler Order
    SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR .       "Material Number
    SELECT-OPTIONS: S_KDMAT FOR VBAP-KDMAT .       "Customer Material Number
    SELECT-OPTIONS: S_AUART FOR VBAK-AUART .       "Sales Order Type
    SELECTION-SCREEN END OF BLOCK B02.
    SELECTION-SCREEN BEGIN OF BLOCK B03 WITH FRAME TITLE TEXT-T03.
    "Date Selection
    SELECT-OPTIONS: S_ERDAT FOR VBAK-ERDAT OBLIGATORY.
    "Order Creation Date
    PARAMETER: P_PLANT AS CHECKBOX.                 "Backorder Plant
    PARAMETER: P_CSREP AS CHECKBOX.                 "Backorder CSREP number
    SELECTION-SCREEN END OF BLOCK B03.
    *& AT SELECTION SCREEN                                                 *
    *Validation Sales Organisation
    AT SELECTION-SCREEN ON S_VKORG.
      IF NOT S_VKORG[] IS INITIAL.
        SELECT VKORG UP TO 1 ROWS FROM TVKO
        BYPASSING BUFFER
        INTO S_VKORG
        WHERE VKORG IN S_VKORG.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E01.
          "Enter a valid Sales Organization
        ENDIF.
      ENDIF.
    *Validation Distribution Channel
    AT SELECTION-SCREEN ON S_VTWEG.
      IF NOT S_VTWEG[] IS INITIAL.
        SELECT VTWEG UP TO 1 ROWS FROM TVTW
         BYPASSING BUFFER
      INTO S_VTWEG
       WHERE VTWEG IN S_VTWEG.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E02.
          "Enter a valid Distribution channel
        ENDIF.
      ENDIF.
    *Validation Customer service rep number
    AT SELECTION-SCREEN ON S_KUNNR1.
      IF NOT S_KUNNR1[] IS INITIAL.
        SELECT KUNNR UP TO 1 ROWS FROM KNA1
        INTO S_KUNNR1
        WHERE KUNNR IN S_KUNNR1.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E03.
          "Enter a valid Customer Service rep number
        ENDIF.
      ENDIF.
    *Validation Plant
    AT SELECTION-SCREEN ON S_WERKS.
      IF NOT S_WERKS[] IS INITIAL.
        SELECT WERKS UP TO 1 ROWS
        FROM T001W
        INTO S_WERKS
        BYPASSING BUFFER
        WHERE WERKS IN S_WERKS.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E04.  "Enter a valid Plant
        ENDIF.
      ENDIF.
    *Validation Bill to number
    AT SELECTION-SCREEN ON S_KUNNR2.
      IF NOT S_KUNNR2[] IS INITIAL.
        SELECT KUNNR UP TO 1 ROWS FROM KNA1
        INTO S_KUNNR2
        WHERE KUNNR IN S_KUNNR2.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E05.  "Enter a valid Bill to number
        ENDIF.
      ENDIF.
    *Validation Ship to Number
    AT SELECTION-SCREEN ON S_KUNNR3.
      IF NOT S_KUNNR3[] IS INITIAL.
        SELECT KUNNR UP TO 1 ROWS FROM KNA1
        INTO S_KUNNR3
        WHERE KUNNR IN S_KUNNR3.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E06.  "Enter a valid Ship to number
        ENDIF.
      ENDIF.
    *Validation Order Number
    AT SELECTION-SCREEN ON S_VBELN.
      IF NOT S_VBELN[] IS INITIAL.
        SELECT VBELN UP TO 1 ROWS FROM VBUK
        INTO S_VBELN
        WHERE VBELN IN S_VBELN.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E07.  "Enter a valid Order number
        ENDIF.
      ENDIF.
    *Validation Material Number
    AT SELECTION-SCREEN ON S_MATNR.
      IF NOT S_MATNR[] IS INITIAL.
        SELECT MATNR UP TO 1 ROWS FROM MARA
        INTO S_MATNR
        WHERE MATNR IN S_MATNR.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E08.  "Enter a valid Material number
        ENDIF.
      ENDIF.
    *Validation Customer Material Number
    AT SELECTION-SCREEN ON S_KDMAT.
      IF NOT S_KDMAT[] IS INITIAL.
        SELECT KDMAT UP TO 1 ROWS
        FROM KNMT
        INTO S_KDMAT
        WHERE VKORG IN S_VKORG AND
              VTWEG IN S_VTWEG AND
              KDMAT IN S_KDMAT.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E09.
          "Enter a valid Customer Material number
        ENDIF.
      ENDIF.
    *Validation Salea order type
    AT SELECTION-SCREEN ON S_AUART.
      IF NOT S_AUART[] IS INITIAL.
        SELECT AUART UP TO 1 ROWS FROM TVAK
        INTO S_AUART
        BYPASSING BUFFER
        WHERE AUART IN S_AUART.
        ENDSELECT.
        IF SY-SUBRC NE 0.
          MESSAGE E000 WITH TEXT-E10.
          "Enter a valid Sales Order type
        ENDIF.
      ENDIF.
    *Validation for Plant / CS rep .
    AT SELECTION-SCREEN .
      IF NOT ( ( P_PLANT = C_X ) OR ( P_CSREP = C_X ) ).
        MESSAGE E000 WITH TEXT-E12.  "Choose the Plant or CSrep
      ENDIF.
      IF  ( P_PLANT = C_X ) AND S_WERKS IS INITIAL.
        MESSAGE E000 WITH TEXT-E13.  "Enter Plant
      ENDIF.
      IF  ( P_CSREP = C_X ) AND S_KUNNR1 IS INITIAL.
        MESSAGE E000 WITH TEXT-E14. " Enter CSREP number
      ENDIF.
    *& START OF SELECTION                                                  *
    START-OF-SELECTION.
    Clear Work Areas/Variables and Clear/Refresh Internal Tables
      PERFORM CLEAR_REFRESH.
    Selection of Data as per inputs
      PERFORM DATA_SELECTION.
    Populate Internal table for display
      PERFORM DATA_FILL_FOR_DISPLAY.
    *& END OF SELECTION                                                  *
    END-OF-SELECTION.
      IF NOT T_DISP[] IS INITIAL.
    *Populating the field catalog for ALV Display if plant and csrep is
    *checked.
        PERFORM POPULATE_FIELD_CATALOG.
        PERFORM DISPLAY.
      ELSEIF T_DISPP[] IS NOT INITIAL.
    *Populating the field catalog for ALV Display if plant is checked.
        PERFORM POPULATE_FIELD_CATALOG.
        PERFORM DISPLAY.
      ELSEIF T_DISPC[] IS NOT INITIAL.
    *Populating the field catalog for ALV Display if csrep is checked.
        PERFORM POPULATE_FIELD_CATALOG.
        PERFORM DISPLAY.
      ELSE.
        MESSAGE I000 WITH TEXT-E15. "No Data found for Selection Criteria
      ENDIF.
    Clear Work Areas/Variables and Clear/Refresh Internal Tables
      PERFORM CLEAR_REFRESH.
    *&      Form  CLEAR_REFRESH
          Clear Work Areas/Variables and Clear/Refresh Internal Tables
    FORM CLEAR_REFRESH .
    Clear Variables/Work Areas/Internal Tables
      CLEAR: W_REPID,
             W_POS,
             W_LAYOUT,
             W_DATUM,
             W_TIME,
             T_VBAK,
             T_VBKD,
             T_VBPA,
             T_VBAP,
             T_VBEP,
             T_VBUP,
             T_DISPC,
             T_DISPP,
             T_DISP,
             T_VBUK,
             T_TVLST,
             T_TVLST1.
    Refresh Internal Tables
      REFRESH: T_VBAK,
               T_VBKD,
               T_VBPA,
               T_VBAP,
               T_VBEP,
               T_VBUP,
               T_DISPC,
               T_DISPP,
               T_DISP,
               T_VBUK,
               T_TVLST,
               T_TVLST1.
    ENDFORM.                    " CLEAR_REFRESH
    *&      Form  DATA_SELECTION
          Selection of Data as per inputs
    FORM DATA_SELECTION .
    *Obtain Sales and distribution document number,Date on which the record
    *was created
    *Sales document type,Delivery block,Sales organisation,
    Distribution channel based on selection criteria
      SELECT VBELN                            "Sales and distribution Doc no
             ERDAT
             "Date on which the record was created
             AUART                            "Sales document type
             LIFSK                            "Delivery block
             VKORG                            "Sales organisation
             VTWEG                            "Distribution channel
             FROM VBAK
             INTO TABLE T_VBAK
             WHERE VBELN IN S_VBELN AND
                   ERDAT IN S_ERDAT AND
                   AUART IN S_AUART AND
                   VKORG IN S_VKORG AND
                   VTWEG IN S_VTWEG.
      IF SY-SUBRC EQ 0.
        SORT T_VBAK BY VBELN .
    *Obtain Sales document ,Sales document item,Material Number,Material
    *number used by customer
    Safer point ,Plant (Own or External),Shipping point /Receiving point
    Net price based on selection criteria
        SELECT A~VBELN        "Sales document
               A~POSNR        "Sales document item
               MATNR        "Material Number
               PSTYV        "Sales document item category
               KDMAT        "Material number used by customer
               VRKME        "Sales unit
               WERKS        "Plant (Own or External)
               VSTEL        "Shipping point /Receiving point
               NETPR        "Net price
    *MOD02 {
               NETWR
    *}MOD02
               WAERK        "Target outline doc currency
               FROM  VBAP AS A JOIN VBUP AS B
               ON ( AVBELN = BVBELN
                   AND APOSNR = BPOSNR )
               INTO TABLE T_VBAP
               FOR ALL ENTRIES IN T_VBAK
               WHERE A~VBELN = T_VBAK-VBELN AND
                     A~MATNR IN S_MATNR AND
                     A~PSTYV NE C_TAPA AND
                     A~KDMAT IN S_KDMAT AND
                     A~WERKS IN S_WERKS AND
                     A~ABGRU EQ SPACE AND
                     B~LFSTA NE 'C'.
        IF SY-SUBRC EQ 0.
          SORT T_VBAP BY VBELN POSNR.
        ENDIF.
       SELECT VBELV
              POSNV
              FROM VBFA
              INTO TABLE T_VBFA
              FOR ALL ENTRIES IN T_VBAP
              WHERE VBELV = T_VBAP-VBELN
              AND POSNV = T_VBAP-POSNR
              AND VBTYP_N = 'J'.
       IF SY-SUBRC = 0.
         SORT T_VBFA BY VBELV POSNV.
         LOOP AT T_VBAP.
    *READ TABLE T_VBFA WITH KEY VBELV = T_VBAP-VBELN POSNV = T_VBAP-POSNR.
           IF SY-SUBRC = 0.
             DELETE T_VBAP.
           ENDIF.
         ENDLOOP.
       ENDIF.
    { 23-8-2007
        SELECT LIFSP
               VTEXT
               FROM TVLST
               INTO TABLE T_TVLST
               FOR ALL ENTRIES IN T_VBAK
               WHERE SPRAS EQ C_E AND
                     LIFSP = T_VBAK-LIFSK.
        IF SY-SUBRC EQ 0.
          SORT T_TVLST BY LIFSP.
        ENDIF.
    *Obtain Sales and distribution document number,Item number of the SD
    *document ,Incoterms,Terms of payment key,Customer purchase order number
    *based on selection criteria
        SELECT VBELN                 "Sales and distribution document number
               POSNR                 "Item number of the SD document
               INCO1                 "Incoterms
               ZTERM                 "Terms of payment key
               BSTKD                 "Customer purchase order number
               FROM VBKD INTO TABLE T_VBKD
               FOR ALL ENTRIES IN T_VBAK
               WHERE VBELN = T_VBAK-VBELN.
        IF SY-SUBRC EQ 0.
          SORT T_VBKD BY VBELN .
        ENDIF.
    *Obtain Sales document,Sales Document Item,Schedule line,Schedule line
    *data, Order quantity in sales unit,Confirmed quantity,Goods issue date,
    *Schedule line blocked for delivery based on selection criteria
        SELECT VBELN                    "Sales document
                POSNR                   "Sales Document Item
                ETENR                   "Schedule line
                EDATU                   "Schedule line data
                CMENG                   "Order quantity in sales unit
                BMENG                   "Confirmed quantity
                LMENG
                WADAT                   "Goods issue date
                LIFSP                   "Schedule line blocked for delivery
                FROM VBEP INTO TABLE T_VBEP
                FOR ALL ENTRIES IN T_VBAK
                WHERE VBELN = T_VBAK-VBELN AND
                      ETENR = C_0001.
        IF SY-SUBRC EQ 0.
          SORT T_VBEP BY VBELN POSNR ETENR.
    { 23-8-2007
          SELECT LIFSP
                 VTEXT
                 FROM TVLST
                 INTO TABLE T_TVLST1
                 FOR ALL ENTRIES IN T_VBEP
                 WHERE SPRAS EQ C_E AND
                       LIFSP = T_VBEP-LIFSP.
          IF SY-SUBRC EQ 0.
            SORT T_TVLST1 BY LIFSP.
          ENDIF.
        ENDIF.
        SELECT VBELN                    "Sales document
                    POSNR                   "Sales Document Item
                    ETENR                   "Schedule line
                    EDATU                   "Schedule line data
                    CMENG                   "Order quantity in sales unit
                    BMENG                   "Confirmed quantity
                    LMENG
                    WADAT                   "Goods issue date
                    LIFSP
                    "Schedule line blocked for delivery
                    FROM VBEP INTO TABLE T_VBEP1
                    FOR ALL ENTRIES IN T_VBAK
                    WHERE VBELN = T_VBAK-VBELN .
        IF SY-SUBRC EQ 0.
          SORT T_VBEP1 BY VBELN POSNR .
        ENDIF.
    { 23-8-2007
        SELECT    VBELN    "Sales and Distribution Document Number
                  SPSTG    "Overall blocked status
    *MOD02 {
                  CMGST
    *}MOD02
            FROM VBUK
            INTO TABLE T_VBUK
            FOR ALL ENTRIES IN T_VBAK
           WHERE VBELN = T_VBAK-VBELN
           AND ( CMGST = 'A' OR CMGST = 'D' ).
        IF SY-SUBRC EQ 0.
          SORT T_VBUK BY VBELN .
        ENDIF.
    *Obtain Sales and distribution Doc no,Item number of the SD document
    Overall delivery status of item
        SELECT    VBELN    "Sales and distribution Doc no
                  POSNR    "Item number of the SD document
                  LFGSA    "Overall delivery status of item
            FROM VBUP
            INTO TABLE T_VBUP
            FOR ALL ENTRIES IN T_VBAK
           WHERE VBELN = T_VBAK-VBELN.
        IF SY-SUBRC EQ 0.
          SORT T_VBUP BY VBELN POSNR.
        ENDIF.
    *Obtain Sales and distribution document number,Partner function
    Customer Number 1,address based on selection criteria
        SELECT    VBELN   "Sales and distribution Doc no
                  PARVW   " Patner function
                  KUNNR   "Customer No1
                  ADRNR   "address
                    FROM VBPA
                    INTO TABLE T_VBPA
                    FOR ALL ENTRIES IN T_VBAP
                   WHERE VBELN = T_VBAP-VBELN AND
                        ( ( KUNNR IN S_KUNNR1 ) OR
                         ( KUNNR IN S_KUNNR2 )  OR
                          ( KUNNR IN S_KUNNR3 ) ) AND
                           ( ( PARVW = C_ZR ) OR
                             ( PARVW = C_BP ) OR
                             ( PARVW = C_SH ) ).
        IF SY-SUBRC EQ 0.
          SORT T_VBPA BY VBELN PARVW.
          IF NOT T_VBPA[] IS INITIAL.
    *Obtain  Address number ,name
            SELECT  ADDRNUMBER  "Address number
                    DATE_FROM   "Date valid from
                    NATION      "International address version ID
                    NAME1        "name
              FROM ADRC
              INTO TABLE T_ADRC
              FOR ALL ENTRIES IN T_VBPA
              WHERE ADDRNUMBER = T_VBPA-ADRNR.
            IF SY-SUBRC EQ 0.
              SORT T_ADRC BY ADDRNUMBER.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE I000 WITH TEXT-S02."No Data For the Entered CS rep number
          STOP.
        ENDIF.
      ELSE.
        MESSAGE I000 WITH TEXT-S01.
        "No data found for the selection criteria
        STOP.
      ENDIF.
    ENDFORM.                    " DATA_SELECTION
    *&      Form  DATA_FILL_FOR_DISPLAY
          Populate Internal table for display
    FORM DATA_FILL_FOR_DISPLAY .
      DATA: L_NETPR TYPE NETPR.    "For net amount
      DATA: L_DATE TYPE EDATU.     "For Date Field
      DATA: L_WMENG TYPE WMENG.    "For Confirmed Quantity
      DATA: L_BMENG TYPE BMENG.    "For Delivered Quantity
      DATA : L_LAST_DATE TYPE EDATU.
      DATA : W_FG TYPE C.
      DATA : L_TABIX TYPE SY-TABIX.
      DATA: L_CNT TYPE I,
            L_NETWR TYPE NETWR.
    *If plant and csrep are selected.
      IF ( ( P_PLANT = C_X ) AND ( P_CSREP = C_X ) ).
        LOOP AT T_VBAP.
          CLEAR W_FG.
          CLEAR L_CNT.
    *MOD02 {
          READ TABLE T_VBUK WITH KEY VBELN = T_VBAP-VBELN.
          IF SY-SUBRC = 0.
    *}MOD02
            LOOP AT T_VBEP1 WHERE VBELN = T_VBAP-VBELN AND POSNR =
            T_VBAP-POSNR.
              L_CNT = L_CNT + 1.
              IF L_LAST_DATE IS NOT INITIAL AND W_FG NE 'X'.
                IF L_LAST_DATE NE T_VBEP1-WADAT.
                  W_FG = 'X'.
                ENDIF.
              ENDIF.
              L_LAST_DATE = T_VBEP1-WADAT.
            ENDLOOP.
            IF L_CNT = 1 AND T_VBEP1-BMENG = 0.
              W_FG = 'X'.
            ENDIF.
            IF W_FG = 'X'.
              READ TABLE T_VBEP WITH KEY VBELN = T_VBAP-VBELN
                                         POSNR = T_VBAP-POSNR
                                          BINARY SEARCH.
              IF SY-SUBRC EQ 0.
    *Move Order quantity in sales unit to final internal table
                MOVE T_VBEP-WMENG TO T_DISP-WMENG.
                MOVE T_VBEP-WADAT TO T_DISP-WADAT1.
    *Move Goods issue date to final internal table
                MOVE T_VBEP-EDATU TO T_DISP-WADAT.
    { 23-8-2007
                READ TABLE T_TVLST1 WITH KEY LIFSP = T_VBEP-LIFSP
                                          BINARY SEARCH.
                IF SY-SUBRC EQ 0.
                  CONCATENATE T_VBEP-LIFSP
                                  T_TVLST1-VTEXT
                                  INTO T_DISP-LIFSP
                                  SEPARATED BY SPACE.
                ENDIF.
    *Move the Schedule line blocked for delivery
    to final internal table.
              ENDIF.
    *LOOP AT T_VBEP1 WHERE VBELN = T_VBAP-VBELN AND POSNR = T_VBAP-POSNR.
              LOOP AT T_VBEP1 WHERE VBELN = T_VBAP-VBELN AND POSNR =
              T_VBAP-POSNR.
                L_WMENG = T_VBEP1-WMENG + L_WMENG.
                L_BMENG = T_VBEP1-BMENG + L_BMENG.
           IF NOT L_DATE IS INITIAL.
             IF ( L_DATE < T_VBEP1-EDATU ).
               L_DATE = T_VBEP1-EDATU.
             ENDIF.
           ELSE.
             L_DATE = T_VBEP1-EDATU.
           ENDIF.
                AT END OF POSNR.
                  READ TABLE T_VBEP1 INDEX SY-TABIX.
                  IF SY-SUBRC = 0.
                    L_DATE = T_VBEP1-EDATU.
                  ENDIF.
                ENDAT.
              ENDLOOP.
              IF T_VBEP1-WMENG EQ T_VBEP1-BMENG.
                T_DISP-LOGIC_1 = 0.
                T_DISP-EDATU = T_VBEP1-EDATU.
              ELSEIF   L_WMENG EQ L_BMENG  .
                T_DISP-EDATU = L_DATE.
                T_DISP-LOGIC_1 = L_WMENG.
              ELSE.
                T_DISP-EDATU = C_BLANK.
                T_DISP-LOGIC_1 = L_WMENG.
              ENDIF.
    *Move the Sales document item to final internal table.
              MOVE T_VBAP-POSNR TO T_DISP-POSNR.
    *Move the Material Number to final internal table.
              MOVE T_VBAP-MATNR TO T_DISP-MATNR.
    *Move the Material number used by customer to final internal table.
              MOVE T_VBAP-KDMAT TO T_DISP-KDMAT.
    *Move the Shipping point to final internal table.
              MOVE T_VBAP-VSTEL TO T_DISP-VSTEL.
    *Move the Sales unit to final internal table.
              PERFORM UNIT1 USING T_VBAP-VRKME CHANGING T_VBAP-VRKME.
              MOVE T_VBAP-VRKME TO T_DISP-VRKME.
              MOVE T_VBAP-VRKME TO T_DISP-VRKME_1.
    *Move the Plant (Own or External) to final internal table.
              MOVE T_VBAP-WERKS TO T_DISP-WERKS.
              MOVE T_VBAP-WAERK TO T_DISP-WAERK.
    *Move the Net price to final internal table.
              IF  T_VBAP-WAERK = C_US   .
                L_NETPR = T_VBAP-NETPR.
                L_NETPR = L_NETPR / 100.
                T_DISP-NETPR = L_NETPR.
                CLEAR L_NETPR.
              ELSE.
                MOVE T_VBAP-NETPR TO T_DISP-NETPR.
              ENDIF.
              CLEAR L_NETPR.
    *MOD02{
              IF  T_VBAP-WAERK = C_US   .
                L_NETWR = T_VBAP-NETWR.
                L_NETWR = L_NETWR / 100.
                T_DISP-NETWR = L_NETWR.
                CLEAR L_NETWR.
              ELSE.
                MOVE T_VBAP-NETWR TO T_DISP-NETWR.
              ENDIF.
              CLEAR L_NETWR.
    *}MOD02
    *READ THE TABLE VBAK TO FETCH Sales Order Number,sales
    *organisation,distribution channel,Document type,Delivery block
              READ TABLE T_VBAK WITH KEY VBELN = T_VBEP-VBELN BINARY SEARCH.
              IF SY-SUBRC EQ 0.
    *Move the Sales order number to final internal table.
                MOVE T_VBAK-VBELN TO T_DISP-VBELN.
                PERFORM DELETE_LEADING_ZEROES CHANGING T_DISP-VBELN.
    *Move the Sales organisation to final internal table.
                MOVE T_VBAK-VKORG TO T_DISP-VKORG.
    *Move the Distribution channel to final internal table.
                MOVE T_VBAK-VTWEG TO T_DISP-VTWEG.
    *Move the Document type to final internal table.
                MOVE T_VBAK-AUART TO T_DISP-AUART.
    {23-8-2007
                READ TABLE T_TVLST WITH KEY LIFSP = T_VBAK-LIFSK
                                            BINARY SEARCH.
                IF SY-SUBRC EQ 0.
                  CONCATENATE T_VBAK-LIFSK
                              T_TVLST-VTEXT
                              INTO T_DISP-LIFSK
                              SEPARATED BY SPACE.
                ENDIF.
              ENDIF.
    *READ THE TABLE VBKD TO FETCH Incoterms,Terms of payment key,Customer
    *purchase order number
              READ TABLE T_VBKD WITH KEY VBELN = T_VBAP-VBELN
                BINARY SEARCH.
              IF SY-SUBRC EQ 0.
    *Move the Customer purchase order number to final internal table.
                MOVE T_VBKD-BSTKD TO T_DISP-BSTKD.
    *Move the Incoterms to final internal table.
                MOVE T_VBKD-INCO1 TO T_DISP-INCO1.
    *Move the Terms of payment to final internal table.
                MOVE T_VBKD-ZTERM TO T_DISP-ZTERM.
              ENDIF.
    { 23-8-2007
              READ TABLE T_VBUK WITH KEY VBELN = T_VBEP-VBELN
              BINARY SEARCH.
              IF SY-SUBRC EQ 0.
                IF T_VBUK-SPSTG EQ SPACE.
                  T_DISP-SPSTG = TEXT-TE1. "Not Blocked
                ELSEIF T_VBUK-SPSTG EQ C_C.
                  T_DISP-SP

  • Error in task -Downloading a file from report

    Hi all,
    This is my code to download the content of report to Excel,Problem i am getting when trying to put heading for numerical fields .Its getting '0' in the heading .For remaining  Fields which are non-numberic its displaying nicely.Could any one solve this for me.
    report zt11.
      data :  itab type mard occurs 0 .
    select  * from mard into table itab .
    data: it_t001   type t001  occurs 0,
          it_fields type dfies occurs 0  with header line,
          begin of it_fnames occurs 0,
            reptext like dfies-reptext,
          end of it_fnames.
          CALL FUNCTION 'GET_FIELDTAB'
      EXPORTING
      LANGU                     = SY-LANGU
      ONLY                      = ' '
        TABNAME                   = 'MARD'
      WITHTEXT                  = 'X'
    IMPORTING
      HEADER                    =
      RC                        =
      TABLES
        FIELDTAB                  = it_fields
      EXCEPTIONS
        INTERNAL_ERROR            = 1
        NO_TEXTS_FOUND            = 2
        TABLE_HAS_NO_FIELDS       = 3
        TABLE_NOT_ACTIV           = 4
        OTHERS                    = 5
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    loop at it_fields.
      it_fnames-reptext = it_fields-reptext.
      append it_fnames.
    endloop.
    CALL FUNCTION 'EXCEL_OLE_STANDARD_DAT'
      EXPORTING
        FILE_NAME                       = 'C:\T001'
      CREATE_PIVOT                    = 0
        DATA_SHEET_NAME                 = 'Companies'
      PIVOT_SHEET_NAME                = ' '
      PASSWORD                        = ' '
      PASSWORD_OPTION                 = 0
      TABLES
      PIVOT_FIELD_TAB                 =
        DATA_TAB                        = itab
       FIELDNAMES                      = it_fnames
      EXCEPTIONS
        FILE_NOT_EXIST                  = 1
        FILENAME_EXPECTED               = 2
        COMMUNICATION_ERROR             = 3
        OLE_OBJECT_METHOD_ERROR         = 4
        OLE_OBJECT_PROPERTY_ERROR       = 5
        INVALID_FILENAME                = 6
        INVALID_PIVOT_FIELDS            = 7
        DOWNLOAD_PROBLEM                = 8
        OTHERS                          = 9
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    short dump :  unable to interpret the "..... " as number.

    Hi,
    You are not formatting the internal table for field labels correctly.
    See the attached code and do accordingly.
    This will help you.
    Reward for useful answers.
    report zesdr001
           line-size 215
           line-count 65
           no standard page heading
           message-id zv.
                          Tables Declaration
    tables:vbrk,       " Sales Document: Billing Header Data
           mara,       " Material Master Data
           mbew,       " Material Valuation data
           mbewh,      " Material Valuation: History Data
           t001,       " Company Codes
           t001w,      " Plants/Branches
           konv,       " Pricing Conditions Data
           t179t,      " Materials: Product hierarchies: Texts
           tcurx,      " Currency Conversion Table
           vbuk,       " Sales Document: Header Status data
           tvko,       " Organizational Unit: Sales Organizations
           tvtw,       " Organizational Unit: Dist.Channels
           tspa,       " Organizational Unit: Divisions
           tvfk,       " Billing Document Types
           kna1.       " Customer Master Data
                 Declaration of Data and Internal Tables
    Internal table to store the Billing Details data.(VBRK,VBRP)
    data: begin of itab_bill occurs 0,
            vbeln like vbrk-vbeln,            " Billing Document Number
            fktyp like vbrk-fktyp,            " Billing Category
            vbtyp like vbrk-vbtyp,            " Sales Doc Category
            fkdat like vbrk-fkdat,            " Billing doc date
            fkart like vbrk-fkart,            " Billing Doc type
            bukrs like vbrk-bukrs,            " Company Code
            kurrf like vbrk-kurrf,            " Exchange type
            knumv like vbrk-knumv,            " Condition Number
            waerk like vbrk-waerk,            " Currency
            kunag like vbrk-kunag,            " Sold to Party
            vrkme like vbrp-vrkme,            " sales Unit
            posnr like vbrp-posnr,            " Item Number
            charg like vbrp-charg,            " Batch Number
            fkimg like vbrp-fkimg,            " Billed quantity
            werks like vbrp-werks,            " Plant
            matnr like vbrp-matnr,            " Material Number
            netwr like vbrp-netwr,            " Net Value of the doc
            wavwr like vbrp-wavwr,            " Cost in Doc Currency
            kdmat like vbap-kdmat,            " Customer Material
          end of itab_bill.
    Internal table to write the report output when Customer Mode
    Radiobutton is selected
    data: begin of itab_out occurs 0,
            kunag like vbrk-kunag,            " Customer No
            vbeln like vbrk-vbeln,            " Billing Document Number
            fkart like vbrk-fkart,            " Billing Doc type
            fktyp like vbrk-fktyp,            " Billing Category
            vbtyp like vbrk-vbtyp,            " Sales Doc Category
            fkdat like vbrk-fkdat,            " Billing doc date
            kunnr like kna1-kunnr,            " Customer
            bukrs like vbrk-bukrs,            " Company Code
            kurrf like vbrk-kurrf,            " Exchange Rate
            waerk like vbrk-waerk,            " Currency
            vrkme like vbrp-vrkme,            " Sales Unit
            posnr like vbrp-posnr,            " Item Number
            charg like vbrp-charg,            " Batch Number
            fkimg like vbrp-fkimg,            " Billed quantity
            werks like vbrp-werks,            " Plant
            matnr like vbrp-matnr,            " Material NUmber
            kdmat like vbap-kdmat,            " Customer Material
            bil_amt(16) type p decimals 2,    " Bill Amount
            mode(10),                         " Mode
            density(10),                      " Density
            sel_prc(16) type p decimals 2,    " Selling Price
            mvg_prs like mbew-verpr,          " Moving Price
            gp_mvp_amt like vbrp-netwr,       " GrossProfit Amount(MVP)
            gp_mvp_pr(6)  type p decimals 2,  "   ,, percentage
          end of itab_out.
    Internal table to write the report output when Mode
    Radiobutton is selected
    data: begin of itab_out2 occurs 0,
            mode(10),
            vbeln like vbrk-vbeln,             " Billing Document Number
            fktyp like vbrk-fktyp,             " Billing Category
            vbtyp like vbrk-vbtyp,             " Sales Doc Category
            fkdat like vbrk-fkdat,             " Billing doc date
            kunag like vbrk-kunag,             " Sold to party
            kunnr like kna1-kunnr,             " Customer
            bukrs like vbrk-bukrs,             " Company Code
            kurrf like vbrk-kurrf,             " Exchange Rate
            waerk like vbrk-waerk,             " Currency
            vrkme like vbrp-vrkme,             " Sales UNit
            posnr like vbrp-posnr,             " Item No
            charg like vbrp-charg,             " Batch Number
            fkimg like vbrp-fkimg,             " Billed quantity
            werks like vbrp-werks,             " Plant
            matnr like vbrp-matnr,             " Material Number
            kdmat like vbap-kdmat,             " Customer Material No
            bil_amt(16)   type p decimals 2,   " Billing Amount
            density(10),                       " density
            sel_prc(16) type p decimals 4,     " Selling Price
            mvg_prs like mbew-verpr,           " Moving Price
            gp_mvp_amt like vbrp-netwr,        " GrossProfit Amount(MVP)
            gp_mvp_pr(6)  type p decimals 2,   "   ,, percentage
          end of itab_out2.
    Internal table to write the report output when Density
    Radiobutton is selected
    data: begin of itab_out3 occurs 0,
            mode(10),
            density(10),
            vbeln like vbrk-vbeln,            " Billing Document Number
            fktyp like vbrk-fktyp,            " Billing Category
            vbtyp like vbrk-vbtyp,            " Sales Doc Category
            fkdat like vbrk-fkdat,            " Billing doc date
            kunag like vbrk-kunag,            " Sold to Party
            kunnr like kna1-kunnr,            " Customer
            bukrs like vbrk-bukrs,            " Company Code
            kurrf like vbrk-kurrf,            " Exchange Rate
            waerk like vbrk-waerk,            " Currency
            vrkme like vbrp-vrkme,            " Sales Unit
            posnr like vbrp-posnr,            " Item Number
            charg like vbrp-charg,            " Batch Number
            fkimg like vbrp-fkimg,            " Billed quantity
            werks like vbrp-werks,            " Plant
            matnr like vbrp-matnr,            " Material Number
            kdmat like vbap-kdmat,            " Customer Material
            bil_amt(16)   type p decimals 2,  " Bill Amount
            sel_prc(16) type p decimals 4,    " Selling Price
            mvg_prs like mbew-verpr,          " Moving Price
            gp_mvp_amt like vbrp-netwr,       " GrossProfit Amount(MVP)
            gp_mvp_pr(6)  type p decimals 2,  "   ,, percentage
          end of itab_out3.
    *-Internal Table to Hold data to be downloaded to file
    data: begin of itab_out1 occurs 0,
            kunag(10),                       " Customer
            vbeln(10),                       " Billing Doc No
            fkdat(10),                       " Bill Date
            posnr(6),                        " Item No
            mode(6),                         " Mode
            density(6),                      " Density
            matnr(18),                       " Material
            charg(10),                       " Batch Number
            fkimg like vbrp-fkimg,           " Billed quantity
            vrkme(4),                        " Sales Unit
            sel_prc(14),                     " Selling Price
            bil_amt(15)  type p decimals 2,  " Billing Amount
            waerk(4),                        " Currency
            mvg_prs(15),                     " Moving Price
            gp_mvp_amt like vbrp-netwr,      " Gross profit Amount(MVP)
            gp_mvp_pr(15),                   "    ,,  percentage
            kdmat(35),                       " Customer Material
          end of itab_out1.
    *Internal Table
    data: begin of fieldnames occurs 0,
            title(25) type c,
            table(5)  type c,
            field(5)  type c,
            type(1)   type c,
          end of fieldnames.
    Declaration Of Variables
    data: w_period like bapi0002_4-fiscal_period,
          w_year   like bapi0002_4-fiscal_year,
          w_date   like bsad-budat,
          w_lin type i.       "No.of lines in Internal Table
    data: t_fkimg             like vbrp-fkimg,
          t_bil_amt(8)        type p decimals 2,
          t_gp_mvp_amt(8)     type p decimals 2,
          t_gr_fkimg          like vbrp-fkimg,
          t_gr_bil_amt(8)     type p decimals 2,
          t_gr_gp_mvp_amt(8)  type p decimals 2,
          t_efkimg            like vbrp-fkimg,
          t_ebil_amt(8)       type p decimals 2,
          t_egp_mvp_amt(8)    type p decimals 2.
    data:f_flg .
                       Select-Options
    selection-screen: begin of block b with frame.
    selection-screen : begin of block b1 with frame title text-001.
    select-options:s_bukrs for t001-bukrs no intervals no-extension
                                                         obligatory,
                   s_vkorg for tvko-vkorg no intervals no-extension,
                   s_vtweg for tvtw-vtweg no intervals no-extension,
                   s_spart for tspa-spart no intervals no-extension,
                   s_werks for t001w-werks no intervals no-extension,
                   s_kunag for kna1-kunnr,
                   s_vbeln for vbuk-vbeln,
                   s_fkart for tvfk-fkart,
                   s_fkdat for vbrk-fkdat obligatory.
    selection-screen begin of line.
    selection-screen comment 1(20) text-008.
    selection-screen end   of line.
    selection-screen begin of line.
    parameters p_cust type c radiobutton group cust.
    selection-screen comment 3(20) text-004 for field p_cust.
    selection-screen end of line.
    selection-screen begin of line.
    parameters p_mode type c radiobutton group cust.
    selection-screen comment 3(20) text-006 for field p_mode.
    selection-screen end of line.
    selection-screen begin of line.
    parameters p_dens type c radiobutton group cust.
    selection-screen comment 3(20) text-007 for field p_dens.
    selection-screen end of line.
    selection-screen: end of block b1.
    selection-screen : begin of block b2 with frame title text-002.
    parameters:  p_dwnlod as checkbox,
                 p_file like rlgrap-filename. " default 'C:\zesdr001'.
    selection-screen: end of block b2.
    selection-screen: end of block b.
    *******At Selection Screen********************************************
    at selection-screen.
    At Selection Screen on Value Request
    at selection-screen on value-request for p_file.
      perform f4_help.
    Checking for the input values of selection screen.
      perform screen_check.
    Top Of Page***************************************************
    top-of-page.
      perform rep_headers.
    *******Start of Selection*********************************************
    start-of-selection.
    Selecting data from the database tables
      perform invoice_selection.
      describe table itab_bill lines w_lin.
      if w_lin = 0.
        message i008.   " No Data Found for the Given Selection Criteria
      else.
    Moving the data records into output internal table
        perform bill_details.
    When Customer Radio button is selected
        if p_cust eq 'X'.
          perform invoice_output_cust.
    When Mode Radio button is selected
        elseif p_mode eq 'X'.
          perform invoice_output_mode.
    When density Radio button is selected
        elseif p_dens eq 'X'.
          perform invoice_output_dens.
        endif.
      endif.
    *******End of Selection***********************************************
    end-of-selection.
      perform init_fieldnames.
      if p_dwnlod = 'X'.
        perform read_data_for_dowlload.
      perform down_load_to_file using p_file.
        perform download_excel using p_file.
      endif.
    *&      Form  screen_check
       Ckecking for Selection Screen fields Validation
    form screen_check.
    Validation of Sales Organization
      clear tvko.
      if not s_vkorg-low is initial.
        select vkorg from tvko up to 1 rows
               into tvko-vkorg
               where vkorg in s_vkorg.
        endselect.
        if sy-subrc ne 0.
          message e009.  " Invalid Sales Organization
        endif.
      endif.
    Validation of Distribution Channel
      clear tvtw.
      if not s_vtweg-low is initial.
        select vtweg from tvtw up to 1 rows
               into tvtw-vtweg
               where vtweg in s_vtweg.
        endselect.
        if sy-subrc ne 0.
          message e010.  " Invalid Distribution Channel
        endif.
      endif.
    Validation of Division
      clear tspa.
      if not s_spart-low is initial.
        select spart from tspa up to 1 rows
               into tspa-spart
               where spart in s_spart.
        endselect.
        if sy-subrc ne 0.
          message e011.  " Invalid Division
        endif.
      endif.
    Validation for company code
      clear t001.
      if not s_bukrs-low is initial.
        select single bukrs from t001
             into t001-bukrs
             where bukrs in s_bukrs.
        if sy-subrc <> 0.
          message e007.   " Enter valid Company Code
        endif.
      endif.
    Validation of billing Document Type
      clear tvfk.
      if not s_fkart is initial.
        select fkart from tvfk up to 1 rows
               into tvfk-fkart
               where fkart in s_fkart.
        endselect.
        if sy-subrc ne 0.
          message e012.  " Invalid Billing Document Type
        endif.
      endif.
    Validation of Billing Document Number
      clear vbuk.
      if not s_vbeln is initial.
        select vbeln from vbuk up to 1 rows
               into vbuk-vbeln
               where vbeln in s_vbeln and
                     vbtyp = 'M'.
        endselect.
        if sy-subrc ne 0.
          message e013.   " Invalid Billing Doc Number
        endif.
      endif.
    Validation of Customer
      clear kna1.
      if not s_kunag is initial.
        select kunnr from kna1 up to 1 rows
               into kna1-kunnr
               where kunnr in s_kunag.
        endselect.
        if sy-subrc ne 0.
          message e014.    " Invalid Customer Number
        endif.
      endif.
    Validation of Plant
      clear t001w.
      if not s_werks is initial.
        select werks from t001w up to 1 rows
               into t001w-werks
               where werks in s_werks.
        endselect.
        if sy-subrc ne 0.
          message e004.    " Invalid Plant Number
        endif.
      endif.
    Validation for File path to download
      if p_dwnlod = 'X'.
        if p_file is initial.
          message e006.  " Enter the Valid file path to Download
        endif.
      endif.
    endform.             "screen_check
          FORM invoice_selection                                        *
    Selecting data from the database tables
    form invoice_selection.
      select
            a~vbeln                   " Billing Doc Number
            a~fktyp                   " Billing Category
            a~vbtyp                   " Sales Doc category
            a~fkdat                   " Billing doc date
            a~fkart                   " Billing doc type
            a~bukrs                   " Company code
            a~kurrf                   " Exchange rate
            a~knumv                   " Condition record Number
            a~waerk                   " Currency
            a~kunag                   " Sold to Party
            b~vrkme                   " Sales Unit
            b~posnr                   " Item Number
            b~charg                   " Batch Number
            b~fkimg                   " Billed quantity
            b~werks                   " Plant
            b~matnr                   " Material Number
            b~netwr                   " Net Value of Bill Doc
            b~wavwr                   " Cost in Doc Currency
            c~kdmat                   " Customer Material
                     into table itab_bill
                     from vbrk as a join vbrp as b
                            on bvbeln = avbeln
                            join vbap as c
                            on baubel = cvbeln and
                               baupos = cposnr
                      where a~vbeln in s_vbeln and
                            a~fkdat in s_fkdat and
                            a~bukrs in s_bukrs and
                            a~vtweg in s_vtweg and
                            a~vkorg in s_vkorg and
                            a~spart in s_spart and
                            a~fkart in s_fkart and
                            b~werks in s_werks and
                            a~kunag in s_kunag and
                            a~sfakn eq ' ' and
                            a~fksto eq ' ' .
    endform .
          FORM bill_details                                             *
    appending data into itab_out internal table
    form bill_details.
      sort itab_bill by vbeln.
      select single waers from t001 into t001-waers
                              where bukrs in s_bukrs.
      data:f_txt1(10),f_txt2(10),f_txt3(10).
      loop at itab_bill.
        itab_out-vbeln   = itab_bill-vbeln.
        itab_out-fktyp   = itab_bill-fktyp.
        itab_out-vbtyp   = itab_bill-vbtyp.
        itab_out-fkdat   = itab_bill-fkdat.
        itab_out-fkart   = itab_bill-fkart.
        itab_out-bukrs   = itab_bill-bukrs.
        itab_out-kurrf   = itab_bill-kurrf.
        itab_out-waerk   = itab_bill-waerk.
        itab_out-kunag   = itab_bill-kunag.
        itab_out-vrkme   = itab_bill-vrkme.
        itab_out-posnr   = itab_bill-posnr.
        itab_out-charg   = itab_bill-charg.
        itab_out-fkimg   = itab_bill-fkimg.
        itab_out-werks   = itab_bill-werks.
        itab_out-matnr   = itab_bill-matnr.
        itab_out-kdmat   = itab_bill-kdmat.
       select single currdec from tcurx into tcurx-currdec
              where currkey eq itab_out-waerk.
        if sy-subrc eq '0' .
          if tcurx-currdec eq '0'.
            itab_bill-netwr = itab_bill-netwr * 100.
            itab_bill-wavwr = itab_bill-wavwr * 100.
          endif.
        endif.
        itab_out-bil_amt = itab_bill-netwr.
        clear : konv.
    Pricing data from KONV table
        select single kbetr kwert kpein from konv into
                                      (konv-kbetr,konv-kwert,konv-kpein)
                                       where knumv = itab_bill-knumv and
                                             kposn = itab_bill-posnr and
                                             kschl eq 'ZSP1' and
                                             krech eq 'C' and
                                             kinak eq ' '.
    Currency conversion
        select single currdec from tcurx into tcurx-currdec
                           where currkey eq itab_out-waerk.
        if sy-subrc eq '0' .
          if tcurx-currdec eq '0'.
            konv-kbetr = konv-kbetr * 100.
          endif.
        endif.
    Unit Price
        itab_out-sel_prc = konv-kbetr.
    Unit Price Calculation
        if not konv-kpein is initial.
          itab_out-sel_prc = itab_out-sel_prc / konv-kpein .
        endif.
    Call Function to get the Period for the given Billing date
    and Company Code
        perform get_period.
    Selecting Material Valuation Data
        clear:mbew.
        if itab_out-fktyp eq 'L'.
          select single
              lfmon lfgja verpr stprs vmver vmstp
                 from mbew
                 into (mbew-lfmon,mbew-lfgja,mbew-verpr,
                       mbew-stprs,mbew-vmver,mbew-vmstp)
                          where matnr = itab_out-matnr
                          and   bwkey = itab_out-werks.
          if mbew-lfmon = w_period and mbew-lfgja = w_year.
            select single currdec from tcurx into tcurx-currdec
                  where currkey eq t001-waers.
            if sy-subrc eq '0' .
              if tcurx-currdec eq '0'.
                mbew-stprs = mbew-stprs * 100.
                mbew-verpr = mbew-verpr * 100.
              endif.
            endif.
            if itab_out-waerk eq t001-waers.
              itab_out-mvg_prs = mbew-verpr  ."/ itab_out-kurrf.
            else.
              itab_out-mvg_prs = mbew-verpr  / itab_out-kurrf.
            endif.
          else.
            clear:mbewh.
            select single
             lfmon lfgja verpr stprs
                from mbewh
                into (mbewh-lfmon,mbewh-lfgja,mbewh-verpr,
                      mbewh-stprs)
                         where matnr = itab_out-matnr
                         and   bwkey = itab_out-werks
                         and   lfmon = w_period
                         and   lfgja = w_year.
            select single currdec from tcurx into tcurx-currdec
                    where currkey eq t001-waers.
            if sy-subrc eq '0' .
              if tcurx-currdec eq '0'.
                mbewh-verpr = mbewh-verpr * 100.
              endif.
            endif.
            if itab_out-waerk eq t001-waers.
              itab_out-mvg_prs = mbewh-verpr ."/ itab_out-kurrf.
            else.
              itab_out-mvg_prs = mbewh-verpr  / itab_out-kurrf.
            endif.
            if itab_out-mvg_prs is initial.
              select single
                      lfmon lfgja verpr stprs vmver vmstp
                         from mbew
                         into (mbew-lfmon,mbew-lfgja,mbew-verpr,
                               mbew-stprs,mbew-vmver,mbew-vmstp)
                                  where matnr = itab_out-matnr
                                  and   bwkey = itab_out-werks.
              select single currdec from tcurx
                 into tcurx-currdec
                 where currkey eq t001-waers.
              if sy-subrc eq '0' .
                if tcurx-currdec eq '0'.
                  mbew-verpr = mbew-verpr * 100.
                endif.
              endif.
              if itab_out-waerk eq t001-waers.
                itab_out-mvg_prs = mbew-verpr  ."/ itab_out-kurrf.
              else.
                itab_out-mvg_prs = mbew-verpr  / itab_out-kurrf.
              endif.
            endif.
          endif.
        endif.
    To find Density and Mode from MARA and T179T tables
        clear :mara,t179t.
        select single prdha from mara
              into mara-prdha
              where matnr = itab_out-matnr.
        select single vtext from t179t
               into t179t-vtext
               where spras = 'EN' and
               prodh = mara-prdha(4).
        split t179t-vtext at ' ' into f_txt1 f_txt2 f_txt3.
        itab_out-mode = f_txt2.
        itab_out-density = f_txt3.
        if not itab_out-mvg_prs is initial.
          if itab_out-fktyp eq 'L'.
            itab_out-gp_mvp_amt = itab_out-bil_amt - itab_out-mvg_prs *
                                                       itab_out-fkimg.
          else.
            itab_out-gp_mvp_amt = '0'.
          endif.
        endif.
        if not itab_out-mvg_prs is initial
           and not itab_out-sel_prc is initial.
          itab_out-gp_mvp_pr = ( itab_out-sel_prc - itab_out-mvg_prs )
                                         / itab_out-sel_prc * 100.
        endif.
        append itab_out.
        clear itab_out.
      endloop.
      loop at itab_out.
        if itab_out-vbtyp eq 'N' or itab_out-vbtyp eq 'O'.
          itab_out-fkimg   = itab_out-fkimg * -1.
          itab_out-sel_prc = itab_out-sel_prc * -1.
          itab_out-bil_amt = itab_out-bil_amt * -1.
          itab_out-mvg_prs = itab_out-mvg_prs * -1.
          itab_out-gp_mvp_amt = itab_out-gp_mvp_amt * -1.
          itab_out-gp_mvp_pr = itab_out-gp_mvp_pr * -1.
    If the bill amount is 0 then the quantity should also be 0.
          if itab_out-bil_amt = 0.
            itab_out-fkimg = 0.
          endif.
    Check if the Bill amount is Credit memo amount, then the gross profit
    should also be the same bill amount irrespecitve of +ve or -ve.
          if itab_out-gp_mvp_amt = 0.
            move: itab_out-bil_amt to itab_out-gp_mvp_amt.
          endif.
          modify itab_out.
          clear itab_out.
        endif.
      endloop.
    endform.
    *&      Form  get_period
    Getting Document Period
    form get_period.
      clear :w_period,w_year,w_date.
      concatenate itab_out-fkdat(4)
                   itab_out-fkdat+4(2)
                   itab_out-fkdat+6(2)
                   into w_date.
      call function 'BAPI_COMPANYCODE_GET_PERIOD'
           exporting
                companycodeid = itab_out-bukrs
                posting_date  = w_date
           importing
                fiscal_year   = w_year
                fiscal_period = w_period.
    endform.                    " get_period
    *&      Form  invoice_output_cust
          Report Output when customer is selected
    form invoice_output_cust.
      write at /1(214) sy-uline.
      sort itab_out  by kunag vbeln fkart posnr fkdat.
      loop at itab_out.
        if f_flg = 'X'.
          format color col_normal intensified off.
          f_flg = ' '.
        else.
          format color col_normal intensified on.
          f_flg = 'X'.
        endif.
        at new kunag.
          read table itab_out index sy-tabix.
        endat.
        write:  /01 sy-vline,  2(10) itab_out-kunag,
                 12 sy-vline, 13(10) itab_out-vbeln,
                 23 sy-vline, 24(6)  itab_out-posnr,
                 30 sy-vline, 31(10) itab_out-fkdat,
                 41 sy-vline, 42(6)  itab_out-mode,
                 48 sy-vline, 49(7)  itab_out-density,
                 56 sy-vline, 57(18) itab_out-matnr,
                 75 sy-vline, 76(10) itab_out-charg,
                 86 sy-vline,
                 87(13) itab_out-fkimg unit itab_out-vrkme no-sign,
                 102(3) itab_out-vrkme,
                105 sy-vline,
                106(14) itab_out-sel_prc currency konv-waers no-sign,
                120 sy-vline,
                121(15) itab_out-bil_amt currency vbrk-waerk no-sign,
                138(3) itab_out-waerk,
                141 sy-vline,
                142(15) itab_out-mvg_prs currency vbrk-waerk no-sign,
                157 sy-vline,
                158(15) itab_out-gp_mvp_amt currency vbrk-waerk no-sign,
                173 sy-vline,174(6)  itab_out-gp_mvp_pr no-sign ,
                180 sy-vline,181(33) itab_out-kdmat,
                214 sy-vline.
        t_fkimg = t_fkimg + itab_out-fkimg.
        t_bil_amt = t_bil_amt + itab_out-bil_amt.
        t_gp_mvp_amt = t_gp_mvp_amt + itab_out-gp_mvp_amt.
        t_gr_fkimg      = t_gr_fkimg         + itab_out-fkimg.
        t_gr_bil_amt    = t_gr_bil_amt       + itab_out-bil_amt.
        t_gr_gp_mvp_amt = t_gr_gp_mvp_amt    + itab_out-gp_mvp_amt.
        at end of kunag.
          format reset.
          format color col_total intensified off.
          write:/1(214) sy-uline.
          write:/01 sy-vline,
                 02 'Sub Total of Customer:'(035), itab_out-kunag,
                 87(13) t_fkimg unit itab_out-vrkme no-sign,
                121(15) t_bil_amt no-sign,
                158(15) t_gp_mvp_amt no-sign,
                214 ' ',
                /1(214)  sy-uline.
          clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.
        endat.
        at last.
          write:/01 sy-vline,
                 02 'Grand Total :'(032),
                 87(13) t_gr_fkimg unit itab_out-vrkme no-sign,
                121(15) t_gr_bil_amt no-sign,
                158(15) t_gr_gp_mvp_amt no-sign,
                214 ' '.
        endat.
        format color off.
      endloop.
      write at /1(214) sy-uline.
    endform.    "invoice_output_cust
    *&      Form  invoice_output_mode
          Report Output
    form invoice_output_mode.
      loop at itab_out.
        move-corresponding itab_out to itab_out2.
        append itab_out2.
        clear: itab_out2.
      endloop.
      write at /1(214) sy-uline.
      sort itab_out2  by mode vbeln posnr fkdat.
      loop at itab_out2.
        if f_flg = 'X'.
          format color col_normal intensified off.
          f_flg = ' '.
        else.
          format color col_normal intensified on.
          f_flg = 'X'.
        endif.
        at new mode.
          read table itab_out2 index sy-tabix.
        endat.
        write: /01 sy-vline,  2(10) itab_out2-kunag,
                12 sy-vline, 13(10) itab_out2-vbeln,
                23 sy-vline, 24(6)  itab_out2-posnr,
                30 sy-vline, 31(10) itab_out2-fkdat,
                41 sy-vline, 42(6)  itab_out2-mode,
                48 sy-vline, 49(7)  itab_out2-density,
                56 sy-vline, 57(18) itab_out2-matnr,
                75 sy-vline, 76(10) itab_out2-charg,
                86 sy-vline,
                87(13) itab_out2-fkimg unit itab_out2-vrkme no-sign,
                102(3) itab_out2-vrkme,
                105 sy-vline,
                106(14) itab_out2-sel_prc currency vbrk-waerk no-sign,
                120 sy-vline,
                121(15) itab_out2-bil_amt currency vbrk-waerk no-sign,
                             138(3)  itab_out2-waerk,
                141 sy-vline,
                142(15) itab_out2-mvg_prs currency vbrk-waerk no-sign,
                157 sy-vline,
                158(15) itab_out2-gp_mvp_amt currency vbrk-waerk no-sign,
                173 sy-vline,174(6)  itab_out2-gp_mvp_pr no-sign,
                180 sy-vline,181(33) itab_out2-kdmat,
                214 sy-vline.
        t_fkimg = t_fkimg + itab_out2-fkimg.
        t_bil_amt = t_bil_amt + itab_out2-bil_amt.
        t_gp_mvp_amt = t_gp_mvp_amt + itab_out2-gp_mvp_amt.
        t_gr_fkimg      = t_gr_fkimg         + itab_out2-fkimg.
        t_gr_bil_amt    = t_gr_bil_amt       + itab_out2-bil_amt.
        t_gr_gp_mvp_amt = t_gr_gp_mvp_amt    + itab_out2-gp_mvp_amt.
        at end of mode.
          format reset.
          format color col_total intensified off.
          write:/1(214) sy-uline.
          write:/01 sy-vline,
                 02 'Sub Total of Mode :'(033), itab_out2-mode,
                 87(13) t_fkimg unit itab_out-vrkme no-sign,
                121(15) t_bil_amt no-sign,
                158(15) t_gp_mvp_amt no-sign,
                214 ' ',
                /1(214)  sy-uline.
          clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.
        endat.
        at last.
          write:/01 sy-vline,
                 02 'Grand Total :'(032),
                 87(13) t_gr_fkimg unit itab_out-vrkme no-sign,
                121(15) t_gr_bil_amt no-sign,
                158(15) t_gr_gp_mvp_amt no-sign,
                214 ' '.
        endat.
        format color off.
      endloop.
      write at /1(214) sy-uline.
    endform.    "invoice_output_mode
    *&      Form  invoice_output_dens
          Report Output
    form invoice_output_dens.
      loop at itab_out.
        move-corresponding itab_out to itab_out3.
        append itab_out3.
        clear: itab_out3.
      endloop.
      write at /1(214) sy-uline.
      sort itab_out3  by mode density vbeln posnr fkdat.
      loop at itab_out3.
        if f_flg = 'X'.
          format color col_normal intensified off.
          f_flg = ' '.
        else.
          format color col_normal intensified on.
          f_flg = 'X'.
        endif.
        at new mode.
        endat.
        at new density.
          read table itab_out3 index sy-tabix.
        endat.
        write:  /01 sy-vline,  2(10) itab_out3-kunag,
                 12 sy-vline, 13(10) itab_out3-vbeln,
                 23 sy-vline, 24(6)  itab_out3-posnr,
                 30 sy-vline, 31(10) itab_out3-fkdat,
                 41 sy-vline, 42(6)  itab_out3-mode,
                 48 sy-vline, 49(7)  itab_out3-density,
                 56 sy-vline, 57(18) itab_out3-matnr,
                 75 sy-vline, 76(10) itab_out3-charg,
                 86 sy-vline,
                 87(13) itab_out3-fkimg unit itab_out3-vrkme no-sign,
                 102(3) itab_out3-vrkme,
                 105 sy-vline,106(14) itab_out3-sel_prc no-sign,
                 120 sy-vline,
                 121(15) itab_out3-bil_amt currency vbrk-waerk no-sign,
                              138(3)  itab_out3-waerk,
                 141 sy-vline,142(15) itab_out3-mvg_prs no-sign
                                      currency vbrk-waerk,
                 157 sy-vline,158(15) itab_out3-gp_mvp_amt no-sign
                                      currency vbrk-waerk,
                 173 sy-vline,174(6)  itab_out3-gp_mvp_pr no-sign,
                 180 sy-vline,181(33) itab_out3-kdmat,
                 214 sy-vline.
        t_efkimg      = t_efkimg      + itab_out3-fkimg.
        t_ebil_amt    = t_ebil_amt    + itab_out3-bil_amt.
        t_egp_mvp_amt = t_egp_mvp_amt + itab_out3-gp_mvp_amt.
        t_fkimg = t_fkimg + itab_out3-fkimg.
        t_bil_amt = t_bil_amt + itab_out3-bil_amt.
        t_gp_mvp_amt = t_gp_mvp_amt + itab_out3-gp_mvp_amt.
        t_gr_fkimg      = t_gr_fkimg         + itab_out3-fkimg.
        t_gr_bil_amt    = t_gr_bil_amt       + itab_out3-bil_amt.
        t_gr_gp_mvp_amt = t_gr_gp_mvp_amt    + itab_out3-gp_mvp_amt.
        at end of density.
          format reset.
          format color col_total intensified off.
          write:/1(214) sy-uline.
          write:/01 sy-vline,
                 02 'Sub Total of Density :'(034), itab_out3-density,
                87(13) t_efkimg unit itab_out-vrkme no-sign,
               121(15) t_ebil_amt currency vbrk-waerk no-sign,
               158(15) t_egp_mvp_amt currency vbrk-waerk no-sign,
               214 ' ',
                /1(214) sy-uline.
          clear: t_efkimg, t_ebil_amt,t_egp_mvp_amt.
        endat.
        at end of mode.
          format reset.
          format color col_total intensified off.
          write:/01 sy-vline,
                 02 'Sub Total of Mode :'(033), itab_out3-mode,
                 87(13) t_fkimg unit itab_out-vrkme no-sign,
                121(15) t_bil_amt no-sign,
                158(15) t_gp_mvp_amt no-sign,
                214 ' ',
                /1(214) sy-uline.
          clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.
        endat.
        at last.
          write:/01 sy-vline,
                 02 'Grand Total :'(032),
                87(13) t_gr_fkimg unit itab_out-vrkme no-sign,
               121(15) t_gr_bil_amt no-sign,
               158(15) t_gr_gp_mvp_amt no-sign,
               214 ' '.
        endat.
        format color off.
      endloop.
      write at /1(214) sy-uline.
    endform.    "invoice_output_dens
    *&      Form  f4_help
          To Get F4 Help to Select File Name
    form f4_help.
      call function 'F4_FILENAME'
           exporting
                program_name  = sy-cprog
                dynpro_number = syst-dynnr
                field_name    = 'P_FILE'
           importing
                file_name     = p_file.
    endform.                                                    " f4_help
    *&      Form  rep_headers
          Report Header
    form rep_headers.
      format color col_heading on.
      format color col_heading on.
      select single butxt from t001 into t001-butxt
                                    where bukrs = s_bukrs-low.
      skip 2.
      write: /2 t001-butxt, 92 'BILLING ANALYSIS'(003),
             190 'Date :'(010),sy-datum.
      write :/2 'Company Code :'(011), s_bukrs-low ,
            85 'Billing Date :'(012) , s_fkdat-low , '-' ,s_fkdat-high ,
            190 'Page :'(013), sy-pagno,
            214 ' '.
      write at /1(214) sy-uline.
      write: /1 sy-vline,  2(10) 'Customer'(004) centered,
             12 sy-vline, 13(10) 'Billing'(009) centered,
             23 sy-vline, 24(6)  'Billing'(009) centered,
             30 sy-vline, 31(10) 'Billing'(009) centered,
             41 sy-vline, 42(6)  'Mode'(006) centered,
             48 sy-vline, 49(7)  'Density'(014) centered,
             56 sy-vline, 57(18) 'Material'(015) centered,
             75 sy-vline, 76(10) 'Batch'(016) centered,
             86 sy-vline, 87(13) 'Quantity'(017) centered,102(3) 'UOM'(027),
             105 sy-vline, 106(14) 'Selling'(018) centered ,
             120 sy-vline, 121(15) 'Billing'(009) centered,
                           138(3) 'Cur'(028),
             141 sy-vline, 142(15) 'Mvg.Avg.Price'(020) centered,
             157 sy-vline, 158(22) 'Gross Profit(MVP)'(022) centered,
             180 sy-vline, 181(33) 'Customer Material'(023) centered,
             214 sy-vline.
      write: /1 sy-vline,  2(10) 'Code'(024) centered,
             12 sy-vline, 13(10) 'Document'(025) centered,
             23 sy-vline, 24(6)  'Item'(026) centered,
             30 sy-vline, 31(10) 'Date'(036) centered,
             41 sy-vline,
             48 sy-vline,
             56 sy-vline,
             75 sy-vline,
             86 sy-vline,
            105 sy-vline, 106(14) 'Price'(030) centered ,
            120 sy-vline, 121(15) 'Amount'(031) centered,
            141 sy-vline, 142(15) '(per Unit)'(019) centered,
            157 sy-vline, 158(15) 'Amount'(031) centered,
            173 sy-vline, 174(6) ' % '(029) centered,
            180 sy-vline,
            214 sy-vline.
      format color off.
    endform.                    " rep_headers
    *&      Form  init_fieldnames
    Initialise all the fields to download in Excel Data File
    form init_fieldnames.
      perform append_fieldname using text-004 'itab_out1'
                                     'KUNAG'    'X'.
      perform append_fieldname using text-037 'itab_out1'
                                     'VBELN'   'X'.
      perform append_fieldname using text-036 'itab_out1'
                                     'FKDAT'  'X'.
      perform append_fieldname using text-038 'itab_out1'
                                     'POSNR'    'X'.
      perform append_fieldname using text-006 'itab_out1'
                                     'MODE' 'X'.
      perform append_fieldname using text-014 'itab_out1'
                                     'DENSITY' 'X'.
      perform append_fieldname using text-015 'itab_out1'
                                     'MATNR'    'X'.
      perform append_fieldname using text-016 'itab_out1'
                                     'CHARG' 'X'.
      perform append_fieldname using text-017 'itab_out1'
                                     'FKIMG'    'X'.
      perform append_fieldname using text-039 'itab_out1'
                                     'VRKME' 'X'.
      perform append_fieldname using text-040 'itab_out1'
                                     'SEL_PRC' 'X'.
      perform append_fieldname using text-041 'itab_out1'
                                     'BIL_AMT' 'X'.
      perform append_fieldname using text-028 'itab_out1'
                                     'WAERK' 'X'.
      perform append_fieldname using text-020 'itab_out1'
                                     'MVG_PRS' 'X'.
      perform append_fieldname using text-044 'itab_out1'
                                     'GP_MVP_AMT' 'X'.
      perform append_fieldname using text-045 'itab_out1'
                                     'GP_MVP_PR' 'X'.
      perform append_fieldname using text-023 'itab_out1'
                                     'KDMAT'         'X'.
    endform.
    *&      Form  append_fieldname
    Appending field Names
    form append_fieldname using p_title p_table p_field p_type.
      clear: fieldnames.
      fieldnames-title = p_title.
      fieldnames-ta

  • Production issue

    Hi all,
    I have a production issue and my report takes around 4 to 5 hours for  its execution and i've finded out that the 2nd from first query has a corresponding tale with it and when i modified it to below one its displaying the output and when i check it in ST05 i have no i_bsad and i_bsid table query times mentioned in it.Where in when i have the corresponding tale included i get  the above both queries time interval and this table works fine.(i have to have this select statements included for my business scenario logic).But because of the inclusion of this this both table are eating lot of time.Need to include them and reduce the time comsumption of the both the tables.
    SELECT vbeln fkart vbtyp knumv fkdat  gjahr kdgrp rfbsk zterm bukrs
    netwr kunrg kunag                                    
               bstnk_vf xblnr mwsbk rfbsk
               INTO  TABLE i_vbrk
                        FROM vbrk WHERE
                         vbeln  IN zvbeln AND
                         vbtyp IN zvbtyp AND
                         fkdat  IN zfkdat AND
                         bukrs  IN zbukrs AND
                         kunag  IN zkunag AND
                         bstnk_vf IN zbstnkvf AND
                         xblnr  IN zxblnr AND
                         fksto NE 'X' .
      SELECT vbeln fkart vbtyp knumv fkdat bukrs gjahr kdgrp zterm netwr
        kunrg kunag
                  bstnk_vf xblnr mwsbk rfbsk
                  INTO CORRESPONDING FIELDS OF TABLE i_vbrk
                           FROM vbrk WHERE
                            vbeln  IN zvbeln AND
                            kunag  IN zkunag AND
                            fkdat  IN zfkdat AND
                            xblnr  IN zxblnr AND
                            bstnk_vf IN zbstnkvf AND
                            vbtyp IN zvbtyp AND
                            fksto NE 'X' AND
                            bukrs  IN zbukrs .
    This are the both table which has to be included ,
    SELECT belnr buzei dmbtr shkzg APPENDING TABLE i_bsad
            FROM bsad
            FOR ALL ENTRIES IN l_tab_temp
            WHERE
                bukrs EQ l_tab_temp-bukrs AND
                gjahr EQ l_tab_temp-gjahr AND
                belnr EQ l_tab_temp-vbeln.
      SELECT  belnr buzei shkzg dmbtr rebzg FROM bsid                              APPENDING CORRESPONDING FIELDS OF TABLE i_bsid
                              FOR ALL ENTRIES IN l_tab_temp
                              WHERE bukrs EQ l_tab_temp-bukrs
                              "PRA927038 "PRA927150  vbeln pick
                             AND   NOT AUGBL = SPACE 
    *AND  BELNR = L_TAB_TEMP-VBELN  
                             AND  gjahr = l_tab_temp-gjahr  
                               AND  gjahr IN zgjahr.      
                               AND  vbeln = l_tab_temp-vbeln .
                                 AND rebzg = l_tab_temp-vbeln
                                 AND rebzj = l_tab_temp-gjahr.
    Can any one help me in tuning this if u guys still have questions please ask me.And for your understanding this my coding please go through it
    *& Report  ZAR_REC001                                                  *
    REPORT  zar_rec001    NO STANDARD PAGE HEADING
                          LINE-SIZE 355
                          LINE-COUNT 60
                          MESSAGE-ID zuserm.
    TYPE-POOLS : slis.
    TABLES :  vbrk,
              vbrp,
              bsid,
              bsad,
              kna1,
              lfa1,
              knvv,
              zar1_detail,
              zar1_struc1,
              vbak,
              vbap,
              zcustomfields,
              konv,
              zvlxxsr,
              mara,
              t023t,
              sscrfields,
              konp,
              tvarv,
              tvkgr,
              tvgrt.                                            "IMR928046
    TYPES : BEGIN OF t_tvkgr,
            vkgrp TYPE vbrp-vkgrp,
            END OF t_tvkgr.
    TYPES : BEGIN OF ty_vbrp,                                   "IMR928046
            vkgrp TYPE vkgrp,
            END OF ty_vbrp.
    DATA : BEGIN OF i_zgjahr OCCURS 0,
           zgjahr LIKE bsid-gjahr,
          END OF i_zgjahr.
    DATA : BEGIN OF i_vbrk OCCURS 0,
            vbeln LIKE vbrk-vbeln,
            fkart LIKE vbrk-fkart,
            vbtyp LIKE vbrk-vbtyp,
            knumv LIKE vbrk-knumv,
            fkdat LIKE vbrk-fkdat,
            gjahr LIKE vbrk-gjahr,   "KRISHNA
            kdgrp LIKE vbrk-kdgrp,
            zterm LIKE vbrk-zterm,
            bukrs LIKE vbrk-bukrs,   "krishna
            rfbsk    LIKE vbrk-rfbsk,                           " KYH25882
            netwr LIKE vbrk-netwr,
            kunrg LIKE vbrk-kunrg,
            kunag LIKE vbrk-kunag,
            bstnk_vf LIKE vbrk-bstnk_vf,
            xblnr LIKE vbrk-xblnr,
            mwsbk LIKE vbrk-mwsbk,
            name1 LIKE kna1-name1,
            vkgrp LIKE knvv-vkgrp,
            bezei LIKE tvgrt-bezei,                             "IMR928046
            partialpmt LIKE vbrk-netwr,
            opendmbtr LIKE vbrk-netwr,
            gmdpercent LIKE vbrp-netwr,
            gmdnetwr LIKE vbrp-netwr,
            aubel    LIKE vbrp-aubel,
            aupos    LIKE vbrp-aupos,
            ihrez LIKE vbak-ihrez,
            kdmat  LIKE vbap-kdmat,
            mwsbp    LIKE vbrp-mwsbp,
            kzwi5    LIKE vbrp-kzwi5,
            due1     LIKE vbrp-netwr,
            due2     LIKE vbrp-netwr,
            due3     LIKE vbrp-netwr,
            due4     LIKE vbrp-netwr,
            due5     LIKE vbrp-netwr,
            due6     LIKE vbrp-netwr.
    DATA:  END OF i_vbrk.
    DATA : BEGIN OF i_vbrp OCCURS 0.
            INCLUDE STRUCTURE zar1_struc1.
    DATA:   zzp_mfrnr LIKE vbrp-zzp_mfrnr,
            vgbel     LIKE vbrp-vgbel,
            vgpos     LIKE vbrp-vgpos.
    DATA : END OF i_vbrp.
    DATA : d_vbrp LIKE i_vbrp OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF d1_vbrp OCCURS 0.
            INCLUDE STRUCTURE  zar1_detail.
    DATA : END OF d1_vbrp.
    DATA : BEGIN OF i_bsad OCCURS 0,
            belnr LIKE bsad-belnr,   "krishna
            buzei LIKE bsad-buzei,   "Vijay
            dmbtr LIKE bsad-dmbtr,   "krishna
            shkzg.                                              "ppo924471
    DATA : END OF i_bsad.
    *--- begin of ppo924396
    DATA : BEGIN OF i_bsid OCCURS 0,
           augbl like bsad-augbl,                              "PRA927038
          vbeln LIKE bsid-vbeln,                               "vma928512
            rebzg LIKE bsid-rebzg,                              "vma928512
            belnr LIKE bsid-belnr,
            buzei LIKE bsid-buzei,
            shkzg LIKE bsad-shkzg,                              "ppo924471
            dmbtr LIKE bsad-dmbtr.
    DATA : END OF i_bsid.
    DATA : l_partialpmt LIKE bsad-dmbtr.
    *--- end of ppo924396
    DATA : BEGIN OF i_kunag OCCURS 0,
           kunag LIKE vbrk-kunag.
    DATA : END OF i_kunag.
    DATA : BEGIN OF i_knumv OCCURS 0,
           knumv LIKE vbrk-knumv.
    DATA : END OF i_knumv.
    DATA: BEGIN OF i_konv OCCURS 0,
          knumv    LIKE konv-knumv,
          kposn    LIKE konv-kposn,
          kschl    LIKE konv-kschl,
          knumh    LIKE konv-knumh,
          kbetr    LIKE konv-kbetr,
          kwert    LIKE konv-kwert,
          kopos    LIKE konv-kopos,
         END   OF i_konv.
    DATA : BEGIN OF i_kna1 OCCURS 0,
            kunnr LIKE kna1-kunnr,
            name1 LIKE kna1-name1,
            name2 LIKE kna1-name2,
            name3 LIKE kna1-name3,
            stras LIKE kna1-stras,
            ort01 LIKE kna1-ort01,
            regio LIKE kna1-regio,
            pstlz LIKE kna1-pstlz,
            adrnr LIKE kna1-adrnr.
    DATA : END OF i_kna1.
    *DATA : I_KNA1  TYPE HASHED TABLE OF T_KNA1 WITH UNIQUE KEY KUNNR.
    *DATA : L_WA_KNA1 TYPE   T_KNA1.
    TYPES : BEGIN OF t_t023t,
             matkl     LIKE t023t-matkl,
             wgbez     LIKE t023t-wgbez.
    TYPES : END OF t_t023t.
    DATA : i_t023t  TYPE HASHED TABLE OF t_t023t WITH UNIQUE KEY matkl.
    DATA : l_wa_t023t TYPE   t_t023t.
    DATA : BEGIN OF i_t179t OCCURS 0,
             prodh LIKE t179t-prodh,
             vtext LIKE t179t-vtext.
    DATA : END OF i_t179t.
    TYPES : BEGIN OF t_mara,
            matnr     LIKE  mara-matnr,
            mfrpn     LIKE  mara-mfrpn.
    TYPES : END OF t_mara.
    DATA : i_mara  TYPE HASHED TABLE OF t_mara WITH UNIQUE KEY matnr.
    DATA : l_wa_mara TYPE   t_mara.
    DATA : BEGIN OF i_vbak OCCURS 0,
            vbeln      LIKE  vbak-vbeln,
            bname      LIKE  vbak-bname,
            zz_ccenter LIKE vbak-zz_ccenter,
            zz_dept    LIKE vbak-zz_dept,
            ihrez      LIKE vbak-ihrez.
    DATA : END OF i_vbak.
    DATA: BEGIN OF i_vbap  OCCURS 0,
          vbeln     LIKE  vbap-vbeln,
          posnr     LIKE  vbap-posnr,
          erdat     LIKE  vbap-erdat,
          prodh     LIKE  vbap-prodh,
          ihrez     LIKE  vbak-ihrez,
          kdmat     LIKE  vbap-kdmat,
          posex     LIKE  vbap-posex,
          END OF i_vbap.
    DATA : BEGIN OF i_zcustomfields OCCURS 0,
            vbeln   LIKE zcustomfields-vbeln,
            posnr   LIKE zcustomfields-posnr,
            valueid LIKE zcustomfields-valueid,
            value   LIKE zcustomfields-value.
    DATA : END OF i_zcustomfields.
    DATA : BEGIN OF i_vbpa OCCURS 0,
            vbeln     LIKE vbpa-vbeln,
            kunnr     LIKE vbpa-kunnr,
            adrnr     LIKE vbpa-adrnr.
    DATA : END OF i_vbpa.
    DATA d_vbpa LIKE i_vbpa OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF i_zvlxxsr OCCURS 0.
            INCLUDE STRUCTURE zvlxxsr.
    DATA : END OF i_zvlxxsr.
    TYPES: BEGIN OF t_lfa1,
           lifnr LIKE lfa1-lifnr,
           name1 LIKE lfa1-name1.
    TYPES: END OF t_lfa1.
    DATA : i_lfa1  TYPE HASHED TABLE OF t_lfa1 WITH UNIQUE KEY lifnr.
    DATA : l_wa_lfa1 TYPE   t_lfa1.
    DATA : i_tvkgr TYPE STANDARD TABLE OF t_tvkgr.
    DATA : l_tvkgr TYPE t_tvkgr.
    DATA : g_date_diff TYPE p.
    DATA:  fieldcat_sno  TYPE slis_t_fieldcat_alv,
             g_append_d_vbrp,
             tcode LIKE sy-tcode,
            fkimg_tot LIKE vbrp-fkimg,
    Begin     DEVK926013  KYH26013
           NETPR_TOT LIKE I_VBRP-NETPR,
           NETWR_TOT LIKE I_VBRP-NETPR,
           KBETR_TOT LIKE I_VBRP-NETPR,
           KBETRQTY_TOT LIKE I_VBRP-NETPR,
           GMDPERCENT_TOT LIKE I_VBRP-NETPR,
           GMDNETWR_TOT LIKE I_VBRP-NETPR,
            netpr_tot LIKE vbrp-netwr,
            netwr_tot LIKE vbrp-netwr,
            kbetr_tot LIKE vbrp-netwr,
            kbetrqty_tot LIKE vbrp-netwr,
            gmdpercent_tot LIKE vbrp-netwr,
            gmdnetwr_tot LIKE vbrp-netwr,
    End     DEVK926013  KYH26013
            auth_failure.
    DATA:  objnum LIKE vbrk-knumv.
    DATA: auth(3) TYPE c.
    DATA: authcnt TYPE i VALUE 0.
    DATA: cntserno TYPE i.
    DATA: l_from TYPE i,
          l_to   TYPE i,
          l_lines TYPE i,
          l_rows(9) TYPE p DECIMALS 5,
          l_loop TYPE i.
    *--- begin of ppo924234
    DATA: BEGIN OF down_sum OCCURS 0,
          vbeln LIKE vbrk-vbeln,
          fkart LIKE vbrk-fkart,
          fkdat(8),
          kunrg LIKE vbrk-kunrg,
          kunag LIKE vbrk-kunag,
          name1 LIKE kna1-name1,
          vkgrp LIKE knvv-vkgrp,
          bezei LIKE tvgrt-bezei,                               "IMR928046
          zterm LIKE vbrk-zterm,
          bstnk_vf LIKE vbrk-bstnk_vf,
          xblnr LIKE vbrk-xblnr,
          netwr(15),
          partialpmt(15),
          due1(15),
          due2(15),
          due3(15),
          due4(15),
          due5(15),
          due6(15),
          kdgrp LIKE vbrk-kdgrp,
          END OF down_sum.
    DATA: BEGIN OF down_sum_get OCCURS 0,
          line(255),
          END OF down_sum_get.
    DATA: BEGIN OF down_det OCCURS 0,
          zzid TYPE zchar8,
          zcount(10),
          vbeln TYPE zvbeln,
          posnr(6),
          fkdat(8),
          bstnk_vf TYPE bstnk,
          fkimg(13),
          name1_mfg TYPE zmfg_zar1,
          matnr TYPE matnr,
          arktx TYPE arktx,
          netpr(11),
          kzwi5(13),
          netwr(15),
          kbetr(11),
          kbetrqty(11),
          mwsbp(13),
          gmdpercent(15),
          gmdnetwr(15),
          name1 TYPE zsold_zar1,
          name1_sh TYPE zship_zar1,
          name2_sh TYPE zship2_zar1,
          name3_sh TYPE zship3_zar1,
          stras_sh TYPE stras,
          ort01_sh TYPE ort01,
          regio_sh TYPE regio,
          pstlz_sh TYPE pstlz,
          bname TYPE zbname_zar1,
          vkgrp TYPE vkgrp,
          aubel TYPE vbeln_va ,
          aupos(6),
          audat(8),
          sernr TYPE gernr,
          prodh TYPE prodh_d,
          wgbez TYPE wgbez,
          vtext TYPE bezei20,
          asstg TYPE zasstg,
          matkl TYPE matkl,
          fkart TYPE fkart,
          kunag TYPE kunag,
          vbtyp TYPE vbtyp,
          ihrez TYPE ihrez,
          kdmat TYPE matnr_ku,
          posex TYPE posex,
          zz_ccenter TYPE zv_ccenter,
          zz_dept TYPE      zv_dept,
          zz_cap_exp_code TYPE zv_cap_exp_code,
          zz_cap_exp_id TYPE zv_cap_exp_id,
          zz_project TYPE zv_project,
          zz_aprvd_by TYPE zv_aprvd_by,
          kdgrp_auft TYPE kdgrp_auft,
          END OF down_det.
    *--- end of ppo924234
    *--- begin of ppo924471
    DATA: BEGIN OF i_tvfk OCCURS 0,
          fkart TYPE fkart,
          END OF i_tvfk.
    *--- end of ppo924471
      begin of KYH
    DATA: fiscal_yr_begn(8) TYPE c,
           fiscal_yr_end(8) TYPE c,
           fiscal_yr LIKE bsid-gjahr,
           fnyear(4) TYPE c,
           fnyear_pre(4) TYPE c.
      END of KYH
    DATA : v_gjahr LIKE bsid-gjahr.                             " KYH25882
    TYPES : BEGIN OF t_konp,
           knumh  LIKE konp-knumh,
          kopos  LIKE konp-kopos,
         KBETR LIKE  KONP-KBETR.  " KYH26013
           kbetr LIKE  vbrk-netwr.                              " KYH26013
    TYPES : END OF t_konp.
    DATA :i_konp TYPE HASHED TABLE OF t_konp WITH UNIQUE KEY knumh kopos.
    DATA : l_wa_konp TYPE t_konp.
    DATA : l_e_fyv TYPE periv VALUE 10,
           l_i_fyear LIKE  t009b-bdatj,
           l_bsid_index TYPE sy-tabix VALUE 1,
           l_bsad_index TYPE sy-tabix VALUE 1.
    CLASS cl_abap_char_utilities DEFINITION LOAD.               "IMR928770
    CONSTANTS:
        c_tab  TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
        c_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.
    CONSTANTS c_index TYPE i VALUE 2000.                        "KYH25969
    SELECTION-SCREEN : BEGIN OF BLOCK blk1 WITH FRAME.
    SELECT-OPTIONS : zkunag  FOR vbrk-kunag MATCHCODE OBJECT debi,
                     zvbeln FOR vbrk-vbeln MATCHCODE OBJECT vmcf,
                     zfkdat  FOR vbrk-fkdat OBLIGATORY,
                     zvkbur  FOR knvv-vkbur,
                     zvkgrp FOR knvv-vkgrp OBLIGATORY,
                     zbukrs  FOR bsid-bukrs OBLIGATORY,
                     zgjahr  FOR bsid-gjahr OBLIGATORY,
                     zvbtyp  FOR vbrk-vbtyp NO-DISPLAY,
                     zbstnkvf FOR vbrk-bstnk_vf,
                     zxblnr FOR vbrk-xblnr.
    SELECTION-SCREEN : END OF BLOCK blk1.
    SELECTION-SCREEN : BEGIN OF BLOCK blk2 WITH FRAME.
    PARAMETER : zopeninv  RADIOBUTTON GROUP inv,
                zallinv  RADIOBUTTON GROUP inv DEFAULT 'X'.
    SELECTION-SCREEN : END OF BLOCK blk2.
    SELECTION-SCREEN : BEGIN OF BLOCK blk3 WITH FRAME.
    PARAMETER : zinvoice AS CHECKBOX,
                zdebit AS CHECKBOX,
                zcredit AS CHECKBOX.
    SELECTION-SCREEN : END OF BLOCK blk3.
    SELECTION-SCREEN : BEGIN OF BLOCK blk4 WITH FRAME.
    PARAMETER : zsumrep RADIOBUTTON GROUP rep DEFAULT 'X',
                zdetrep RADIOBUTTON GROUP rep.
    SELECT-OPTIONS : zmfrnr FOR vbrp-zzp_mfrnr MATCHCODE OBJECT kred.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN PUSHBUTTON /1(42) prun_det USER-COMMAND prun.
    PARAMETERS: zid LIKE zar1_detail-zzid.
    SELECTION-SCREEN : END OF BLOCK blk4.
    *--- begin of ppo924234
    SELECTION-SCREEN BEGIN OF BLOCK blk5 WITH FRAME TITLE text-001.
    PARAMETERS: p_appfil RADIOBUTTON GROUP file DEFAULT 'X',
                p_prsfil RADIOBUTTON GROUP file.
    PARAMETERS: filepath LIKE rlgrap-filename.
    SELECTION-SCREEN END OF BLOCK blk5.
    *--- end of ppo924234
    INITIALIZATION.
      MOVE : 'Detail Report results of the previous run' TO prun_det.
      zid = sy-uname(8).
      tcode = sy-tcode.
      IF NOT tcode IS INITIAL.
        tvarv-name = 'ZTCODE_ZAR_INVOICE'.
        tvarv-type = 'P'.
        tvarv-low  = tcode.
        MODIFY tvarv.
      ENDIF.
      IF tcode NE 'ZAR2'.
        NEW-PAGE LINE-SIZE 255.
      ELSE.
        NEW-PAGE LINE-SIZE 170.
      ENDIF.
    AT SELECTION-SCREEN.
      IF sscrfields-ucomm = 'PRUN'.
        PERFORM call_ze16.
        EXIT.
      ENDIF.
    *--- begin of ppo924234
    AT SELECTION-SCREEN ON BLOCK blk5.
      IF p_prsfil = 'X' AND filepath IS INITIAL.
        MESSAGE e001(00) WITH 'Enter the File Name'.
      ENDIF.
    *--- end of ppo924234
    START-OF-SELECTION.
      PERFORM check_tcode.
      PERFORM check_authorization.
      IF auth_failure = 'X'.
        EXIT.
      ENDIF.
      PERFORM get_sd_doc_category.
      PERFORM get_invoice_data.
      IF NOT  i_vbrk[] IS  INITIAL.                             "KYH25969
        PERFORM get_accounting_data.
        PERFORM get_other_data.
      ENDIF.                                                    "KYH25969
    END-OF-SELECTION.
      IF NOT  i_vbrk[] IS  INITIAL.                             " KYH25969
        PERFORM process_data.
        IF NOT zsumrep IS INITIAL.
    *--- begin of ppo924234
          IF NOT filepath IS INITIAL.
            CLEAR down_sum.
            REFRESH down_sum.
            MOVE: 'Invoice No'              TO down_sum-vbeln,
                  'ITyp'                    TO down_sum-fkart,
                  'Bill Dt'                 TO down_sum-fkdat,
                  'Bill-to#'                TO down_sum-kunrg,
                  'Customer#'               TO down_sum-kunag,
                  'Name'                    TO down_sum-name1,
                  'SPN'                     TO down_sum-vkgrp,
                  'Spn Name'                TO down_sum-bezei,  "IMR928046
                  'PayT'                    TO down_sum-zterm,
                  'PO No'                   TO down_sum-bstnk_vf,
                  'Ref Doc'                 TO down_sum-xblnr,
                  'Invoice Total'           TO down_sum-netwr,
                  'Payments'                TO down_sum-partialpmt,
                  'Due(00-29 Days)'         TO down_sum-due1,
                  'Due(30-44 Days)'         TO down_sum-due2,
                  'Due(45-59 Days)'         TO down_sum-due3,
                  'Due(60-74 Days)'         TO down_sum-due4,
                  'Due(75-89 Days)'         TO down_sum-due5,
                  'Due(Ovr 90Days)'       TO down_sum-due6,
                  'CGrp'                    TO down_sum-kdgrp.
            APPEND down_sum.
            LOOP AT i_vbrk.
              MOVE-CORRESPONDING i_vbrk TO down_sum.
              APPEND down_sum.
              CLEAR down_sum.
            ENDLOOP.
            PERFORM download_file TABLES down_sum USING down_sum.
          ENDIF.
    *--- end of ppo924234
          PERFORM display_summary_output.
        ELSE.
        for Detail report
          IF NOT  i_vbrk[] IS  INITIAL.                         " KYH26282
            PERFORM get_data_for_detail_report.
            PERFORM process_data_for_detail_report.
            PERFORM display_detail_report.
          ELSE.
            MESSAGE i001(00) WITH 'No data exists for the given selection'.
                                                                " KYH26282
          ENDIF.                                                "KYH26282
        ENDIF.
      ELSE.
        MESSAGE i001(00) WITH 'No data exists for the given selection'.
                                                                "KYH25969
      ENDIF.                                                    " KYH25969
    *&      Form  GET_INVOICE_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM get_invoice_data .
      TYPES : BEGIN OF t1_vbrp,
              vbeln TYPE vbeln,
              gmdnetwr LIKE zar1_struc1-gmdnetwr,
              gmdpercent LIKE zar1_struc1-gmdpercent,
              vkgrp TYPE vkgrp.
      TYPES END OF t1_vbrp.
      DATA : v_end_flag(1) TYPE c.
      DATA : l_tab_vbrp TYPE STANDARD TABLE OF t1_vbrp. "KYH
      DATA:  l_wa_vbrp  LIKE LINE OF i_vbrp.
      DATA : l1_vbrp TYPE t1_vbrp.
      DATA : l_tab_temp LIKE STANDARD TABLE OF i_vbrk.
      DATA : l_sy_tabix LIKE sy-tabix,
             gmdnetwr LIKE i_vbrp-gmdnetwr,
             gmdpercent LIKE i_vbrp-gmdpercent,
             l_count LIKE sy-tabix,
             l_tabix TYPE sy-tabix.
      CLEAR: l_sy_tabix, l_tabix.
    SELECT vbeln fkart vbtyp knumv fkdat  gjahr kdgrp rfbsk zterm bukrs
    netwr kunrg kunag                                     "IMR928882
               bstnk_vf xblnr mwsbk rfbsk
               INTO  TABLE i_vbrk
                        FROM vbrk WHERE
                         vbeln  IN zvbeln AND
                         vbtyp IN zvbtyp AND
                         fkdat  IN zfkdat AND
                         bukrs  IN zbukrs AND
                         kunag  IN zkunag AND
                         bstnk_vf IN zbstnkvf AND
                         xblnr  IN zxblnr AND
                         fksto NE 'X' .
      IF sy-dbcnt NE 0.
        IF NOT zsumrep IS INITIAL.
          IF NOT i_vbrk[] IS INITIAL.
            PERFORM fiscal_year_check.                          " KYH25882
            IF NOT i_vbrk[] IS INITIAL.                         " KYH25882
              REFRESH: l_tab_temp.
              CLEAR: l_from,
                     l_to,
                     l_lines,
                     l_rows,
                     l_loop.
              DESCRIBE TABLE i_vbrk LINES l_lines.
              l_from = 1.
              l_to = c_index.
              l_rows = l_lines / c_index.
              l_loop = CEIL( l_rows ).
              IF l_loop = 0.
                l_loop = 1.
              ENDIF.
              DO l_loop TIMES.
                APPEND LINES OF i_vbrk FROM l_from TO l_to TO l_tab_temp.
                SELECT  vbeln posnr vkgrp  mwsbp kzwi5 aubel aupos
                kdgrp_auft
               APPENDING CORRESPONDING FIELDS OF  TABLE i_vbrp
                                   FROM  vbrp  FOR ALL ENTRIES IN l_tab_temp
                                   WHERE
                                                 vbeln  = l_tab_temp-vbeln
                                                 AND
                                                 vkbur IN zvkbur AND
                                                 vkgrp IN zvkgrp.
                REFRESH l_tab_temp.
                l_from = l_to + 1.
                l_to = l_to + c_index.
              ENDDO.
            ENDIF.
    *Remove entries from VBRK checkinf for SPN on selection screen
            PERFORM check_spn.                                  " KRI926835
          ENDIF.
        ELSE.
          IF NOT i_vbrk[] IS INITIAL.
            PERFORM fiscal_year_check.                          " KYH25882
            IF NOT i_vbrk[] IS INITIAL.                         " KYH25882
              REFRESH: l_tab_temp.
              CLEAR: l_from,
                     l_to,
                     l_lines,
                     l_rows,
                     l_loop.
              DESCRIBE TABLE i_vbrk LINES l_lines.
              l_from = 1.
              l_to = c_index.
              l_rows = l_lines / c_index.
              l_loop = CEIL( l_rows ).
              IF l_loop = 0.
                l_loop = 1.
              ENDIF.
              DO l_loop TIMES.
                APPEND LINES OF i_vbrk FROM l_from TO l_to TO l_tab_temp.
               SELECT vbeln posnr fkimg matnr arktx netwr vkgrp aubel aupos
               sernr
                zzp_mfrnr vgbel vgpos aupos matkl mwsbp kzwi5 kdgrp_auft
                  APPENDING CORRESPONDING FIELDS OF  TABLE i_vbrp
                   FROM  vbrp  FOR ALL ENTRIES IN l_tab_temp WHERE
                                 vbeln  = l_tab_temp-vbeln AND
                                 vkbur IN zvkbur AND
                                 vkgrp IN zvkgrp AND
                                 zzp_mfrnr IN zmfrnr.
                REFRESH l_tab_temp.
                l_from = l_to + 1.
                l_to = l_to + c_index.
              ENDDO.
            ENDIF.                                              " KYH25882
          ENDIF.
        ENDIF.
        IF NOT i_vbrk[] IS INITIAL.                             "KYH25882
          SORT i_vbrk BY vbeln.                                 "KYH25882
          SORT i_vbrp BY vbeln posnr.                           "KYH25882
          LOOP AT i_vbrk.
            MOVE  i_vbrk-kunag TO i_kunag-kunag.
            APPEND i_kunag.
            MOVE i_vbrk-knumv TO i_knumv-knumv.
            APPEND i_knumv.
          ENDLOOP.
        ENDIF.                                                  " KYH25882
    ENDFORM.                    " GET_INVOICE_DATA
    *&      Form  GET_ACCOUNTING_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM get_accounting_data .
      DATA : l_tab_vbrp LIKE STANDARD TABLE OF i_vbrp. "KYH
      DATA: l_tab_temp LIKE STANDARD TABLE OF i_vbrk.
      CONSTANTS c_index TYPE i VALUE 4000.
      IF NOT i_vbrk[] IS INITIAL.
        REFRESH: l_tab_temp.
        CLEAR: l_from,
                l_to,
                l_lines,
                l_rows,
                l_loop.
        DESCRIBE TABLE i_vbrk LINES l_lines.
        l_from = 1.
        l_to = c_index.
        l_rows = l_lines / c_index.
        l_loop = CEIL( l_rows ).
        IF l_loop = 0.
          l_loop = 1.
        ENDIF.
        DO l_loop TIMES.
          APPEND LINES OF i_vbrk FROM l_from TO l_to TO l_tab_temp.
          DELETE l_tab_temp WHERE rfbsk <> 'C'.                 " KYH25882
          IF NOT l_tab_temp[] IS INITIAL .                      " KYH25882
            SELECT belnr buzei dmbtr shkzg APPENDING TABLE i_bsad
            FROM bsad
            FOR ALL ENTRIES IN l_tab_temp
            WHERE
                bukrs EQ l_tab_temp-bukrs AND
                gjahr EQ l_tab_temp-gjahr AND
                belnr EQ l_tab_temp-vbeln.
          ENDIF.                                                " KYH25882
          REFRESH l_tab_temp.
          l_from = l_to + 1.
          l_to = l_to + c_index.
        ENDDO.
    *--- begin of ppo924396
        REFRESH: l_tab_temp.
        CLEAR: l_from,
               l_to,
               l_lines,
               l_rows,
               l_loop.
        DESCRIBE TABLE i_vbrk LINES l_lines.
        l_from = 1.
        l_to = c_index.
        l_rows = l_lines / c_index.
        l_loop = CEIL( l_rows ).
        IF l_loop = 0.
          l_loop = 1.
        ENDIF.
        DO l_loop TIMES.
          APPEND LINES OF i_vbrk FROM l_from TO l_to TO l_tab_temp.
          DELETE l_tab_temp WHERE rfbsk <> 'C'.                 " KYH25882
          IF NOT l_tab_temp[] IS INITIAL .                      " KYH25882
            SELECT  belnr buzei shkzg dmbtr rebzg FROM bsid     "vma928512
                              APPENDING CORRESPONDING FIELDS OF TABLE i_bsid
                              FOR ALL ENTRIES IN l_tab_temp
                              WHERE bukrs EQ l_tab_temp-bukrs
                              "PRA927038 "PRA927150  vbeln pick
          ENDIF.                                                " KYH25882
          REFRESH l_tab_temp.
          l_from = l_to + 1.
          l_to = l_to + c_index.
        ENDDO.
        SELECT fkart FROM tvfk INTO TABLE i_tvfk WHERE vbtyp = 'O'.
                                                                "ppo924471
       delete i_bsid where augbl = space.  " PRA927093
      ENDIF.                                                    " KYH25882
    ENDFORM.                    " GET_ACCOUNTING_DATA
    *&      Form  GET_SD_DOC_CATEGORY
          text
    -->  p1        text
    <--  p2        text
    FORM get_sd_doc_category .
    Exclude SD Doc Category N and S
      zvbtyp-sign = 'E'.
      zvbtyp-option = 'EQ'.
      zvbtyp-low = 'N'.
      APPEND zvbtyp.
      zvbtyp-sign = 'E'.
      zvbtyp-option = 'EQ'.
      zvbtyp-low = 'S'.
      APPEND zvbtyp.
    Get only Invoices
      IF NOT zinvoice IS INITIAL.
        zvbtyp-sign = 'I'.
        zvbtyp-option = 'EQ'.
        zvbtyp-low = 'M'.
        APPEND zvbtyp.
      ENDIF.
    Get only Credit Memos
      IF NOT zcredit IS INITIAL.
        zvbtyp-sign = 'I'.
        zvbtyp-option = 'EQ'.
        zvbtyp-low = 'O'.
        APPEND zvbtyp.
      ENDIF.
    Get only Debit Memos
      IF NOT zdebit IS INITIAL.
        zvbtyp-sign = 'I'.
        zvbtyp-option = 'EQ'.
        zvbtyp-low = 'P'.
        APPEND zvbtyp.
      ENDIF.
    GET Fiscal year.
      IF NOT zgjahr IS INITIAL.
        zgjahr-sign = 'I'.
        zgjahr-option = 'EQ'.
       APPEND i_zgjahr.
        APPEND zgjahr.                                          "IMR928882
      ENDIF.
    ENDFORM.                    " GET_SD_DOC_CATEGORY
    *&      Form  GET_OTHER_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM get_other_data .
      IF NOT i_kunag[] IS INITIAL.                              " KYH25882
        SORT i_kunag BY kunag.
        DELETE ADJACENT DUPLICATES FROM i_kunag COMPARING kunag.
        SELECT kunnr name1 name2 name3 stras ort01 regio pstlz adrnr FROM
        kna1      INTO CORRESPONDING FIELDS OF TABLE i_kna1 FOR ALL ENTRIES
                  IN i_kunag WHERE kunnr = i_kunag-kunag.
       SELECT kunnr name1 name2 name3 stras ort01 regio pstlz adrnr FROM
    kna1 INTO TABLE i_kna1 FOR ALL ENTRIES                     "IMR928882
                    IN i_kunag WHERE kunnr = i_kunag-kunag.
       IF NOT I_KNUMV[] IS INITIAL.          " KYH25882
         SORT I_KNUMV BY KNUMV.
         DELETE ADJACENT DUPLICATES FROM I_KNUMV COMPARING KNUMV.
      ENDIF.                    "  KYH25882
      ENDIF.                                                    "  KYH25882
    ENDFORM.                    " GET_OTHER_DATA
    *&      Form  PROCESS_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM process_data .
      IF NOT i_vbrk[] IS INITIAL.                               " KYH25882
        DATA: l_sy_tabix LIKE sy-tabix.
        CLEAR l_sy_tabix.
        SORT i_kna1 BY kunnr.
        SORT i_bsad BY belnr.
        SORT i_bsid BY belnr.
        LOOP AT i_vbrk.
          l_sy_tabix = sy-tabix.
          PERFORM invoice_total_get.                            "ppo924692
          PERFORM payments_get.
          IF NOT zopeninv IS INITIAL AND  i_vbrk-opendmbtr = 0.
          IF NOT zopeninv IS INITIAL.
         start pradeep
         perform openinvoices.
            DELETE i_vbrk.
            CONTINUE.
          ENDIF.
          PERFORM customer_name_get. "krishna
          PERFORM return_cal_sum.                               "ppo925435
          PERFORM dues_data_get.                                "ppo925435
          PERFORM spn_get.                                      "IMR928046
          MODIFY i_vbrk INDEX l_sy_tabix.
          CLEAR i_vbrk.
        ENDLOOP.
      ENDIF.                                                    " KYH25882
    ENDFORM.                    " PROCESS_DATA
    *&      Form  DISPLAY_SUMMARY_OUTPUT
          text
    -->  p1        text
    <--  p2        text
    FORM display_summary_output .
      IF i_vbrk[] IS INITIAL.
        MESSAGE i001(00) WITH 'No data exists for the given selection'.
        EXIT.
      ENDIF.
      PERFORM build_field_cat.
      PERFORM call_alv.
    ENDFORM.                    " DISPLAY_SUMMARY_OUTPUT
    *&      Form  BUILD_FIELD_CAT
          text
    -->  p1        text
    <--  p2        text
    FORM build_field_cat .
      DATA: ls_fieldcat TYPE slis_fieldcat_alv.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'VBELN'.
    ls_fieldcat-ref_tabname  = 'VBRK'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Invoice No'.
      ls_fieldcat-key          = 'X'.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'FKART'.
    ls_fieldcat-ref_tabname  = 'VBRK'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.                      "IMR928770
      ls_fieldcat-reptext_ddic = 'ITyp'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'FKDAT'.
    ls_fieldcat-ref_tabname  = 'VBRK'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Bill Dt'.                     "IMR928770
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'KUNRG'.
    ls_fieldcat-ref_tabname  = 'VBRK'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.                      "IMR928770
      ls_fieldcat-reptext_ddic = 'Bill To #'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'KUNAG'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Customer #'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'NAME1'.
    ls_fieldcat-ref_tabname  = 'KNA1'.           "IMR928770
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Name'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'VKGRP'.
    ls_fieldcat-ref_tabname  = 'VBRP'.                       "IMR928770
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Spn'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.                                        "IMR928046
      ls_fieldcat-fieldname    = 'BEZEI'.
    ls_fieldcat-ref_tabname  = 'TVGRT'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Spn Name'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'ZTERM'.
    ls_fieldcat-ref_tabname  = 'VBRK'.                        "IMR928770
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'PayT'.                        "IMR928770
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'BSTNK_VF'.
    ls_fieldcat-ref_tabname  = 'VBRK'.           "IMR928770
      ls_fieldcat-reptext_ddic = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Client PO'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'XBLNR'.
    ls_fieldcat-ref_tabname  = 'VBRK'.           "IMR928770
      ls_fieldcat-reptext_ddic = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Ref Doc'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'NETWR'.
    ls_fieldcat-ref_tabname  = 'VBRP'.            "IMR928770
      ls_fieldcat-reptext_ddic = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Invoice Total'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'PARTIALPMT'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Payment'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.
      CLEAR ls_fieldcat.
      ls_fieldcat-fieldname    = 'DUE1'.
      ls_fieldcat-ref_tabname  = 'I_VBRK'.
      ls_fieldcat-reptext_ddic = 'Due ( 0 - 29)'.
      ls_fieldcat-key          = ' '.
      APPEND ls_fieldcat TO fieldcat_sno.

    Hi
    1. Avoid NE in the select(below)
    SELECT vbeln fkart vbtyp knumv fkdat bukrs gjahr kdgrp zterm netwr
    kunrg kunag
    bstnk_vf xblnr mwsbk rfbsk
    INTO CORRESPONDING FIELDS OF TABLE i_vbrk
    FROM vbrk WHERE
    vbeln IN zvbeln AND
    kunag IN zkunag AND
    fkdat IN zfkdat AND
    xblnr IN zxblnr AND
    bstnk_vf IN zbstnkvf AND
    vbtyp IN zvbtyp AND
    <b>fksto NE 'X'</b> AND
    bukrs IN zbukrs .
    Instead delete the entries from the table after u fetch the data into i_vbrk.
    2. Avoid using INTO CORRESPONDING FIELDS.
    3. before using FOR ALL ENTRIES IN l_tab_temp
    sort the internal table withrequired keys.
    delete the duplicate entries with those fields.
    4. this select APPENDING CORRESPONDING FIELDS OF TABLE i_vbrp
    is in the DO-ENDDO. if possible move it out of the loop.
    use WHILE-ENDWHILE instead of DO-ENDDO.
    5. APPENDING CORRESPONDING FIELDS OF TABLE i_vbrp
    avoid APPENDING clause. u can create temporary internal table and append the entries accordingly.
    6. Avoid Move-corresponding.
    7. you have used DELETE statement in Loops. try to avoid that.
    hope this helps.
    **reward if helpful
    regards,
    madhu

  • More than 255 bytes in SO_NEW_DOCUMENT_ATT_SEND_API1

    I know they are some posts about this topic already but I have read them all but I still don't have the solution. I hope someone could help me with this:
    The problem is this: I have an internal table and I make an excell file of it which is mailed (sapmail) to the user who started the program. I all works fine except for the problem of the 255 limit. This happens because SOLISTI1 has an 255 limit. The excell attachment is mailed but it breaks after 255 characters (the total characters is about 500).
    I know there are some solutions with TABLE_COMPRESS and TABLE_DECOMPRESS but I don't know on which moment you should compress or decompress which table! Below if my coding hope someone can help:
    REPORT ZDTAFNAME_K.
    tables: marc,
    lips,
    vbrp,
    mara,
    kna1,
    vbak,
    VBKD,
    vbrk,
    vbap,
    vbep,
    mvke,
    mbew.
    selection-screen: begin of block select with frame title text-f70.
    select-options art for marc-matnr.
    select-options abc for marc-abcin.
    select-options fak for vbrp-vbeln default '20406070'.
    Select-options dat for vbrp-erdat.
    selection-screen: end of block select.
    PARAMETERS: p_email TYPE somlreci1-receiver
    DEFAULT '31dtg'.
    data: rule(2) value '.,'.
    data: begin of itab occurs 0,
    deb like vbak-kunnr, "Debiteurennummer
    debnaam like kna1-name1, "Naam debiteur
    bestnr like vbkd-bstkd, "Bestelnr klant
    artnr like marc-matnr, "Artikelnr
    oms like lips-arktx, "Omschrijving
    type like mara-groes, "Type
    fab like lips-matkl, "Fabrikaat
    faktuurdat like vbrp-erdat, "Faktuurdatum
    faksrt like vbrk-fkart, "Faktuursoort
    faktuur like vbrp-vbeln, "Faktuurnr
    fakpos like vbrp-posnr, "Faktuurpositie
    fakaantal(11) type c , "Faktuuraantal
    fakeenh like vbrp-meins, "Faktuureenheid
    fakwaarde(11) type c , "Faktuurwaarde
    orddat like vbap-erdat, "Orderdatum
    ordsrt like vbak-auart, "Ordersoort
    verkoper like vbak-ernam, "Verkoper
    ordnr like lips-vgbel, "Ordernr
    ordnrpos like lips-vgpos, "Order positie
    artklant like vbap-kdmat, "Artikelnr klant
    ordaant(11) type c, "Order aantal
    ordeenh like vbap-meins, "Order eenheid
    ordwaarde(11) type c, "Nettowaarde orderpositie
    postype like vbap-pstyv, "Positietype
    gevlevdat like vbep-edatu, "Gevraagde leverdatum
    levdat like lips-erdat, "Werkelijke leverdatum
    levnr like lips-vbeln, "Leveringsnr
    levpos like lips-posnr, "Levering positie
    levaant(11) type c, "Leveringsaantal
    leveenh like lips-meins, "Leveringseenheid
    min(11) type c, "Bestelpunt
    max(11) type c, "Max vrd
    basiseenh like mara-meins, "Basiseenheid
    abc like marc-abcin, "ABC Classificatie
    artsoort like mara-mtart, "Artikelsoort
    vkstatus(2) type c, "Verkoopstatus
    ikstatus(2) type c, "Inkoopstatus
    minlev(11) type c, "Min levereenheid
    afrd(11) type c, "Afrondingswaarde
    vprs(11) type c, "VPRS
    vprseenh(11) type c, "VPRS eenheid
    end of itab.
    DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
    WITH HEADER LINE.
    DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
    WITH HEADER LINE.
    DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
    t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
    t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    w_cnt TYPE i,
    w_sent_all(1) TYPE c,
    w_doc_data LIKE sodocchgi1,
    gd_error TYPE sy-subrc,
    gd_reciever TYPE sy-subrc.
    *START_OF_SELECTION
    START-OF-SELECTION.
    Retrieve sample data from table ekpo
    PERFORM data_retrieval.
    Populate table with detaisl to be entered into .xls file
    PERFORM build_xls_data_table.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Populate message body text
    perform populate_email_message_body.
    Send file by email as .xls speadsheet
    PERFORM send_file_as_email_attachment
    tables it_message
    it_attach
    using p_email
    'Example .xls documnet attachment'
    'XLS'
    'filename'
    changing gd_error
    gd_reciever.
    Instructs mail send program for SAPCONNECT to send email(rsconn01)
    PERFORM initiate_mail_execute_program.
    *& Form DATA_RETRIEVAL
    Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
    select * from vbrk client specified where
    mandt = sy-mandt and
    vbeln in fak and
    erdat in dat and
    fkart = 'F2'.
    select * from vbrp client specified where
    mandt = sy-mandt and
    vbeln = vbrk-vbeln and
    erdat in dat and
    matnr in art.
    select single * from marc client specified where
    mandt = sy-mandt and
    werks = 610 and
    matnr = vbrp-matnr and
    abcin in abc.
    if sy-subrc = 0.
    itab-levnr = vbrp-vgbel.
    itab-levpos = vbrp-vgpos.
    itab-faksrt = vbrk-fkart.
    select single * from mara client specified where
    mandt = sy-mandt and
    matnr = marc-matnr.
    if sy-subrc = 0.
    itab-type = mara-groes.
    itab-basiseenh = mara-meins.
    endif.
    select single * from mvke client specified where
    mandt = sy-mandt and
    matnr = marc-matnr.
    if sy-subrc = 0.
    itab-vkstatus = mvke-vmsta.
    itab-minlev = mvke-scmng.
    endif.
    select single * from mbew client specified where
    mandt = sy-mandt and
    matnr = marc-matnr and
    bwkey = 610.
    if sy-subrc = 0.
    itab-vprs = mbew-verpr.
    itab-vprseenh = mbew-peinh.
    endif.
    select single * from vbak client specified where
    mandt = sy-mandt and
    vbeln = vbrp-aubel.
    if sy-subrc = 0.
    itab-deb = vbak-kunnr.
    itab-ordsrt = vbak-auart.
    endif.
    select single * from vbap client specified where
    mandt = sy-mandt and
    vbeln = vbrp-aubel and
    posnr = vbrp-aupos.
    if sy-subrc = 0.
    itab-verkoper = vbap-ernam.
    itab-orddat = vbap-erdat.
    itab-artklant = vbap-kdmat.
    itab-ordaant := vbap-kwmeng.
    itab-ordeenh = vbap-meins.
    itab-ordwaarde := vbap-netwr.
    itab-postype = vbap-pstyv.
    endif.
    select single * from vbep client specified where
    mandt = sy-mandt and
    vbeln = vbap-vbeln and
    posnr = vbap-posnr and
    etenr = '0001'.
    if sy-subrc = 0.
    itab-gevlevdat = vbep-edatu.
    endif.
    select single * from vbkd client specified where
    mandt = sy-mandt and
    vbeln = vbak-vbeln.
    if sy-subrc = 0.
    itab-bestnr = vbkd-bstkd.
    endif.
    select single * from lips client specified where
    mandt = sy-mandt and
    vbeln = vbrp-vgbel and
    posnr = vbrp-vgpos.
    if sy-subrc = 0.
    itab-levdat = lips-erdat.
    itab-levaant = lips-lfimg.
    itab-leveenh = lips-meins.
    else.
    clear itab-levnr.
    clear itab-levpos.
    clear itab-levaant.
    clear itab-levdat.
    endif.
    select single * from kna1 client specified where
    mandt = sy-mandt and
    kunnr = vbak-kunnr.
    if sy-subrc = 0.
    itab-debnaam = kna1-name1.
    endif.
    itab-artnr = marc-matnr.
    itab-oms = vbrp-arktx.
    itab-fab = vbrp-matkl.
    itab-abc = marc-abcin.
    itab-artsoort = mara-mtart.
    itab-min = marc-minbe.
    itab-max = marc-mabst.
    itab-afrd = marc-bstrf.
    itab-ikstatus = marc-mmsta.
    itab-faktuur = vbrp-vbeln.
    itab-fakpos = vbrp-posnr.
    *UNPACK VBRP-FKIMG TO ITAB-FAKAANTAL.
    *shift itab-fakaantal right by 3 places.
    itab-fakaantal = vbrp-fkimg.
    translate itab-fakaantal using rule.
    itab-fakeenh = vbrp-meins.
    itab-faktuurdat = vbrp-erdat.
    *UNPACK VBRP-NETWR TO ITAB-FAKWAARDE.
    *shift itab-FAKWAARDE right by 2 places.
    itab-FAKWAARDE = vbrp-netwr.
    Translate van velden
    translate itab-fakwaarde using rule.
    translate itab-fakaantal using rule.
    translate itab-ordaant using rule.
    translate itab-ordwaarde using rule.
    translate itab-min using rule.
    translate itab-max using rule.
    translate itab-vkstatus using rule.
    translate itab-ikstatus using rule.
    itab-ordnr = vbrp-aubel.
    itab-ordnrpos = vbrp-aupos.
    append itab.
    endif.
    endselect. " Select * from vbrp.
    endselect.
    endform.
    *& Form BUILD_XLS_DATA_TABLE
    Build data table for .xls document
    FORM build_xls_data_table.
    CONSTANTS: con_cret TYPE x VALUE '0D', "OK for non Unicode
    con_tab TYPE x VALUE '09'. "OK for non Unicode
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
    con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
    con_cret type c value cl_abap_char_utilities=>CR_LF.
    CONCATENATE 'DEBNR' 'NAAM' 'BESTELNR'
    'ARTNR' 'OMSCHRIJVING' 'TYPE'
    'FABRIKAAT' 'FAKTUURDATUM' 'FAKSRT'
    'FAKTUURNR' 'FAK.POS.' 'FAK.AANTAL'
    'FAK.EENH' 'FAKTUUR WAARDE' 'ORDER DATUM'
    'ORDSRT' 'VERKOPER' 'ORDERNR.' 'ORDER.POS.'
    'ARTNR KLANT' 'ORDER AANTAL' 'ORDER EENH'
    'ORDERWAARDE' 'POS.TYPE' 'GEVRAAGDE LEVDAT'
    'WERKELIJKE LEVDAT' 'LEVERINGSNR' 'LEV.POS'
    'LEV.AANTAL' 'LEV.EENH' 'BESTELPUNT'
    'MAX VRD' 'BASISEENH' 'ABC' 'ARTSRT.'
    'VK.STATUS' 'IK.STATUS' 'MIN.LEVEENH.'
    'AFDRONDINGSWAARDE' 'VPRS' 'PER'
    INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
    APPEND it_attach.
    LOOP AT ITAB.
    CONCATENATE itab-deb itab-debnaam itab-bestnr itab-artnr
    itab-oms itab-type itab-fab itab-faktuurdat
    itab-faksrt itab-faktuur itab-fakpos
    itab-fakaantal itab-fakeenh itab-fakwaarde
    itab-orddat itab-ordsrt itab-verkoper itab-ordnr
    itab-ordnrpos itab-artklant itab-ordaant
    itab-ordeenh itab-ordwaarde itab-postype
    itab-gevlevdat itab-levdat itab-levnr itab-levpos
    itab-levaant itab-leveenh itab-min itab-max
    itab-basiseenh itab-abc itab-artsoort itab-vkstatus
    itab-ikstatus itab-minlev itab-afrd itab-vprs
    itab-vprseenh
    INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
    APPEND it_attach.
    ENDLOOP.
    ENDFORM. " BUILD_XLS_DATA_TABLE
    *& Form SEND_FILE_AS_EMAIL_ATTACHMENT
    Send email
    FORM send_file_as_email_attachment tables pit_message
    pit_attach
    using p_email
    p_mtitle
    p_format
    p_filename
    p_attdescription
    p_sender_address
    p_sender_addres_type
    changing p_error
    p_reciever.
    DATA: ld_error TYPE sy-subrc,
    ld_reciever TYPE sy-subrc,
    ld_mtitle LIKE sodocchgi1-obj_descr,
    ld_email LIKE somlreci1-receiver,
    ld_format TYPE so_obj_tp ,
    ld_attdescription TYPE so_obj_nam ,
    ld_attfilename TYPE so_obj_des ,
    ld_sender_address LIKE soextreci1-receiver,
    ld_sender_address_type LIKE soextreci1-adr_typ,
    ld_receiver LIKE sy-subrc.
    ld_email = p_email.
    ld_mtitle = p_mtitle.
    ld_format = p_format.
    ld_attdescription = p_attdescription.
    ld_attfilename = p_filename.
    ld_sender_address = p_sender_address.
    ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
    w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
    w_doc_data-obj_langu = sy-langu.
    w_doc_data-obj_name = 'SAPRPT'.
    w_doc_data-obj_descr = ld_mtitle .
    w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
    CLEAR w_doc_data.
    READ TABLE it_attach INDEX w_cnt.
    w_doc_data-doc_size =
    ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
    w_doc_data-obj_langu = sy-langu.
    w_doc_data-obj_name = 'SAPRPT'.
    w_doc_data-obj_descr = ld_mtitle.
    w_doc_data-sensitivty = 'F'.
    CLEAR t_attachment.
    REFRESH t_attachment.
    t_attachment[] = pit_attach[].
    Describe the body of the message
    CLEAR t_packing_list.
    REFRESH t_packing_list.
    t_packing_list-transf_bin = space.
    t_packing_list-head_start = 1.
    t_packing_list-head_num = 0.
    t_packing_list-body_start = 1.
    DESCRIBE TABLE it_message LINES t_packing_list-body_num.
    t_packing_list-doc_type = 'RAW'.
    APPEND t_packing_list.
    Create attachment notification
    t_packing_list-transf_bin = 'X'.
    t_packing_list-head_start = 1.
    t_packing_list-head_num = 1.
    t_packing_list-body_start = 1.
    DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
    t_packing_list-doc_type = ld_format.
    t_packing_list-obj_descr = ld_attdescription.
    t_packing_list-obj_name = ld_attfilename.
    t_packing_list-doc_size = t_packing_list-body_num * 255.
    APPEND t_packing_list.
    Add the recipients email address
    CLEAR t_receivers.
    REFRESH t_receivers.
    MOVE: SY-UNAME TO t_RECEIVERs-RECEIVER,
    'X' TO t_RECEIVERs-EXPRESS,
    'B' TO t_RECEIVERs-REC_TYPE.
    APPEND t_RECEIVERs.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    document_data = w_doc_data
    put_in_outbox = 'X'
    sender_address = ld_sender_address
    sender_address_type = ld_sender_address_type
    commit_work = 'X'
    IMPORTING
    sent_to_all = w_sent_all
    TABLES
    packing_list = t_packing_list
    contents_bin = t_attachment
    contents_txt = it_message
    receivers = t_receivers
    EXCEPTIONS
    too_many_receivers = 1
    document_not_sent = 2
    document_type_not_exist = 3
    operation_no_authorization = 4
    parameter_error = 5
    x_error = 6
    enqueue_error = 7
    OTHERS = 8.
    Populate zerror return code
    ld_error = sy-subrc.
    Populate zreceiver return code
    LOOP AT t_receivers.
    ld_receiver = t_receivers-retrn_code.
    ENDLOOP.
    ENDFORM.
    *& Form INITIATE_MAIL_EXECUTE_PROGRAM
    Instructs mail send program for SAPCONNECT to send email.
    FORM initiate_mail_execute_program.
    WAIT UP TO 2 SECONDS.
    SUBMIT rsconn01 WITH mode = 'INT'
    WITH output = 'X'
    AND RETURN.
    ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
    *& Form POPULATE_EMAIL_MESSAGE_BODY
    Populate message body text
    form populate_email_message_body.
    REFRESH it_message.
    it_message = 'Please find attached a list test ekpo records'.
    APPEND it_message.
    endform. " POPULATE_EMAIL_MESSAGE_BODY

    Thanks Kunal Ghosh for your replies. I did try to condense it but it was still more than 255 characters.
    I solved it by using chunks! I spend more than a week to solve this problem! The solution is so simple. Here's the new code for everybody who has the same problem:
    REPORT ZDTAFNAME_K_ART no standard page heading line-size 250.
    tables: marc,
            lips,
            vbrp,
            mara,
            kna1,
            vbak,
            VBKD,
            vbrk,
            vbap,
            vbep,
            mvke,
            mbew.
    selection-screen: begin of block select with frame title text-f70.
    select-options art for marc-matnr.
    select-options abc for marc-abcin.
    select-options fak for vbrp-vbeln.
    Select-options dat for vbrp-erdat.
    select-options fsoort for vbrk-fkart.
    select-options vest for marc-werks.
    selection-screen: end of block select.
    *parameters: p_email   type somlreci1-receiver
                                     DEFAULT '31dtg'.
    data: p_email like somlreci1-receiver.
    data: rule(2) value '.,'.
    data: begin of itab occurs 0,
         deb     like vbak-kunnr,  "Debiteurennummer
         debnaam like kna1-name1,  "Naam debiteur
          bestnr like vbkd-bstkd,  "Bestelnr klant
           artnr like marc-matnr,  "Artikelnr
             oms like lips-arktx,  "Omschrijving
            type like mara-groes,  "Type
             fab like lips-matkl,  "Fabrikaat
      faktuurdat like vbrp-erdat,  "Faktuurdatum
          faksrt like vbrk-fkart,  "Faktuursoort
         faktuur like vbrp-vbeln,  "Faktuurnr
          fakpos like vbrp-posnr,  "Faktuurpositie
       fakaantal(11) type c     ,  "Faktuuraantal
         fakeenh like vbrp-meins,  "Faktuureenheid
           fakwaarde(11) type c ,  "Faktuurwaarde
          orddat like vbap-erdat,  "Orderdatum
          ordsrt like vbak-auart,  "Ordersoort
        verkoper like vbak-ernam,  "Verkoper
           ordnr like lips-vgbel,  "Ordernr
        ordnrpos like lips-vgpos,  "Order positie
        artklant like vbap-kdmat,  "Artikelnr klant
              ordaant(11) type c,  "Order aantal
         ordeenh like vbap-meins,  "Order eenheid
             ordwaarde(11) type c, "Nettowaarde orderpositie
         postype like vbap-pstyv,  "Positietype
       gevlevdat like vbep-edatu,  "Gevraagde leverdatum
          levdat like lips-erdat,  "Werkelijke leverdatum
           levnr like lips-vbeln,  "Leveringsnr
          levpos like lips-posnr,  "Levering positie
         levaant(11) type c,       "Leveringsaantal
         leveenh like lips-meins,  "Leveringseenheid
             min(11) type c,  "Bestelpunt
             max(11) type c,  "Max vrd
       basiseenh like mara-meins,  "Basiseenheid
             abc like marc-abcin,  "ABC Classificatie
        artsoort like mara-mtart,  "Artikelsoort
        vkstatus(2) type c,        "Verkoopstatus
        ikstatus(2) type c,        "Inkoopstatus
          minlev(11) type c,       "Min levereenheid
            afrd(11) type c,       "Afrondingswaarde
            vprs(11) type c,       "VPRS
        vprseenh(11) type c,       "VPRS eenheid
      end of itab.
    DATA:   it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
            t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
            t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            w_cnt TYPE i,
            w_sent_all(1) TYPE c,
            w_doc_data LIKE sodocchgi1,
            gd_error    TYPE sy-subrc,
            gd_reciever TYPE sy-subrc.
    *START_OF_SELECTION
    START-OF-SELECTION.
      Retrieve sample data from table ekpo
      PERFORM data_retrieval.
      Populate table with detaisl to be entered into .xls file
      PERFORM build_xls_data_table.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Populate message body text
      perform populate_email_message_body.
    Send file by email as .xls speadsheet
      PERFORM send_file_as_email_attachment
                              tables it_message
                              it_attach
                              using p_email
                              'Xls bestand afname per artikelsoort'
                                          'XLS'
                                          'filename'
                                 changing gd_error
                                          gd_reciever.
      Instructs mail send program for SAPCONNECT to send email(rsconn01)
      PERFORM initiate_mail_execute_program.
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
    select * from vbrk client specified where
             mandt = sy-mandt and
             vbeln in fak and
             erdat in dat and
             fkart in fsoort.
    select * from vbrp client specified where
             mandt = sy-mandt and
             vbeln = vbrk-vbeln and
             matnr in art.
      select single * from  marc client specified where
      mandt = sy-mandt and
      werks in vest and
      matnr = vbrp-matnr and
      abcin in abc.
      if sy-subrc = 0.
        itab-levnr = vbrp-vgbel.
        itab-levpos = vbrp-vgpos.
        itab-faksrt = vbrk-fkart.
        select single * from mara client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr.
        if sy-subrc = 0.
          itab-type = mara-groes.
          itab-basiseenh = mara-meins.
        endif.
        select single * from mvke client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr.
        if sy-subrc = 0.
          itab-vkstatus = mvke-vmsta.
          itab-minlev = mvke-scmng.
        endif.
        select single * from mbew client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr and
                        bwkey = 610.
        if sy-subrc = 0.
          itab-vprs = mbew-verpr.
          itab-vprseenh = mbew-peinh.
        endif.
        select single * from vbak client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-aubel.
        if sy-subrc = 0.
          itab-deb = vbak-kunnr.
          itab-ordsrt = vbak-auart.
        endif.
        select single * from vbap client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-aubel and
                        posnr = vbrp-aupos.
        if sy-subrc = 0.
          itab-verkoper = vbap-ernam.
          itab-orddat = vbap-erdat.
          itab-artklant = vbap-kdmat.
          itab-ordaant := vbap-kwmeng.
          itab-ordeenh = vbap-meins.
          itab-ordwaarde := vbap-netwr.
          itab-postype = vbap-pstyv.
        endif.
        select single * from vbep client specified where
                        mandt = sy-mandt and
                        vbeln = vbap-vbeln and
                        posnr = vbap-posnr and
                        etenr = '0001'.
        if sy-subrc = 0.
          itab-gevlevdat = vbep-edatu.
        endif.
        select single * from vbkd client specified where
                        mandt = sy-mandt and
                        vbeln = vbak-vbeln.
        if sy-subrc = 0.
          itab-bestnr = vbkd-bstkd.
        endif.
        select single * from lips client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-vgbel and
                        posnr = vbrp-vgpos.
        if sy-subrc = 0.
          itab-levdat = lips-erdat.
          itab-levaant = lips-lfimg.
          itab-leveenh = lips-meins.
        else.
          clear itab-levnr.
          clear itab-levpos.
          clear itab-levaant.
          clear itab-levdat.
        endif.
        select single * from kna1 client specified where
                        mandt = sy-mandt and
                        kunnr = vbak-kunnr.
        if sy-subrc = 0.
          itab-debnaam = kna1-name1.
        endif.
        itab-artnr = marc-matnr.
        itab-oms = vbrp-arktx.
        itab-fab = vbrp-matkl.
        itab-abc = marc-abcin.
        itab-artsoort = mara-mtart.
        itab-min = marc-minbe.
        itab-max = marc-mabst.
        itab-afrd = marc-bstrf.
        itab-ikstatus = marc-mmsta.
        itab-faktuur = vbrp-vbeln.
        itab-fakpos = vbrp-posnr.
    *UNPACK VBRP-FKIMG TO ITAB-FAKAANTAL.
    *shift itab-fakaantal right by 3 places.
    itab-fakaantal = vbrp-fkimg.
    translate itab-fakaantal using rule.
        itab-fakeenh = vbrp-meins.
        itab-faktuurdat = vbrp-erdat.
    *UNPACK VBRP-NETWR TO ITAB-FAKWAARDE.
    *shift itab-FAKWAARDE right by 2 places.
    itab-FAKWAARDE = vbrp-netwr.
    Translate van velden
    translate itab-fakwaarde using rule.
    translate itab-fakaantal using rule.
    translate itab-ordaant using rule.
    translate itab-ordwaarde using rule.
    translate itab-min using rule.
    translate itab-max using rule.
    translate itab-vkstatus using rule.
    translate itab-ikstatus using rule.
    translate itab-VPRS using rule.
    translate itab-vprseenh using rule.
    translate itab-levaant using rule.
    translate itab-minlev using rule.
    translate itab-afrd using rule.
        itab-ordnr = vbrp-aubel.
        itab-ordnrpos = vbrp-aupos.
    append itab.
    clear itab.
    endif.
    endselect. " Select * from vbrp.
    endselect. " Select * from vbrk.
    endform.
    *&      Form  BUILD_XLS_DATA_TABLE
          Build data table for .xls document
    FORM build_xls_data_table.
      CONSTANTS: con_cret TYPE x VALUE '0D',  "OK for non Unicode
                 con_tab TYPE x VALUE '09'.   "OK for non Unicode
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
       con_tab  type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
       con_cret type c value cl_abap_char_utilities=>CR_LF.
    <b>
      CONCATENATE 'DEBNR' 'NAAM' 'BESTELNR'
                  'ARTNR' 'OMSCHRIJVING' 'TYPE'
                 'FABRIKAAT' 'FAKTUURDATUM' 'FAKSRT'
                  'FAKTUURNR' 'FAK.POS.' 'FAK.AANTAL'
                  'FAK.EENH' 'FAKTUUR WAARDE' 'ORDER DATUM'
                  'ORDSRT' 'VERKOPER' 'ORDERNR.' 'ORDER.POS.'
                  'ARTNR KLANT' 'ORDER AANTAL'
                  INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
       APPEND  it_attach.
    CONCATENATE   con_tab 'ORDER EENH' 'ORDERWAARDE'
                  'POS.TYPE' 'GEVRAAGDE LEVDAT'
                  'WERKELIJKE LEVDAT' 'LEVERINGSNR' 'LEV.POS'
                  'LEV.AANTAL' 'LEV.EENH' 'BESTELPUNT'
                  'MAX VRD' 'BASISEENH' 'ABC' 'ARTSRT.'
                  'VK.STATUS' 'IK.STATUS' 'MIN.LEVEENH.'
                  'AFDRONDINGSWAARDE' 'VPRS' 'PER'
             INTO it_attach SEPARATED BY con_tab.
      APPEND  it_attach.
      LOOP AT ITAB.
        CONCATENATE itab-deb itab-debnaam itab-bestnr itab-artnr
                    itab-oms itab-type itab-fab itab-faktuurdat
                    itab-faksrt itab-faktuur itab-fakpos
                    itab-fakaantal itab-fakeenh itab-fakwaarde
                    itab-orddat itab-ordsrt itab-verkoper itab-ordnr
                    itab-ordnrpos itab-artklant itab-ordaant
                    INTO it_attach SEPARATED BY con_tab.
                    CONCATENATE Con_cret it_attach  INTO it_attach.
                    APPEND  it_attach.
    CONCATENATE     con_tab itab-ordeenh itab-ordwaarde itab-postype
                    itab-gevlevdat itab-levdat itab-levnr itab-levpos
                    itab-levaant itab-leveenh itab-min itab-max
                    itab-basiseenh itab-abc itab-artsoort itab-vkstatus
                    itab-ikstatus itab-minlev itab-afrd itab-vprs
                    itab-vprseenh
                    INTO it_attach SEPARATED BY con_tab.
        APPEND  it_attach.
      ENDLOOP.</b>
    ENDFORM.                    " BUILD_XLS_DATA_TABLE
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          Send email
    FORM send_file_as_email_attachment tables pit_message
                                              pit_attach
                                        using p_email
                                              p_mtitle
                                              p_format
                                              p_filename
                                              p_attdescription
                                              p_sender_address
                                              p_sender_addres_type
                                     changing p_error
                                              p_reciever.
      DATA: ld_error    TYPE sy-subrc,
            ld_reciever TYPE sy-subrc,
            ld_mtitle LIKE sodocchgi1-obj_descr,
            ld_email LIKE  somlreci1-receiver,
            ld_format TYPE  so_obj_tp ,
            ld_attdescription TYPE  so_obj_nam ,
            ld_attfilename TYPE  so_obj_des ,
            ld_sender_address LIKE  soextreci1-receiver,
            ld_sender_address_type LIKE  soextreci1-adr_typ,
            ld_receiver LIKE  sy-subrc.
      ld_email   = p_email.
      ld_mtitle = p_mtitle.
      ld_format              = p_format.
      ld_attdescription      = p_attdescription.
      ld_attfilename         = p_filename.
      ld_sender_address      = p_sender_address.
      ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
      w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle .
      w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle.
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = pit_attach[].
    Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'RAW'.
      APPEND t_packing_list.
    Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      MOVE: SY-UNAME TO t_RECEIVERs-RECEIVER,
            'X'      TO t_RECEIVERs-EXPRESS,
            'B'      TO t_RECEIVERs-REC_TYPE.
      APPEND t_RECEIVERs.
      CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
                sender_address             = ld_sender_address
                sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_receivers
           EXCEPTIONS
                too_many_receivers         = 1
                document_not_sent          = 2
                document_type_not_exist    = 3
                operation_no_authorization = 4
                parameter_error            = 5
                x_error                    = 6
                enqueue_error              = 7
                OTHERS                     = 8.
    Populate zerror return code
      ld_error = sy-subrc.
    Populate zreceiver return code
      LOOP AT t_receivers.
        ld_receiver = t_receivers-retrn_code.
      ENDLOOP.
    ENDFORM.
    *&      Form  INITIATE_MAIL_EXECUTE_PROGRAM
          Instructs mail send program for SAPCONNECT to send email.
    FORM initiate_mail_execute_program.
      WAIT UP TO 2 SECONDS.
      SUBMIT rsconn01 WITH mode = 'INT'
                    WITH output = 'X'
                    AND RETURN.
    ENDFORM.                    " INITIATE_MAIL_EXECUTE_PROGRAM
    *&      Form  POPULATE_EMAIL_MESSAGE_BODY
           Populate message body text
    form populate_email_message_body.
      REFRESH it_message.
      it_message = 'Deze mail is automatisch gemaakt door transactie ZAKA'.
      APPEND it_message.
    endform.                    " POPULATE_EMAIL_MESSAGE_BODY

  • Customer Material Infomation Missing

    **Hello Friends,**
    **We have a scenario where we create Delivery without Referance to an Order and in the Invoice we see that Customer Material Information is not getting copied.In the Billing i see that it is taking referance from VBAP Table but in our case we don't have any referance to a Sales Order so it is not getting copied there. Is there any way we can make the changes in the copy control to make it appear in the Invoice as the Customer Material Information is already available in the Deliery document. This information is very vital for us as the Invoice Idocs should carry Customer Material Information which is not happening currently.*
    Customer Material Information  can be seen in the Invoice Item Tab -PO Data.
    Thanks in advance for your help
    Sunil

    The field on the invoice item PO data tab is VBAP-KDMAT.  It is a view to a non-existent sales order, so you cannot populate it with data on your type of invoice.
    HOWEVERu2026u2026you really need the CMIR data on the Idoc, right? 
    So use an invoice IDoc user exit to insert the appropriate segment. 
    My particular favorite exit for such things is INCLUDE ZXEDFU02, which is found in function module EXIT_SAPLVEDF_002.
    An Idoc type INVOIC02 should carry the customeru2019s material number in an E1EDP19 segment with qualifier QUALF=001.  Set up your exit to test for the existence of such a segment.  If it is not found, then query table KNMT for the KDMAT that you want and insert the new E1EDP19 segment at the appropriate index.

Maybe you are looking for