Select on VBRK

Hi Xperts,
very simple, following query takes long time.......pls suggest alternative.
SELECT * INTO TABLE IT_VBRK FROM VBRK
     WHERE  ( FKDAT >= FIRST_DATE AND FKDAT <= LAST_DATE )
          and VBTYP = 'M' AND FKSTO <> 'X'.

Dear all,
Heartly thanks to everybody for their contribution in soultioning.
I tried with everything you all have suggested............sorry to say but nothing works.
This single query takes over all 80-90% of processing time of whole program.
It fetches around 12299 entries from VBRK table.
Hence, I am planning to write another program which fetch data and keep in dataset. My actual (main ) program will get data from dataset and do further processing.
How's this alternative, is it recommended.............???
Pls suggest.
Thanks & Regards,
Chetan Joshi.

Similar Messages

  • Select statement not populating the internal table

    Hi,
    I have a requirement where I have to upload a file from C drive, the fields in this file are VBELN, description & date of creation.
    I am able to get this file into the internal table. After this i need to cross check the VBELN against VBRK-VBELN, if present then update a Z-table.... How do I do the cross check part ?...
    if not tw_zvatcn[] is initial,
      select * from vbrk
          into table tw_vbrk
          for all entries in tw_zvatcn
           where vbeln = tw_zvztcn-vbeln
                and vkorg = p_vkorg.
      if sy-subrc = 0.
       modify ztzb from lw_zvatcn.
      endif.
    endif.
    Internal table tw_vbrk is coming blank, which is not correct because I see the data in db tbl VBRK

    Is p_vkorg a parameter or select option.
    If it is parameter and is blank you will not get data in the table.
    In that case make a condition for that field also.
    if not tw_zvatcn[] is initial.
    if p_vkorg is not initial.
    select * from vbrk
    into table tw_vbrk
    for all entries in tw_zvatcn
    where vbeln = tw_zvztcn-vbeln
    and vkorg = p_vkorg.
    if sy-subrc = 0.
    modify ztzb from lw_zvatcn.
    endif.
    else.
    select * from vbrk
    into table tw_vbrk
    for all entries in tw_zvatcn
    where vbeln = tw_zvztcn-vbeln.
    if sy-subrc = 0.
    modify ztzb from lw_zvatcn.
    endif.
    endif.
    endif.

  • Find total quantity from vbrk and vbrp

    Hi frinds doing a report to display sales in 3 month 6 month snd past 12 months but didnt get logic to find out
    here is my code
    SELECT vbrk~vbeln
             vbrk~fkdat
             vbrp~fkimg
             vbrp~matnr
             vbrp~werks
             INTO CORRESPONDING FIELDS OF TABLE iquan
             FROM vbrk INNER JOIN
             vbrp ON vbrkvbeln = vbrpvbeln
             WHERE vbrk~fkdat >= w_date " w_date =past 12month
               AND vbrp~matnr IN s_matnr  " = imatr-matnr
               AND vbrp~werks IN s_werks. " = imatr-werks
    **now how to find the total sales quantity
    i tried in this way its not working "iquan is same as iquan1 with added added sales field.
      LOOP AT iquan.
        READ TABLE iquan1 WITH KEY matnr = iquan-matnr
                                   werks = iquan-werks.
        IF sy-subrc = 0.
          IF w_date3 LE iquan-fkdat.
            w_tot3 = w_tot3 + iquan-fkimg.
          ELSEIF
            w_date2 LE iquan-fkdat.
            w_tot2 = w_tot2 + iquan-fkimg.
          ELSEIF
            w_date1 LE iquan-fkdat.
            w_tot1 = w_tot1 + iquan-fkimg.
          ENDIF.
          iquan-sale12 = w_tot1.
          iquan-sale6 = w_tot2.
          iquan-sale3 = w_tot3.
        ENDIF.
        MODIFY iquan.
      ENDLOOP.
    *PLs pls pls pls help me with code or suggestion
    0ut put shpuld be
    material plant sales 3months  6months 12 months
    01        0040    130          00.00    120
    regards

    Hi Farukh,
    Try this code. This will definitely help you.
    <b>REPORT ZTEST .</b>
    <b>TABLES:</b> VBRK,
            VBRP.
    <b>SELECT-OPTIONS :</b>
    s_matnr FOR VBRP-MATNR,
    S_WERKS FOR VBRP-WERKS.
    <b>DATA:</b> BEGIN OF STRUCT,
    matnr LIKE vbrp-matnr,
    werks LIKE vbrp-werks,
    vbeln LIKE vbrk-vbeln,
    fkdat LIKE vbrk-fkdat,
    fkimg LIKE vbrp-fkimg,
    sale6 LIKE vbrp-fkimg,
    sale12 LIKE vbrp-fkimg,
    sale3 LIKE vbrp-fkimg,
    END OF STRUCT,
    IQUAN LIKE TABLE OF STRUCT WITH HEADER LINE,
    IQUAN1 LIKE TABLE OF IQUAN WITH HEADER LINE.
    <b>DATA:</b> w_tot1 LIKE iquan-fkimg,
          w_tot2 LIKE iquan-fkimg,
          w_tot3 LIKE iquan-fkimg.
    <b>DATA:</b>  W_DATE1 LIKE SY-DATUM,
          W_DATE2 LIKE SY-DATUM,
          W_DATE3 LIKE SY-DATUM.
    **assign dates
    W_DATE1 = '20051107' .
    W_DATE2 = '20060507' .
    W_DATE3 = '20060807'.
    <b>SELECT</b> vbrk~vbeln
    vbrk~fkdat
    vbrp~fkimg
    vbrp~matnr
    vbrp~werks
    INTO CORRESPONDING FIELDS OF TABLE iquan
    FROM vbrk INNER JOIN
    vbrp ON vbrkvbeln = vbrpvbeln
    WHERE vbrk~fkdat >= w_date1     " w_date1 =past 12month
    AND vbrp~matnr IN s_matnr       " = imatr-matnr
    AND vbrp~werks IN s_werks.      " = imatr-werks
    <b>SORT</b> IQUAN BY MATNR WERKS.
    IQUAN1[] = IQUAN[].
    <b>LOOP AT iquan.</b>
      READ TABLE iquan1 WITH KEY matnr = iquan-matnr
      werks = iquan-werks.
      IF sy-subrc = 0.
    "w_date3 : PAST 3 MONTHS
        IF w_date3 LE iquan-fkdat.   
          w_tot3 = w_tot3 + iquan-fkimg.
        ELSEIF
    "w_date2 : PAST 6 MONTHS
        w_date2 LE iquan-fkdat.               
          w_tot2 = w_tot2 + iquan-fkimg.
        ELSEIF
    "w_date1 : PAST 12 MONTHS
        w_date1 LE iquan-fkdat.
          w_tot1 = w_tot1 + iquan-fkimg.      
        ENDIF.
        iquan-SALE12 = w_tot1.
        iquan-sale6 = w_tot2.
        iquan-Sale3 = w_tot3.
      ENDIF.
    <b> MODIFY iquan.</b>
    ENDLOOP.
    <b>LOOP AT IQUAN.</b>
    STRUCT = IQUAN.
    <b>AT END OF WERKS.</b>
    <b>WRITE:/</b>
           STRUCT-matnr, ' ',
           STRUCT-werks, ' ',
           STRUCT-sale6, ' ',
           STRUCT-sale12, ' ',
           STRUCT-sale3.
    ENDAT.
    <b>ENDLOOP.</b>
    <b>The output is:</b>
    9767A002AA           3201         10,255.000               0.000               0.000
    C9138-60001          3201         10,255.000           2,000.000               0.000
    C9361-30001          3201         10,255.000           2,004.000               0.000
    Hope this will solve your purpose.
    Regards,
    Pragya

  • Combinataion between VBRK AND LIPS

    hi,
    I have a requirement, where i have to combine two tables , which doesnt have any field in common. but i have to combine the tables
    VBRK and LIPS.
    from lips
    i have to select matnr and lfimg.
    from  vbrk, i have to take vkorg,vtweg, kunrg.
    how can i take the materials from lips for the partiicular VKORG or KUNRG.?
    the only possible link, i have got is linking vbuk with both the tables.since the vbuk-vbeln hold the vbeln of  both these tables.
    i m not willing to use join also.
    I prefer for all entries.
    can some one help me out with the codes.

    hi,
    DATA:it_lips LIKE lips OCCURS 0 WITH HEADER LINE.
    DATA:it_vbrp LIKE vbrp OCCURS 0 WITH HEADER LINE.
    DATA:it_vbrk LIKE vbrk OCCURS 0 WITH HEADER LINE.
    START-OF-SELECTION.
      SELECT * FROM lips
      INTO TABLE it_lips
    UP TO 1000 ROWS.
    *where vbeln in s_vbeln and matnr in s_matnr.
      IF NOT it_lips[] IS INITIAL.
        SELECT * FROM vbrp INTO TABLE it_vbrp
        FOR ALL ENTRIES IN it_lips
        WHERE vgbel = it_lips-vbeln
        AND vgpos = it_lips-posnr
        AND   vgtyp = 'J'.
      ENDIF.
      IF NOT it_vbrp[] IS INITIAL.
        SELECT * FROM vbrk INTO TABLE it_vbrk
        FOR ALL ENTRIES IN it_vbrp
        WHERE vbeln = it_vbrp-vbeln.
      ENDIF.
      LOOP AT it_vbrk.
        WRITE: / it_vbrk-vbeln,it_vbrk-vkorg,it_vbrk-vtweg,it_vbrk-kunrg.
      ENDLOOP.
    ( If you are not getting entries into it_lips means you have to use conversion exit function module for vbeln in the tbale s_vbeln )
    Regds
    Sivaparvathi
    Please dont forget to reward points if helpful..
    Edited by: Siva Parvathi on Jan 10, 2008 8:50 AM

  • How to split this select query

    Hi all,
    Can any one help me to split this single select query into 9 select query.   
    select KNA1STCEG VBRKBUKRS VBRKVKORG VBRKVBELN VBRKFKDAT VBRKFKART VBRKVBTYP VBRKVBUND VBRKKUNAG VBRKKUNRG VBRK~NETWR
               VBRKWAERK VBRKFKSTO VBRKSFAKN VBRKLAND1 T001WKUNNR VBRPPOSNR VBRPWERKS VBRPFKIMG VBRPVRKME VBRPPRSDT
               VBRPNETWR VBRPVGBEL VBRPVGPOS VBRPMATNR VBRPPRCTR VBRPCHARG VBRPAUBEL VBRPAUPOS VBRPVBELN T001WAERS T001~BUKRS
               MBEWSTPRS MBEWPEINH MBEWMATNR MBEWBWKEY LIKPLFART LIKPWERKS LIKPVBELN MBEW_RECVSTPRS MBEW_RECV~PEINH
               MBEW_RECVBWKEY MBEW_RECVMATNR CKMLCRBDATJ CKMLCRPOPER CKMLCRSTPRS CKMLCRWAERS CKMLCRPEINH CKMLCRCURTP
               CKMLCRKALNR CKMLCR_RECVSTPRS CKMLCR_RECVWAERS CKMLCR_RECVPEINH CKMLCR_RECVCURTP CKMLCR_RECVBDATJ CKMLCR_RECV~POPER
               CKMLCR_RECV~KALNR
        from ( KNA1
               left outer join VBRK
               on  VBRKKUNRG = KNA1KUNNR
               inner join T001W
               on  T001WKUNNR = VBRKKUNAG
               inner join VBRP
               on  VBRPVBELN = VBRKVBELN
               inner join T001
               on  T001BUKRS = VBRKBUKRS
               left outer join MBEW
               on  MBEWMATNR = VBRPMATNR
               and MBEWBWKEY = VBRPWERKS
               left outer join LIKP
               on  LIKPVBELN = VBRPVGBEL
               inner join MBEW  as MBEW_RECV
               on  MBEW_RECVBWKEY = T001WBWKEY
               and MBEW_RECVMATNR = VBRPMATNR
               inner join CKMLCR
               on  CKMLCRKALNR = MBEWKALN1
               inner join CKMLCR  as CKMLCR_RECV
               on  CKMLCR_RECVKALNR = MBEW_RECVKALN1 )
             where VBRP~WERKS in SP$00005
               and VBRP~MATNR in SP$00008
               and VBRP~CHARG in SP$00009
               and VBRP~AUBEL in SP$00017
               and CKMLCR~CURTP in SP$00015
               and CKMLCR~BDATJ in SP$00013
               and CKMLCR~POPER in SP$00014
               and CKMLCR_RECV~CURTP in SP$00019
               and CKMLCR_RECV~BDATJ in SP$00020
               and CKMLCR_RECV~POPER in SP$00018 .

    Hi, it is not good for your performance to split into 9 selects but the select you are now using is also not so good. Start with VBRP instead of KNA1.
    You can do it in the following way. For example:
    DATA tb_kna1  TYPE STANDARD TABLE OF kna1.
    DATA tb_vbrk  TYPE STANDARD TABLE OF vrbk.
    DATA tb_vrbp  TYPE STANDARD TABLE OF vrbp.
    Start with VRBP for a better performance
    SELECT * FROM vrbp
      INTO CORRESPONDING FIELDS OF TABLE tb_vbrp
      WHERE werks IN ....   etc.
    SELECT * FROM vbrk
      INTO CORRESPONDING FIELDS OF TABLE tb_vbrk
      FOR ALL ENTRIES IN tb_vrbp
      WHERE vbeln = tb_vrbp-vbeln.
    SELECT * FROM kna1
      INTO CORRESPONDING FIELDS OF TABLE tb_kna1
      FOR ALL ENTRIES IN tb_vrbk
      WHERE kunnr = tb_vrbk-kunnr.
    Success.

  • Picking up tvzbt-vtext w.r t vbrk-zterm and vbeln in vbrk

    Hi Folks,
    Can anyone here please give me the select statement for picking up tvzbt-vtext
    with respect to vbrk-zterm and vbrk-vbeln.
    Do I need to use joins?
    Kindly provide me the select statement.
    Points will be given.
    K.Kiran.

    Hi!
    * declare gt_main
    TYPES: BEGIN OF t_main
      vbeln LIKE vbrk-vbeln,
      zterm LIKE tvzbt-zterm,
      vtext LIKE tvzbt-vtext,
    END OF t_main.
    DATA: gt_main TYPE STANDARD TABLE OF t_main,
          wa_main LIKE LINE OF gt_main.
    SELECT * FROM vbrk
      INNER JOIN tvzbt ON vbrk~zterm = tvzbt~zterm
      INTO CORRESPONDING FIELDS OF gt_main
      WHERE vbrk~vbeln IN so_vbeln AND
            tvzbt~spras = sy-langu.
    This is the whole coding.
    Regards
    Tamá

  • Link Tables VBAK-LIKP-VBRK

    Can anyone tell me how to link the three tables?
    I need to get header information from all three tables for a query.
    Any suggestions is greatly appreciated,
    Thanks,
    Michelle

    Hi Mitchelle , Please find the detail below.
    Technically
    Select all the VBELN from VBAK then select VBELN & POSNR from VBAP with reference to VBAK-VBELN.
    Then select VBELN POSNR from LIPS (Delivery Item) with reference to VBAP VBELN and POSNR against VGBEL VGPOS in LIPS.
    then select the VBRK-VBELN with reference to the VBRK-VGBEL = LIPS-VBELN and VBRK-VGPOS = LIPS-POSNR.
    Functionally
    VBAK - Sales Document Header
    VBAP - Sales Item
    LIKP - Delivery Document Header
    LIPS - Delievry Item
    VBRK - Billing Document Header
    An delievry can be created with reference to Sales order  and an billing document can be created either with reference to the Sales Document or Delievry Documents that depends on the config.
    Please refer the below link for details
    http://www.erpgenie.com/abap/tables_sd.htm
    Regards,
    SEN
    Edited by: Senthil Nattamai Sekar on Aug 1, 2008 2:32 AM

  • Help in defaulting a value in a program

    I have a program called MV45AZZA, and I got the following requirement
    In MV45AFZZ we need to default VBAP-BWTAR = RH while new items are added in transaction VA01 and VA02, if sales org = 5090, order type = ZSBK and MBEW-BWTTY = 1 for the VBAP-MATNR. Once defaulted user should be able to change it to new value in VA01 and VA02, in that case system should not overwrite it with default value.
    Sales order functionality needs to be changed to account for Sbank sales updating to repair profit center.
    any help in coding is highly appreciated. i know little ABAP and I would appreciate if somebody can help in adding the code.Please highlight the code you added
    Please check the Program below.
    Thanks
    SP
    *TABLES: zue003, tvarv.
    *DATA: werks LIKE vbap-werks.
    Start of DEVK923935.
    Global Definition
    INCLUDE  zsdi_mv45afzz_top.
          FORM ZZEXAMPLE                                                *
          text......................................                    *
    *FORM ZZEXAMPLE.
    *ENDFORM.
    *eject
          FORM USEREXIT_DELETE_DOCUMENT                                 *
          This userexit can be used to delete data in additional tables *
          when a sales document is deleted.                             *
         This form is called in dialog at the end of form BELEG_LOESCHEN*
         just before form BELEG_SICHERN is performed to delete the      *
         datas on the database.                                         *
    FORM userexit_delete_document.
    ENDFORM.
    *eject
          FORM USEREXIT_FIELD_MODIFICATION                              *
          This userexit can be used to modify the attributes of         *
          screen fields.                                                *
          This form is processed for each field in the screen.          *
          The use of the fields screen-group1 to screen-group4 is:      *
          Screen-group1: Automatic modification contolles by transaction*
                         MFAW.                                          *
          Screen-group2: Contents 'LOO' for steploop-fields.            *
          Screen-group3: Used for modififaction, which are dependent on *
                         control tables or other fix information.       *
          Screen-group4: Unused                                         *
          For field mofifications, which are dependent on the document  *
          status, you can use the status field in the workareas         *
          XVBAP for item status and XVBUK for header status.            *
          This form is called from module FELDAUSWAHL.                  *
    FORM userexit_field_modification.
      DATA: zvbtyp LIKE vbfa-vbtyp_n,
            zvbeln LIKE vbfa-vbeln.
    CASE SCREEN-GROUP3.
      WHEN '900'.
        IF VBAK-VBTYP NE 'A'.
          SCREEN-ACTIVE = 0.
        ENDIF.
    ENDCASE.
    CASE SCREEN-NAME.
      WHEN 'VBAK-VBELN'.
        SCREEN-ACTIVE = 0.
    ENDCASE.
      IF vbap-pstyv = 'IRLA'.
       CHECK sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
        IF sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
          SELECT SINGLE vbtyp_n INTO zvbtyp FROM vbfa
                 WHERE vbelv = xvbap-vbeln AND posnv = vbap-posnr.
         CHECK sy-subrc <> 0.
          IF sy-subrc <> 0.
            CASE screen-group2.
              WHEN 'LOO'.
                IF screen-name = 'VBAP-WERKS'.
                  screen-input = 1.
                ENDIF.
            ENDCASE.
          ENDIF.
        ENDIF.
      ENDIF.
    Make Reject Reason modifiable when document category is 'RETURNS'
    06/10/02  
    Modified by Ak for check on subsequent credit memo
    This opens up the field - reason for rejection - for change even after
    the material has been received into the system on the returns delivery
    but before the Returns Credit Memo has been issued.
    Changed field to be modified from Reason for Rejection to Item
    Category on the line item for which no credit to be given.
    select single * from vbfa where vbelv = vbak-vbeln and
                                     vbtyp_n = 'O'.
    select a Returns Credit Memo document from VBFA that has NOT been
    cancelled. if the selection is successful, credit has been issued and
    the field should stay locked. however, if selection is unsuccessful
    and since no credit has been issued, the field for item category
    must be available for changing, if need be.
    check: vbak-vbtyp = 'H'.
      IF vbak-vbtyp = 'H'.
        IF sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
          SELECT SINGLE vbrk~vbeln INTO zvbeln
            FROM vbfa INNER JOIN vbrk ON vbfavbeln = vbrkvbeln
              WHERE vbfavbelv = vbak-vbeln AND vbfaposnv = vbap-posnr
                AND vbfavbtyp_n = 'O' AND vbrkfksto NE 'X'.
          CHECK sy-subrc NE 0.
          CASE screen-group2.
            WHEN 'LOO'.
              IF screen-name = 'VBAP-PSTYV'.
                screen-input = 1.
              ENDIF.
          ENDCASE.
        ENDIF.
      ENDIF.
      INCLUDE zue_sd_0029.
    **If no invoice is created then make PSTYV ready for input for item
    **category IRIN.
      INCLUDE zue_sd_0031.
    ENDFORM.
    *eject
          FORM USEREXIT_MOVE_FIELD_TO_VBAK                              *
          This userexit can be used to move some fields into the sales  *
          dokument header workaerea VBAK.                               *
          SVBAK-TABIX = 0:  Create header                               *
          SVBAK-TABIX > 0:  Change header                               *
          This form is called at the end of form VBAK_FUELLEN.          *
    FORM userexit_move_field_to_vbak.
    vbak-zzfield = xxxx-zzfield2.
    **Ernesto EDIT for UE DEMO 10/16/2002
    SELECT single * INTO TABLE i_tvarv FROM tvarv WHERE name =
    *ZKS_KSEASORG'.
    Start of DEVK923935.
    Initialization Section
      INCLUDE zsdi_mv45afzz_initialization.
    End of DEVK923935.
    **{   INSERT         SNDK900075                                        1
    Change user exit according to Online Documentation to
    copy ship-to info to sale doc header (VBAK)
    *CODE BELOW*REPLACED WITH zue_sd_0017***********
    IF vbak-kvgr1 IS INITIAL AND
        vbak-kvgr2 IS INITIAL AND
        vbak-kvgr3 IS INITIAL AND
        vbak-kvgr4 IS INITIAL AND
        vbak-kvgr5 IS INITIAL.
       SELECT SINGLE vkgrp vkbur kvgr1 kvgr2 kvgr3 kvgr4 kvgr5
       FROM knvv  INTO (vbak-vkgrp, vbak-vkbur, vbak-kvgr1, vbak-kvgr2,
                                    vbak-kvgr3, vbak-kvgr4, vbak-kvgr5)
       WHERE kunnr = kuwev-kunnr AND
             vkorg = vbak-vkorg AND
             vtweg = vbak-vtweg AND
             spart = vbak-spart.
    ENDIF.
    *CODE ABOVE*REPLACED WITH zue_sd_0017***********
      INCLUDE zue_sd_0017.
    *CODE BELOW*REPLACED WITH zue_sd_0017***********
    IF svbak-tabix = 0.
       SELECT SINGLE vsbed  FROM knvv INTO vbak-vsbed
    *WHERE kunnr = kuwev-kunnr AND
         vkorg = vbak-vkorg AND
         vtweg = vbak-vtweg AND
         spart = vbak-spart.
    ENDIF.
    *CODE ABOVE*REPLACED WITH zue_sd_0017***********
    Start of DEVK915182
    **Ernesto EDIT for UE DEMO 10/15/2002.
    READ TABLE i_tvarv WITH KEY name = 'ZKS_KSEASORG'.
    IF sy-subrc = 0.
       IF vbak-vkorg =  i_tvarv-low.
      IF vbak-vkorg IN i_zsd01_vkorg.
        IF sy-tcode EQ 'VA01'.
          IF sy-dynnr EQ '4021'.
            IF sy-ucomm NE 'SICH'.
              l_pop_type = 'X'.
              INCLUDE zue_sd_0027.
             PERFORM partner_validation USING 'X'.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    end-of DEVK915182
    Project : KSEA - Sales Force Expansion of 1st Jan 2003
    Include for KSEA  Sales Org 5010 only for PopUp Windows " 12/23/2002
      INCLUDE zsd_salesforce_expnsn_hdr." Include 1 of 4
    */ Description        : KSE Modification to remove the billing block for
    */                      returns/credits/debits if sales Org is 5090.
    *ORIGINAL CODE
    *if vbak-vkorg = '5090' and vbak-vbtyp ca 'HKL'.
    *vbak-faksk = ' '.
    *endif.
      IF sy-tcode = 'VA01'.
        IF vbak-vkorg IN i_zsd09_vkorg.
          IF vbak-vbtyp IN i_zsd09_vbtyp.
            vbak-faksk = ' '.
          ENDIF.
        ENDIF.
      ENDIF.
    BREAK-POINT.
    INCLUDE zue_sd_0039.
    ENDFORM.
    *eject
          FORM USEREXIT_MOVE_FIELD_TO_VBAP                              *
          This userexit can be used to move some fields into the sales  *
          dokument item workaerea VBAP                                  *
          SVBAP-TABIX = 0:  Create item                                 *
          SVBAP-TABIX > 0:  Change item                                 *
          This form is called at the end of form VBAP_FUELLEN.          *
    FORM userexit_move_field_to_vbap.
    VBAP-zzfield = xxxx-zzfield2.
    *{   INSERT         SNDK900164                                        1
    Item Category Determination
      DATA: zzbukrs LIKE tvko-bukrs,
            zzmtpos LIKE mvke-mtpos.
      DATA: BEGIN OF zzwerks OCCURS 0,
              werks LIKE marc-werks,
            END OF zzwerks.
      DATA: zdoccat LIKE tvak-vbklt,
            zvmsta LIKE mvke-vmsta,
            zspvbc LIKE tvms-spvbc,
            zvmstb LIKE tvmst-vmstb.
      DATA: z_xvbap LIKE xvbap,
            yp1 LIKE t001k-bwkey,
            z_uepos_bukrs LIKE t001k-bukrs.
      IF i_zsd01_vkorg[] IS INITIAL.
    If the initialization was not performed in the Fill VBAK,
    reload data
        INCLUDE zsdi_mv45afzz_initialization.
      ENDIF.
      SELECT SINGLE bukrs
        INTO zzbukrs
        FROM tvko
       WHERE vkorg = vbak-vkorg.
      SELECT w~werks
        INTO TABLE zzwerks
        FROM t001w AS w JOIN t001k AS k
          ON wbwkey = kbwkey
       WHERE k~bukrs = zzbukrs.
      SELECT SINGLE mtpos INTO zzmtpos
        FROM mvke
       WHERE matnr = vbap-matnr
         AND vkorg = vbak-vkorg
         AND vtweg = vbak-vtweg.
    Export Plant - inport in ZXQSMU07
      EXPORT zz_plant = vbap-werks TO MEMORY ID  'ZZPLANT'.   " KN05
    check vbap-pstyv = 'TAN' or vbap-pstyv = 'TANN'.
    removed the CHECK statement and replaced by IF-ENDIF.
    inserted by arvind r kulkarni for TAN, TANN switching
      IF vbap-pstyv = 'TAN' OR vbap-pstyv = 'TANN'
      OR vbap-pstyv = 'REN'                                     " KN02
      OR vbap-pstyv = 'RENN' .                                  " KN02
        READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
       check sy-subrc ne 0.
        IF sy-subrc NE 0.
          IF vbap-pstyv = 'TAN'.
            vbap-pstyv = 'ZAN'.
          ELSEIF vbap-pstyv = 'REN'.                            " KN02
            vbap-pstyv = 'YREN'.                                " KN02
          ELSEIF vbap-pstyv = 'RENN'.                           " KN02
            vbap-pstyv = 'YRNN'.                                " KN02
          ELSEIF vbap-pstyv = 'TANN'.
            vbap-pstyv = 'ZANN'.
          ENDIF.
        ENDIF.
      ENDIF.
      INCLUDE zue_sd_0014.
    Begin insert for check for discontinued material in repair orders
    LOGIC: For IRAT item categories, check if the material status field *
           blank or populated.                                          *
           If populated, get the value of the D-Chain specific status   *
           and issue warning/error message with the associated text     *
           from config the D-Chain specific material status.            *
           Included YRAT to this logic (YRAT is free IRAT); 11/22/2002. *
      IF vbap-pstyv = 'IRAT' OR vbap-pstyv = 'YRAT'.
        CLEAR: zvmsta, zvmstb, zspvbc.
        SELECT SINGLE vmsta INTO zvmsta FROM mvke WHERE
                matnr = vbap-matnr AND vkorg = vbak-vkorg
                AND vtweg = vbak-vtweg.
       CHECK: NOT zvmsta IS INITIAL.
        IF NOT zvmsta IS INITIAL.
          SELECT SINGLE spvbc INTO zspvbc FROM tvms WHERE
                  vmsta = zvmsta.
          SELECT SINGLE vmstb INTO zvmstb FROM tvmst WHERE
                  spras = sy-langu AND vmsta = zvmsta.
          CASE zspvbc.
            WHEN 'A'.
              MESSAGE ID 'V1' TYPE 'W' NUMBER '028' WITH zvmsta zvmstb.
            WHEN 'B'.
              MESSAGE ID 'V1' TYPE 'E' NUMBER '028' WITH zvmsta zvmstb.
          ENDCASE.
        ENDIF.
      ENDIF.
    End insert for check for discontinued material in repair orders
      INCLUDE zue_sd_0004.
      INCLUDE zue_sd_0005.
    end of DEVK923935.
    ****************END OF TEST SOURCE CODE******************
    Begin Insert to assign material entered for TRADE material
    Ak; 11/08/2002.
    For trade material, the system will now mandate entry of higher level
    item number and based on this, the system will bring in specialty,
    material number (into material entered) and profit centre from this
    higher level item into the line item for material TRADE.
    Added MVGR2 & 3 to pass onto TRADE material; 11/12/2002 - Arvind.
    Added material a/c assignment grp to trade-in material.
    Added ZTRD item category to this logic.  - Arvind 11/18/2002.
      INCLUDE zzsdprc01.
      INCLUDE zue_sd_0028.
    End Insert to assign material entered for TRADE material
    ********************End of DIP Profile change************************
    Get custom group data from MVKE (Sales Data for Material) by Material
    when order type is 'RAS' (Repairs/Service)
    and populate line item's Additional data A
      INCLUDE zue_sd_0006.
      INCLUDE zue_sd_0001.
    include ZUE_SD_0032.
      INCLUDE zue_sd_0002.
    Get similar data (as above) from Servicable Material
      INCLUDE zue_sd_0003.
    *}   INSERT
    Determine Delivery Priority from SH Partner
    11/02/2001
      SELECT SINGLE lprio
      FROM knvv
      INTO vbap-lprio
      WHERE kunnr = kuwev-kunnr AND
            vkorg = vbak-vkorg AND
            vtweg = vbak-vtweg AND
            spart = vbak-spart.
    Determine Delivery Priority for Order Type RAS
      INCLUDE zsd_check_pstyv_werks.
    To re-determine Matwa if the replacement item is changed afterwards
    Niranjan 05/10/05 and ECLARKE
    INCLUDE zue_sd_0021.
    Mod for all sales organizations
    Determination of Profit Center
    06/24/03
      INCLUDE zue_sd_0007.
    End PRCTR Determination for KSI's document
    KSI modification
    Code to enter the actual part number of the item being repaired,
    rather than "REPAIR"
    09/18/02  GM
      DATA: intercoflag TYPE c.
      PERFORM zz_determine_cross_comp USING vbak-vkorg
                                            vbap-werks
                                            intercoflag.
      IF intercoflag = 'Y'
        AND
        ( vbap-pstyv = 'IRIN' OR vbap-pstyv = 'ZRIN' ).
        SELECT SINGLE matwa INTO vbap-matwa FROM vbap
        WHERE vbeln = vbap-vbeln AND posnr = vbap-uepos.
        IF sy-subrc NE 0.
          MESSAGE e006(z1) WITH vbap-uepos.
        ENDIF.
      ENDIF.
    End material look up modification GM 9/17/02
    KSI modification
    DP90 Only:
    Remove Billing Block from IRIN items and moved them to the header
    10/06/02 CNG
    11/18/2002     Tr-DEVK917363
    Added Sales Orgs 5040 & 5060
    KSI modification
    06/10/2003   CNG  CN01
    If IRIN, clear billing block at item level
      IF sy-tcode = 'DP90'.
      IF vbap-werks = '7000' AND vbak-vkorg = '5010' AND"            SM01-
        vbap-pstyv = 'IRIN'."                                        SM01-
        IF vbap-werks = '7000' AND"                                    SM01+
           ( vbak-vkorg IN i_zsd01_vkorg OR"                    SM01+
             vbak-vkorg = '5040' OR"                                   SM01+
    Removed >>
            vbak-vkorg = '5060' )"              SM01+                CN01-
         AND vbap-pstyv = 'IRIN'."              SM01+                CN01-
        vbak-faksk = '02'.
    Removed <<
    Inserted - check and block for line item IRIN only
             vbak-vkorg = '5060' )."                                   SM01+
          vbak-faksk = '02'.
         IF vbap-pstyv = 'IRIN'."                                      CN01+
            CLEAR vbap-faksp.
    Inserted - check and block for line item IRIN only
          ENDIF.
        ENDIF.
      ENDIF.
    KSI modification
    Routine to populate VBAP-ZZEDATU and VBAP-ZZVDATU on change and
    creation of order
    02/10/03 CNG
      PERFORM check_custom_dates.
    KSE Modification to create return item automatically**
    Copied from Niranjan's routine tested in SND210  Date 04/05/03
      INCLUDE zue_sd_0008.
    User Exit for Service Processing - Clear Results
    Analysis Key in sales order item for non-KSE service
    items.  DEVK927084       W. Miller 05/12/2003
    Changed to validate by plant instead of sales org.
    06/30/03    BEGIN>>>
    if not vbak-vkorg = '5090' and vbap-bedae = 'SE'.
    *Added 5000 for  KSEM Prjct 02-09-2006 EC
      IF NOT ( vbap-werks = '9000' OR vbap-werks = '5000' )
      AND ( vbap-bedae = 'SE' OR VBAP-BEDAE = 'SERA' ).
    06/30/03    END  <<<<
        CLEAR vbap-abgrs.
      ENDIF.
    End of DEVK924084
    */ Author             :  w/ Trimb.
    */ Date               : 10/07/2003   ---> Repair No : DEVK930002
    */ Description        : KSE Modification For plant 9000, to check the
    */                      material is 'Non-R' for RAS order type
    */                      and is 'R' for ZREX and ZWAR order types.
    *Added lines below for -  There is a user exit which exists that does
    *not allow materials that do not begin with an "R" to be posted into
    *plant 9000 if they are attached to a ZWAR order type.  KSE/KSEA would
    *like to modify this exit to allow materials with profit centers
    *5090-03003 and 5090-04003 to be posted.
    *ECLARKE/Niranjan 07-29-2004
    *________________________n 07-29-2004__________________
      DATA: flag_dexe.
      TABLES: zzue027.
      CLEAR: flag_dexe.
      SELECT SINGLE werks auart prctr INTO (zzue027-werks, zzue027-auart,
      zzue027-prctr) FROM zzue027 WHERE werks = vbap-werks AND auart =
      vbak-auart AND prctr = vbap-prctr.
      IF sy-subrc = 0.
        flag_dexe = 'X'.
      ENDIF.
    *________________________ 07-29-2004__________________
      IF flag_dexe IS INITIAL. " 07-29-2004
        IF vbap-werks IN i_zsd09_werks.
       IF ( vbak-auart IN i_zsd02_auart AND vbap-pstyv IN i_zsd04_pstyv AND
                 vbap-matwa(1) = 'R' ) OR ( vbak-auart IN i_zsd02_auart AND
                      vbap-pstyv IN i_zsd03_pstyv AND vbap-matnr(1) = 'R' ).
            IF vbap-matwa(1) = 'R'.
              MESSAGE e001(zkse) WITH vbap-matwa vbap-posnr vbak-auart
                vbap-pstyv.
            ENDIF.
            IF vbap-matnr(1) = 'R'.
              MESSAGE e001(zkse) WITH vbap-matnr vbap-posnr vbak-auart
              vbap-pstyv.
            ENDIF.
          ELSEIF ( vbak-auart IN i_zsd03_auart AND vbap-pstyv IN
      i_zsd04_pstyv AND vbap-matwa(1) <> 'R' ) OR ( vbak-auart IN
    i_zsd03_auart AND vbap-pstyv IN i_zsd03_pstyv AND vbap-matnr(1) <> 'R' )
      OR ( vbak-auart IN i_zsd04_auart AND vbap-pstyv IN i_zsd04_pstyv AND
    vbap-matwa(1) <> 'R' ) OR ( vbak-auart IN i_zsd04_auart AND vbap-pstyv
      IN i_zsd03_pstyv AND vbap-matnr(1) <> 'R' ).
            IF vbap-matwa(1) <> 'R'.
              MESSAGE e001(zkse) WITH vbap-matwa vbap-posnr vbak-auart
              vbap-pstyv.
            ENDIF.
            IF vbap-matnr(1) <> 'R'.
              MESSAGE e001(zkse) WITH vbap-matnr vbap-posnr vbak-auart
              vbap-pstyv.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
      INCLUDE zue_sd_0015.
    include zue_sd_0019
    Enhancement to populate Storage Location for sales order 5090
    and plant 9000. But any companies can use it as long as entries are
    maintained in table zsd_default_sloc
    Niranjan  02/11/04
    DEVK933987 - MV45AFZZ - MPitisci 4/12/2004
       DEVK933989 - ZUE_SD_0019  include
       DEVK933998 - ZSD_DEFAULT_SLOC table
      INCLUDE zue_sd_0019.
    To give hard error for D-CHin status 07 for items catgories other
    than trade.
    04/10/05
      INCLUDE zue_sd_0034.
    Checks if the storage location value is changed and checks to see if
    the storage location correlates to the P3 Partner function rules
    08/05/2005
      INCLUDE zue_sd_0036.
      INCLUDE zue_sd_0013.
    ENDFORM.
    *eject
          FORM USEREXIT_MOVE_FIELD_TO_VBEP                              *
          This userexit can be used to move some fields into the sales  *
          dokument schedule line workaerea VBEP                         *
          SVBEP-TABIX = 0:  Create schedule line                        *
          SVBEP-TABIX > 0:  Change schedule line                        *
          This form is called at the end of form VBEP_FUELLEN.          *
    FORM userexit_move_field_to_vbep.
      DATA: intercoflag TYPE c.
    VBEP-zzfield = xxxx-zzfield2.
    Assign 'ZP' to Schedule line Category for Acct Assignment Grp =
    Chui 10/23/2001
      DATA: zzbukrs LIKE tvko-bukrs,
            zzmtpos LIKE mvke-mtpos.
      DATA: z_vbelv LIKE vbfa-vbelv,"                                KN03
            z_auart LIKE vbak-auart,"                                KN03
            z_vbtyp LIKE vbak-vbtyp,"                                KN03
            z_ettyp LIKE vbep-ettyp,"                                KN03
            z_pstyv LIKE vbap-pstyv,"                                KN04
            z_posnr LIKE vbap-posnr."                                KN04
      DATA: BEGIN OF zzwerks OCCURS 0,
              werks LIKE marc-werks,
            END OF zzwerks.
      IF vbak-vbtyp CN 'AB'. "ECLARKE 01-26-04
        SELECT SINGLE bukrs
          INTO zzbukrs
          FROM tvko
         WHERE vkorg = vbak-vkorg.
        SELECT w~werks
          INTO TABLE zzwerks
          FROM t001w AS w JOIN t001k AS k
            ON wbwkey = kbwkey
         WHERE k~bukrs = zzbukrs.
        SELECT SINGLE mtpos INTO zzmtpos
          FROM mvke
         WHERE matnr = vbap-matnr
           AND vkorg = vbak-vkorg
           AND vtweg = vbak-vtweg.
    *lines added for valuated customer-returns project by msn
    110903. It will set required schedule line category YR on specific
    item categories if the document created is of type RE with reference
    document being an invoice of type F2
    *ECLARKE & MILIND NAND. 11-11-2003.
    *Schedule Line Category - Valuate Customer Returns Stock
    INCLUDE zue_sd_0010.
        CASE vbap-pstyv.
          WHEN  'ZRPN'.
            EXIT.
          WHEN 'TAN' OR 'TANN'.
            IF vbkd-ktgrd = '01'.            " Added 6/5/02
              IF vbep-ettyp = 'CN'.
                vbep-ettyp = 'ZA'.
              ELSE.
                vbep-ettyp = 'ZP'.
              ENDIF.
            ENDIF.
    **Ernesto EDIT for UE DEMO 10/15/2002
    ***************TEST FUNCTION MODULE FOR USER EXIT MAINT.******
    **ADDED  A CASE STATEMENT BELOW.
    CALL FUNCTION 'Z_UE_SD_GET_SCHEDULE_LINE_CAT'
          EXPORTING
               pstyv  = vbap-pstyv
               ktgrd  = vbkd-ktgrd
               ettyp2 = vbep-ettyp
          IMPORTING
               ettyp  = vbep-ettyp.
    ****************END OF TEST SOURCE CODE******************
            READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
         check sy-subrc ne 0.
            IF sy-subrc NE 0.
    Change inserted by Arvind R Kulkarni; 07/22/2002
    TAN -> ZAN; TANN => ZANN
           vbap-pstyv = 'ZAN'.
              IF vbap-pstyv = 'TAN'.
                vbap-pstyv = 'ZAN'.
              ELSEIF vbap-pstyv = 'TANN'.
                vbap-pstyv = 'ZANN'.
              ENDIF.
    end of change
            ENDIF.
    *ADDED CASE HERE FOR TEST FOR SYNTAX CHECK 10/15/2002
    *CASE vbap-pstyv.
          WHEN 'ZAN'.
            READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
            CHECK sy-subrc EQ 0.
            vbap-pstyv = 'TAN'.
          WHEN 'ZANN'.
            READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
            CHECK sy-subrc EQ 0.
            vbap-pstyv = 'TANN'.
          WHEN 'ZTAN'.
            IF vbkd-ktgrd = '01'.            " Added 6/5/02
              IF vbep-ettyp = 'CN'.
                vbep-ettyp = 'ZA'.
              ELSE.
                vbep-ettyp = 'ZP'.
              ENDIF.
            ENDIF.
            READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
         check sy-subrc ne 0.
            IF sy-subrc NE 0.
              IF vbep-ettyp = 'CN'.
                vbep-ettyp = 'ZA'.
              ELSE.
                vbep-ettyp = 'ZP'.
              ENDIF.
            ENDIF.
    03/23/2005 KN03 Set Schedule Line default to ZF order type ZFD,
    item cat ZTAN, sales org 5060, 5070, and 5071
            IF vbak-auart EQ 'ZFD' AND
            ( vbak-vkorg = '5060' OR vbak-vkorg = '5070'
             OR vbak-vkorg = '5071' ).
              vbep-ettyp = 'ZF'.
            ENDIF.
    Begin of insertion for IRAT processing
    Arvind R Kulkarni; Dated: 07/17/2002.
    Changed to include YRAT; ; 11/22/2002
          WHEN 'IRAT' OR 'YRAT'.
            IF vbak-auart NE 'ZWAR'.
    the sales order is NOT a ZWAR
              READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
              IF sy-subrc NE 0.
    the transaction IS intercompany
                IF vbep-ettyp = 'CN'.
                  vbep-ettyp = 'YN'.
                ELSE.
                  vbep-ettyp = 'YL'.
                ENDIF.
              ELSE.
    the transaction IS NOT intercompany
                IF vbep-ettyp = 'CN'.
                  vbep-ettyp = 'ZN'.
                ELSE.
                  vbep-ettyp = 'ZL'.
                ENDIF.
              ENDIF.
              IF vbkd-ktgrd = '01'.
    sale is to an affiliate in local sales org
                IF vbep-ettyp = 'CN'.
                  vbep-ettyp = 'YN'.
                ELSE.
                  vbep-ettyp = 'YL'.
                ENDIF.
              ENDIF.
            ELSE.
    the sales order IS a ZWAR
              READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
              IF sy-subrc NE 0.
    the transaction IS intercompany
                IF vbep-ettyp = 'CN'.
                  vbep-ettyp = 'ZA'.
                ELSE.
                  vbep-ettyp = 'ZP'.
                ENDIF.
         ELSE.
    the transaction IS NOT intercompany
    NOTHING NEEDS TO BE DONE FOR ZWAR DOMESTIC
    STD SCHED LINE CATEGORIES TO BE MAINTAINED.
           IF VBEP-ETTYP = 'CN'.
             VBEP-ETTYP = 'ZN'.
           ELSE.
             VBEP-ETTYP = 'ZL'.
           ENDIF.
         ENDIF.
         IF VBKD-KTGRD = '01'.
    sale is to an affiliate in local sales org
                IF vbep-ettyp = 'CN'.
                  vbep-ettyp = 'ZA'.
                ELSE.
                  vbep-ettyp = 'ZP'.
                ENDIF.
              ENDIF.
            ENDIF.
    End of insertion for IRAT processing
          WHEN 'IRRS' OR 'IRRE' OR 'IRLA' OR 'IRLB' OR 'KBN' OR 'TAQ'
    KSI Modification    04/22/03
    Exclude check for item category 'YKW'
            OR 'YTAN' OR 'ZKLN' OR 'KAN'  OR 'ZTAQ'
            OR 'YKW' OR 'IRRP'  OR 'ZKBC' OR 'ZKBN' OR 'ZKAN' OR 'KLN'.
          or  'ZKEN' OR 'ZKEC' or ZREK OR 'KEN'.
            EXIT.
          WHEN 'ZTR1' OR 'ZRBB' OR 'ZREB' OR 'ZREC' OR 'ZREF' OR 'ZREN'
    Removed ZRTN to validate plant 9000
            OR 'ZRFF' OR 'ZRNB' OR 'ZRNN' OR 'REN' OR 'RENN'
            OR 'ZLN' OR 'IRAL' OR 'ZTR0' OR 'KLN'.
            EXIT.
    03/23/2005 KN03 set default sched line for KE & ZKE
          WHEN 'KEN' OR 'ZKEG' OR 'ZKEN' OR 'ZKEC'.
            IF vbak-vkorg EQ '5070'.
              vbep-ettyp = 'Z0'.
            ENDIF.
          WHEN 'ZREK'.
            INCLUDE zue_sd_0033.
            IF vbap-werks = '9000'.                    " KN04
              IF vbkd-ktgrd = '01'.                    " KN04
                IF  z_auart = 'ZFD ' and z_pstyv = 'KLN '.    " KN04
                  vbep-ettyp = 'YK'.                   " KN04
                ENDIF.
              ENDIF.
            ENDIF.
    KSE Modification    04/10/03
    For Item Cate 'ZRTN'
    Assign 'YQ' to Schedule line cat, if cross-company
    'YU' if not.
          WHEN 'ZRTN'.

    Hi,
    Step 1) Create a include ZSD_DEFAULT_BWTAR and add the following code
    DATA: S_MBEW TYPE MBEW.
    Check for create and change.
    IF T180-TRTYP = 'H' OR T180-TRTYP = 'V'.
    IF VBAK-VKORG = '5090' AND VBAK-AUART = 'ZSBK'.
    SELECT SINGLE * FROM MBEW
    INTO S_MBEW
    WHERE MATNR = VBAP-MATNR
    AND BWKEY = VBAP-WERKS.
    IF SY-SUBRC = 0 AND S_MBEW-BWTTY = '1'.
    Check if it is for line item creation.
    WHen the changes the value this will not trigger.
    IF SVBAP-TABIX = 0.
    VBAP-BWTAR = 'RH'.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    STEP 2)
    Add the include to the subroutine USEREXIT_FIELD_TO_VBAP. The include statement is marked in bold.
    *TABLES: zue003, tvarv.
    *DATA: werks LIKE vbap-werks.
    Start of DEVK923935.
    Global Definition
    INCLUDE zsdi_mv45afzz_top.
    FORM ZZEXAMPLE *
    text...................................... *
    *FORM ZZEXAMPLE.
    *ENDFORM.
    *eject
    FORM USEREXIT_DELETE_DOCUMENT *
    This userexit can be used to delete data in additional tables *
    when a sales document is deleted. *
    This form is called in dialog at the end of form BELEG_LOESCHEN*
    just before form BELEG_SICHERN is performed to delete the *
    datas on the database. *
    FORM userexit_delete_document.
    ENDFORM.
    *eject
    FORM USEREXIT_FIELD_MODIFICATION *
    This userexit can be used to modify the attributes of *
    screen fields. *
    This form is processed for each field in the screen. *
    The use of the fields screen-group1 to screen-group4 is: *
    Screen-group1: Automatic modification contolles by transaction*
    MFAW. *
    Screen-group2: Contents 'LOO' for steploop-fields. *
    Screen-group3: Used for modififaction, which are dependent on *
    control tables or other fix information. *
    Screen-group4: Unused *
    For field mofifications, which are dependent on the document *
    status, you can use the status field in the workareas *
    XVBAP for item status and XVBUK for header status. *
    This form is called from module FELDAUSWAHL. *
    FORM userexit_field_modification.
    DATA: zvbtyp LIKE vbfa-vbtyp_n,
    zvbeln LIKE vbfa-vbeln.
    CASE SCREEN-GROUP3.
    WHEN '900'.
    IF VBAK-VBTYP NE 'A'.
    SCREEN-ACTIVE = 0.
    ENDIF.
    ENDCASE.
    CASE SCREEN-NAME.
    WHEN 'VBAK-VBELN'.
    SCREEN-ACTIVE = 0.
    ENDCASE.
    IF vbap-pstyv = 'IRLA'.
    CHECK sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
    IF sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
    SELECT SINGLE vbtyp_n INTO zvbtyp FROM vbfa
    WHERE vbelv = xvbap-vbeln AND posnv = vbap-posnr.
    CHECK sy-subrc <> 0.
    IF sy-subrc <> 0.
    CASE screen-group2.
    WHEN 'LOO'.
    IF screen-name = 'VBAP-WERKS'.
    screen-input = 1.
    ENDIF.
    ENDCASE.
    ENDIF.
    ENDIF.
    ENDIF.
    Make Reject Reason modifiable when document category is 'RETURNS'
    06/10/02
    Modified by Ak for check on subsequent credit memo
    This opens up the field - reason for rejection - for change even after
    the material has been received into the system on the returns delivery
    but before the Returns Credit Memo has been issued.
    Changed field to be modified from Reason for Rejection to Item
    Category on the line item for which no credit to be given.
    select single * from vbfa where vbelv = vbak-vbeln and
    vbtyp_n = 'O'.
    select a Returns Credit Memo document from VBFA that has NOT been
    cancelled. if the selection is successful, credit has been issued and
    the field should stay locked. however, if selection is unsuccessful
    and since no credit has been issued, the field for item category
    must be available for changing, if need be.
    check: vbak-vbtyp = 'H'.
    IF vbak-vbtyp = 'H'.
    IF sy-tcode = 'VA01' OR sy-tcode = 'VA02'.
    SELECT SINGLE vbrk~vbeln INTO zvbeln
    FROM vbfa INNER JOIN vbrk ON vbfavbeln = vbrkvbeln
    WHERE vbfavbelv = vbak-vbeln AND vbfaposnv = vbap-posnr
    AND vbfavbtyp_n = 'O' AND vbrkfksto NE 'X'.
    CHECK sy-subrc NE 0.
    CASE screen-group2.
    WHEN 'LOO'.
    IF screen-name = 'VBAP-PSTYV'.
    screen-input = 1.
    ENDIF.
    ENDCASE.
    ENDIF.
    ENDIF.
    INCLUDE zue_sd_0029.
    **If no invoice is created then make PSTYV ready for input for item
    **category IRIN.
    INCLUDE zue_sd_0031.
    ENDFORM.
    *eject
    FORM USEREXIT_MOVE_FIELD_TO_VBAK *
    This userexit can be used to move some fields into the sales *
    dokument header workaerea VBAK. *
    SVBAK-TABIX = 0: Create header *
    SVBAK-TABIX > 0: Change header *
    This form is called at the end of form VBAK_FUELLEN. *
    FORM userexit_move_field_to_vbak.
    vbak-zzfield = xxxx-zzfield2.
    **Ernesto EDIT for UE DEMO 10/16/2002
    SELECT single * INTO TABLE i_tvarv FROM tvarv WHERE name =
    *ZKS_KSEASORG'.
    Start of DEVK923935.
    Initialization Section
    INCLUDE zsdi_mv45afzz_initialization.
    End of DEVK923935.
    **{ INSERT SNDK900075 1
    Change user exit according to Online Documentation to
    copy ship-to info to sale doc header (VBAK)
    *CODE BELOW*REPLACED WITH zue_sd_0017***********
    IF vbak-kvgr1 IS INITIAL AND
    vbak-kvgr2 IS INITIAL AND
    vbak-kvgr3 IS INITIAL AND
    vbak-kvgr4 IS INITIAL AND
    vbak-kvgr5 IS INITIAL.
    SELECT SINGLE vkgrp vkbur kvgr1 kvgr2 kvgr3 kvgr4 kvgr5
    FROM knvv INTO (vbak-vkgrp, vbak-vkbur, vbak-kvgr1, vbak-kvgr2,
    vbak-kvgr3, vbak-kvgr4, vbak-kvgr5)
    WHERE kunnr = kuwev-kunnr AND
    vkorg = vbak-vkorg AND
    vtweg = vbak-vtweg AND
    spart = vbak-spart.
    ENDIF.
    *CODE ABOVE*REPLACED WITH zue_sd_0017***********
    INCLUDE zue_sd_0017.
    *CODE BELOW*REPLACED WITH zue_sd_0017***********
    IF svbak-tabix = 0.
    SELECT SINGLE vsbed FROM knvv INTO vbak-vsbed
    *WHERE kunnr = kuwev-kunnr AND
    vkorg = vbak-vkorg AND
    vtweg = vbak-vtweg AND
    spart = vbak-spart.
    ENDIF.
    *CODE ABOVE*REPLACED WITH zue_sd_0017***********
    Start of DEVK915182
    **Ernesto EDIT for UE DEMO 10/15/2002.
    READ TABLE i_tvarv WITH KEY name = 'ZKS_KSEASORG'.
    IF sy-subrc = 0.
    IF vbak-vkorg = i_tvarv-low.
    IF vbak-vkorg IN i_zsd01_vkorg.
    IF sy-tcode EQ 'VA01'.
    IF sy-dynnr EQ '4021'.
    IF sy-ucomm NE 'SICH'.
    l_pop_type = 'X'.
    INCLUDE zue_sd_0027.
    PERFORM partner_validation USING 'X'.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    end-of DEVK915182
    Project : KSEA - Sales Force Expansion of 1st Jan 2003
    Include for KSEA Sales Org 5010 only for PopUp Windows " 12/23/2002
    INCLUDE zsd_salesforce_expnsn_hdr." Include 1 of 4
    */ Description : KSE Modification to remove the billing block for
    */ returns/credits/debits if sales Org is 5090.
    *ORIGINAL CODE
    *if vbak-vkorg = '5090' and vbak-vbtyp ca 'HKL'.
    *vbak-faksk = ' '.
    *endif.
    IF sy-tcode = 'VA01'.
    IF vbak-vkorg IN i_zsd09_vkorg.
    IF vbak-vbtyp IN i_zsd09_vbtyp.
    vbak-faksk = ' '.
    ENDIF.
    ENDIF.
    ENDIF.
    BREAK-POINT.
    INCLUDE zue_sd_0039.
    ENDFORM.
    *eject
    FORM USEREXIT_MOVE_FIELD_TO_VBAP *
    This userexit can be used to move some fields into the sales *
    dokument item workaerea VBAP *
    SVBAP-TABIX = 0: Create item *
    SVBAP-TABIX > 0: Change item *
    This form is called at the end of form VBAP_FUELLEN. *
    FORM userexit_move_field_to_vbap.
    VBAP-zzfield = xxxx-zzfield2.
    *{ INSERT SNDK900164 1
    Item Category Determination
    DATA: zzbukrs LIKE tvko-bukrs,
    zzmtpos LIKE mvke-mtpos.
    DATA: BEGIN OF zzwerks OCCURS 0,
    werks LIKE marc-werks,
    END OF zzwerks.
    DATA: zdoccat LIKE tvak-vbklt,
    zvmsta LIKE mvke-vmsta,
    zspvbc LIKE tvms-spvbc,
    zvmstb LIKE tvmst-vmstb.
    DATA: z_xvbap LIKE xvbap,
    yp1 LIKE t001k-bwkey,
    z_uepos_bukrs LIKE t001k-bukrs.
    IF i_zsd01_vkorg[] IS INITIAL.
    If the initialization was not performed in the Fill VBAK,
    reload data
    INCLUDE zsdi_mv45afzz_initialization.
    ENDIF.
    SELECT SINGLE bukrs
    INTO zzbukrs
    FROM tvko
    WHERE vkorg = vbak-vkorg.
    SELECT w~werks
    INTO TABLE zzwerks
    FROM t001w AS w JOIN t001k AS k
    ON wbwkey = kbwkey
    WHERE k~bukrs = zzbukrs.
    SELECT SINGLE mtpos INTO zzmtpos
    FROM mvke
    WHERE matnr = vbap-matnr
    AND vkorg = vbak-vkorg
    AND vtweg = vbak-vtweg.
    Export Plant - inport in ZXQSMU07
    EXPORT zz_plant = vbap-werks TO MEMORY ID 'ZZPLANT'. " KN05
    check vbap-pstyv = 'TAN' or vbap-pstyv = 'TANN'.
    removed the CHECK statement and replaced by IF-ENDIF.
    inserted by arvind r kulkarni for TAN, TANN switching
    IF vbap-pstyv = 'TAN' OR vbap-pstyv = 'TANN'
    OR vbap-pstyv = 'REN' " KN02
    OR vbap-pstyv = 'RENN' . " KN02
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    check sy-subrc ne 0.
    IF sy-subrc NE 0.
    IF vbap-pstyv = 'TAN'.
    vbap-pstyv = 'ZAN'.
    ELSEIF vbap-pstyv = 'REN'. " KN02
    vbap-pstyv = 'YREN'. " KN02
    ELSEIF vbap-pstyv = 'RENN'. " KN02
    vbap-pstyv = 'YRNN'. " KN02
    ELSEIF vbap-pstyv = 'TANN'.
    vbap-pstyv = 'ZANN'.
    ENDIF.
    ENDIF.
    ENDIF.
    INCLUDE zue_sd_0014.
    Begin insert for check for discontinued material in repair orders
    LOGIC: For IRAT item categories, check if the material status field *
    blank or populated. *
    If populated, get the value of the D-Chain specific status *
    and issue warning/error message with the associated text *
    from config the D-Chain specific material status. *
    Included YRAT to this logic (YRAT is free IRAT); 11/22/2002. *
    IF vbap-pstyv = 'IRAT' OR vbap-pstyv = 'YRAT'.
    CLEAR: zvmsta, zvmstb, zspvbc.
    SELECT SINGLE vmsta INTO zvmsta FROM mvke WHERE
    matnr = vbap-matnr AND vkorg = vbak-vkorg
    AND vtweg = vbak-vtweg.
    CHECK: NOT zvmsta IS INITIAL.
    IF NOT zvmsta IS INITIAL.
    SELECT SINGLE spvbc INTO zspvbc FROM tvms WHERE
    vmsta = zvmsta.
    SELECT SINGLE vmstb INTO zvmstb FROM tvmst WHERE
    spras = sy-langu AND vmsta = zvmsta.
    CASE zspvbc.
    WHEN 'A'.
    MESSAGE ID 'V1' TYPE 'W' NUMBER '028' WITH zvmsta zvmstb.
    WHEN 'B'.
    MESSAGE ID 'V1' TYPE 'E' NUMBER '028' WITH zvmsta zvmstb.
    ENDCASE.
    ENDIF.
    ENDIF.
    End insert for check for discontinued material in repair orders
    INCLUDE zue_sd_0004.
    INCLUDE zue_sd_0005.
    end of DEVK923935.
    ****************END OF TEST SOURCE CODE******************
    Begin Insert to assign material entered for TRADE material
    Ak; 11/08/2002.
    For trade material, the system will now mandate entry of higher level
    item number and based on this, the system will bring in specialty,
    material number (into material entered) and profit centre from this
    higher level item into the line item for material TRADE.
    Added MVGR2 & 3 to pass onto TRADE material; 11/12/2002 - Arvind.
    Added material a/c assignment grp to trade-in material.
    Added ZTRD item category to this logic. - Arvind 11/18/2002.
    INCLUDE zzsdprc01.
    INCLUDE zue_sd_0028.
    End Insert to assign material entered for TRADE material
    ********************End of DIP Profile change************************
    Get custom group data from MVKE (Sales Data for Material) by Material
    when order type is 'RAS' (Repairs/Service)
    and populate line item's Additional data A
    INCLUDE zue_sd_0006.
    INCLUDE zue_sd_0001.
    include ZUE_SD_0032.
    INCLUDE zue_sd_0002.
    Get similar data (as above) from Servicable Material
    INCLUDE zue_sd_0003.
    *} INSERT
    Determine Delivery Priority from SH Partner
    11/02/2001
    SELECT SINGLE lprio
    FROM knvv
    INTO vbap-lprio
    WHERE kunnr = kuwev-kunnr AND
    vkorg = vbak-vkorg AND
    vtweg = vbak-vtweg AND
    spart = vbak-spart.
    Determine Delivery Priority for Order Type RAS
    INCLUDE zsd_check_pstyv_werks.
    To re-determine Matwa if the replacement item is changed afterwards
    Niranjan 05/10/05 and ECLARKE
    INCLUDE zue_sd_0021.
    Mod for all sales organizations
    Determination of Profit Center
    06/24/03
    INCLUDE zue_sd_0007.
    End PRCTR Determination for KSI's document
    KSI modification
    Code to enter the actual part number of the item being repaired,
    rather than "REPAIR"
    09/18/02 GM
    DATA: intercoflag TYPE c.
    PERFORM zz_determine_cross_comp USING vbak-vkorg
    vbap-werks
    intercoflag.
    IF intercoflag = 'Y'
    AND
    ( vbap-pstyv = 'IRIN' OR vbap-pstyv = 'ZRIN' ).
    SELECT SINGLE matwa INTO vbap-matwa FROM vbap
    WHERE vbeln = vbap-vbeln AND posnr = vbap-uepos.
    IF sy-subrc NE 0.
    MESSAGE e006(z1) WITH vbap-uepos.
    ENDIF.
    ENDIF.
    End material look up modification GM 9/17/02
    KSI modification
    DP90 Only:
    Remove Billing Block from IRIN items and moved them to the header
    10/06/02 CNG
    11/18/2002 Tr-DEVK917363
    Added Sales Orgs 5040 & 5060
    KSI modification
    06/10/2003 CNG CN01
    If IRIN, clear billing block at item level
    IF sy-tcode = 'DP90'.
    IF vbap-werks = '7000' AND vbak-vkorg = '5010' AND" SM01-
    vbap-pstyv = 'IRIN'." SM01-
    IF vbap-werks = '7000' AND" SM01+
    ( vbak-vkorg IN i_zsd01_vkorg OR" SM01+
    vbak-vkorg = '5040' OR" SM01+
    Removed >>
    vbak-vkorg = '5060' )" SM01+ CN01-
    AND vbap-pstyv = 'IRIN'." SM01+ CN01-
    vbak-faksk = '02'.
    Removed <<
    Inserted - check and block for line item IRIN only
    vbak-vkorg = '5060' )." SM01+
    vbak-faksk = '02'.
    IF vbap-pstyv = 'IRIN'." CN01+
    CLEAR vbap-faksp.
    Inserted - check and block for line item IRIN only
    ENDIF.
    ENDIF.
    ENDIF.
    KSI modification
    Routine to populate VBAP-ZZEDATU and VBAP-ZZVDATU on change and
    creation of order
    02/10/03 CNG
    PERFORM check_custom_dates.
    KSE Modification to create return item automatically**
    Copied from Niranjan's routine tested in SND210 Date 04/05/03
    INCLUDE zue_sd_0008.
    User Exit for Service Processing - Clear Results
    Analysis Key in sales order item for non-KSE service
    items. DEVK927084 W. Miller 05/12/2003
    Changed to validate by plant instead of sales org.
    06/30/03 BEGIN>>>
    if not vbak-vkorg = '5090' and vbap-bedae = 'SE'.
    *Added 5000 for KSEM Prjct 02-09-2006 EC
    IF NOT ( vbap-werks = '9000' OR vbap-werks = '5000' )
    AND ( vbap-bedae = 'SE' OR VBAP-BEDAE = 'SERA' ).
    06/30/03 END <<<<
    CLEAR vbap-abgrs.
    ENDIF.
    End of DEVK924084
    */ Author : w/ Trimb.
    */ Date : 10/07/2003 ---> Repair No : DEVK930002
    */ Description : KSE Modification For plant 9000, to check the
    */ material is 'Non-R' for RAS order type
    */ and is 'R' for ZREX and ZWAR order types.
    *Added lines below for - There is a user exit which exists that does
    *not allow materials that do not begin with an "R" to be posted into
    *plant 9000 if they are attached to a ZWAR order type. KSE/KSEA would
    *like to modify this exit to allow materials with profit centers
    *5090-03003 and 5090-04003 to be posted.
    *ECLARKE/Niranjan 07-29-2004
    *________________________n 07-29-2004__________________
    DATA: flag_dexe.
    TABLES: zzue027.
    CLEAR: flag_dexe.
    SELECT SINGLE werks auart prctr INTO (zzue027-werks, zzue027-auart,
    zzue027-prctr) FROM zzue027 WHERE werks = vbap-werks AND auart =
    vbak-auart AND prctr = vbap-prctr.
    IF sy-subrc = 0.
    flag_dexe = 'X'.
    ENDIF.
    *________________________ 07-29-2004__________________
    IF flag_dexe IS INITIAL. " 07-29-2004
    IF vbap-werks IN i_zsd09_werks.
    IF ( vbak-auart IN i_zsd02_auart AND vbap-pstyv IN i_zsd04_pstyv AND
    vbap-matwa(1) = 'R' ) OR ( vbak-auart IN i_zsd02_auart AND
    vbap-pstyv IN i_zsd03_pstyv AND vbap-matnr(1) = 'R' ).
    IF vbap-matwa(1) = 'R'.
    MESSAGE e001(zkse) WITH vbap-matwa vbap-posnr vbak-auart
    vbap-pstyv.
    ENDIF.
    IF vbap-matnr(1) = 'R'.
    MESSAGE e001(zkse) WITH vbap-matnr vbap-posnr vbak-auart
    vbap-pstyv.
    ENDIF.
    ELSEIF ( vbak-auart IN i_zsd03_auart AND vbap-pstyv IN
    i_zsd04_pstyv AND vbap-matwa(1) <> 'R' ) OR ( vbak-auart IN
    i_zsd03_auart AND vbap-pstyv IN i_zsd03_pstyv AND vbap-matnr(1) <> 'R' )
    OR ( vbak-auart IN i_zsd04_auart AND vbap-pstyv IN i_zsd04_pstyv AND
    vbap-matwa(1) <> 'R' ) OR ( vbak-auart IN i_zsd04_auart AND vbap-pstyv
    IN i_zsd03_pstyv AND vbap-matnr(1) <> 'R' ).
    IF vbap-matwa(1) <> 'R'.
    MESSAGE e001(zkse) WITH vbap-matwa vbap-posnr vbak-auart
    vbap-pstyv.
    ENDIF.
    IF vbap-matnr(1) <> 'R'.
    MESSAGE e001(zkse) WITH vbap-matnr vbap-posnr vbak-auart
    vbap-pstyv.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    INCLUDE zue_sd_0015.
    include zue_sd_0019
    Enhancement to populate Storage Location for sales order 5090
    and plant 9000. But any companies can use it as long as entries are
    maintained in table zsd_default_sloc
    Niranjan 02/11/04
    DEVK933987 - MV45AFZZ - MPitisci 4/12/2004
    DEVK933989 - ZUE_SD_0019 include
    DEVK933998 - ZSD_DEFAULT_SLOC table
    INCLUDE zue_sd_0019.
    To give hard error for D-CHin status 07 for items catgories other
    than trade.
    04/10/05
    INCLUDE zue_sd_0034.
    Checks if the storage location value is changed and checks to see if
    the storage location correlates to the P3 Partner function rules
    08/05/2005
    INCLUDE zue_sd_0036.
    INCLUDE zue_sd_0013.
    <b>**************New code********
    INCLUDE ZSD_DEFAULT_BWTAR.
    ********************************</b>
    ENDFORM.
    *eject
    FORM USEREXIT_MOVE_FIELD_TO_VBEP *
    This userexit can be used to move some fields into the sales *
    dokument schedule line workaerea VBEP *
    SVBEP-TABIX = 0: Create schedule line *
    SVBEP-TABIX > 0: Change schedule line *
    This form is called at the end of form VBEP_FUELLEN. *
    FORM userexit_move_field_to_vbep.
    DATA: intercoflag TYPE c.
    VBEP-zzfield = xxxx-zzfield2.
    Assign 'ZP' to Schedule line Category for Acct Assignment Grp =
    Chui 10/23/2001
    DATA: zzbukrs LIKE tvko-bukrs,
    zzmtpos LIKE mvke-mtpos.
    DATA: z_vbelv LIKE vbfa-vbelv," KN03
    z_auart LIKE vbak-auart," KN03
    z_vbtyp LIKE vbak-vbtyp," KN03
    z_ettyp LIKE vbep-ettyp," KN03
    z_pstyv LIKE vbap-pstyv," KN04
    z_posnr LIKE vbap-posnr." KN04
    DATA: BEGIN OF zzwerks OCCURS 0,
    werks LIKE marc-werks,
    END OF zzwerks.
    IF vbak-vbtyp CN 'AB'. "ECLARKE 01-26-04
    SELECT SINGLE bukrs
    INTO zzbukrs
    FROM tvko
    WHERE vkorg = vbak-vkorg.
    SELECT w~werks
    INTO TABLE zzwerks
    FROM t001w AS w JOIN t001k AS k
    ON wbwkey = kbwkey
    WHERE k~bukrs = zzbukrs.
    SELECT SINGLE mtpos INTO zzmtpos
    FROM mvke
    WHERE matnr = vbap-matnr
    AND vkorg = vbak-vkorg
    AND vtweg = vbak-vtweg.
    *lines added for valuated customer-returns project by msn
    110903. It will set required schedule line category YR on specific
    item categories if the document created is of type RE with reference
    document being an invoice of type F2
    *ECLARKE & MILIND NAND. 11-11-2003.
    *Schedule Line Category - Valuate Customer Returns Stock
    INCLUDE zue_sd_0010.
    CASE vbap-pstyv.
    WHEN 'ZRPN'.
    EXIT.
    WHEN 'TAN' OR 'TANN'.
    IF vbkd-ktgrd = '01'. " Added 6/5/02
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ENDIF.
    **Ernesto EDIT for UE DEMO 10/15/2002
    ***************TEST FUNCTION MODULE FOR USER EXIT MAINT.******
    **ADDED A CASE STATEMENT BELOW.
    CALL FUNCTION 'Z_UE_SD_GET_SCHEDULE_LINE_CAT'
    EXPORTING
    pstyv = vbap-pstyv
    ktgrd = vbkd-ktgrd
    ettyp2 = vbep-ettyp
    IMPORTING
    ettyp = vbep-ettyp.
    ****************END OF TEST SOURCE CODE******************
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    check sy-subrc ne 0.
    IF sy-subrc NE 0.
    Change inserted by Arvind R Kulkarni; 07/22/2002
    TAN -> ZAN; TANN => ZANN
    vbap-pstyv = 'ZAN'.
    IF vbap-pstyv = 'TAN'.
    vbap-pstyv = 'ZAN'.
    ELSEIF vbap-pstyv = 'TANN'.
    vbap-pstyv = 'ZANN'.
    ENDIF.
    end of change
    ENDIF.
    *ADDED CASE HERE FOR TEST FOR SYNTAX CHECK 10/15/2002
    *CASE vbap-pstyv.
    WHEN 'ZAN'.
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    CHECK sy-subrc EQ 0.
    vbap-pstyv = 'TAN'.
    WHEN 'ZANN'.
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    CHECK sy-subrc EQ 0.
    vbap-pstyv = 'TANN'.
    WHEN 'ZTAN'.
    IF vbkd-ktgrd = '01'. " Added 6/5/02
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ENDIF.
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    check sy-subrc ne 0.
    IF sy-subrc NE 0.
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ENDIF.
    03/23/2005 KN03 Set Schedule Line default to ZF order type ZFD,
    item cat ZTAN, sales org 5060, 5070, and 5071
    IF vbak-auart EQ 'ZFD' AND
    ( vbak-vkorg = '5060' OR vbak-vkorg = '5070'
    OR vbak-vkorg = '5071' ).
    vbep-ettyp = 'ZF'.
    ENDIF.
    Begin of insertion for IRAT processing
    Arvind R Kulkarni; Dated: 07/17/2002.
    Changed to include YRAT; ; 11/22/2002
    WHEN 'IRAT' OR 'YRAT'.
    IF vbak-auart NE 'ZWAR'.
    the sales order is NOT a ZWAR
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    IF sy-subrc NE 0.
    the transaction IS intercompany
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'YN'.
    ELSE.
    vbep-ettyp = 'YL'.
    ENDIF.
    ELSE.
    the transaction IS NOT intercompany
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZN'.
    ELSE.
    vbep-ettyp = 'ZL'.
    ENDIF.
    ENDIF.
    IF vbkd-ktgrd = '01'.
    sale is to an affiliate in local sales org
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'YN'.
    ELSE.
    vbep-ettyp = 'YL'.
    ENDIF.
    ENDIF.
    ELSE.
    the sales order IS a ZWAR
    READ TABLE zzwerks WITH TABLE KEY werks = vbap-werks.
    IF sy-subrc NE 0.
    the transaction IS intercompany
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ELSE.
    the transaction IS NOT intercompany
    NOTHING NEEDS TO BE DONE FOR ZWAR DOMESTIC
    STD SCHED LINE CATEGORIES TO BE MAINTAINED.
    IF VBEP-ETTYP = 'CN'.
    VBEP-ETTYP = 'ZN'.
    ELSE.
    VBEP-ETTYP = 'ZL'.
    ENDIF.
    ENDIF.
    IF VBKD-KTGRD = '01'.
    sale is to an affiliate in local sales org
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ENDIF.
    ENDIF.
    End of insertion for IRAT processing
    WHEN 'IRRS' OR 'IRRE' OR 'IRLA' OR 'IRLB' OR 'KBN' OR 'TAQ'
    KSI Modification 04/22/03
    Exclude check for item category 'YKW'
    OR 'YTAN' OR 'ZKLN' OR 'KAN' OR 'ZTAQ'
    OR 'YKW' OR 'IRRP' OR 'ZKBC' OR 'ZKBN' OR 'ZKAN' OR 'KLN'.
    or 'ZKEN' OR 'ZKEC' or ZREK OR 'KEN'.
    EXIT.
    WHEN 'ZTR1' OR 'ZRBB' OR 'ZREB' OR 'ZREC' OR 'ZREF' OR 'ZREN'
    Removed ZRTN to validate plant 9000
    OR 'ZRFF' OR 'ZRNB' OR 'ZRNN' OR 'REN' OR 'RENN'
    OR 'ZLN' OR 'IRAL' OR 'ZTR0' OR 'KLN'.
    EXIT.
    03/23/2005 KN03 set default sched line for KE & ZKE
    WHEN 'KEN' OR 'ZKEG' OR 'ZKEN' OR 'ZKEC'.
    IF vbak-vkorg EQ '5070'.
    vbep-ettyp = 'Z0'.
    ENDIF.
    WHEN 'ZREK'.
    INCLUDE zue_sd_0033.
    IF vbap-werks = '9000'. " KN04
    IF vbkd-ktgrd = '01'. " KN04
    IF z_auart = 'ZFD ' and z_pstyv = 'KLN '. " KN04
    vbep-ettyp = 'YK'. " KN04
    ENDIF.
    ENDIF.
    ENDIF.
    KSE Modification 04/10/03
    For Item Cate 'ZRTN'
    Assign 'YQ' to Schedule line cat, if cross-company
    'YU' if not.
    WHEN 'ZRTN'.
    KN03 for KSI set default schedule line for order type ZREK
    INCLUDE zue_sd_0033.
    IF svbep-tabix IS INITIAL.
    IF vbap-werks = '9000'.
    IF vbkd-ktgrd = '01'. " KN04
    IF z_auart = 'ZFD' and z_pstyv = 'KLN '. " KN04
    vbep-ettyp = 'YK'. " KN04
    ELSE. " KN04
    vbep-ettyp = 'YQ'.
    ENDIF.
    ELSE.
    vbep-ettyp = 'YU'.
    ENDIF.
    ENDIF.
    ENDIF.
    KN03 for KSI set default schedule line for order type ZREK
    INCLUDE zue_sd_0033.
    WHEN OTHERS.
    IF vbkd-ktgrd = '01'.
    IF vbep-ettyp = 'CN'.
    vbep-ettyp = 'ZA'.
    ELSE.
    vbep-ettyp = 'ZP'.
    ENDIF.
    ENDIF.
    ENDCASE.
    endif.
    Redetermine Movement Type
    PERFORM tvep_select(sapmv45a) USING vbep-ettyp
    charx
    sy-subrc.
    vbep-bwart = tvep-bwart.
    ENDIF.
    KSE Mod
    User Exit for Repair Replacement
    Export VBEP-ETTYP, imported by RV64A950
    04/18/03
    EXPORT i_ettyp = vbep-ettyp TO MEMORY ID 'ZZSCHEDULE'.
    **lines added for valuated customer-returns project by msn
    110903. It will set required schedule line category YR on specific
    item categories if the document created is of type RE with reference
    document being an invoice of type F2
    **. 11-11-2003.
    **Schedule Line Category - Valuate Customer Returns Stock
    BREAK-POINT.
    INCLUDE zue_sd_0010.
    *KSEA Modification to default item creation date for the IRAT
    *line item schedule line. SAP Note 23281
    04/01/04
    INCLUDE zue_sd_0020.
    ENDFORM.
    *eject
    FORM USEREXIT_MOVE_FIELD_TO_VBKD *
    This userexit can be used to move some fields into the sales *
    dokument business data workaerea VBKD *
    SVBKD-TABIX = 0: Create data *
    SVBKD-TABIX > 0: Change data *
    This form is called at the end of form VBKD_FUELLEN. *
    FORM userexit_move_field_to_vbkd.
    VBKD-zzfield = xxxx-zzfield2.
    Get Customer group, Price group and Price list type *
    by Ship-to party
    10/04/2001
    DATA: yp1 LIKE t001k-bwkey,
    z_uepos_bukrs LIKE t001k-bukrs.
    *Request by Customer Service - Marian Favors 11-08-2004
    TABLES: zzue030. "ECLARKE 11-08-2004
    SELECT SINGLE tcode INTO zzue030-tcode FROM zzue030
    WHERE tcode = sy-tcode. "ECLARKE 11-08-2004
    IF sy-subrc = 0. "ECLARKE 11-08-2004
    Removed check for customer group as this was required by Steve Ludewig
    IF " vbkd-kdgrp IS INITIAL AND "Arvind Kulkarni; 08/05/2002.
    vbkd-konda IS INITIAL AND
    vbkd-pltyp IS INITIAL.
    SELECT SINGLE kdgrp konda pltyp bzirk
    INTO (vbkd-kdgrp, vbkd-konda, vbkd-pltyp, vbkd-bzirk)
    FROM knvv
    WHERE kunnr = kuwev-kunnr
    AND vkorg = vbak-vkorg
    AND vtweg = vbak-vtweg
    AND spart = vbak-spart.
    ENDIF.
    ENDIF. "ECLARKE 11-08-2004
    Redetermine Schedule line Category if Acct Assignment Grp is changed
    to
    Chui 10/23/2001
    IF svbkd-tabix > 0 AND sy-dynnr = '4311'.
    IF vbkd-ktgrd = '01' AND vbep-ettyp <> 'ZP'.
    PERFORM userexit_move_field_to_vbep.
    ENDIF.
    ENDIF.
    INCLUDE zzsdprc01.
    To make the value of the field VBAK-ZUONR same as VBKD-BSTKD
    05/04/04
    vbak-zuonr = vbkd-bstkd.
    ENDFORM.
    *eject
    FORM USEREXIT_NUMBER_RANGE *
    This userexit can be used to determine the numberranges for *
    the internal document number. *
    US_RANGE_INTERN - internal number range *
    This form is called from form BELEG_SICHERN *
    FORM userexit_number_range USING us_range_intern.
    Example: Numer range from TVAK like in standard
    US_RANGE_INTERN = TVAK-NUMKI.
    ENDFORM.
    *eject
    FORM USEREXIT_PRICING_PREPARE_TKOMK *
    This userexit can be used to move additional fields into the *
    communication table which is used for pricing: *
    TKOMK for header fields *
    This form is called from form PREISFINDUNG_VORBEREITEN. *
    FORM userexit_pricing_prepare_tkomk.
    TKOMK-zzfield = xxxx-zzfield2.
    *{ INSERT SNDK900075 1
    tkomk-aland = t001-land1.
    *} INSERT
    Fill Zip code with Ship-to party's
    tkomk-post_code1 = kuwev-pstlz.
    ENDFORM.
    *eject
    FORM USEREXIT_PRICING_PREPARE_TKOMP *
    This userexit can be used to move additional fields into the *
    communication table which is used for pricing: *
    TKOMP for item fields *
    This form is called from form PREISFINDUNG_VORBEREITEN. *
    FORM userexit_pricing_prepare_tkomp.
    TKOMP-zzfield = x

  • Print smartform from background

    Dear Experts,
    I have requirement to create delivery then create bill automatically so i open background job from program (A) and submit the creating program for bill (B) via this job what happened is the delivery creating is ok, the delivery printing is ok and the billing creation is ok but the billing printing program (C) is not ok where the spool is creating with status waiting so can any body help how to print from background job??
    program (A) (Create backgroundjob and submit program via it)
    FORM USEREXIT_SAVE_DOCUMENT.
    DATA: jobcount TYPE tbtcjob-jobcount,
          new_time type TBTCJOB-SDLSTRTTM.
    data : p_vbeln TYPE likp-vbeln.
    DATA : v_JOB_WAS_RELEASED LIKE  BTCH0000-CHAR1.
    break rurik.
    if T180-TRTYP = 'H'
      and ( likp-lfart = 'ZDCF'
    or    likp-lfart = 'ZDCI'
      or    likp-lfart = 'ZDCO'
      or    likp-lfart = 'ZDCP'
      or    likp-lfart = 'ZDCR'
      or    likp-lfart = 'ZDOB'
      or    likp-lfart = 'ZDOT'
      or    likp-lfart = 'ZDQT'
    or    likp-lfart = 'ZDRE' - Ian
      or    likp-lfart = 'ZDSO').
    CALL FUNCTION 'JOB_OPEN'
      EXPORTING
        jobname               = 'SD_AUTOMATION'
      SDLSTRTDT             = NO_DATE
      SDLSTRTTM             = NO_TIME
      JOBCLASS              =
    IMPORTING
       JOBCOUNT               = jobcount
    CHANGING
      RET                   =
    EXCEPTIONS
       CANT_CREATE_JOB        = 1
       INVALID_JOB_DATA       = 2
       JOBNAME_MISSING        = 3
       OTHERS                 = 4.
    SUBMIT zsd_create_billing_document
            with vbeln EQ LIKP-VBELN
            AND RETURN
            VIA JOB 'SD_AUTOMATION'
            NUMBER jobcount.
    new_time = sy-uzeit + 10.  "short delay
    CALL FUNCTION 'JOB_CLOSE'
      EXPORTING
        jobcount                         = jobcount
        jobname                          = 'SD_AUTOMATION'
       STRTIMMED                       = 'X'
        SDLSTRTDT                        = sy-datum
        SDLSTRTTM                        = new_time
    IMPORTING
        JOB_WAS_RELEASED                 = v_JOB_WAS_RELEASED
    EXCEPTIONS
       CANT_START_IMMEDIATE              = 1
       INVALID_STARTDATE                 = 2
       JOBNAME_MISSING                   = 3
       JOB_CLOSE_FAILED                  = 4
       JOB_NOSTEPS                       = 5
       JOB_NOTEX                         = 6
       LOCK_FAILED                       = 7
       INVALID_TARGET                    = 8
       OTHERS                            = 9
    ENDIF.
    ENDFORM.
    Program B (Creat bill)
    REPORT zsd_create_billing_document
           NO STANDARD PAGE HEADING LINE-SIZE 255.
    TABLES: vbup, vbak, vbuk.
    DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
    DATA done(1).
    PARAMETERS vbeln TYPE likp-vbeln.
    DATA  sal_vbeln TYPE vbeln..
    DATA  messtab LIKE TABLE OF bdcmsgcoll WITH HEADER LINE.
    DATA   billing_doc TYPE vbeln.
    DATA  messagetext(200).
    MESSAGE s002(zsd).
    WRITE: / vbeln.
    DATA :  v_print TYPE i.
    CALL FUNCTION 'ENQUEUE_EVVBLKE'
    EXPORTING
      MODE_LIKP            = 'E'
      MANDT                = SY-MANDT
       vbeln                = vbeln
      X_VBELN              = ' '
      _SCOPE               = '2'
        _wait                = 'X'
    " _wait                 = space
      _COLLECT             = ' '
    EXCEPTIONS
       foreign_lock         = 1
       system_failure       = 2
       OTHERS               = 3
    MESSAGE s005(zsd).
    *In case ZSOT automatic billing once we create delivery and post goods issue manual.
    SELECT SINGLE vbelv
      FROM vbfa
      INTO sal_vbeln
      WHERE vbeln = vbeln
      AND   vbtyp_v = 'C'.
    SELECT SINGLE *
      FROM vbak
      WHERE vbeln = sal_vbeln.
    import v_print to v_print FROM MEMORY id 'PRINTFLAG'.
    IF vbak-auart EQ 'ZSOT'.
    IF v_print eq '1'.
        PERFORM create_document USING vbeln
                              CHANGING sy-subrc.
    ENDIF.
    ELSE.
    *Other than ZSOT Post Goods issue from ZPGI2 and from there automatic billing.
    ENDIF.
    *&      Form  CREATE_DOCUMENT
          text
         -->P_VBELN    text
    FORM create_document USING p_vbeln
                         CHANGING sysubrc.
      PERFORM bdc_dynpro      USING 'SAPMV60A' '0102'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'KOMFK-VBELN(01)'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '/00'.
      PERFORM bdc_field       USING 'KOMFK-VBELN(01)'
                                    p_vbeln."'1130010202'.
      PERFORM bdc_dynpro      USING 'SAPMV60A' '0104'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'VBRK-FKART'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=SICH'.
      CALL FUNCTION 'DEQUEUE_EVVBLKE'
       EXPORTING
          MODE_LIKP       = 'E'
          MANDT           = SY-MANDT
            vbeln           = vbeln
          X_VBELN         = ' '
          _SCOPE          = '3'
          _SYNCHRON       = ' '
          _COLLECT        = ' '
      CALL TRANSACTION 'VF01' USING bdcdata
                       MODE   'N'
                       UPDATE 'S'
                       MESSAGES INTO messtab.
      READ TABLE messtab WITH KEY msgtyp = 'E'.
      IF sy-subrc EQ 0.
        sysubrc = 4.
      ELSE.
        sysubrc = 0.
      ENDIF.
      LOOP AT messtab.
        sy-msgty = messtab-msgtyp.
        sy-msgid = messtab-msgid.
        sy-msgno = messtab-msgnr.
        sy-msgv1 = messtab-msgv1.
        sy-msgv2 = messtab-msgv2.
        sy-msgv3 = messtab-msgv3.
        sy-msgv4 = messtab-msgv4.
        CALL FUNCTION '/SAPTRX/GET_MESSAGE_TEXT'
          EXPORTING
            msgid                = sy-msgid
            msgno                = sy-msgno
            msgv1                = sy-msgv1
            msgv2                = sy-msgv2
            msgv3                = sy-msgv3
            msgv4                = sy-msgv4
          IMPORTING
            messagetext          = messagetext
          EXCEPTIONS
            no_message_retrieved = 1
            OTHERS               = 2.
        WRITE: / messagetext.
        CLEAR messagetext.
      ENDLOOP.
    *... refresh tables
      REFRESH: messtab, bdcdata.
    ENDFORM.                    "CREATE_DOCUMENT
    *&      Form  BDC_DYNPRO
          text
         -->PROGRAM    text
         -->DYNPRO     text
    FORM bdc_dynpro USING program dynpro.
      CLEAR bdcdata.
      bdcdata-program  = program.
      bdcdata-dynpro   = dynpro.
      bdcdata-dynbegin = 'X'.
      APPEND bdcdata.
    ENDFORM.                    "BDC_DYNPRO
           Insert field                                                  *
    FORM bdc_field USING fnam fval.
      CLEAR bdcdata.
      bdcdata-fnam = fnam.
      bdcdata-fval = fval.
      APPEND bdcdata.
    ENDFORM.                    "BDC_FIELD
    *&      Form  change_status
          text
    -->  p1        text
    <--  p2        text
    FORM change_status .
    *Change status if delivery and the billing document has been created
      SELECT  *
        FROM vbup
        WHERE vbeln = vbeln
        AND   fksta NE 'C'.
        vbup-fksta = 'C'.
       vbup-gbsta = 'C'.
        MODIFY vbup.
      ENDSELECT.
      UPDATE vbuk
      SET fkstk = 'C'
         gbstk = 'C'
      WHERE vbeln = vbeln.
    ENDFORM.                    " change_status
    Program C (Print Bill)
    REPORT  z_sdps_invoice.
    *&    <Module>:  SD Smart Forms.
    *& Type       : Executable
    *& Request No.:
    *& Author/Co. : Ahmed Al Eryani
    *& Created On : 26.02.2007
    *& Finished   : 24.2007
    *& Description:
    *&                    MODIFICATION LOG
    *& Modified by  :
    *& Request No.  :
    *& Dev. Class   :
    *& Date Modified:
    *& Description  :
    TABLES: vbrk, kna1, vbrp, makt, konv, vbkd.
    SELECTION-SCREEN BEGIN OF BLOCK a.
    PARAMETER: p_vbeln LIKE vbrp-vbeln OBLIGATORY MATCHCODE OBJECT vmcf. "Billing document No
    "SELECT-OPTIONS s_bukrs FOR bkpf-bukrs. "Company Code
    SELECTION-SCREEN END OF BLOCK a.
    *itab is object of our smart form structre
    DATA: itab TYPE zsd_invoice OCCURS 0 WITH HEADER LINE.
    DATA: wa_footer TYPE zsd_invv1.
    DATA: t_items TYPE zsd_inv WITH HEADER LINE,
          w_items TYPE LINE OF zsd_inv,
          it_footer TYPE zsd_inv1,
          w_footer TYPE LINE OF zsd_inv1.
    DATA: amountspell LIKE spell.
    DATA: g_fm_name TYPE rs38l_fnam.
    DATA: mnumvflag(10) TYPE c.
    DATA: coun TYPE i,
          totalforitems TYPE kwert,
          lasttotal(8) TYPE p DECIMALS 2,
          lasttotalc(11) TYPE c,
          firstpart(11) TYPE c,
          secondpart(2) TYPE c.
    DATA: currency TYPE waerk.
    DATA: currtxet(50) TYPE c.
    *Header internal table
    DATA: BEGIN OF t_header OCCURS 0,
      vbeln LIKE vbrk-vbeln,"Document no
      name1 LIKE kna1-name1,"Customer Name
      adrnr LIKE kna1-adrnr,"Customer Address
      bstkd LIKE vbkd-bstkd,"
      kunnr LIKE kna1-kunnr,"Customer Account no
      waerk LIKE vbrk-waerk, "currency key
      aubel LIKE vbrp-aubel,
      kunrg LIKE vbrk-kunrg,
      street LIKE adrc-street,
      fkart LIKE vbrk-fkart,
      lgort LIKE lips-lgort,"Stord bin
      lgobe LIKE t001l-lgobe,
      ktokd LIKE kna1-ktokd,
      PSTYV LIKE vbrp-PSTYV,
      orgbil LIKE vbfa-vbelv,
    END OF t_header.
    *detail internal table
    DATA: BEGIN OF t_items1 OCCURS 0,
      matnr LIKE vbrp-matnr,"Material Number
      posnr LIKE vbrp-posnr,
      vgpos LIKE vbrp-vgpos,
      maktx LIKE makt-maktx,"Material Description
      lgort LIKE vbrp-lgort,"Storage location
      fkimg LIKE vbrp-fkimg,"
      knumv LIKE vbrk-knumv,"
      unitprice LIKE konv-kawrt,
      total LIKE konv-kawrt,
      waers LIKE konv-waers,
      kkurs LIKE konv-kkurs,
      vgbel LIKE vbrp-vgbel,
      lgpbe LIKE lips-lgpbe,
      vgtyp LIKE vbrp-vgtyp,
    END OF t_items1.
    DATA: v_belnr TYPE belnr_d.
    *Unit price internal table
    DATA: BEGIN OF t_untprice OCCURS 0,
      kschl LIKE konv-kschl,"condition type
      kawrt LIKE konv-kawrt,"unit price
    END OF t_untprice.
    *Condition(spcial deduction)
    DATA: BEGIN OF t_spcialcnd OCCURS 0,
      kschl LIKE konv-kschl,"condition type
      kwert LIKE konv-kwert,"Deduction value
    END OF t_spcialcnd.
    DATA: t_tax LIKE TABLE OF t_spcialcnd WITH HEADER LINE,
          v_tax LIKE konv-kwert.
    DATA: BEGIN OF t_curtxt OCCURS 0,
      ltext LIKE tcurt-ltext,
    END OF t_curtxt.
    DATA :return_code TYPE i," VALUE 999,
          us_screen TYPE c. "VALUE 'X'.
    declaration of data
    INCLUDE rlb_invoice_data_declare.
    definition of forms
    INCLUDE rlb_invoice_form01.
    INCLUDE rlb_print_forms.
    START-OF-SELECTION.
      "IF p_vbeln IS NOT INITIAL.
        PERFORM entry USING return_code us_screen.
      "ENDIF.
          FORM ENTRY
    FORM entry USING return_code us_screen.
      DATA: lf_retcode TYPE sy-subrc.
      CLEAR retcode.
      xscreen = us_screen.
    perform processing using us_screen
                        changing lf_retcode.
    if lf_retcode ne 0.
       return_code = 1.
    else.
       return_code = 0.
    endif.
      IF p_vbeln IS INITIAL.
        p_vbeln = nast-objky.
      ENDIF.
      "get header data
      SELECT SINGLE vbrk~vbeln vbrk~waerk vbrp~aubel vbrk~kunrg vbrk~fkart vbrp~lgort vbrp~PSTYV
      INTO (t_header-vbeln, t_header-waerk, t_header-aubel, t_header-kunrg, t_header-fkart,
        t_header-lgort, t_header-PSTYV)
      FROM vbrk JOIN vbrp ON vbrp~vbeln = vbrk~vbeln
                JOIN kna1 ON vbrk~kunrg = kna1~kunnr
      WHERE vbrk~vbeln = p_vbeln.
      IF t_header-PSTYV = 'ZREN'.
        SELECT SINGLE VBELV
          INTO t_header-orgbil
          FROM vbfa
          WHERE vbeln = p_vbeln
          and VBTYP_V = 'M'.
      ENDIF.
      SELECT SINGLE t001l~lgobe
        INTO t_header-lgobe
        FROM t001l
        WHERE t001l~lgort = t_header-lgort.
      SELECT SINGLE kna1~name1 kna1~adrnr kna1~kunnr kna1~ktokd
        INTO (t_header-name1, t_header-adrnr, t_header-kunnr, t_header-ktokd)
      FROM  kna1 "ON vbrk~kunrg = kna1~kunnr
      WHERE kna1~kunnr = t_header-kunrg
        AND spras = 'AR'.
      IF t_header-name1 IS INITIAL.
        SELECT SINGLE kna1~name1 kna1~adrnr kna1~kunnr kna1~ktokd
          INTO (t_header-name1, t_header-adrnr, t_header-kunnr, t_header-ktokd)
        FROM  kna1 "ON vbrk~kunrg = kna1~kunnr
        WHERE kna1~kunnr = t_header-kunrg
          AND spras = 'EN'.
      ENDIF.
      IF t_header-ktokd = 'ZONE'.
        SELECT SINGLE belnr
          INTO v_belnr
        FROM bkpf
        WHERE xblnr = p_vbeln.
        SELECT SINGLE name1
        INTO t_header-name1
        FROM bsec
        WHERE belnr = v_belnr.
      ENDIF.
      SELECT SINGLE adrc~street
        INTO t_header-street
        FROM adrc
        WHERE addrnumber = t_header-adrnr
        AND langu = 'AR'.
      IF t_header-street IS INITIAL.
        SELECT SINGLE adrc~street
          INTO t_header-street
          FROM adrc
          WHERE addrnumber = t_header-adrnr
          AND langu = 'EN'.
      ENDIF.
      "get details data
      SELECT vbrp~matnr vbrp~posnr vbrp~vgpos vbrp~fkimg
             vbrk~knumv vbrp~matnr vbrp~vgbel vbrp~vgtyp"makt~maktx
      INTO CORRESPONDING FIELDS OF TABLE t_items1
      FROM vbrp "JOIN makt ON vbrp~matnr = makt~matnr
                JOIN vbrk ON vbrp~vbeln = vbrk~vbeln
                "join konv on vbrk~knumv = konv~knumv
      WHERE vbrp~vbeln = p_vbeln
        AND vbrp~fkimg NE '0.000'.
      "AND makt~spras = 'E'.
      break arasmy.
      LOOP AT t_items1.
        SELECT SINGLE lips~lgpbe
          INTO t_items1-lgpbe
          FROM lips
          WHERE vbeln = t_items1-vgbel
          AND posnr = t_items1-vgpos.
        SELECT SINGLE makt~maktx
        INTO  t_items1-maktx
        FROM  makt
        WHERE matnr = t_items1-matnr
        AND   makt~spras = 'EN'.
        SELECT SINGLE konv~kbetr konv~kwert konv~waers konv~kkurs
          INTO (t_items1-unitprice, t_items1-total, t_items1-waers,
          t_items1-kkurs)
        FROM konv
        WHERE konv~kschl = 'NETW'"'ZSPC'                               "'ZSP1'
        AND   konv~knumv = t_items1-knumv
        AND   kposn      = t_items1-posnr.
        t_items1-unitprice = ( t_items1-total / t_items1-fkimg ) * t_items1-kkurs.
        MODIFY t_items1.
        mnumvflag = t_items1-knumv."Number of the document condition
      ENDLOOP.
    *get the deduction value for the document condiotion no
      SELECT konvkschl konvkwert
      INTO CORRESPONDING FIELDS OF TABLE t_spcialcnd
      FROM konv
      WHERE konv~kschl IN ('ZSSD', 'ZSCD', 'ZSDD', 'ZSPD', 'ZSWD', 'ZMW1', 'ZSGS', 'ZMW2')
      AND  konv~knumv = mnumvflag.
    Get tax 10%
        SELECT konvkschl konvkwert
        APPENDING CORRESPONDING FIELDS OF TABLE t_tax
        FROM konv
        WHERE konv~kschl = 'MWST'
        AND  konv~knumv = mnumvflag.
      itab-invn  = t_header-vbeln.
      itab-orgbil  = t_header-orgbil.
      itab-cusna = t_header-name1.
      itab-addr  = t_header-street.
      itab-custn = t_header-kunrg.
      itab-sord  = t_header-aubel.
      itab-fkart = t_header-fkart.
      itab-lgort = t_header-lgort.
      itab-lgobe = t_header-lgobe.
      itab-PSTYV = t_header-PSTYV.
      currency   = t_header-waerk.
      LOOP AT t_items1.
        w_items-matn   = t_items1-matnr.
        w_items-matdes = t_items1-maktx.
        w_items-stloc  = t_items1-lgpbe."lgort.
        w_items-qunt   = t_items1-fkimg.
        w_items-total  = t_items1-total.
        totalforitems  = totalforitems + w_items-total.
        COLLECT w_items INTO t_items.
      endloop.
      LOOP AT t_items1.
        LOOP AT t_items WHERE matn = t_items1-matnr.
          t_items-prc = t_items1-unitprice.
          MODIFY t_items.
        ENDLOOP.
      ENDLOOP.
      LOOP AT t_items.
          coun = coun + 1.
          t_items-itmn = coun.
          MODIFY t_items.
      ENDLOOP.
        w_footer-totalforitems = totalforitems.
        LOOP  AT t_spcialcnd.
          CASE t_spcialcnd-kschl.
            WHEN 'ZSSD'.
              w_footer-spdisc    = w_footer-spdisc      + t_spcialcnd-kwert.
            WHEN 'ZSCD'.
              w_footer-comdisc   = w_footer-comdisc     + t_spcialcnd-kwert.
            WHEN 'ZSDD'.
              w_footer-DIFMAT    = w_footer-DIFMAT      + t_spcialcnd-kwert.
            when 'ZSPD'.
              w_footer-trgtdisc  = w_footer-trgtdisc    + t_spcialcnd-kwert.
            WHEN 'ZMW2'.
              w_footer-comindisc = w_footer-comindisc   + t_spcialcnd-kwert.
            WHEN 'ZSWD'.
              w_footer-cshdisc   = w_footer-cshdisc     + t_spcialcnd-kwert.
            WHEN 'ZSGS'.
              w_footer-stampsdisc = w_footer-stampsdisc + t_spcialcnd-kwert.
          ENDCASE.
          w_footer-ttldisc = w_footer-spdisc + w_footer-comdisc + w_footer-trgtdisc
                           + w_footer-cshdisc + w_footer-DIFMAT + w_footer-stampsdisc.
        ENDLOOP.
        w_footer-aftrdiscnts = w_footer-totalforitems + w_footer-ttldisc.
        LOOP AT t_tax WHERE kwert NE '0.00'.
          w_footer-saltax = w_footer-saltax + t_tax-kwert.
        ENDLOOP.
        w_footer-totalaftrtax = w_footer-aftrdiscnts + w_footer-saltax.
        w_footer-total = w_footer-totalaftrtax + w_footer-comindisc.
        lasttotal = w_footer-total.
      APPEND w_footer TO it_footer.
      SELECT tcurt~ltext
      INTO CORRESPONDING FIELDS OF TABLE t_curtxt
      FROM   tcurt
      WHERE tcurt~spras = 'AR'
      AND   tcurt~waers = currency.
      LOOP AT  t_curtxt.
        currtxet = t_curtxt-ltext.
      ENDLOOP.
      itab[] = t_header[].
      lasttotalc = lasttotal.
      SPLIT lasttotalc AT '.' INTO firstpart secondpart.
      lasttotal = firstpart / 100.
      CALL FUNCTION 'SPELL_AMOUNT'
        EXPORTING
          amount    = lasttotal
          currency  = ''"CURRENCY
          filler    = space
          language  = 'A'
        IMPORTING
          in_words  = amountspell
        EXCEPTIONS
          not_found = 1
          too_large = 2
          OTHERS    = 3.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    --split amount--
    BREAK radha.
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname                 = 'Z_INVOICE_PARTS2'
    VARIANT                  = ' '
    DIRECT_CALL              = ' '
       IMPORTING
         fm_name                  = g_fm_name
       EXCEPTIONS
         no_form                  = 1
         no_function_module       = 2
         OTHERS                   = 3
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      DATA : control_parameters    TYPE  ssfctrlop,
             print_options         TYPE  ssfcompop.
      DATA : document_output_info  TYPE  ssfcrespd,
             job_output_info       TYPE  ssfcrescl,
             job_output_options    TYPE  ssfcresop.
      DATA : count TYPE i.
      control_parameters-langu = 'AR'.
      control_parameters-no_dialog = 'X'."Don't show Dialog
    print_options-tdarmod = '1'.
    print_options-tdcopies = '001'.
    print_options-tddest = 'LP02'.
    print_options-tdprinter = 'ZARSWIN'.
       print_options-tdimmed = 'X'.
    print_options-tddelete = 'X'.
    print_options-tdlifetime = '8'.
       print_options-tddest = 'LP03'."nast-ldest.
      "print_options-tddest = nast-ldest.
      "print_options-tdcopies = pv_copies.
    print_options-tddelete = 'X'.
      print_options-tdfinal = 'X'.
    print_options-tdnewid = 'X'.
    WHILE count ne 1.
       IF job_output_info-outputdone ne 'X'.
         CALL FUNCTION g_fm_name
          EXPORTING
        ARCHIVE_INDEX             =
        ARCHIVE_INDEX_TAB         =
        ARCHIVE_PARAMETERS        =
           control_parameters       = control_parameters
        MAIL_APPL_OBJ             =
        MAIL_RECIPIENT            =
        MAIL_SENDER               =
            output_options          = print_options
            user_settings           = space
            header                  = itab
            amountspell             = amountspell
            currtxt                 = currtxet
            secondpart              = secondpart
         wa_footer                = w_footer
       IMPORTING
         DOCUMENT_OUTPUT_INFO       = document_output_info
         JOB_OUTPUT_INFO            = job_output_info
         JOB_OUTPUT_OPTIONS         = job_output_options
          TABLES
            it_items                = t_items
            it_footer               = it_footer
       EXCEPTIONS
         formatting_error           = 1
         internal_error             = 2
         send_error                 = 3
         user_canceled              = 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.
    ENDFORM.                    "ENTRY

    Hi,
    lw_control_param-device = 'PRINTER'.
    lw_control_param-getotf = c_x.
    lw_control_param-no_dialog = c_x.
    lw_composer_param-tdnoprev = c_x.
    <b>*lw_composer_param-tddest = 'LONSC0P310'.</b>
    <b>lw_composer_param-tddest = 'XXXX'.</b> <b>"Four digits</b>
    <i>lw_composer_param-tdnewid = c_x.
    lw_composer_param-tdfinal = c_x.</i> --> Not required
    In place of 'XXXX', replace it by a 4 digit value. It would be available in transaction SPAD->Output Devices->Double click your output device. On the right hand side there would be a field Short Name. Replace 'XXXX' with that value.
    Best regards,
    Prashant

  • Report for displaying BSID & VBRP Details ( Outstanding Invoice details )

    Dear friends,
    For creatinf a report.
    First I have to select the details from BSID. Then on the basis of VBELN fiels in BSID , I have to take the Details from VBRK & VBRP based . But VBELN field is null for some BSID Recors. Then How can I pick the VBRK & VBRP Details?
    Thanks in Advance.
    Regards,
    LIJO

    You will have entries in BSID-VBELN where the Document Type is RV.
    Try this:
    Select * where BSID-BELNR = VBRK-BELNR
    now Select * where VBRK-VBELN = VBRP-VBELN
    Hope that helps.
    Cheers.

  • Not getting output undr billing details and item details in printng invoice

    In form interface under import tab i have declared 1 value i.e. IM_FS_KNA1 type KNA1 I have not declared anything except this in form interface.
    In Global Definitions under Global Data tab:
    IM_T_KNA1     TYPE TABLE OF     KNA1
    IM_FS_VBRK     TYPE     VBRK
    IM_FS_VBRP     TYPE     VBRP
    W_TOTAL     TYPE     VBRP-NETWR
    IM_T_VBRK     TYPE TABLE OF     VBRK
    IM_T_VBRP     TYPE TABLE OF     VBRP
    under Currency/ Quant Fields
    IM_FS_VBRP-NETWR     IM_FS_VBRK-WAERK     C CURR
    In Billin Window, there is a loop from IM_T_VBRK INTO IM_FS_VBRK where KUNAG = IM_FS_KUNNR
    In main window, i've created a table for displaying item details
    I'm only getting data of Customer in Customer Details window after using driver program. I've checked the entries in the table but for those inputs i'm not getting the desired output..
    Following is the code that i'm using for driver program:
    *& Report  ZPRINTINVOICE2
    REPORT  ZPRINTINVOICE2.
    TABLES:
      kna1,
      vbrk,
      vbrp.
    PARAMETERS :
      p_kunnr LIKE vbrk-kunag,
      p_vbeln LIKE vbrk-vbeln.
    DATA :
      /1BCDWB/SF00000214 TYPE rs38l_fnam.             " Name of the Function Module
    DATA :  t_vbrk LIKE
    STANDARD TABLE
          OF vbrk.
    DATA:  t_vbrp LIKE
    STANDARD TABLE
          OF vbrp.
    DATA :
      fs_kna1 TYPE kna1,                           " Holds Customer Details
      fs_vbrk LIKE LINE OF t_vbrk,         " Holds BillingDoc Header Details
      fs_vbrp LIKE LINE OF t_vbrp.         " Holds BillingDoc Item Details
    START-OF-SELECTION.
      SELECT SINGLE *
               FROM kna1
               INTO fs_kna1
              WHERE kunnr EQ p_kunnr.
       SELECT *
        FROM vbrk
        INTO TABLE t_vbrk
       WHERE kunag EQ p_kunnr
         AND vbeln EQ p_vbeln.
       SELECT *
        FROM vbrp
        INTO TABLE t_vbrp
         FOR ALL ENTRIES IN t_vbrk
       WHERE vbeln = t_vbrk-vbeln.
       CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname                   = 'ZTRYINVOICE2'
        IMPORTING
          fm_name                    = /1BCDWB/SF00000214
        EXCEPTIONS
          no_form                     = 1
          no_function_module = 2
          OTHERS                   = 3.
      IF sy-subrc <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
       CALL FUNCTION /1BCDWB/SF00000214
        EXPORTING
          im_fs_kna1       = fs_kna1
          im_t_vbrk        = t_vbrk
          im_t_vbrp        = t_vbrp
        EXCEPTIONS
          formatting_error = 1
          internal_error   = 2
          send_error       = 3
          user_canceled    = 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.
    plz help......

    Hi Neha,
    Modify your CALL FUNCTION /1BCDWB/SF00000214 like below :
    CALL FUNCTION /1BCDWB/SF00000214
        EXPORTING
          im_fs_kna1       =  im_fs_kna1
        TABLES
          im_t_vbrk        = im_t_vbrk
          im_t_vbrp        = im_t_vbrp 
        EXCEPTIONS
          formatting_error = 1
          internal_error   = 2
          send_error       = 3
          user_canceled    = 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.
    At Smarforms > Form Interface > Import :
    im_fs_kna1.
    At Smarforms > Form Interface > Tables :
    im_t_vbrk , im_t_vbrp
    BR
    Dep

  • ERROR WHILE TRANSPORTING SMARTFORM

    hi friend,
    when i try to transport my smartform it shows the error message like this
    1.   Object CUAD ZINVOICE_11 is inactiv
    2.   Object REPT ZINVOICE_11 is inactiv
    what are CUAD and REPT .
    My Code is.
    REPORT  ZINVOICE_11.
    *& Report  Z_INVOICE_PRINT                                             *
    *&  changes done by : Bhupinder Singh                                                                               
    *REPORT  Z_INVOICE_PRINT_FINAL                         .
    constants : sf_name(30) type c value 'ZINVOICE_11'.
    parameters : vbeln like vbrk-vbeln .
    data : perf type c.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
       PARAMETERS: pre RADIOBUTTON GROUP RAD1 DEFAULT 'X',
                   post RADIOBUTTON GROUP RAD1.
    SELECTION-SCREEN END OF BLOCK B1.
    data : form_name type RS38L_FNAM.
    data : ivbrk like vbrk occurs 0 with header line.
    data : ivbrp1 like vbrp occurs 0 with header line.
    data : ivbrpf like vbrp occurs 0 with header line.
    data : ivbrp like vbrp occurs 0 with header line.
    data : ivbap like vbap occurs 0 with header line.
    data : ivbkd like vbkd occurs 0 with header line.
    data : ikna1 like kna1 occurs 0 with header line.
    data : ikonv like konv occurs 0 with header line.
    data : ilips like lips occurs 0 with header line.
    data : ivepo like vepo occurs 0 with header line.
    data : ivekp like vekp occurs 0 with header line.
    data : ikonv1 like konv occurs 0 with header line.
    data : ikonv2 like konv occurs 0 with header line.
    data : netwt like vekp-ntgew.
    data : grwt like vekp-brgew.
    select * from vbrp into table ivbrp where vbeln = vbeln.
    select * from vbrk into table ivbrk where vbeln = vbeln.
    data : vknumv like konv-knumv.
    loop at ivbrk.
    move ivbrk-knumv to vknumv.
    endloop.
    loop at ivbrp.
    select * from konv into table ikonv1 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZFOB'.
    select * from konv into table ikonv2 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZDS3'.
    endloop.
    data : ins like konv-kbetr.
    data : dis like konv-kbetr.
    data : fght like KONV-KBETR.
    loop at ikonv1.
    ins = ins + ikonv1-kbetr.
    endloop.
    loop at ikonv2.
    dis = dis + ikonv2-kbetr.
    endloop.
    if pre = 'X'.
          select * from vbrp into table ivbrp where vbeln = vbeln order by matkl.
          loop at ivbrp.
          on change of ivbrp-matkl.
          clear ivbrp1.
          refresh ivbrp1.
          move ivbrp-matkl to ivbrp1-arktx.
          insert  ivbrp1 into ivbrp.
          modify ivbrp.
          endon.
          endloop.
    endif.
    ivbrpf[] = ivbrp[].
    select * from vbrp into table ivbrp where vbeln = vbeln.
    select * from vbrk into table ivbrk where vbeln = vbeln.
    select * from lips into table ilips for all entries in ivbrp where vbeln = ivbrp-vgbel and posnr = ivbrp-vgpos.
    select * from vepo into table ivepo for all entries in ilips where vbeln = ilips-vbeln and posnr = ilips-posnr.
    select * from vekp into table ivekp for all entries in ivepo where venum = ivepo-venum.
    loop at ivekp.
      if ivekp-gewei = 'G'.
        ivekp-ntgew = ivekp-ntgew / 1000.
        ivekp-brgew = ivekp-brgew / 1000.
      endif.
    netwt = netwt + ivekp-ntgew.
    grwt = grwt + ivekp-brgew.
    endloop.
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        FORMNAME                 = sf_name
      VARIANT                  = ' '
      DIRECT_CALL              = ' '
    IMPORTING
       FM_NAME                  = form_name
    EXCEPTIONS
      NO_FORM                  = 1
      NO_FUNCTION_MODULE       = 2
      OTHERS                   = 3
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION form_name
      EXPORTING
                              vbeln = vbeln
                              perf  = perf
                              pre   = pre
                              post  = post
                              dis = dis
                              ins = ins
                              vknumv = vknumv
                              netwt = netwt
                              grwt = grwt
                              fght = fght
                             VECS  = VECS
      TABLES
        IVBRK                      = IVBRK
        IVBRP                     = IVBRP
        IVBRPf                     = IVBRPf
        IVBaP                     = IVBaP
        IKna1                      = IKna1
        Ivbkd                     = Ivbkd
        ivbrp1                    = ivbrp1
        ikonv                  =  ikonv
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    INCLUDE ZINVOICE_STATUS_0001O01.
    INCLUDE ZINVOICE_USER_COMMAND_0001I01.
    whaT SHOULD i do to active it and transport it.

    dear bhupi,
    When u transporting u r any object , please magke sure u r whole object is in active mode ,otherwise its shows erroe like object in  in active mode.
    Regards ,
    Nikhil Narkhede

  • Sap script doubt

    hi all,
    i have problem with the print program.in this it is printing the from in pre printed format.
    but as comapny's pre printed format has been changed so
    they are not willing to carry it on.
    so they have given me a format to design the form .
    i have designed the form and assined my from name in the
    print program but i was not able to see output ie my form
    which i have designed.
    my form name is zinv.
    so for this i am sending my print prog so what changes i have to make in it so that i can see my form after executing it.
    plz give me the solution.
    REPORT ZSI-01 LINE-SIZE 132.
    PROGRAM NAME : ZINVOICE                    AUTHOR       : SATYA      *
    START DATE   : 11-04-98                    END DATE     :            *
    REQUEST NO   :                             REQUESTED BY : SELVAM     *
    CHANGE DATE  : 12.05.98                    CHANGED BY   :            *
    OBJECTIVE    :INVOICE PRINTING ON LAYOUT SET.                        *
                  LAYOUT SET ZINVOICE                                    *
                  PF-STATUS 100.                                         *
    changed and transfered on 16.04.99 REQUESTED BY SELVAM.              *
    THIS IS THE LATEST VERSION OF INVOICE PROG CHANGES MADE BY raghu     *
               ON 16/04/99                                               *
      RECENT COPY WITH  SECOND SALES & TAX EMPTED REQ SELVAM 24/6/98     *
      copy with form sale req by selvam 27/07/98                         *
    PRINT-CONTROL FUNCTION 'CI015'.
    *TRANSPARETN TABLES
    TABLES : KOMK.
    TABLES : KOMV.
    TABLES : KOMP.
    TABLES : KNVK.
    TABLES : OBJK.
    TABLES : SER01.
    TABLES : T001W.
    TABLES : MKPF.
    TABLES : KONV .
    TABLES : LIKP.
    TABLES : VBFA .                                             "
    TABLES : VBAK .     "Header table for the invoice document
    TABLES : VBAP .     "Line item table for the invoice document
    TABLES : KNA1 .     "Customer master table for the customer details
    TABLES : MARA .                        "Material master table
    TABLES : ITCPO.     "SYSTEM TABLE FOR LAYOUT SETS COMMUNICATION
    TABLES : ITCPP.     "SYSTEM TABLE FOR LAYOUT SETS COMMUNICATION
    TABLES : VBRK.      "HEADER TABLE FOR BILLING DOCUMENT
    TABLES : VBRP.                         "LINE ITEM FOR BILLING DOCUMENT
    TABLES : VBPA.                         "PARTNER FOR SALES DOCUMENT
    TABLES : KNB1.
    TABLES : LIPS.
    TABLES : TVM1T.
    TABLES : SADR.
    *INTERNAL TABLES
    DATA : BEGIN OF INV_TAB OCCURS 0.
    DATA : BILLNO LIKE VBRP-VBELN.
    DATA : END OF INV_TAB.
    DATA : BEGIN OF I_TAB OCCURS 0.
    DATA : SDNO LIKE LIKP-VBELN.
    DATA : INVO LIKE VBRK-VBELN.
    DATA : ORNO LIKE VBAK-VBELN.
    DATA : END OF I_TAB.
    *FOR READ PRICE
    DATA: BEGIN OF TKOMV OCCURS 0.
            INCLUDE STRUCTURE KOMV.
    DATA: END OF TKOMV.
    DATA: BEGIN OF TKOMVD OCCURS 0.
            INCLUDE STRUCTURE KOMVD.
    DATA: END OF TKOMVD.
    DATA : BEGIN OF CTYPE OCCURS 0.
    DATA :SIGN(1).
    DATA :OPTIONS(2).
    DATA :LOW(4).
    DATA :HIGH(4).
    DATA : END OF CTYPE.
    *header data
    DATA : BEGIN OF HEAD_TAB.
    DATA : DOCNO LIKE VBRK-VBELN.
    DATA : SALOF LIKE VBRK-VKORG.
    DATA : DOCDT LIKE VBRK-FKDAT.
    DATA : PLANT LIKE LIKP-WERKS.
    DATA : PNAM1 LIKE T001W-NAME1.
    DATA : PNAM2 LIKE T001W-NAME2.
    DATA : PNAM3 LIKE T001W-NAME1.
    DATA : PNAM4 LIKE T001W-NAME2.
    DATA : PNAM5 LIKE T001W-PSTLZ.
    DATA : PCSTNO(35).
    DATA : PLSTNO(35).
    *DATA : POREF LIKE VBAK-BSTNK.
    DATA : POREF(30).
    DATA : PODAT LIKE VBAK-BSTDK.
    DATA : CCODE LIKE KNA1-KUNNR.
    DATA : CPERSON LIKE KNVK-NAME1.
    DATA : TPHONE LIKE VBPA-PARNR.
    DATA : SALESOR LIKE VBAK-AUFNR.
    DATA : BILLCUR LIKE VBAK-WAERK.
    DATA : CARNAME(35).
    DATA : SPSHIPI(40).
    DATA : SPCARIN(40).
    DATA : LRNO(20).
    DATA : LRDT(20).
    DATA : MODEPAY(20).
    DATA : CSTNO(30).
    DATA : LSTNO(30).
    DATA : STAMT TYPE P DECIMALS 2.        "SUB TOTAL
    DATA : STAXAMT TYPE P DECIMALS 2.      "SALES TAX AMOUNT
    DATA : FCHRG TYPE P DECIMALS 2.
    DATA : OCHRG LIKE VBRP-NETWR.
    DATA : AMOUNTINWORDS(150).
    DATA : GTOTAL TYPE P DECIMALS 2.
    DATA : FROMDATE(10).
    DATA : ENDDATE(10).
    DATA : END OF HEAD_TAB.
    DATA : B_PRNCTR TYPE I VALUE 0 .
    *sold to party
    DATA : BEGIN OF SOLDP_TAB.
    DATA : NAME LIKE KNA1-NAME1.
    DATA : ADD1 LIKE KNA1-NAME2.
    DATA : ADD2 LIKE KNA1-NAME3.
    DATA : ADD3 LIKE KNA1-ORT01.
    DATA : ADD4 LIKE KNA1-PSTLZ.
    DATA : ADD5 LIKE KNA1-REGIO.
    DATA : ADD6 LIKE KNA1-NAME4.
    DATA : END OF SOLDP_TAB.
    DATA : B_SURCHARG VALUE 'N'.
    ship to party
    DATA : BEGIN OF SHIPP_TAB.
    DATA : NAME LIKE KNA1-NAME1.
    DATA : ADD1 LIKE KNA1-NAME2.
    DATA : ADD2 LIKE KNA1-NAME3.
    DATA : ADD3 LIKE KNA1-ORT01.
    DATA : ADD4 LIKE KNA1-PSTLZ.
    DATA : ADD5 LIKE KNA1-REGIO.
    DATA : ADD6 LIKE KNA1-NAME4.
    DATA : END OF SHIPP_TAB.
    LINE ITEMS
    DATA : BEGIN OF LINE_TAB OCCURS 0.
    DATA : B_LONO(4).
    DATA : CFAMOUNT LIKE VBRK-NETWR.
    DATA : SLNO(4).
    DATA : PRODCODE(6).
    DATA : SERNO(20).
    DATA : DESC(40).
    DATA : UOM(4).
    DATA : QTY(5).
    DATA : RATE TYPE P DECIMALS 2.
    DATA : AMOUNT TYPE P DECIMALS 2.
    DATA : STAX(5).
    DATA : OTAX(5).
    DATA : B_TAXAMOUNT_LINE LIKE VBRP-NETWR.
    DATA : POSNR LIKE VBRP-POSNR .         "     ADDED BY ANIL
    DATA : END OF LINE_TAB.
    *serial Nos
    DATA : BEGIN OF SER_TAB OCCURS 0.
    DATA : SERNO(20).
    DATA : SLNO(4).
    DATA : END OF SER_TAB.
    *structure for carried forward.
    DATA : BEGIN OF SUBTOT.
    DATA : B_SUBTOTAL LIKE VBRK-NETWR.
    DATA : END OF SUBTOT.
    *STRUCTURE for layout set
    DATA : BEGIN OF SERALIGN.
    DATA : TEXT(10).
    DATA : B_SL1 LIKE SER_TAB-SERNO.
    DATA : B_SL2 LIKE SER_TAB-SERNO.
    DATA : B_SL3 LIKE SER_TAB-SERNO.
    DATA : END OF SERALIGN.
    *VARIABLES
    DATA : B_DIVIDE LIKE VBRP-NETWR.
    DATA : B_PRNUCOMM LIKE SY-UCOMM.
    DATA : B_NEWPAGE.
    DATA : B_INVRATE LIKE VBRP-NETWR.
    DATA : B_INVSTAX LIKE VBRP-NETWR.
    DATA : B_TAX(4),B_TOT(4).
    DATA : B_DIFFCOUNT TYPE I.
    DATA : B_COUNTOFRECORDS TYPE I.
    DATA : B_TOTALINDICATOR(256).
    DATA : B_TEMP(25).
    DATA : B_TEMP1(25).
    DATA : B_AMOUNTSTRING1(36).
    DATA : B_AMOUNTSTRING2(35).
    DATA : B_AMOUNTSTRING3(35).
    DATA : B_ORDERREFNO LIKE VBRK-XBLNR.
    DATA : B_RATEFORITEM LIKE VBRK-NETWR.
    DATA : B_TOTALAMOUNT TYPE P DECIMALS 2 VALUE 0.  "TOTAL INVOICE AMOUNT
    DATA : B_CUSTOMERNO LIKE VBAK-KUNNR.   "CUSTOMER NO FROM VBAK TABLE
    DATA : B_RECORDCOUNTER TYPE I.         "RECORD COUNTER
    DATA : B_AMOUNTINWORDS(200).           "AMOUNT STORED IN WORDS
    DATA : B_DECIMALAMOUNTINWORDS(40).     "DEC PART OF THE AMOUNT WORD
    DATA : B_AMOUNTINWORDSFINAL(256).      "TOTAL AMOUNT IN WORDS
    DATA : B_CUSTOMERCODE LIKE VBAK-KUNNR. "CUSTOMER CODE
    DATA : B_STRINGLENGTH TYPE I.
    DATA : B_INVFORCHARGE LIKE VBRP-NETWR.
    DATA : B_INVOCTROI LIKE VBRP-NETWR.
    DATA : B_INVTOT LIKE VBRP-NETWR.
    DATA : B_INVNO LIKE VBAK-VBELN.
    DATA : B_RECCOUNT TYPE I VALUE 0 , START TYPE I VALUE 0.
    DATA : IFSELECTED TYPE C VALUE 'X'.
    DATA : B_TOTAL_TAX LIKE VBRK-NETWR.
    DATA : B_IFSERVICEORDER(1) VALUE 'T'.
    DATA : ANS(1).
    DATA : B_SHIP_TO_PARTY LIKE KNA1-KUNNR.
    DATA : B_SOLDTOPARTYCODE LIKE KNA1-KUNNR.
    DATA  B_STR(35).
    DATA : RECNO LIKE SY-INDEX VALUE 1.
    DATA : B_SPCFLAG VALUE 'F'.
    DATA : B_TAX_INFO1(80) .
    DATA : B_SECOND_SALE(250) .
    DATA : B_EXEMPTED(250) .
    DATA : B_HEXEMPTED(250) .
    DATA : B_TAX_STR(250).
    DATA : B_FORM_TEXT(250) .
    DATA : B_FORM_TYPE(25) .
    DATA : TXT(60).
    DATA : BEGIN OF FORM_TAB OCCURS 0 ,
           MVGR1 LIKE VBRP-MVGR1 ,
           SLNO(5) ,
           END OF FORM_TAB .
    DATA : OLD_MVGR1 LIKE TVM1T-MVGR1 , B_FORM_IND LIKE SY-TABIX .
    DATA : B_TAX_LEN TYPE I .
    DATA : FKART LIKE VBRK-FKART.
    SET PF-STATUS '100'.
    SELECTION-SCREEN BEGIN OF BLOCK B_1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS SEL1 FOR VBRK-VBELN MATCHCODE OBJECT VMCF MEMORY ID VF.
    SELECT-OPTIONS SEL2 FOR LIKP-VBELN MATCHCODE OBJECT VMVL MEMORY ID VL.
    SELECT-OPTIONS SEL4 FOR VBAK-KUNNR MEMORY ID VAG.
    SELECTION-SCREEN END OF BLOCK B_1.
    SELECTION-SCREEN BEGIN OF BLOCK B_2 WITH FRAME TITLE TEXT-005.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(3) TEXT-002.
    PARAMETERS : PRINTSL RADIOBUTTON GROUP GRP1.
    SELECTION-SCREEN COMMENT 7(2) TEXT-003.
    PARAMETERS : NPRINTSL RADIOBUTTON GROUP GRP1.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK B_2.
    PERFORM INIT.
    CLEAR HEAD_TAB.
    IF SEL2 EQ SPACE AND SEL1 EQ SPACE.
      IF SEL4 EQ SPACE.
        PERFORM WIN_INFO(ZURL) USING 'Error' 'Enter atleast one' 'Value'.
        EXIT.
      ENDIF.
    ENDIF.
    PERFORM WRITEITEMS.                    "Selection Screen
          FORM MAIN                                                     *
    FORM MAIN.
      B_PRNCTR = 0 .
      LOOP AT I_TAB.
        CLEAR : B_SECOND_SALE , B_EXEMPTED , B_TAX_LEN .
       read table i_tab index recno.
        PERFORM SOLD_TO_PARTY_CHANGE USING I_TAB-INVO.
       if sy-subrc eq 0.
        B_INVNO = I_TAB-SDNO.
        PERFORM FILL_CHAR(ZURL) USING 10 '0' I_TAB-SDNO CHANGING B_INVNO.
        PERFORM FILL_CHAR(ZURL) USING 10 '0' I_TAB-INVO
                                CHANGING I_TAB-INVO.
        CLEAR HEAD_TAB-GTOTAL.
        PERFORM ASSIGN.
         perform alignwrite.
        PERFORM OPENFORM USING 'ZINVOICEDUMMY'.
        PERFORM LAYOUTSETWRITE.
        DATA : B_SRLNO(4) VALUE 0.
        DATA : B_CTR TYPE I VALUE 0.
        DATA : B_LOOPCTR TYPE I VALUE 0.
        DATA : B_AMT1 LIKE VBRK-NETWR.
        DATA : B_TEXTELEMENT(3).
        SUBTOT-B_SUBTOTAL = 0.
        B_SRLNO = 0.
        LOOP AT LINE_TAB.
          ADD 1 TO B_SRLNO.
          MOVE B_SRLNO TO LINE_TAB-B_LONO.
          PERFORM TAX_INFO_DETERMINE USING B_SRLNO.
                                                   "  ADDED BY ANIL
          SUBTOT-B_SUBTOTAL = B_AMT1 + LINE_TAB-AMOUNT.
          "add line_tab-amount to subtot-b_subtotal.
          MOVE SUBTOT-B_SUBTOTAL TO B_AMT1.
          PERFORM LAYOUTSETMAIN USING '100'.
          MOVE '101' TO B_TEXTELEMENT.
          IF PRINTSL EQ 'X'.
            MOVE 'Serial No:' TO SERALIGN-TEXT.
            LOOP AT SER_TAB WHERE SLNO EQ LINE_TAB-SLNO.
              IF B_LOOPCTR EQ B_CTR.
                MOVE SER_TAB-SERNO TO SERALIGN-B_SL1.
                ADD 1 TO B_CTR.
                PERFORM LAYOUTSETMAIN USING B_TEXTELEMENT.
              ENDIF.
              IF B_LOOPCTR EQ B_CTR.
                MOVE SER_TAB-SERNO TO SERALIGN-B_SL2.
                ADD 1 TO B_CTR.
                PERFORM LAYOUTSETMAIN USING B_TEXTELEMENT.
              ENDIF.
              IF B_LOOPCTR EQ B_CTR.
                MOVE SER_TAB-SERNO TO SERALIGN-B_SL3.
                ADD 1 TO B_CTR.
                PERFORM LAYOUTSETMAIN USING B_TEXTELEMENT.
              ENDIF.
              B_LOOPCTR = B_LOOPCTR + 1.
              MOVE '103' TO B_TEXTELEMENT.
              MOVE ' ' TO SERALIGN-TEXT.
            ENDLOOP.
          ENDIF.
        ENDLOOP.
        HEAD_TAB-GTOTAL = B_INVRATE + B_INVSTAX + B_INVTOT +
                          B_INVOCTROI + B_INVFORCHARGE.
        HEAD_TAB-OCHRG = B_INVTOT.
        IF HEAD_TAB-PLANT EQ '0020'.
          PERFORM LAYOUTSETMAIN USING '104'.
        ENDIF.
        IF B_SURCHARG = 'Y'.
          PERFORM LAYOUTSETMAIN USING '105'.
        ENDIF.
        DESCRIBE TABLE FORM_TAB LINES SY-TABIX .
        IF SY-TABIX > 0 .
          SORT FORM_TAB BY MVGR1 .
          CLEAR : OLD_MVGR1 , B_FORM_IND .
          LOOP AT FORM_TAB .
            IF FORM_TAB-MVGR1 <> OLD_MVGR1 AND B_FORM_IND > 1 .
              SELECT SINGLE * FROM TVM1T WHERE MVGR1 = OLD_MVGR1 .
              CONCATENATE '. :' TVM1T-BEZEI INTO B_FORM_TYPE
                                   SEPARATED BY SPACE .
              PERFORM PRINT_TAX_INFO USING B_FORM_TEXT B_FORM_TYPE .
              CLEAR B_FORM_TEXT .
            ENDIF .
            ADD 1 TO B_FORM_IND .
            OLD_MVGR1 = FORM_TAB-MVGR1 .
            CONCATENATE B_FORM_TEXT ',' FORM_TAB-SLNO INTO B_FORM_TEXT
                          SEPARATED BY SPACE .
          ENDLOOP .
          SELECT SINGLE * FROM TVM1T WHERE MVGR1 = OLD_MVGR1 .
          CONCATENATE '. :' TVM1T-BEZEI INTO B_FORM_TYPE
                               SEPARATED BY SPACE .
          PERFORM PRINT_TAX_INFO USING B_FORM_TEXT B_FORM_TYPE .
          CLEAR B_FORM_TEXT .
        ENDIF .
        PERFORM LAYOUTSETMAIN USING '109'.
        B_TAX_LEN = STRLEN( B_SECOND_SALE ) .
        IF B_TAX_LEN > 0 .
          PERFORM PRINT_TAX_INFO USING B_SECOND_SALE
                                        '. : Second Sales - No Tax' .
        ENDIF .
        B_TAX_LEN = STRLEN( B_EXEMPTED ) .
        IF B_TAX_LEN > 0 .
          PERFORM PRINT_TAX_INFO USING B_EXEMPTED
                                 '. : Software Exempted From Tax' .
        ENDIF .
        B_TAX_LEN = STRLEN( B_HEXEMPTED ) .
        IF B_TAX_LEN > 0 .
          PERFORM PRINT_TAX_INFO USING B_HEXEMPTED
                                 '. : Exempted From Tax' .
        ENDIF .
        MOVE 'Sales Tax Shown is inclusive of surcharge @ 10%'
              TO B_TAX_STR.
        REFRESH : FORM_TAB .
        CLEAR : B_SECOND_SALE , B_EXEMPTED , B_TAX_LEN ,B_FORM_TEXT,
                FORM_TAB , B_HEXEMPTED .
        PERFORM CONVERT.
        PERFORM LAYOUTFOOTER USING '102'.
        PERFORM CLOSEFORM(ZURL).
        PERFORM INIT.
      endif.
      ENDLOOP.
    ENDFORM.
          FORM ASSIGN                                                   *
    FORM ASSIGN.
      B_INVSTAX = 0.
      B_INVRATE = 0.
      REFRESH SER_TAB.
    perform gettax using i_tab-invo.
      HEAD_TAB-DOCNO = I_TAB-INVO.
      SELECT SINGLE * FROM VBRK WHERE VBELN EQ HEAD_TAB-DOCNO.
      HEAD_TAB-DOCDT = VBRK-FKDAT.
      FKART  = VBRK-FKART.
      CLEAR HEAD_TAB-SALESOR.
      SELECT SINGLE * FROM VBAK WHERE VBELN = I_TAB-ORNO.
      MOVE VBAK-VKBUR TO HEAD_TAB-SALOF.
      MOVE VBAK-BSTNK TO HEAD_TAB-POREF.
      MOVE VBAK-BSTDK TO HEAD_TAB-PODAT.
      MOVE HEAD_TAB-PODAT TO B_STR.
      CONCATENATE B_STR6(2) '.' B_STR4(2) '.' B_STR+2(2) INTO B_STR.
      CONCATENATE HEAD_TAB-POREF '/' B_STR INTO B_STR.
      MOVE B_STR TO HEAD_TAB-POREF.
      SELECT SINGLE * FROM VBPA WHERE VBELN EQ I_TAB-INVO AND PARVW EQ 'RE'.
      IF B_SPCFLAG EQ 'T'.
        SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ B_SOLDTOPARTYCODE.
        SELECT SINGLE * FROM KNB1 WHERE KUNNR EQ B_SOLDTOPARTYCODE.
        SELECT SINGLE * FROM KNVK WHERE KUNNR EQ B_SOLDTOPARTYCODE.
             move knvk-name1 to head_tab-cperson.
             move knvk-telf1 to head_tab-tphone.
        MOVE KNA1-NAME1 TO SOLDP_TAB-NAME. "SOLD TO PARTY
        MOVE KNA1-NAME2 TO SOLDP_TAB-ADD1. "SOLD TO PARTY
        MOVE KNA1-NAME3 TO SOLDP_TAB-ADD2. "SOLD TO PARTY
        MOVE KNA1-NAME4 TO SOLDP_TAB-ADD6. "added By deepak 26/11/98
        MOVE KNA1-ORT01 TO SOLDP_TAB-ADD3. "SOLD TO PARTY
        MOVE KNA1-PSTLZ TO SOLDP_TAB-ADD4. "SOLD TO PARTY
        MOVE KNA1-REGIO TO SOLDP_TAB-ADD5. "SOLD TO PARTY
      ELSE.
        SELECT SINGLE * FROM KNB1 WHERE KUNNR EQ VBPA-KUNNR.
        IF VBPA-ADRNR EQ SPACE.
          SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ VBPA-KUNNR.
          MOVE KNA1-NAME1 TO SOLDP_TAB-NAME.   "SOLD TO PARTY
          MOVE KNA1-NAME2 TO SOLDP_TAB-ADD1.   "SOLD TO PARTY
          MOVE KNA1-NAME3 TO SOLDP_TAB-ADD2.   "SOLD TO PARTY
          MOVE KNA1-NAME4 TO SOLDP_TAB-ADD6.  "added By deepak 26/11/98
          MOVE KNA1-ORT01 TO SOLDP_TAB-ADD3.   "SOLD TO PARTY
          MOVE KNA1-PSTLZ TO SOLDP_TAB-ADD4.   "SOLD TO PARTY
          MOVE KNA1-REGIO TO SOLDP_TAB-ADD5.   "SOLD TO PARTY
        ELSE.
          SELECT SINGLE * FROM SADR WHERE ADRNR EQ VBPA-ADRNR.
          MOVE SADR-NAME1 TO SOLDP_TAB-NAME.   "SOLD TO PARTY
          MOVE SADR-NAME2 TO SOLDP_TAB-ADD1.   "SOLD TO PARTY
          MOVE SADR-NAME3 TO SOLDP_TAB-ADD2.   "SOLD TO PARTY
          MOVE SADR-NAME4 TO SOLDP_TAB-ADD6.
          MOVE SADR-ORT01 TO SOLDP_TAB-ADD3.   "SOLD TO PARTY
          MOVE SADR-PSTLZ TO SOLDP_TAB-ADD4.   "SOLD TO PARTY
          MOVE SADR-REGIO TO SOLDP_TAB-ADD5.   "SOLD TO PARTY
        ENDIF.
      ENDIF.
    insereted by anil on request by raghu 4/7/98
         select single * from knvk where kunnr eq vbpa-kunnr.
      CLEAR VBPA .
      SELECT * FROM VBPA WHERE VBELN EQ VBAK-VBELN AND PARVW = 'AP' AND
        ( PARNR NE SPACE OR ADRNR NE SPACE ) .
        IF  NOT VBPA-ADRNR IS INITIAL .
          SELECT SINGLE * FROM SADR WHERE ADRNR = VBPA-ADRNR .
          MOVE SADR-NAME3 TO HEAD_TAB-CPERSON.
          MOVE SADR-TELF1 TO HEAD_TAB-TPHONE.
        ELSE .
          SELECT SINGLE * FROM KNVK WHERE PARNR = VBPA-PARNR .
          MOVE KNVK-NAME1 TO HEAD_TAB-CPERSON.
          MOVE KNVK-TELF1 TO HEAD_TAB-TPHONE.
        ENDIF .
        EXIT .
      ENDSELECT .
      MOVE VBAK-VKBUR TO HEAD_TAB-SALOF.
      MOVE VBAK-VBELN TO HEAD_TAB-SALESOR.
      MOVE VBAK-WAERK TO HEAD_TAB-BILLCUR.
      MOVE KNA1-KUNNR TO HEAD_TAB-CCODE.
    END OF INSERTION
      SELECT SINGLE * FROM VBPA WHERE VBELN EQ I_TAB-INVO AND PARVW EQ 'WE'.
      IF VBPA-ADRNR EQ SPACE.
        SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ VBPA-KUNNR.
        MOVE KNA1-KUNNR TO B_SHIP_TO_PARTY."SHIP TO PARTY
        MOVE KNA1-NAME1 TO SHIPP_TAB-NAME. "SHIP TO PARTY
        MOVE KNA1-NAME2 TO SHIPP_TAB-ADD1. "SHIP TO PARTY
        MOVE KNA1-NAME3 TO SHIPP_TAB-ADD2. "SHIP TO PARTY
        MOVE KNA1-NAME4 TO SHIPP_TAB-ADD6. " add by deepak on 26/11/98
        MOVE KNA1-ORT01 TO SHIPP_TAB-ADD3. "SHIP TO PARTY
        MOVE KNA1-PSTLZ TO SHIPP_TAB-ADD4. "SHIP TO PARTY
        MOVE KNA1-REGIO TO SHIPP_TAB-ADD5. "SHIP TO PARTY
      ELSE.
        SELECT SINGLE * FROM SADR WHERE ADRNR EQ VBPA-ADRNR.
        move kna1-kunnr to b_ship_to_party.  "SHIP TO PARTY
        MOVE SADR-NAME1 TO SHIPP_TAB-NAME. "SHIP TO PARTY
        MOVE SADR-NAME2 TO SHIPP_TAB-ADD1. "SHIP TO PARTY
        MOVE SADR-NAME3 TO SHIPP_TAB-ADD2. "SHIP TO PARTY
        MOVE SADR-NAME4 TO SHIPP_TAB-ADD6.
        MOVE SADR-ORT01 TO SHIPP_TAB-ADD3. "SHIP TO PARTY
        MOVE SADR-PSTLZ TO SHIPP_TAB-ADD4. "SHIP TO PARTY
        MOVE SADR-REGIO TO SHIPP_TAB-ADD5. "SHIP TO PARTY
      ENDIF.
    IF B_IFSERVICEORDER EQ 'F'.
           SELECT SINGLE * FROM LIPS WHERE VBELN EQ B_INVNO.
           MOVE LIPS-WERKS TO HEAD_TAB-PLANT.
    ELSE.
      SELECT SINGLE * FROM VBRP WHERE VBELN EQ I_TAB-INVO
                                  AND FKIMG NE 0.
      MOVE VBRP-WERKS TO HEAD_TAB-PLANT.
    endif.
      SELECT SINGLE * FROM T001W WHERE WERKS EQ HEAD_TAB-PLANT.
      SELECT SINGLE * FROM SADR WHERE ADRNR EQ T001W-ADRNR.
      MOVE SADR-NAME1 TO HEAD_TAB-PNAM1.
      MOVE SADR-NAME2 TO HEAD_TAB-PNAM2.
      MOVE SADR-NAME3 TO HEAD_TAB-PNAM3.
      MOVE SADR-NAME4 TO HEAD_TAB-PNAM4.
      MOVE SADR-PSTLZ TO HEAD_TAB-PNAM5.
      PERFORM GETCST-LST USING T001W-ADRNR.
      DATA : B_AMOUNT_ITEM LIKE VBRP-NETWR .
      PERFORM GETTAXFORLINEITEMS USING I_TAB-INVO.
      B_INVOCTROI = 0.
      B_INVFORCHARGE = 0.
      B_INVTOT = 0.
      SELECT * FROM VBRP WHERE VBELN = I_TAB-INVO   "changed on 15/4
                           AND FKIMG NE 0.
        B_AMOUNT_ITEM = 0.
        MOVE VBRP-POSNR+2(4) TO LINE_TAB-SLNO.
        MOVE VBRP-POSNR TO LINE_TAB-POSNR.
        MOVE VBRP-MATNR+13(5) TO LINE_TAB-PRODCODE.
        MOVE VBRP-ARKTX TO LINE_TAB-DESC.
        SELECT SINGLE * FROM LIPS WHERE VBELN EQ B_INVNO
                                    AND VGPOS EQ VBRP-POSNR.
        SELECT SINGLE * FROM SER01 WHERE LIEF_NR EQ LIPS-VBELN
                                     AND POSNR EQ LIPS-POSNR.
        IF SY-SUBRC EQ 0.
          SELECT * FROM OBJK WHERE OBKNR EQ SER01-OBKNR.
            MOVE OBJK-SERNR TO SER_TAB-SERNO.
            MOVE VBRP-POSNR+2(4) TO SER_TAB-SLNO.
            WRITE SER_TAB-SERNO NO-ZERO TO SER_TAB-SERNO.
            CONDENSE SER_TAB-SERNO NO-GAPS.
            APPEND SER_TAB.
          ENDSELECT.
        ENDIF.
        MOVE VBRP-FKIMG TO B_TEMP.
        SPLIT B_TEMP AT '.' INTO B_TEMP1 B_TEMP.
        CONDENSE B_TEMP1 NO-GAPS.
        MOVE B_TEMP1 TO LINE_TAB-QTY.
        IF VBRP-KZWI2 GT 0.
          B_DIVIDE = VBRP-KZWI2 / VBRP-FKIMG.
          MOVE B_DIVIDE TO  LINE_TAB-RATE.
          B_DIVIDE = 0.
        ELSE.
          B_DIVIDE = VBRP-KZWI1 / VBRP-FKIMG.
          MOVE B_DIVIDE TO LINE_TAB-RATE.
          B_DIVIDE = 0.
        ENDIF.
        B_AMOUNT_ITEM = LINE_TAB-RATE * VBRP-FKIMG.
      add line_tab-rate to b_invrate.
        ADD B_AMOUNT_ITEM TO B_INVRATE.
        MOVE B_AMOUNT_ITEM TO LINE_TAB-AMOUNT.
        MOVE VBRP-VRKME TO LINE_TAB-UOM.
        B_TOTAL_TAX = 0.
       write : / 'before loop' , vbrp-posnr.
        LOOP AT TKOMV WHERE KPOSN EQ VBRP-POSNR AND KNUMV = VBRK-KNUMV.
         write : / vbrp-posnr , tkomv-kposn.
          IF TKOMV-KSCHL IN CTYPE.
            B_TOTAL_TAX = B_TOTAL_TAX +
                      ( ( ( TKOMV-KBETR * TKOMV-KAWRT ) * 100 ) / 100000 ).
           b_total_tax = b_total_tax + tkomv-kwert.
            ADD TKOMV-KWERT TO B_INVSTAX.
          ENDIF.
          IF TKOMV-KSCHL EQ 'ZOCT'.
            ADD TKOMV-KWERT TO B_INVOCTROI.
          ENDIF.
          IF TKOMV-KSCHL EQ 'ZF00' OR TKOMV-KSCHL EQ 'ZF01'.
            ADD TKOMV-KWERT TO B_INVFORCHARGE.
          ENDIF.
          IF TKOMV-KSCHL EQ 'ZIN6'.
            ADD TKOMV-KWERT TO B_INVTOT.
          ENDIF.
        ENDLOOP.
        B_SURCHARG = 'N'.
        B_TOT = 0.
        SORT TKOMV BY KSCHL.
        LOOP AT TKOMV WHERE KPOSN EQ VBRP-POSNR AND KNUMV = VBRK-KNUMV AND
                                                    KSCHL IN CTYPE.
          IF TKOMV-KSCHL = 'ZIN1' OR TKOMV-KSCHL = 'ZIN2'.
            B_TAX = TKOMV-KBETR / 10.
          ENDIF.
          IF TKOMV-KSCHL = 'ZIN3'.
            B_TAX = B_TAX + ( B_TAX * ( TKOMV-KBETR / 10 ) / 100 ).
          ENDIF.
          IF TKOMV-KSCHL = 'ZIN4'.
            B_TAX = B_TAX + ( B_TAX * ( TKOMV-KBETR / 10 ) / 100 ).
            B_SURCHARG = 'Y'.
          ENDIF.
        ENDLOOP.
        LOOP AT TKOMV WHERE KSCHL = 'ZIN6'.
          B_TOT = TKOMV-KBETR / 10.
        ENDLOOP.
        MOVE B_TOTAL_TAX TO LINE_TAB-B_TAXAMOUNT_LINE.
        " b_tax =  ( line_tab-b_taxamount_line / line_tab-amount ) * 100.
        MOVE B_TAX TO LINE_TAB-STAX .
        MOVE B_TOT TO LINE_TAB-OTAX.
    **Recently added**
        B_AMOUNT_ITEM = 0.
        B_TOTAL_TAX = 0.
        B_TAX = 0.
        B_TOT = 0.
       b_invrate = 0.
    ***till here
        APPEND LINE_TAB.
      ENDSELECT.
      PERFORM PRINTTEXT.
    ENDFORM.
    END-OF-SELECTION .
          FORM WRITEITEMS                                               *
    FORM WRITEITEMS.
      DATA : POPULATE TYPE I.
      PERFORM SELECTDATA.
      DESCRIBE TABLE INV_TAB LINES POPULATE.
      IF POPULATE NE 0.
        LOOP AT INV_TAB.
          ULINE AT 5(83).
          AT FIRST.
            WRITE : /5 '|'  ,10 '|SALES DOCUMENT NO' COLOR 3,
                    30 '|DELIVERY DOCUMENT NO' COLOR 3,
                    52 '|PAYER..      ' COLOR 3 ,
                    87 '|'.
            ULINE AT /5(83).
          ENDAT.
          SELECT * FROM VBRK WHERE VBELN EQ INV_TAB-BILLNO.
          CLEAR LIKP-VBELN.
          IF VBRK-RFBSK = 'C'.
            MOVE VBRK-VBELN TO HEAD_TAB-DOCNO.
            MOVE VBRK-FKDAT TO HEAD_TAB-DOCDT.
            SELECT * FROM VBFA WHERE VBELN EQ VBRK-VBELN.
                      "      and vbtyp_v ca 'JBGC'.
              IF  VBFA-VBTYP_V EQ 'G' OR VBFA-VBTYP_V EQ 'C'.
                B_IFSERVICEORDER = 'F'.
              ENDIF.
              IF VBFA-VBTYP_V = 'J'.
                 B_IFSERVICEORDER = 'T'.
              ENDIF.
            ENDSELECT.
            IF B_IFSERVICEORDER EQ 'T'.
              SELECT SINGLE * FROM VBFA WHERE VBELN EQ VBRK-VBELN
              AND VBTYP_V EQ 'J'.
              SELECT * FROM LIKP WHERE VBELN EQ VBFA-VBELV.
                IF SY-SUBRC NE 4.
                  SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ VBRK-KUNRG.
                  IFSELECTED = 'X'.
                  WRITE : /5 '|' ,8 IFSELECTED AS CHECKBOX ,10 '|',
                          11 VBRK-VBELN ,30 '|' ,31 LIKP-VBELN ,52 '|',
                          53 KNA1-NAME1 ,87 '|', LIKP-WERKS.
                  ULINE AT /5(83).
                  B_RECCOUNT = B_RECCOUNT + 1.
                ENDIF.
              ENDSELECT.
            ELSE.
              SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ VBRK-KUNRG.
              IFSELECTED = 'X'.
              WRITE : /5 '|' ,8 IFSELECTED AS CHECKBOX ,10 '|',
                      11 VBRK-VBELN ,30 '|' ,31 LIKP-VBELN ,52 '|',
                      53 KNA1-NAME1 ,87 '|', LIKP-WERKS.
              ULINE AT /5(83).
              B_RECCOUNT = B_RECCOUNT + 1.
            ENDIF.
            ELSE.
              IFSELECTED = ' '.
        CASE VBRK-RFBSK.
           WHEN 'A'.
           TXT = 'Billing document blocked for forwarding to FI'.
           WHEN 'B'.
           TXT = 'Posting document not created (account determ.error)'.
           WHEN 'D'.
           TXT = 'Billing document is not relevant for accounting'.
           WHEN 'E'.
           TXT = 'Billing document has been completed by cancellation'.
           WHEN 'F'.
           TXT = 'Posting document not created (pricing error)'.
           WHEN 'G'.
           TXT = 'Posting document not created (export data missing)'.
           WHEN 'H'.
           TXT = 'Posting using invoice list'.
           WHEN 'I'.
          TXT = 'Posting using invoice list (account determination error)'.
          WHEN 'J'.
          TXT = 'Accounting document created, accrual still incomplete'.
          ENDCASE.
              ULINE AT /5(83).
              WRITE : /5 '|' ,8 IFSELECTED  AS CHECKBOX INPUT OFF ,10 '|',
                      11 VBRK-VBELN ,30 '|' ,52 '|',
                      53 KNA1-NAME1 ,87 '|', LIKP-WERKS.
              ULINE AT /5(83).
              WRITE :/5 '|' , 8 TXT , 87 '|'.
              ULINE AT /5(83).
            ENDIF.
          ENDSELECT.
        ENDLOOP.
      ENDIF.
    ENDFORM.
    AT USER-COMMAND.
      DATA : CHECK(1).
      DATA : TOTALLINES LIKE SY-INDEX.
      START = 4.
      REFRESH LINE_TAB.
      REFRESH SER_TAB.
      B_PRNUCOMM = SY-UCOMM.
      DESCRIBE TABLE I_TAB LINES TOTALLINES.
      IF SY-UCOMM NE 'NEXT' AND SY-UCOMM NE 'LAST'.
    do b_reccount times.
        REFRESH I_TAB.
        DO.
          READ LINE START FIELD VALUE IFSELECTED INTO CHECK.
          IF SY-SUBRC EQ 0.
            IF CHECK EQ 'X'.
              READ LINE START FIELD VALUE LIKP-VBELN INTO I_TAB-SDNO.
              READ LINE START FIELD VALUE VBRK-VBELN INTO I_TAB-INVO.
           SELECT SINGLE * FROM VBFA WHERE VBELN EQ I_TAB-INVO
                                          AND VBTYP_V EQ 'C'.
            SELECT SINGLE * FROM VBRK WHERE VBELN EQ I_TAB-INVO.
              I_TAB-ORNO = VBRK-ZUONR.
              APPEND I_TAB.
              CLEAR I_TAB.
              CHECK = ' '.
            ENDIF.
            START = START + 2.
          ELSE.
            EXIT.
          ENDIF.
        ENDDO.
      ENDIF.
      DATA : B_UCOMM LIKE SY-UCOMM.
      MOVE SY-UCOMM TO B_UCOMM.
      CASE B_UCOMM.
        WHEN 'NEXT'.
          RECNO = RECNO + 1.
          IF RECNO GT TOTALLINES.
            RECNO = 1.
          ENDIF.
           read table i_tab index recno.
           perform sold_to_party_change using i_tab-invo.
          PERFORM MAIN.
        WHEN 'LAST'.
          RECNO = RECNO - 1.
          IF RECNO LT 1.
            RECNO = 1.
          ENDIF.
           read table i_tab index recno.
           perform sold_to_party_change using i_tab-invo.
          PERFORM MAIN.
        WHEN 'PRIN'.
           read table i_tab index recno.
           set pf-status '101'.
           perform sold_to_party_change using i_tab-invo.
          PRINT-CONTROL FUNCTION 'CI015'.
          PERFORM MAIN.
        WHEN 'PREV'.
          READ TABLE I_TAB INDEX RECNO.
         NEW-PAGE PRINT OFF NO-TITLE NO-HEADING LINE-SIZE 132 LINE-COUNT 65.
         set pf-status '102'.
         perform sold_to_party_change using i_tab-invo.
          PRINT-CONTROL FUNCTION 'CI015'.
          PERFORM MAIN.
        WHEN 'QUIT'.
          LEAVE SCREEN .
          EXIT.
      ENDCASE.
          FORM PRINTTEXT                                                *
    FORM PRINTTEXT.
      PERFORM READTEXT USING '0002' 'VBBK'.
      PERFORM READTEXT USING '0003' 'VBBK'.
      PERFORM READTEXT USING '0004' 'VBBK'.
      PERFORM READTEXT USING '0012' 'VBBK'.
      PERFORM READTEXT USING '0013' 'VBBK'.
      PERFORM READTEXT USING '0022' 'VBBK'.
      PERFORM READTEXT USING 'Z103' 'VBBP' .
      PERFORM READTEXT USING 'Z104' 'VBBP' .
    added by praveen as per selvam's request.
      IF FKART = 'FV'.
      PERFORM READTEXT USING 'ZIS1' 'VBBK'.
      PERFORM READTEXT USING 'ZIS2' 'VBBK'.
      ENDIF.
    ENDFORM.
          FORM READTEXT                                                 *
    -->  B_ID                                                          *
    FORM READTEXT USING B_ID B_OBJECT.
      DATA : BEGIN OF HEADER1 OCCURS 0.
              INCLUDE STRUCTURE THEAD.
      DATA : END OF HEADER1.
      DATA : BEGIN OF LINE1 OCCURS 0.
              INCLUDE STRUCTURE TLINE.
      DATA : END OF LINE1.
      DATA : B_NAME LIKE THEAD-TDNAME.
      B_NAME = I_TAB-SDNO.
      PERFORM FILL_CHAR(ZURL) USING 10 '0' I_TAB-SDNO CHANGING B_NAME.
    added by praveen to pick up from and to date for invoice.
      IF B_ID = 'ZIS1' OR B_ID = 'ZIS2'.
           B_NAME = I_TAB-INVO.
      ENDIF.
      IF B_OBJECT = 'VBBP'.
        CONCATENATE I_TAB-ORNO VBRP-POSNR INTO B_NAME.
      ENDIF.
      CALL FUNCTION 'READ_TEXT'
           EXPORTING
               ID                       = B_ID
               LANGUAGE                 = 'E'
                NAME                    = B_NAME
                OBJECT                  = B_OBJECT
            header                    = header1
       IMPORTING
               HEADER                   = HEADER1
           TABLES
                LINES                   = LINE1
           EXCEPTIONS
                ID                      = 1
                LANGUAGE                = 2
                NAME                    = 3
                NOT_FOUND               = 4
                OBJECT                  = 5
                REFERENCE_CHECK         = 6
                WRONG_ACCESS_TO_ARCHIVE = 7
                OTHERS                  = 8.
      DATA : LINE(40).
      LOOP AT LINE1.
        LINE = LINE1-TDLINE.
      ENDLOOP.
      CASE B_ID.
        WHEN '0002'.
          HEAD_TAB-CARNAME = LINE.
        WHEN '0012'.
          HEAD_TAB-SPSHIPI = LINE.
        WHEN '0013'.
          HEAD_TAB-SPCARIN = LINE.
        WHEN '0003'.
          HEAD_TAB-LRNO = LINE.
        WHEN '0004'.
          HEAD_TAB-LRDT = LINE.
        WHEN '0022'.
          HEAD_TAB-MODEPAY = LINE.
        WHEN 'Z103'.
          HEAD_TAB-CSTNO = LINE.
        WHEN 'Z104'.
          HEAD_TAB-LSTNO = LINE.
        WHEN 'ZIS1'.
          HEAD_TAB-FROMDATE = LINE.
          CONDENSE HEAD_TAB-FROMDATE NO-GAPS.
         WHEN 'ZIS2'.
          HEAD_TAB-ENDDATE = LINE.
          CONDENSE HEAD_TAB-ENDDATE NO-GAPS.
      ENDCASE.
    ENDFORM.
          FORM INIT                                                     *
    FORM INIT.
      CLEAR HEAD_TAB.
      REFRESH LINE_TAB.
      CLEAR LINE_TAB.
      REFRESH SER_TAB.
      CLEAR SER_TAB.
      B_DIFFCOUNT = 0.
      B_COUNTOFRECORDS = 0.
      B_ORDERREFNO = ' '.
      B_RATEFORITEM = ' '.
      B_TOTALAMOUNT = 0.
      B_CUSTOMERNO = ' '.
      B_RECORDCOUNTER = 0.
      B_AMOUNTINWORDS = ' '.
      B_DECIMALAMOUNTINWORDS = ' '.
      B_AMOUNTINWORDSFINAL = ' '.
      B_CUSTOMERCODE = ' '.
      B_STRINGLENGTH = 0.
      B_INVNO = ' '.
      B_RECCOUNT = 0 .
      START = 0.
      IFSELECTED = ' '.
      ANS = ' '.
    ENDFORM.
          FORM GETTAX                                                   *
    -->  INVO                                                          *
    FORM GETTAX USING INVO.
      DATA: BEGIN OF TKOMVD OCCURS 0.
              INCLUDE STRUCTURE KOMVD.
      DATA: END OF TKOMVD.
      DATA: BEGIN OF COMM_ITEM_E OCCURS 0.
              INCLUDE STRUCTURE KOMP .
      DATA: END OF COMM_ITEM_E.
      REFRESH TKOMV.
      MOVE 'I' TO CTYPE-SIGN.
      MOVE 'BT' TO CTYPE-OPTIONS.
      MOVE 'ZIN4' TO CTYPE-HIGH.
      MOVE 'ZIN1' TO CTYPE-LOW.
      APPEND CTYPE.
      SELECT SINGLE * FROM VBRK WHERE VBELN = INVO.
      MOVE-CORRESPONDING VBRK TO KOMK.
      CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
           EXPORTING
                COMM_HEAD_I = KOMK
                COMM_ITEM_I = KOMP
           TABLES
                TKOMV       = TKOMV
                TKOMVD      = TKOMVD
           EXCEPTIONS
                OTHERS      = 1.
    SUB TOTAL AMOUNT
      LOOP AT TKOMV .
        IF TKOMV-KSCHL EQ 'ZSRP'.
          HEAD_TAB-STAMT = HEAD_TAB-STAMT + TKOMV-KWERT.
        ENDIF.
      ENDLOOP.
    *SALES TAX AMOUNT
    SELECT * FROM VBRP WHERE VBELN EQ INVO AND FKIMG NE 0. "changed on 15/4
        LOOP AT TKOMV WHERE KPOSN EQ VBRP-POSNR.
          IF TKOMV-KSCHL IN CTYPE.
            HEAD_TAB-STAXAMT = HEAD_TAB-STAXAMT +  TKOMV-KWERT.
          ENDIF.
        ENDLOOP.
      ENDSELECT.
    FORWARDING CHARGES
      LOOP AT TKOMV.
        IF TKOMV-KSCHL EQ 'ZF00'.
          HEAD_TAB-FCHRG = HEAD_TAB-FCHRG + TKOMV-KWERT.
        ENDIF.
        IF TKOMV-KSCHL EQ 'ZIN6'.
          HEAD_TAB-OCHRG = HEAD_TAB-OCHRG + TKOMV-KWERT.
        ENDIF.
      ENDLOOP.
    *grand total
      CLEAR HEAD_TAB-GTOTAL.
      HEAD_TAB-GTOTAL = HEAD_TAB-GTOTAL + HEAD_TAB-FCHRG.
      HEAD_TAB-GTOTAL = HEAD_TAB-GTOTAL + HEAD_TAB-STAXAMT.
      HEAD_TAB-GTOTAL = HEAD_TAB-GTOTAL + HEAD_TAB-STAMT.
      HEAD_TAB-GTOTAL = HEAD_TAB-GTOTAL + HEAD_TAB-OCHRG.
      PERFORM CONVERT.
    ENDFORM.
    *&      Form  GETCST-LST
    FORM GETCST-LST USING B_REGION.
      SELECT SINGLE * FROM SADR WHERE ADRNR EQ B_REGION.
      MOVE SADR-TELTX TO HEAD_TAB-PLSTNO.
      MOVE SADR-TELX1 TO HEAD_TAB-PCSTNO.
    ENDFORM.                               " GETCST-LST
    *&      Form  ALIGNWRITE
    FORM ALIGNWRITE.
    *set pf-status '102'.
      PERFORM HEADER.
      DATA : LINECTR TYPE I VALUE 0.
      DATA : B_RATE(12),B_AMOUNT(13).
      DATA : B_SCOUNT TYPE I VALUE 0.
      DATA B_SRLNO TYPE I VALUE 0.
      DATA : B_FLAG TYPE I VALUE 0.
      DATA : B_SUBTOTAL LIKE VBRP-NETWR VALUE 0.
      LOOP AT LINE_TAB.
        ADD 1 TO LINECTR.
        ADD 1 TO B_SRLNO.
        B_RATE = LINE_TAB-RATE.
        B_AMOUNT = LINE_TAB-AMOUNT.
        WRITE : / ' ',7(4) B_SRLNO.
        WRITE :14 LINE_TAB-PRODCODE.
        WRITE :23 LINE_TAB-DESC.
        WRITE :67(3) LINE_TAB-UOM.
        WRITE :73(5) LINE_TAB-QTY RIGHT-JUSTIFIED.
        WRITE :80(14) LINE_TAB-RATE RIGHT-JUSTIFIED.
        B_SUBTOTAL = B_SUBTOTAL + LINE_TAB-AMOUNT.
        WRITE :95(12) LINE_TAB-AMOUNT RIGHT-JUSTIFIED.
        CONDENSE LINE_TAB-STAX NO-GAPS.
        LINE_TAB-STAX =
                 ( LINE_TAB-B_TAXAMOUNT_LINE / LINE_TAB-AMOUNT ) * 100.
        WRITE :110 LINE_TAB-STAX(5).
        PERFORM IFENDOFPAGE USING LINECTR B_SUBTOTAL.
                                           " write :95 line_tab-otax.
        B_SCOUNT = 0.
        IF PRINTSL EQ 'X'.
          DESCRIBE TABLE SER_TAB LINES B_FLAG.
          IF B_FLAG NE 0.
            WRITE : / ' ',12 'Serial Nos :'.
            ADD 1 TO LINECTR.
          ENDIF.
          LOOP AT SER_TAB WHERE SLNO EQ LINE_TAB-SLNO.
            B_SCOUNT = B_SCOUNT + 1.
            WRITE : (18)SER_TAB-SERNO NO-GAP,'  '.
            IF B_SCOUNT EQ 3.
              WRITE : /23 ' '.
              ADD 1 TO LINECTR.
              B_SCOUNT = 0.
            ENDIF.
            PERFORM IFENDOFPAGE USING LINECTR B_SUBTOTAL.
          ENDLOOP.
          B_SCOUNT = 0.
        ENDIF.
      ENDLOOP.
      DATA : B_EXTRA TYPE I.
      B_EXTRA = 23 - LINECTR.
      DO B_EXTRA TIMES.
        WRITE : ' ' ,/.
      ENDDO.
      PERFORM FOOTER.
    ENDFORM.                               " ALIGNWRITE
    **form footer **
    FORM FOOTER.
      WRITE :/ ' '.
      WRITE :/ ' ',24 HEAD_TAB-BILLCUR,58 B_INVRATE,
              101 HEAD_TAB-CARNAME+0(15).
      WRITE :/58 B_INVSTAX ,79 HEAD_TAB-CARNAME+15(20).
      WRITE :/54 'TOT:', HEAD_TAB-OCHRG ,95 HEAD_TAB-LRNO.
      WRITE :/58 B_INVFORCHARGE , 89 HEAD_TAB-LRDT.
      WRITE :/17 HEAD_TAB-LSTNO,58 B_INVOCTROI , 99 HEAD_TAB-MODEPAY.
    HEAD_TAB-GTOTAL = B_INVRATE + B_INVSTAX + B_INVOCTROI + B_INVFORCHARGE.
      WRITE :/17 HEAD_TAB-CSTNO,61 HEAD_TAB-GTOTAL.
      PERFORM CONVERT.
      WRITE :/ ' ',/,/.
      WRITE :/17 HEAD_TAB-PLSTNO4(31),44 B_AMOUNTINWORDS0(100).
      WRITE :/17 HEAD_TAB-PCSTNO4(31),44 B_AMOUNTINWORDS100(100).
      WRITE : /.
    ENDFORM.
    *HEADER INFO PRINTING*
    FORM HEADER.
      DATA : B_POREF(35).
    *concatenate head_tab-poref '/' head_tab-podat into b_poref.
      CONDENSE HEAD_TAB-PODAT.
      CONDENSE HEAD_TAB-POREF.
      FORMAT INTENSIFIED OFF.
      WRITE : / ' ',/,/.                   "a line feed is removed
      WRITE : / '  ',83 HEAD_TAB-PNAM1.
      WRITE : / '  ',83 HEAD_TAB-PNAM2.
      WRITE : / '  ',83 HEAD_TAB-PNAM3.
      PRINT-CONTROL FUNCTION 'CI010'.
      WRITE : /13 HEAD_TAB-DOCNO,61 HEAD_TAB-DOCDT.
      PRINT-CONTROL FUNCTION 'CI015'.
      WRITE : '  ',86 HEAD_TAB-PNAM5.
      WRITE :/83 HEAD_TAB-PNAM4.
      WRITE : / ' ',/, 90 HEAD_TAB-SPSHIPI+0(30).
      WRITE : /8 SOLDP_TAB-NAME ,47 SHIPP_TAB-NAME,
                90 HEAD_TAB-SPSHIPI+30(10).
      WRITE : / ' ',8 SOLDP_TAB-ADD1 , 47 SHIPP_TAB-ADD1.
      WRITE : / ' ',8 SOLDP_TAB-ADD2 , 47 SHIPP_TAB-ADD2.
      WRITE : / ' ',8 SOLDP_TAB-ADD6 , 47 SHIPP_TAB-ADD6,
                    90 HEAD_TAB-SPCARIN+0(30).
      WRITE : / ' ',8 SOLDP_TAB-ADD3 , 47 SHIPP_TAB-ADD3,
                 90 HEAD_TAB-SPCARIN+30(10).
      WRITE : / ' ',8 SOLDP_TAB-ADD4 , 47 SHIPP_TAB-ADD4.
      WRITE : / ' ',25 HEAD_TAB-CCODE ,68 HEAD_TAB-CPERSON ,
                   109 HEAD_TAB-SALESOR,/.
      MOVE HEAD_TAB-PODAT TO B_STR.
      CONCATENATE B_STR6(2) '.' B_STR4(2) '.' B_STR+2(2) INTO B_STR.
      CONCATENATE HEAD_TAB-POREF '/' B_STR INTO B_STR.
      MOVE B_STR TO HEAD_TAB-POREF.
      WRITE : / ' ',25 B_STR.
      WRITE : ' ',64 HEAD_TAB-TPHONE NO-ZERO,109 HEAD_TAB-SALOF.
      WRITE : / ' ',/,/,/,/.
    ENDFORM.
          FORM CONVERT                                                  *
    FORM CONVERT.
      DATA : B_WORDS(100).
      DATA : B_DECIS(100).
      DATA : TEMP1(40).
      DATA : TEMP2(40).
      CALL FUNCTION 'Z_CONVERSION_TO_WORDS'
           EXPORTING
                AMOUNT    = HEAD_TAB-GTOTAL
           IMPORTING
                IN_WORDS  = B_WORDS
                IN_DECMS  = B_DECIS
           EXCEPTIONS
                TOO_LARGE = 1
                OTHERS    = 2.
      MOVE HEAD_TAB-GTOTAL TO TEMP1.
      SPLIT TEMP1 AT '.' INTO TEMP1 TEMP2.
      IF HEAD_TAB-BILLCUR EQ 'INR'.
        IF TEMP2 NE '00'.
          CONCATENATE 'Rupees' B_WORDS 'and paise' B_DECIS
                      INTO B_AMOUNTINWORDS SEPARATED BY SPACE.
        ELSE.
          CONCATENATE 'Rupees' B_WORDS B_DECIS
                      INTO B_AMOUNTINWORDS SEPARATED BY SPACE.
        ENDIF.
      ELSE.
        CONCATENATE HEAD_TAB-BILLCUR B_WORDS B_DECIS
                    INTO B_AMOUNTINWORDS SEPARATED BY SPACE.
      ENDIF.
    ENDFORM.
          FORM GETTAXFORLINEITEMS                                       *
    -->  INVO                                                          *
    FORM GETTAXFORLINEITEMS USING INVO.
      DATA: BEGIN OF TKOMVD OCCURS 0.
              INCLUDE STRUCTURE KOMVD.
      DATA: END OF TKOMVD.
      CLEAR CTYPE.
      CLEAR KOMK.
      SELECT SINGLE * FROM VBRK WHERE VBELN = INVO.
      MOVE-CORRESPONDING VBRK TO KOMK.
      CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
           EXPORTING
                COMM_HEAD_I = KOMK
                COMM_ITEM_I = KOMP
           TABLES
                TKOMV       = TKOMV
                TKOMVD      = TKOMVD
           EXCEPTIONS
                OTHERS      = 1.
      DATA : B_TAX TYPE I.
    *SALES TAX pervcentage for line items.
      MOVE 'I' TO CTYPE-SIGN.
      MOVE 'BT' TO CTYPE-OPTIONS.
      MOVE 'ZIN4' TO CTYPE-HIGH.
      MOVE 'ZIN1' TO CTYPE-LOW.
      APPEND CTYPE.
    ENDFORM.
          FORM IFENDOFPAGE                                              *
    -->  LINECTR                                                       *
    -->  B_SUBTOTAL                                                    *
    FORM IFENDOFPAGE USING LINECTR B_SUBTOTAL.
      IF LINECTR EQ 19.
        WRITE : / ' ',/,10 'Carried forward '.
        PERFORM PUTALINE.
        WRITE :83 B_SUBTOTAL.
        ADD 1 TO LINECTR.
                                           "do 37 times.
        DO 24 TIMES.
          WRITE : ' ',/.
        ENDDO.
        PERFORM HEADER.
        WRITE : /10 'Brought forward'.
        PERFORM PUTALINE.
        WRITE : 83 B_SUBTOTAL.
        LINECTR = 1.
      ENDIF.
    ENDFORM.
          FORM PUTALINE                                                 *
    FORM PUTALINE.
      DO 27 TIMES.
        WRITE : '-'.
      ENDDO.
      WRITE '>'.
    ENDFORM.
          FORM ERRORCHECK                                               *
    -->  SY-SUBRC                                                      *
    FORM ERRORCHECK USING SY-SUBRC.
      IF SY-SUBRC NE 0.
        PERFORM WIN_INFO(ZURL) USING 'Error' 'Document does not exists'
                                     'Please re-enter the doc #'.
        SET SCREEN 1000.
        LEAVE SCREEN.
        EXIT.
      ENDIF.
    ENDFORM.
          FORM SOLD_TO_PARTY_CHANGE                                     *
    -->  B_INVNO                                                       *
    FORM SOLD_TO_PARTY_CHANGE USING B_INVNO.
    *TO CHANGE THE SOLD TO PARTY FOR THE BILLING DOCUMENT.
      DATA : BEGIN OF NEW_SHIP_TAB OCCURS 0.
      DATA : DESC(20).
      DATA : CUSTCODE LIKE KNA1-KUNNR.
      DATA : DUMMY(5).
      DATA : CUSTNAME LIKE KNA1-NAME1.
      DATA : END OF NEW_SHIP_TAB.
      DATA : B_TABIX LIKE SY-TABIX.
      DATA : B_SOLDCODE LIKE KNA1-KUNNR.
      DATA : B_PAYCODE LIKE KNA1-KUNNR.
      SELECT * FROM VBPA WHERE VBELN EQ B_INVNO
                                AND PARVW IN ('RE','WE','AG').
        SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ VBPA-KUNNR.
        MOVE KNA1-NAME1 TO NEW_SHIP_TAB-CUSTNAME.
        MOVE KNA1-KUNNR TO NEW_SHIP_TAB-CUSTCODE.
        MOVE '      ' TO NEW_SHIP_TAB-DUMMY.
        CASE VBPA-PARVW.
          WHEN 'WE'.
            MOVE 'SHIP TO PARTY' TO NEW_SHIP_TAB-DESC.
            MOVE KNA1-KUNNR TO B_PAYCODE.
          WHEN 'RE'.
            MOVE KNA1-KUNNR TO B_SOLDTOPARTYCODE.
            MOVE 'PAYER        ' TO NEW_SHIP_TAB-DESC.
          WHEN 'AG'.
            MOVE KNA1-KUNNR TO B_SOLDCODE.
            MOVE 'SOLD TO PARTY' TO NEW_SHIP_TAB-DESC.
        ENDCASE.
        APPEND NEW_SHIP_TAB.
      ENDSELECT.
      B_SPCFLAG = 'F'.
      IF B_SOLDCODE NE B_SOLDTOPARTYCOD

    Hi Sanjeev ,
    Please observe your code carefully.
    You say you have assigned your form name in the Print Program ,but i am not able to find it.
    Your program uses the Subroutine
    PERFORM OPENFORM USING 'ZINVOICEDUMMY'
    where the 'ZINVOICEDUMMY' is the parameter value your are passing for FORM but your form name is zinv.
    so you have to pass your form name using this subroutine.
    PERFORM OPENFORM USING 'ZINV'
    FORM OPENFORM USING B_FORMNAME.
    CALL FUNCTION 'OPEN_FORM'
    EXPORTING
    FORM = B_FORMNAME
    OPTIONS = ITCPO
    DEVICE = B_ELEMENT
    IMPORTING
    RESULT = ITCPP
    EXCEPTIONS
    CANCELLED = 1
    DEVICE = 2
    FORM = 3
    OPTIONS = 4
    UNCLOSED = 5
    OTHERS = 6.
    ENDFORM.
    Regards,
    AShwini

  • CL_GUI_CONTAINER data refresh problem.

    Hi experts,
    I am using below code in module pool programming. I want to refresh data in Cont for ALV or HTML at run time.
    but it is not working, plz help?????
    Code:
    TABLES: vbrk.
    TYPES : BEGIN OF ty_html,
             dataset(255) TYPE c,
             END OF ty_html.
    DATA : splitter TYPE REF TO cl_gui_splitter_container.
    DATA: cont TYPE REF TO cl_gui_container,
           html TYPE REF TO cl_gui_html_viewer,
           salv TYPE REF TO cl_salv_table.
    DATA: it_data TYPE STANDARD TABLE OF vbrk,
           ts_data TYPE STANDARD TABLE OF ty_html,
           w_url   TYPE char255.
    SELECTION-SCREEN : BEGIN OF SCREEN 1001.
    PARAMETERS: rb_alv RADIOBUTTON GROUP rb1,
                 rb_graph RADIOBUTTON GROUP rb1.
    SELECT-OPTIONS : s_fkdat FOR vbrk-fkdat.
    SELECTION-SCREEN END OF SCREEN 1001.
    START-OF-SELECTION.
       IF splitter IS INITIAL.
         CREATE OBJECT splitter
           EXPORTING
             parent  = cl_gui_container=>screen0
             rows    = 2
             columns = 1
             align   = 15. " (splitter fills the hole custom container)
       ENDIF.
       IF cont IS NOT INITIAL.
         cont->free( ).
       ENDIF.
       CALL METHOD splitter->get_container
         EXPORTING
           row       = 2
           column    = 1
         RECEIVING
           container = cont.
       SELECT * FROM vbrk INTO TABLE it_data
         WHERE fkdat IN s_fkdat.
       IF rb_alv = 'X'.
         IF html IS NOT INITIAL.
           html->free( ).
         ENDIF.
         TRY.
             cl_salv_table=>factory(
               EXPORTING
                 r_container    = cont
               IMPORTING
                 r_salv_table   = salv
               CHANGING
                 t_table        = it_data ).
           CATCH cx_salv_msg.                                "#EC NO_HANDLER
         ENDTRY.
       ELSE.
    *** APPEND SOMETHING IN TS_DATA.
         IF html IS INITIAL.
           CREATE OBJECT html
             EXPORTING
               parent             = cont
             EXCEPTIONS
               cntl_error         = 1
               cntl_install_error = 2
               dp_install_error   = 3
               dp_error           = 4
               OTHERS             = 5.
           CALL METHOD html->load_data
             EXPORTING
    *         url                  = w_url
               type                 = 'text'
               subtype              = 'html'
             IMPORTING
               assigned_url         = w_url
             CHANGING
               data_table           = ts_data
             EXCEPTIONS
               dp_invalid_parameter = 1
               dp_error_general     = 2
               cntl_error           = 3
               OTHERS               = 4.
           IF sy-subrc <> 0.
           ENDIF.
           CALL METHOD html->show_url
             EXPORTING
               url                    = w_url
               in_place               = 'X'
             EXCEPTIONS
               cntl_error             = 1
               cnht_error_not_allowed = 2
               cnht_error_parameter   = 3
               dp_error_general       = 4
               OTHERS                 = 5.
           IF sy-subrc <> 0.
           ENDIF.
           html->set_ui_flag( html->uiflag_no3dborder ).
         ENDIF.
       ENDIF.

    Hi neran,
                   before u split the container, u have to create the container.
    create object cont                                           "Creating Docking Container
           exporting
         side                        = 4                                     "At Bottom
         ratio                       = 70
           exceptions
             cntl_error                  = 1
             cntl_system_error           = 2
             create_error                = 3
             lifetime_error              = 4
             lifetime_dynpro_dynpro_link = 5
             others                      = 6
         if sy-subrc <> 0.
           message id sy-msgid type sy-msgty number sy-msgno
                      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
         endif.
    "u have to pass the container name
       IF splitter IS INITIAL.
         CREATE OBJECT splitter
           EXPORTING
             parent  =  cont " pass the container name
             rows    = 2
             columns = 1
             align   = 15. " (splitter fills the hole custom container)
       ENDIF.
    "Then u need another objects, which ref to  cl_gui_container, to get the splitted containers

  • 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

Maybe you are looking for

  • [solved] Samsung SCX-3200 prints garbage

    Hi, Some months ago I got a Samsung SCX-3200 mono multifunction printer. I installed samsung unified driver from AUR I think it was v3 and printer worked. After the driver got updated to v4 I think my problems started. Sometimes when printing a docum

  • Can you take photos on digital camera and see them appear on the ipad using the camera connector

    Can you take photos on digital camera and see them appear on the ipad - i have a canon 400d and the new ipad.......

  • Query on ChaRM control on BAU v/s Project landscapes

    We have Business-as-Usual landscape(DEV, QAS, PRD)  which is controlled by ChaRM (maintenance project).  To this environment, we plan to add a project landscape with Dev(P) and QA(P) systems for project activities.   Can we use BAU Solution Manager -

  • Get error "Safari can't find the Internet plug-in"

    I get error when I tried to open a Potcast on IBM's website in Safari 5 for Windows 7 "Safari can't find the Internet plug in. Some content on the page "IBM Cloud Computing - idea - United States - United States' Can't be shown because its MIME type

  • Problem with Snow Leopard

    I have recently purchased a 24inch imac and had been very impressed. However last night I installed Snow Leopard now I have no Internet. When I clik on Safari it states that it is unable to locate the web proxy server. Good windows was easier. How ca