Sapscript - output multiple line items

Hello,
I am creating a sapscript/ print program (OPEN_FORM, CLOSE_FORM) for the print output of our customer barcode labels for deliveries.
Now if I trigger the print output (output type) of a delivery with 2 line items, SAP prints out 2 barcode labels.
But I need information from both line items (for example both quantities) on one single label and I also need only one label to be printed out per delivery, regardless how many line items it has.
How can I set that up?
Thanks
Anne

Hello,
Each OPEN_FORM/CLOSE_FORM will create another label. You need to have your loop inside the OPEN/CLOSE printing to a text element in the MAIN window. If there are enough lines you'll roll over into another label.
Regards,
Michael

Similar Messages

  • Problem in printing multiple line items

    Hi,
       i designed a SAPSCRIPT FORM.When i execute the t-code MB01 by giving PO which has multiple line items ,  output type is invisible.
    But when i iexecute the t-code MB01 by giving PO which has single item , output type is visible and form is printing.
    Do i need to copy the print program and make changes in there or if i change elements in the form will that helps in printing multiple line items.
    thanks.

    HI,
    wat i understand is u r trying to loop at a variable window .but tht is not suggestable.
    write a loop in program lines. read the values in to different variables and the try printing them as text elements that will solve the problem.
    or else in other way use a template and that can also solve the problem.

  • ME21n Multiple line items

    Hi all,
    I wana pass multiple line items thru bdc me21n....can any1 please help me .if u guys have some code can mail me at [email protected] will be rewarded.
    my code below is not working for passing multiple items.
    report y1_po_test
           no standard page heading line-size 255.
    tables: mara,
            lfa1,
            eina,
            eine,
            eban,
            zdrgsah, zdrgsap,
            zdrgsup,
            t100,
            ekko,
            a004, zprice_grpsal, mvke.
    *Internal Table to get the input Data
    data: begin of i_input occurs 0,
            matnr like ekpo-matnr,
            asqty like ekpo-menge,
            ebeln like ekpo-ebeln,
            posnr(5),
           posnr like zdrgsap-posnr,
            invno like zdrgsap-invno,
            invdt like zdrgsah-invdt,
            netpr like zdrgsap-netpr,
            cntno like zdrgsap-cntno,
            shcnm like zdrgsah-shcnm,
            apcno like zdrgsap-apcno,
            spcno like zdrgsap-spcno,
            werks like ekpo-werks,
            lgort like ekpo-lgort,
            matkl like ekpo-matkl,
            pack(10),
            mvgr2 like mvke-mvgr2,
           dpric type p decimals 6 ,
           gpric type p decimals 6,
            end of i_input.
    data: begin of i_inputxt occurs 0,
            matnr(18) ,
            asqty(13) ,
            ebeln(10) ,
            posnr(6)  ,
            invno(10) ,
            invdt(8)  ,
            netpr(11) ,
            cntno(11) ,
            shcnm(10) ,
            werks(4) ,
            lgort(4) ,
            matkl(9) ,
            pack(10),
            end of i_inputxt.
    data: begin of i_error occurs 0,
            prnum like eban-banfn,
            pritm like eban-bnfpo,
            inmat like mara-matnr,
            prmat like mara-matnr,
            asqty like zdrgsap-asqty,
            prqty like eban-menge,
            remak(100),
           remark(255) type c,
          end of i_error.
    data : begin of i_error1 occurs 0,
            prnum like eban-banfn,
            pritm like eban-bnfpo,
            asqty like zdrgsap-asqty,
            prqty like eban-menge,
            remak(100),
            end of i_error1.
    data : begin of i_zsap occurs 0,
           ebeln like zdrgsap-ebeln,
           posnr(5),
           menge like zdrgsap-menge,
           asqty like zdrgsap-asqty,
           end of i_zsap.
    data : v_ebeln like eket-ebeln.
    data : begin of i_a004 occurs 0,
           matnr like a004-matnr,
           knumh like a004-knumh,
           kbetr like konp-kbetr,
           end of i_a004,
           i_a0041 like i_a004 occurs 0 with header line.
    data : begin of i_konp occurs 0,
           knumh like konp-knumh,
           kbetr like konp-kbetr,
          konwa like konp-konwa,
           end of i_konp.
    data : begin of i_konp1 occurs 0,
           knumh like konp-knumh,
           kbetr like konp-kbetr,
           konwa like konp-konwa,
           end of i_konp1.
    data : begin of i_netpr occurs 0,
           ebeln like eket-ebeln,
           ebelp like eket-ebelp,
           matnr like ekpo-matnr,
           menge like ekpo-menge,
           netpr like ekpo-netpr,
          kbetr like konp-kbetr,
           end of i_netpr.
    data : begin of i_grpsal occurs 0,
           pcode like zprice_grpsal-pcode,
           fact like zprice_grpsal-fact,
           wfact like zprice_grpsal-wfact,
           end of i_grpsal.
    data : begin of i_domsal occurs 0,
           pcode like zprice_grpsal-pcode,
           fact like zprice_grpsal-fact,
           wfact like zprice_grpsal-wfact,
           end of i_domsal.
    data : begin of i_zsap1 occurs 0,
           ebeln like zdrgsap-ebeln,
           posnr(5),
           asqty like zdrgsap-asqty,
           end of i_zsap1.
    data: begin of bdcdata occurs 0.
            include structure bdcdata.       " Batch input: New table field
    data: end of bdcdata.
          messages of call transaction
    data:   messtab like bdcmsgcoll occurs 0 with header line.
    data: i_mara type mara occurs 0 with header line,
          i_eina like eina occurs 0 with header line,
          i_eine like eine occurs 0 with header line.
    data : begin of i_inferr occurs 0,
           matnr like eina-matnr,
           infnr like eina-infnr,
           werks like eine-werks,
           end of i_inferr.
    data : begin of i_inferrc occurs 0,
           matnr like eina-matnr,
           end of i_inferrc.
    *Data declaration.
    data: v_file     type string,           " Variable for uploading file
          v_item(5)  type c,             " Line item number
          v_itno(2)  type n,
          p_wkurs like zdrgkurs-wkurs,
          v_matnr(20)    type c,
          v_menge(20)    type c,
          v_banfn(20)    type c,
          v_bnfpo(20)    type c,
          v_bednr(20)    type c,
          v_werks(20),
          p_lifnr(10) ,
          v_flag,
          p_lifnrtxt(10),
          p_wkurstxt(9),
          p_bsartxt(4),
          v_posnr(5), n type i,
          v_quant(13),
          v_asqty(13),
          v_prqty(13),
          v_apcno(6),
          v_spcno(4),
          v_itm(11),
          v_cnt type i,
          v_cntno(4),
          v_pack(10),
          v_order(15),
          v_lifnr(10),
          v_invdt like sy-datum,
          v_waers like ekko-waers,
          v_podat like ekko-bedat,
          v_docdt1 like sy-datum,
          v_docdt(10),
          v_fnam(132).
    data : begin of i_test occurs 0,
           bnfpo like eban-bnfpo,
           matnr like eban-matnr,
           menge like eban-menge,
           bsmng like eban-bsmng,
           end of i_test.
    data : begin of i_mvke occurs 0,
           matnr like mvke-matnr,
           mvgr2 like mvke-mvgr2,
           end of i_mvke.
    data : begin of i_invno,
           ebeln like ekko-ebeln,
           angnr like ekko-angnr,
           end of i_invno.
    data : i_final like zinvdiff occurs 0 with header line.
    Constants
    constants : c_pd01 like eine-werks value 'PD01'.
    *Selection Screen Declarations
    selection-screen begin of block b1 with frame title text-010.
    parameters: p_invno like zdrgsah-invno obligatory,
                p_bsart like ekko-bsart obligatory.
    selection-screen end of block b1.
    start-of-selection.
    To Upload the data into Internal table.
      perform f_upload_data.
    To Validate the input data.
      perform f_check_data.
    if i_error[] is not initial or i_error1[] is not initial.
    To display the error message
       perform f_display_errors.
    else.
    To create PO
      perform f_process_session.
    endif.
      perform f_check_calc_price.
      perform f_display_data.
    perform f_update_zinvdiff.
    *&      Form  f_get_filename
          text
    form f_get_filename.
    endform.                                 " F_get_filename
    *&      Form  f_upload_data
    form f_upload_data .
      select matwa as matnr asqty ebeln posnr b~invno invdt netpr cntno
        shcnm apcno spcno into table i_input
             from zdrgsah as a join zdrgsap as b on
             a~invno = b~invno
             where b~invno eq p_invno.
      select ebeln
             posnr
             menge
             asqty
             from zdrgsap into table i_zsap
             where invno = p_invno.
      loop at i_zsap.
        concatenate i_zsap-posnr(4) '0' into v_posnr.
        i_zsap1-ebeln = i_zsap-ebeln.
        i_zsap1-posnr = v_posnr.
        i_zsap1-asqty = i_zsap-asqty.
        collect i_zsap1.
        clear i_zsap1.
      endloop.
      delete adjacent duplicates  from i_zsap comparing posnr menge .
    delete adjacent duplicates  from i_input comparing ebeln  posnr.
      loop at i_input.
       p_werks = i_input-werks.
        v_invdt = i_input-invdt.
        call function 'CONVERT_DATE_FORMAT'
          exporting
            i_date      = v_invdt
          importing
            e_calc_date = v_invdt.
        if i_input-apcno is initial.
          v_apcno = '0000'.
        else.
          v_apcno = i_input-apcno.
        endif.
        if i_input-spcno is initial.
          v_spcno = '0000'.
        else.
          v_spcno = i_input-spcno.
        endif.
        if i_input-cntno is initial.
          i_input-cntno = '0000'.
        endif.
        concatenate v_apcno v_spcno into i_input-pack.
       concatenate v_pack v_cntno into v_order separated by '-'.
       i_input-order = v_order.
        clear : v_itm, v_cnt, v_cntno, v_pack, v_apcno, v_spcno, v_order.
        concatenate i_input-posnr(4) '0' into v_posnr.
        select single lifnr into p_lifnr from zdrgsup
       where shcnm = i_input-shcnm.
        v_lifnr = p_lifnr.
        if sy-subrc <> 0.
          message e000(zcnc) with text-002.
        endif.
        select single * from eban
           where banfn eq i_input-ebeln
           and   bnfpo eq v_posnr.
        if sy-subrc eq 0.
          move eban-werks to i_input-werks.
          move eban-lgort to i_input-lgort.
          move eban-matkl to i_input-matkl.
          move eban-bnfpo to i_test-bnfpo.
          move eban-matnr to i_test-matnr.
          move eban-menge to i_test-menge.
          move eban-bsmng to i_test-bsmng.
          modify i_input.
          if not i_input-matnr eq i_test-matnr.
            move i_input-ebeln to i_error-prnum.
            move v_posnr to i_error-pritm.
            move i_input-matnr to i_error-inmat.
            move eban-matnr to i_error-prmat.
            i_error-remak = 'Material does not match'.
            append i_error.
            clear i_error.
          endif.
          v_quant = i_test-menge - i_test-bsmng.
          read table i_zsap1 with key ebeln = i_input-ebeln posnr = v_posnr.
          if not i_zsap1-asqty <= v_quant.
            move i_input-ebeln to i_error1-prnum.
            move i_zsap1-posnr to i_error1-pritm.
            move i_zsap1-asqty to i_error1-asqty.
           move eban-menge to i_error1-prqty.
            move v_quant to i_error1-prqty.
            i_error1-remak = 'Material Quantity does not match'.
            append i_error1.
            clear i_error1.
          endif.
          select single matnr infnr from eina
               into corresponding fields of i_eina
               where matnr eq i_input-matnr
               and lifnr eq p_lifnr.
          if sy-subrc = 0.
            append i_eina.
            check not i_eina[] is initial.
            select single * from eine
                   into  i_eine
                   where infnr eq i_eina-infnr
                   and werks eq eban-werks.
            if sy-subrc <> 0.
              move i_input-matnr to i_inferr-matnr.
              move i_eina-infnr to i_inferr-infnr.
              move eban-werks to i_inferr-werks.
              append i_inferr.
              clear i_inferr.
            endif.
          else.
            move i_input-matnr to i_inferrc-matnr.
            append i_inferrc.
            clear i_inferrc.
          endif.
          clear : i_eina, i_eine.
          clear :  i_zsap, i_zsap1,  i_input,  v_posnr,
                  v_quant, i_test.
        endif.
      endloop.
      delete adjacent duplicates from i_error1 comparing prnum pritm.
      perform chk_info_rec.
    endform.                    " f_upload_data
    *&      Form  f_check_data
    form f_check_data .
      if not i_input[] is initial.
        select * from mara
        into table i_mara
        for all entries in i_input
        where matnr eq i_input-matnr.
      endif.
      loop at i_mara.
        read table i_input with key matnr = i_mara-matnr.
        if sy-subrc <> 0.
          write : 'Following Part Numbers are not found in MARA'.
          write : / i_input-matnr.
        endif.
      endloop.
      if i_mara[] is initial.
        loop at i_input.
          format color col_heading intensified off.
          write : 'Following Part Numbers are not found in MARA'.
          format color col_normal intensified off.
          write : / i_input-matnr.
        endloop.
      endif.
      select single wkurs into p_wkurs from zdrgkurs
        where invno = p_invno.
      if sy-subrc ne 0.
        message e000(zcnc) with text-s11.
      endif.
      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
        exporting
          input  = p_lifnr
        importing
          output = p_lifnr.
      p_lifnrtxt = p_lifnr.
      p_wkurstxt = p_wkurs.
      p_bsartxt = p_bsart.
      loop at i_input.
        move-corresponding i_input to i_inputxt.
        append i_inputxt.
      endloop.
      select single ebeln
                    angnr from ekko
                    into i_invno
                    where angnr = p_invno.
      if sy-subrc = 0.
        perform display_err.
      endif.
    endform.                    " f_check_data
    *&      Form  f_process_session
          text
    form f_process_session.
      v_docdt1 = sy-datum.
      write v_docdt1 to v_docdt using edit mask '__.__.____'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=MEDOCTYPE'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MEPO_TOPLINE-BSART'.
      perform bdc_field       using 'MEPO_TOPLINE-BSART'
                                     p_bsartxt.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'MEPO_TOPLINE-SUPERFIELD'
                                     p_lifnrtxt.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MEPO1222-BUKRS'.
      perform bdc_field       using 'MEPO1222-EKORG'
                                    'SBAP'.
      perform bdc_field       using 'MEPO1222-EKGRP'
                                    'PG1'.
      perform bdc_field       using 'MEPO1222-BUKRS'
                                    'SBA'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=TABHDT2'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'MEPO_TOPLINE-BSART'
                                     p_bsartxt.
      perform bdc_field       using 'MEPO_TOPLINE-SUPERFIELD'
                                     p_lifnrtxt.
    ********************conditions***************************************
      perform bdc_field       using 'BDC_CURSOR'
                                    'KOMV-KSCHL(08)'.
      perform bdc_field       using 'KOMV-KSCHL(07)'
                                     'zot1'.
      perform bdc_field       using 'KOMV-KSCHL(08)'
                                    'zinc'.
      perform bdc_field       using 'KOMV-KSCHL(09)'
                                    'ziv1'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=V69A_KOAN'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'KOMV-KSCHL(01)'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'KOMV-KSCHL(02)'
                                    'zca1'.
      perform bdc_field       using 'KOMV-KSCHL(03)'
                                    'zfa1'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=TABHDT7'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'KOMV-KSCHL(09)'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MEPO1229-IHRAN'.
      perform bdc_field       using 'MEPO1229-ANGNR'
                                     p_invno.
      perform bdc_field       using 'MEPO1229-IHRAN'
                                     v_invdt.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=MEV4001BUTTON'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MEPO1229-IHRAN'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
      perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=MEV4000BUTTON'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MEPO1229-IHRAN'.
      perform bdc_field       using 'DYN_6000-LIST'
                                  '                                      1'.
    loop at i_inputxt.
       concatenate i_inputxt-posnr(4) '0' into v_posnr.
       concatenate 'MEPO1211-EMATN(' v_itno ')' into v_matnr.
       concatenate 'MEPO1211-MENGE(' v_itno ')' into v_menge.
       concatenate 'MEPO1211-BANFN(' v_itno ')' into v_banfn.
       concatenate 'MEPO1211-BNFPO(' v_itno ')' into v_bnfpo.
       concatenate 'MEPO1211-BEDNR(' v_itno ')' into v_bednr.
       concatenate 'MEPO1211-WERKS(' v_itno ')' into v_werks.
       v_item = v_item + 10.
       endif.
       v_itno = v_itno + 1.
       perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
       perform bdc_field       using 'BDC_OKCODE'
                                     '/00'.
       perform bdc_field       using 'BDC_CURSOR'
                                      v_matnr.
       perform bdc_field       using  v_matnr "'MEPO1211-EMATN(01)'
                                      i_inputxt-matnr.
       perform bdc_field       using  v_menge "'MEPO1211-MENGE(01)'
                                      i_inputxt-asqty.
       perform bdc_field       using  v_banfn "'MEPO1211-BANFN(01)'
                                      i_inputxt-ebeln.
       perform bdc_field       using  v_bnfpo "'MEPO1211-BNFPO(01)'
                                      i_inputxt-posnr.
       perform bdc_field       using 'DYN_6000-LIST'
                                      v_itno.
      loop at i_inputxt .
        v_itno = sy-tabix.
        clear v_fnam.
        concatenate 'MEPO1211-EMATN('  v_itno ')' into v_fnam.
        perform bdc_field       using v_fnam
                                      i_inputxt-matnr.
        clear v_fnam.
        concatenate 'MEPO1211-MENGE('  v_itno ')' into v_fnam.
        perform bdc_field       using v_fnam
                                           i_inputxt-asqty.
        clear v_fnam.
        concatenate 'MEPO1211-BANFN('  v_itno ')' into v_fnam.
        perform bdc_field       using v_fnam
                                           i_inputxt-ebeln.
        clear v_fnam.
        concatenate 'MEPO1211-BNFPO('  v_itno ')' into v_fnam.
        perform bdc_field       using v_fnam
                                           i_inputxt-posnr.
        perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
        perform bdc_field       using 'BDC_OKCODE'
                                          '/00'.
      endloop.
    loop at i_inputxt from 6.
       v_itno = sy-tabix.
       clear v_fnam.
       concatenate 'MEPO1211-EMATN('  v_itno ')' into v_fnam.
       perform bdc_field       using v_fnam
                                     i_inputxt-matnr.
       clear v_fnam.
       concatenate 'MEPO1211-MENGE('  v_itno ')' into v_fnam.
       perform bdc_field       using v_fnam
                                          i_inputxt-asqty.
       clear v_fnam.
       concatenate 'MEPO1211-BANFN('  v_itno ')' into v_fnam.
       perform bdc_field       using v_fnam
                                          i_inputxt-ebeln.
       clear v_fnam.
       concatenate 'MEPO1211-BNFPO('  v_itno ')' into v_fnam.
       perform bdc_field       using v_fnam
                                          i_inputxt-posnr.
       perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
       perform bdc_field       using 'BDC_OKCODE'
                                         '/00'.
    endloop.
    perform bdc_field       using 'BDC_CURSOR'
                                   'MEPO1320-SLFDT(01)'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=TABHDT2'.
    perform bdc_field       using 'DYN_6000-LIST'
                               '                                      2'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=V69A_KOAK'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'KOMV-KBETR(05)'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=MECHECKDOC'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'KOMV-KSCHL(01)'.
    perform bdc_dynpro      using 'SAPMSSY0' '0120'.
    perform bdc_field       using 'BDC_CURSOR'
                                   '04/03'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=&ONT'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=MEV4000BUTTON'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'MEPO_TOPLINE-BSART'.
    perform bdc_field       using 'DYN_6000-LIST'
                               '                                      2'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'KOMV-KBETR(08)'.
    perform bdc_field       using 'KOMV-KBETR(03)'
                                   '             .54'.
    perform bdc_field       using 'KOMV-KBETR(08)'
                                   '             .54'.
    perform bdc_dynpro      using 'SAPLMEGUI' '0014'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=MESAVE'.
    perform bdc_field       using 'BDC_CURSOR'
                                   'MEPO1211-NETPR(01)'.
      perform bdc_transaction using 'ME21N'.
    endform.                    "f_process_session
    *&      Form  bdc_transaction
          text
         -->P_0464   text
    form bdc_transaction  using    tcode.
      data: l_mstring(480).
      data: l_subrc like sy-subrc.
      data: v_mode type c.
      v_mode = 'A'.
      refresh messtab.
      call transaction tcode using bdcdata
                       mode  v_mode
                       update 'S'
                       messages into messtab.
      l_subrc = sy-subrc.
         WRITE: / 'CALL_TRANSACTION',
                  TCODE,
                  'returncode:'(I05),
                  L_SUBRC,
                  'RECORD:',
                  SY-INDEX.
      loop at messtab.
        select single * from t100 where sprsl = messtab-msgspra
                                  and   arbgb = messtab-msgid
                                  and   msgnr = messtab-msgnr.
        if sy-subrc = 0.
          l_mstring = t100-text.
          if l_mstring cs '&1'.
            replace '&1' with messtab-msgv1 into l_mstring.
            replace '&2' with messtab-msgv2 into l_mstring.
            replace '&3' with messtab-msgv3 into l_mstring.
            replace '&4' with messtab-msgv4 into l_mstring.
          else.
            replace '&' with messtab-msgv1 into l_mstring.
            replace '&' with messtab-msgv2 into l_mstring.
            replace '&' with messtab-msgv3 into l_mstring.
            replace '&' with messtab-msgv4 into l_mstring.
          endif.
          condense l_mstring.
          if messtab-msgtyp eq 'E' or messtab-msgtyp eq 'W'.
            write: / messtab-msgtyp, l_mstring(250).
          endif.
          search  l_mstring for 'SEA'.
          if sy-subrc = 0.
            write: / messtab-msgtyp, l_mstring(250).
          endif.
        else.
          write: / messtab.
        endif.
      endloop.
    endform.                    " bdc_transaction
           Start new screen                                              *
    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.
      if fval <> space.
        clear bdcdata.
        bdcdata-fnam = fnam.
        bdcdata-fval = fval.
        append bdcdata.
      endif.
    endform.                    "BDC_FIELD
    *&      Form  f_display_errors
    form f_display_errors .
      if i_error[] is not initial.
        format color col_heading intensified off.
        uline .
        write :/ 'PR No     ',
                (10) 'Item No',
                (20) 'PR Part No',
                (30) 'Invoiced Part No',
                (60) 'Remark'.
        uline .
        loop at i_error.
          perform f_display_color.
          write :/ i_error-prnum,
                  (10) i_error-pritm ,
                  (20) i_error-prmat,
                  (30) i_error-inmat,
                  (60) i_error-remak.
          clear i_error.
        endloop.
      endif.
      if i_error1[] is not initial.
        format color col_heading intensified off.
        uline .
        write :/ 'PR No     ',
                (10) 'Item No',
                (20) 'PR Quantity',
                (30) 'Invoiced Quantity',
                (60) 'Remark'.
        uline .
        loop at i_error1.
          perform f_display_color.
          if not i_error1-asqty is initial.
            v_asqty = i_error1-asqty .
            v_prqty = i_error1-prqty.
            write :/ i_error1-prnum,
                (10) i_error1-pritm ,
                (20) v_prqty,
                (30) v_asqty,
                (60) i_error1-remak.
            clear : v_asqty, v_prqty.
          endif.
          clear i_error1.
        endloop.
      endif.
    endform.                    " f_display_errors
    *&      Form  f_display_color
    form f_display_color .
      if v_flag = 0.
        format color col_normal intensified on.
        v_flag = 1.
      elseif v_flag = 1.
        format color col_normal intensified off.
        v_flag = 0.
      endif.
    endform.                    " f_display_color
    *&      Form  display_err
          text
    -->  p1        text
    <--  p2        text
    form display_err .
      format color col_heading intensified off.
    write (120) text-006.
      uline .
      write : 'PR No     ',
              (15) 'Invoice No',
              (30) 'Remark'.
      uline.
      format color col_negative intensified off.
      write :/ i_invno-ebeln,
          (15) p_invno ,
          (30) 'Invoice Already Exists'.
    endform.                    " display_err
    *&      Form  f_check_calc_price
          text
    -->  p1        text
    <--  p2        text
    form f_check_calc_price .
      data : d_pric type p decimals 6 ,
             g_pric type p decimals 6,
             v_exch type p decimals 4 value '0.1049'.
      select single ebeln
                    waers
                    bedat
                    from ekko into  (v_ebeln , v_waers , v_podat)
                    where angnr eq p_invno.
      loop at i_input.
        concatenate i_input-posnr(4) '0' into v_posnr.
        select single p~ebeln
               p~ebelp
               matnr
               p~menge
               netpr
               into  i_netpr
               from eket as t inner join ekpo as p
               on t~ebeln eq p~ebeln
               and t~ebelp eq p~ebelp
               where t~ebeln eq v_ebeln
               and   t~banfn eq i_input-ebeln
               and   t~bnfpo eq v_posnr.
        if v_waers eq 'JPY'.
          i_netpr-netpr = i_netpr-netpr * 100.
        endif.
        if not i_input-netpr eq i_netpr-netpr.
          append i_netpr.
          clear : i_input, i_netpr, v_posnr.
        else.
          clear : i_input, i_netpr, v_posnr.
        endif.
      endloop.
      delete adjacent duplicates from i_netpr comparing ebeln ebelp matnr.
       modify zinvdiff from table i_final.
      if i_netpr[] is not initial.
        select matnr
               knumh
               from a004
               into table i_a004
               for all entries in i_netpr
               where matnr = i_netpr-matnr
               and kschl = 'ZPR0'
               and vkorg = 'SBAP'
               and vtweg = 'DD'
               and ( datab <= sy-datum and  datbi => sy-datum ).
        select  matnr
                knumh
                from a004
                into table i_a0041
                for all entries in i_netpr
                where matnr = i_netpr-matnr
                and kschl = 'ZPR0'
                and vkorg = 'EXPT'
                and vtweg = 'BR'
                and ( datab <= sy-datum and  datbi => sy-datum ).
        select matnr mvgr2 from mvke
               into  corresponding fields of table i_mvke
               for all entries in i_netpr
               where matnr = i_netpr-matnr
               and vkorg = 'SBAP'
               and vtweg = 'DD'.
        if i_a004[] is not initial.
          select  knumh
                  kbetr
                  from konp
                  into table i_konp
                  for all entries in i_a004
                  where knumh =  i_a004-knumh.
          loop at i_a004.
            read table i_konp with key knumh = i_a004-knumh.
            i_konp-kbetr =  i_konp-kbetr / 10.
            move i_konp-kbetr to i_a004-kbetr.
            modify i_a004.
            clear : i_konp, i_a004.
          endloop.
        endif.
        if i_a0041[] is not initial.
          select  knumh
                  kbetr
                  from  konp
                  into table i_konp1
                  for all entries in i_a0041
                  where knumh = i_a0041-knumh.
          loop at i_a0041.
            read table i_konp1 with key knumh = i_a0041-knumh.
            move i_konp1-kbetr to i_a0041-kbetr.
            modify i_a0041.
            clear : i_konp1, i_a0041.
          endloop.
        endif.
        if i_mvke[] is not initial.
          select pcode
                 fact
                 wfact
                 into table i_domsal
                 from zprice_grpsal
                 for all entries in i_mvke
                 where pcode = i_mvke-mvgr2
                 and vkorg = 'SBAP'
                 and vtweg = 'DD'
                 and lifnr = v_lifnr.
          select pcode
                 fact
                 wfact
                 into table i_grpsal
                 from zprice_grpsal
                 for all entries in i_mvke
                 where pcode = i_mvke-mvgr2
                 and vkorg = 'EXPT'
                 and vtweg = 'BR'
                 and lifnr = v_lifnr.
        endif.
        loop at i_input .
          read table i_mvke with key matnr = i_input-matnr.
          if sy-subrc = 0.
            move i_mvke-mvgr2 to i_input-mvgr2.
          endif.
          read table i_domsal with key pcode = i_input-mvgr2.
          if sy-subrc = 0.
            d_pric =  i_domsal-fact / i_domsal-wfact.
            i_input-dpric = i_input-netpr * d_pric * ( 112 / 100 ).
          endif.
          read table i_grpsal with key pcode = i_input-mvgr2.
          if sy-subrc = 0.
            g_pric =  i_grpsal-fact * i_grpsal-wfact.
            i_input-gpric = ( i_input-netpr * ( 112 / 100 ) ) / g_pric .
          endif.
          modify i_input.
          clear i_input.
          clear d_pric.
          clear g_pric.
        endloop.
      endif.
    endform.                    " f_check_price
    *&      Form  f_display_data
          text
    -->  p1        text
    <--  p2        text
    form f_display_data .
      loop at i_netpr.
        move i_netpr-ebeln to i_final-ebeln.
        move i_netpr-ebelp to i_final-ebelp.
        move i_netpr-matnr to i_final-matnr.
        move i_netpr-netpr to i_final-poprc.
        move i_netpr-menge to i_final-asqty.
        move p_invno to i_final-invoice.
        append i_final.
        clear i_final.
      endloop.
      loop at i_final.
        move v_podat to i_final-podat.
        read table i_input with key matnr = i_final-matnr.
        move i_input-netpr to i_final-invpr.
        move i_input-dpric to i_final-dcalclp.

    Dear Santosh,
    I haven't gone through your piece of code.
    But I can suggest a way out, while handling multiple line-items.
    The following code sample elucidate the use of multiple line-items. This is just an example for your understanding.
    FORM BDC_OPERATION .
      DATA:  LV_ARBPL(15)    TYPE  C,
                 LV_ROWNO(2)     TYPE  N.
      LOOP  AT  IT_TABDATA  INTO  WA_TABDATA.
        CLEAR:  LV_ARBPL
        LV_ROWNO  =  SY-TABIX.  
        CONCATENATE  'PLPOD-ARBPL'    '('  LV_ROWNO  ')'  INTO  LV_ARBPL.
        PERFORM  BDC_DYNPRO  USING  'SAPLCPDI'          '1400'.
        PERFORM  BDC_FIELD       USING  'BDC_CURSOR'   LV_ARBPL.
        PERFORM  BDC_FIELD       USING  'BDC_OKCODE'   '=PICK'.
        PERFORM  BDC_FIELD       USING  LV_ARBPL          WA_TABDATA-ARBPL.
      ENDLOOP.
    ENDFORM.                    " BDC_OPERATION
    Regards,
    Abir
    Please don't forget to award points  *

  • Maintianing multiple line items in main window  in scripts

    Hi folks,
      i want to print multiple line items in main window of script for eg 50 line items then my main window should continue in second page also. how to maintain this.
    can u provide me sample code for this..
    Thx in advance,
    Neelima.N

    You have an internal table with 50 lines, is it correct?
    Let's say, there's a MATNR field in your internal table.
    First do, what I wrote in my previous comment.
    The create an element in yout main window, like this:
    /E LINE_ITEMS
    /  &GS_MAIN-MATNR&
    In your printer program you have to code the following:
    LOOP AT gt_main INTO gs_main.
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'MAIN'
    ELEMENT = 'LINE_ITEMS'.
    ENDLOOP.
    This code will loop all 50 of your table entries.
    In the MAIN window will fit 30 entries.
    When the LOOP is reaching the 30th entry, SAP will automatically create a new page (because of the NEXT PAGE statement you set in the page settings in the SAPScript) and will continue the printing.
    Regards
    Tamá

  • BDC of multiple line item

    Dear All,
    I am writing BDC for F-28
    Where  wanted to add multiple line items in screen 0731 for the field rfo5a-sel01
    It's urgent
    Regards
    Shashikant

    Hi,
    You can use the program RFBIBL00 to upload the FI documents.
    Sample BDC
    File Format : Below listed fields must be filled when you wnat to post new document. Program will recognize new document by itab-newdoc = 'X'.
    NEWDOC , "New Doc
    BLDAT(10) , "Doc Date
    BUDAT(10) , "Posting Date
    BLART(2) , "Document Type
    XBLNR LIKE BKPF-XBLNR , "Refrence
    BKTXT LIKE BKPF-BKTXT , "Doc Header Text
    You need one serverfile. After sucessfully run of program you have to run the progrma RFBIBL00. Pass data transfer type = 'B'.
    Regards,
    Naimesh.
    PS: Reward points, if it is useful..!
    REPORT ZTEST_NP .
    Tables
    TABLES: BSEG ,
    BGR00,
    BBKPF,
    BBSEG,
    t001.
    Internal Tables
    DATA: BEGIN OF ITAB OCCURS 0 ,
    NEWDOC , "New Doc
    BLDAT(10) , "Doc Date
    BUDAT(10) , "Posting Date
    BLART(2) , "Document Type
    XBLNR LIKE BKPF-XBLNR , "Refrence
    BKTXT LIKE BKPF-BKTXT , "Doc Header Text
    BSCHL(2) , "Posting Key
    HKONT(10) , "Account
    UMSKZ(1), "Sp GL ind
    ZLSCH(1) , "Payment Method
    ZLSPR(1) , "Payment Block
    WRBTR(16), "Amount without sign
    KOSTL(10), "Cost center
    GSBER(4) , "Business Area
    ZUONR LIKE BSEG-ZUONR , "Assignment
    AUFNR LIKE BSEG-AUFNR , "Order
    PERNR(8) , "Personal Number
    SGTXT LIKE BSEG-SGTXT, "Line Item Text
    END OF ITAB .
    DATA: ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE.
    DATA: I_BBKPF LIKE BBKPF OCCURS 0 WITH HEADER LINE.
    DATA: I_BBSEG LIKE BBSEG OCCURS 0 WITH HEADER LINE.
    DATA: I_BWITH LIKE BWITH OCCURS 0 WITH HEADER LINE.
    Data Declaration
    DATA: C_NODATA(1) TYPE C VALUE '/',
    W_CNT TYPE I.
    FIELD-SYMBOLS <F>.
    SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-T01.
    PARAMETER: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY,
    PSESSION(12) OBLIGATORY DEFAULT 'Auto_FI',
    P_SFILE LIKE RLGRAP-FILENAME OBLIGATORY ,
    P_LFILE LIKE RLGRAP-FILENAME OBLIGATORY .
    SELECTION-SCREEN: END OF BLOCK BLK1.
    At Selection Screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LFILE.
    CALL FUNCTION 'F4_FILENAME'
    IMPORTING
    FILE_NAME = P_LFILE.
    Start Of Selection
    START-OF-SELECTION .
    OPEN DATASET P_SFILE FOR OUTPUT IN TEXT MODE .
    PERFORM INIT_BGR00 USING C_NODATA.
    PERFORM INIT_IBKPF USING C_NODATA.
    PERFORM INIT_IBSEG USING C_NODATA.
    PERFORM UPLOAD .
    PERFORM SET_DATA.
    *& Form INIT_BGR00
    FORM INIT_BGR00 USING NODATA .
    CLEAR BGR00.
    BGR00-STYPE = '0'.
    BGR00-GROUP = PSESSION.
    BGR00-MANDT = SY-MANDT .
    BGR00-USNAM = SY-UNAME .
    bgr00-start = datum .
    BGR00-XKEEP = 'X'.
    BGR00-NODATA = NODATA.
    TRANSFER BGR00 TO P_SFILE.
    ENDFORM. " INIT_BGR00
    *& Form INIT_IBKPF
    FORM INIT_IBKPF USING NODATA .
    Initialize data fields with NODATA:
    W_CNT = 0.
    DO.
    ADD 1 TO W_CNT.
    ASSIGN COMPONENT W_CNT OF STRUCTURE I_BBKPF TO <F>.
    IF SY-SUBRC NE 0.
    EXIT.
    ENDIF.
    MOVE NODATA TO <F>.
    ENDDO.
    ENDFORM.
    *& Form INIT_IBSEG
    FORM INIT_IBSEG USING NODATA.
    Initialize data fields with NODATA:
    W_CNT = 0.
    DO.
    ADD 1 TO W_CNT.
    ASSIGN COMPONENT W_CNT OF STRUCTURE I_BBSEG TO <F>.
    IF SY-SUBRC NE 0.
    EXIT.
    ENDIF.
    MOVE NODATA TO <F>.
    ENDDO.
    ENDFORM.
    *& Form INIT_BBKPF
    FORM INIT_BBKPF.
    MOVE I_BBKPF TO BBKPF.
    BBKPF-STYPE = '1'.
    ENDFORM. " INIT_BBKPF
    *& Form INIT_BBSEG
    FORM INIT_BBSEG.
    MOVE I_BBSEG TO BBSEG.
    BBSEG-STYPE = '2'.
    BBSEG-TBNAM = 'BBSEG'.
    ENDFORM. " INIT_BBSEG
    *& Form UPLOAD
    FORM UPLOAD.
    CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
    FILENAME = P_LFILE
    FILETYPE = 'DAT'
    TABLES
    DATA_TAB = ITAB
    EXCEPTIONS
    CONVERSION_ERROR = 1
    FILE_OPEN_ERROR = 2
    FILE_READ_ERROR = 3
    INVALID_TABLE_WIDTH = 4
    INVALID_TYPE = 5
    NO_BATCH = 6
    UNKNOWN_ERROR = 7
    OTHERS = 8.
    IF SY-SUBRC NE 0 .
    MESSAGE S001(01) WITH 'The File Could not be Uploaded..!' .
    LEAVE LIST-PROCESSING .
    ELSE.
    DELETE ITAB INDEX 1 .
    ENDIF .
    LOOP AT ITAB .
    DO .
    REPLACE '.' WITH '' INTO ITAB-BLDAT .
    IF SY-SUBRC NE 0 .
    CONDENSE ITAB-BLDAT NO-GAPS .
    EXIT .
    ENDIF .
    ENDDO .
    DO .
    REPLACE '.' WITH '' INTO ITAB-BUDAT .
    IF SY-SUBRC NE 0 .
    CONDENSE ITAB-BUDAT NO-GAPS .
    EXIT .
    ENDIF .
    ENDDO .
    MODIFY ITAB .
    ENDLOOP .
    ENDFORM. " UPLOAD
    *& Form SET_DATA
    FORM SET_DATA.
    DATA: L_DOCCNT TYPE I,
    L_LNCNT TYPE I .
    SELECT SINGLE * FROM T001
    WHERE BUKRS = P_BUKRS.
    LOOP AT ITAB .
    IF ITAB-NEWDOC = 'X' OR ITAB-NEWDOC = 'x' .
    CLEAR : L_LNCNT .
    L_DOCCNT = L_DOCCNT + 1.
    PERFORM INIT_BBKPF .
    BBKPF-TCODE = 'FB01'.
    BBKPF-BUKRS = P_BUKRS.
    WRITE : ITAB-BLDAT DD/MM/YY TO BBKPF-BLDAT.
    WRITE : ITAB-BUDAT DD/MM/YY TO BBKPF-BUDAT.
    BBKPF-BLART = ITAB-BLART .
    BBKPF-WAERS = T001-WAERS.
    BBKPF-BKTXT = ITAB-BKTXT .
    BBKPF-XBLNR = ITAB-XBLNR .
    TRANSFER BBKPF TO P_SFILE.
    ENDIF .
    L_LNCNT = L_LNCNT + 1 .
    IF L_LNCNT GT 990 .
    MESSAGE S001(01) WITH 'Number of Records Exceed 990 Line Items'
    'Program cannot be executed' .
    LEAVE LIST-PROCESSING .
    ENDIF .
    PERFORM INIT_BBSEG .
    BBSEG-NEWKO = ITAB-HKONT .
    BBSEG-NEWBS = ITAB-BSCHL .
    BBSEG-WRBTR = ITAB-WRBTR .
    IF NOT ITAB-KOSTL IS INITIAL .
    BBSEG-KOSTL = ITAB-KOSTL .
    ELSE .
    IF NOT ITAB-GSBER IS INITIAL .
    BBSEG-GSBER = ITAB-GSBER .
    ENDIF .
    ENDIF .
    BBSEG-ZUONR = ITAB-ZUONR.
    BBSEG-SGTXT = ITAB-SGTXT .
    IF NOT ITAB-AUFNR IS INITIAL .
    BBSEG-AUFNR = ITAB-AUFNR .
    ENDIF .
    IF NOT ITAB-UMSKZ IS INITIAL .
    BBSEG-NEWUM = ITAB-UMSKZ .
    ENDIF .
    IF ITAB-BSCHL = '29' OR ITAB-BSCHL = '39' OR ITAB-BSCHL = '09' .
    BBSEG-ZFBDT = BBKPF-BLDAT .
    ENDIF .
    IF NOT ITAB-ZLSCH IS INITIAL .
    BBSEG-ZLSCH = ITAB-ZLSCH .
    ENDIF .
    IF NOT ITAB-PERNR IS INITIAL .
    BBSEG-PERNR = ITAB-PERNR .
    ENDIF .
    IF NOT ITAB-ZLSPR IS INITIAL .
    BBSEG-ZLSPR = ITAB-ZLSPR .
    ENDIF .
    TRANSFER BBSEG TO P_SFILE.
    ENDLOOP .
    IF L_DOCCNT NE 0 .
    WRITE :/ P_SFILE , 'has been created' .
    WRITE :/ L_DOCCNT , 'DOCUMENTS UPLOADED' .
    ELSE .
    WRITE :/'INPUT FILE CONTAINS NO DATA' .
    ENDIF .
    CLOSE DATASET P_SFILE .
    ENDFORM. " SET_DATA
    Reward points if Useful
    Regards
    Gokul

  • Printing of return delivery of multiple line items

    Dear All,
    I have a requirment to print return delivery material document with multiple line items of a PO. I tried with collectve slip in MIGO. but still line item will come in different pages. Message details are maintained for all line items. Print preview is seen from MB90.  please suggest me to achieve this requirement.
    Regards
    MSR

    Hi MSR,
    Contact ur ABAPer and ask him to adjust the Sapscript Form / SMART Form.
    Regards
    Ramesh Ch

  • Inserting Multiple Line Items To Stored Procedure

    Hi
    I need to insert line item values to one of the argument in stored procedure.what data type do i need to pass for type attribute.I tried with different datatypes from sap help but no luck.Please guide me how should i proceed.
    Interface is : Idoc to JDBC (stored procedure)
    Target structure:
                                     DT_Orderstatus_Trgt
                                         --> StatementName
                                                 -->SP Name
                                                        action--->Attribute
                                                        table--->Attribute
                                                         --->Argument (to insert multiple line items)
                                                                 isInput
                                                                 isOutput
                                                                 type
    Just i am showing only one argumnet which needs to be inserted multiple line items.
    Thanks

    Hi,
    Stored procedure can support the below data types
    INTEGER, BIT, TINYINT, SMALLINT, BIGINT, FLOAT, REAL, DOUBLE, NUMERIC, DECIMAL, CHAR, VARCHAR, STRING, LONGVARCHAR, DATE, TIME, TIMESTAMP, BINARY, VARBINARY, LONGVARBINARY, BLOB (input and output),CLOB (input and output), CURSOR (output; only in conjunction with the Oracle JDBC driver).
    But
    Instead of passing multiple line items / array of input value in stored procedure, You can go for the below option as having 2 statements in your mapping with below structures and those 2 statements should be linked with the primary key say col1.
    <root>
    <StatementName1>
    <dbTableName action=u201DINSERTu201D>
    <table>realDbTableName</table>
    <access>
    <col1>val1</col1>
    <col2>val2</col2>
    </access>
    <access>
    <col1>val11</col1>
    </access>
    </dbTableName>
    </StatementName1>
    <StatementName2>
    <dbTableName action=u201DINSERTu201D>
    <table>realDbTableName</table>
    <access>
    <col1>val1</col1>
    <col2>val2</col2>
    </access>
    <access>
    <col1>val11</col1>
    </access>
    </dbTableName>
    </StatementName2>
    </root>

  • Eliminate multiple line items

    Hi , I have a scenerio to extarct the billing plan items in my report. When I run the report it gives me the required output but with multiple line items . I am not sure if my sleection is bring in data from both billing plan header as well as billing plan item data . I just need to bring in the data from the item level which will resolve the issue of multiple line items showing up in the report, my selection is as follows , please comment if I am selecting form both the header as well as item level,
      IF  p_rental = 'X' .
        SELECT a~vbeln a~ktext a~erdat a~ernam a~audat a~vbtyp a~auart a~vkorg
         a~vtweg a~spart a~vkbur a~guebg a~gueen a~kunnr a~kvgr4
         b~posnr b~matnr b~charg b~matkl b~arktx b~pstyv b~zmeng
         b~zieme b~kdmat b~werks b~lgort b~vstel b~netpr b~kpein
         b~vkaus b~aufnr b~kmein b~shkzg b~oid_extbol b~oid_miscdl b~netwr
         b~oidrc b~oid_ship AS kunwe b~zzwprofid c~datbi c~datab b~route
         e~fkdat e~nfdat e~fakwr e~fksaf e~afdat
         f~fpart f~bedat f~endat f~horiz g~bezei
           INTO CORRESPONDING FIELDS OF TABLE gt_sel
           FROM vbak AS a
               INNER JOIN vbap AS b ON a~vbeln = b~vbeln
               INNER JOIN vbkd AS d ON a~vbeln = d~vbeln
               INNER JOIN fplt AS e ON d~fplnr = e~fplnr
               INNER JOIN fpla AS f ON e~fplnr = f~fplnr
               LEFT OUTER JOIN tvlvt AS g ON b~vkaus = g~abrvw
                                            AND g~spras = 'E'
               LEFT OUTER JOIN zsdsched AS c ON b~vbeln = c~vbeln
                                            AND b~posnr = c~posnr
             WHERE a~vbeln IN s_vbeln
             AND a~ktext IN s_ktext
             AND a~erdat IN s_erdat
             AND a~vbtyp = gc_g
             AND a~ernam IN s_ernam
             AND a~vkorg IN s_vkorg
             AND a~vtweg IN s_vtweg
             AND a~spart IN s_spart
             AND a~vkbur IN s_vkbur
             AND a~guebg IN s_guebg
             AND a~gueen IN s_gueen
             AND a~auart IN s_auart
             AND a~kunnr IN s_kunnr
             AND b~oid_ship IN s_kunwe
             AND b~werks IN s_werks
             AND b~lgort IN s_lgort
             AND b~vstel IN s_vstel
             AND b~route in s_route
             AND b~matnr IN s_matnr
             AND e~afdat IN s_afdat
             AND e~fksaf IN s_fksaf
             AND b~pstyv in s_pstyv.
        SORT gt_sel.
        IF NOT gt_sel[] IS INITIAL.
    **   Get Bill-to Party's for Item Lines
          SELECT vbeln posnr parvw kunnr INTO CORRESPONDING FIELDS OF TABLE gt_vbpa
              FROM vbpa
              FOR ALL ENTRIES IN gt_sel
              WHERE vbeln = gt_sel-vbeln
                AND parvw = gc_re.
        ENDIF.
    *   Loop through captured data for additional information
        LOOP AT gt_sel INTO gs_report.
    *   Find the bill-to party
          READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                   posnr = gs_report-posnr
                                                   parvw = gc_re.
          IF sy-subrc <> 0.
            READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                                     parvw = gc_re.
            CHECK sy-subrc = 0 AND gs_vbpa-kunnr IN s_kunre.
          ELSE.
            CHECK gs_vbpa-kunnr IN s_kunre.
          ENDIF.
          if sy-subrc = 0.
            gs_report-kunre = gs_vbpa-kunnr.
          endif.
    *  Get the Customer's Name
          gs_report-kunnrt = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunnr ).
          gs_report-kunwet = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunwe ).
          gs_report-kunret = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunre ).
          APPEND gs_report TO gt_report.
          ENDLOOP.
         DELETE ADJACENT DUPLICATES FROM  gt_report .
    Thanks

    Hi,
    Try debugging the code and after the select query and sort just check the gt_sel table if it contains any duplicate entries, if it is so, then there is some problem in inner join and left outer join and left outer join takes all the entries from left hand tables and only selected entries from right hand table so if the right hand table contains 3 to 4 entries then the same records from the left hand table is repeated for 3 to 4 times due to which you feel that the records are repeated.
    just check with the query and instead of using joins which is very costly statement try separating the query for each table and then using different internal tables you can collaborate the data into one single and avoid repetation.
    Regards,
    Ravi

  • Pass Idoc PO Multiple Line Items to file

    Hello All,
    we are using Message Type ORDERS and ORDERS1 as Basic type to pass PO and sales data. I have configured IDOC to File scenario. I'm able to successfully place a file in file folder.
    But my issue is some of the PO's have multiple line items and saved file has one first line item information. I have even tried unbounded for line item but no luck.
    <b>How do I pass all the line item values to the file ?.</b>
    The output structure should be
    1. PO Number
    2. PO ITem
    3. Material No
    4. Delivery Date
    5. Vendor Number
    the data type I created is
    Pur_Ord
    |__ EBELN
    |__ EBELP  0..Unbounded
    |__ MATNR
    |__ AEDAT
    |__ LIFNR
    the current output is
    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:Pur_Ord_Out xmlns:ns0="http://PO_TO_FILE">
      <EBELN>0004500066</EBELN>
      <EBELP>00001</EBELP>
      <MATNR>000000000000010027</MATNR>
      <AEDAT>20051215</AEDAT>
      <LIFNR>0001005780</LIFNR>
    </ns0:Pur_Ord_Out>
    Im looking for an output with all line items
    Thanks in advance
    Praveen

    Praveen
    Try this
    Pur_Ord
    |__ ORDERS 0.. Unbounded
      |__ EBELN
      |__ EBELP
      |__ MATNR
      |__ AEDAT
      |__ LIFNR
    Here ORDERS is the parent node.
    KK
    Message was edited by: KK

  • Setting the value of a single attribute for multiple line items

    Hi all,
    I am working on a Web Dynpro application, I have created this applicaion for an accounting document so it has header data and multiple line item data. As per the requirement I have to put the following logic:
    1. When a user enters a value in the field KBLNR on the line item, all the other fields like cost centerm fund, functional area should populate from a database table based on the value of the KBLNR. to get this I have put the following code:
    TYPES: BEGIN OF t_kblp,
              fipos     TYPE kblp-fipos,
              kostl     TYPE kostl,
                      END OF t_kblp.
      DATA lv_kblnr TYPE wd_this->element_t_bseg-kblnr.
      DATA: lt_kblp TYPE STANDARD TABLE OF t_kblp,
            wa_kblp LIKE LINE OF lt_kblp,
            lt_bseg              TYPE STANDARD TABLE OF bseg,
            wa_bseg              TYPE bseg.
      DATA lo_nd_t_bseg TYPE REF TO if_wd_context_node.
      DATA lo_el_t_bseg TYPE REF TO if_wd_context_element.
      DATA: ls_t_bseg TYPE wd_this->element_t_bseg,
            lo_api_controller    TYPE REF TO if_wd_controller,
            lo_message_manager   TYPE REF TO if_wd_message_manager,
            lo_nd_tbseg          TYPE REF TO if_wd_context_node,
             lo_el_tbseg          TYPE REF TO if_wd_context_element,
             lt_el_tbseg          TYPE wdr_context_element_set,
             lv_bseg              TYPE bseg.
      lo_nd_t_bseg = wd_context->path_get_node( path = `ZDATA.CHANGING.T_BSEG` ).
      lo_api_controller ?= wd_this->wd_get_api( ).
      CALL METHOD lo_api_controller->get_message_manager
        RECEIVING
          message_manager = lo_message_manager.
      lo_nd_tbseg = wd_context->path_get_node( path = `ZDATA.CHANGING.T_BSEG` ).
      lt_el_tbseg = lo_nd_tbseg->get_elements( ).
      LOOP AT lt_el_tbseg INTO lo_el_tbseg.
        lo_el_tbseg->get_static_attributes(
                               IMPORTING static_attributes = lv_bseg ).
      IF lv_bseg-kblnr NE ' '.
          SELECT belnr
                 fipos
                 kostl
                 PSPNR
                 geber
                 saknr
                 fkber
                 grant_nbr
                 gsber
                 FROM kblp
                 inTO corresponding fields of wa_kblp
                 WHERE belnr = lv_bseg-kblnr and
                      saknr = lv_bseg-saknr.
            ENDSELECT.
    lo_nd_t_bseg = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG` ).
    * get element via lead selection
            lo_el_t_bseg = lo_nd_t_bseg->get_element( ).
    lo_el_tbseg->set_static_attributes(
                               EXPORTING static_attributes = wa_kblp ).
       CLEAR: lv_bseg, wa_kblp.
      ENDLOOP.
    everything is working fine but now the problem is couple of fields that I have in wa_kblp are with different names in bseg table and hence they are not updating... I tried putting the following logic within the loop :
    lo_el_t_bseg->set_attribute(
        name =  `PROJK`
    value = wa_kblp-pspnr ).
    but it's only setting the value of the first line item and not working for the multiple line items, can you please tell me how can do this?
    Thanks,
    Rajat Garg
    Edited by: rajatg on Jun 24, 2011 5:09 PM

    Hi Chris,
    I tried your code and it worked fine but after I put this code I am getting another issue. within the loop I had a code to make the fields non modifiable on the screen and was working fine but now what's happening is it's making the all the lines uneditable except the one with data on it (which is completely opposite), this is what I have coded:
    LOOP AT lt_el_tbseg INTO lo_el_tbseg.
        lo_el_tbseg->get_static_attributes(
                               IMPORTING static_attributes = lv_bseg ).
    IF lv_bseg-kblnr NE ' '.
      SELECT belnr
                 fipos
                 kostl
                 PSPNR
                 geber
                 saknr
                 fkber
                 grant_nbr
                 gsber
                 FROM kblp
                 inTO corresponding fields of wa_kblp
                 WHERE belnr = lv_bseg-kblnr and
                      saknr = lv_bseg-saknr.
            ENDSELECT.
    move: wa_kblp-belnr to wa_bseg-kblnr,
    wa_kblp-fipos to wa_bseg-fipos,
    wa_kblp-kostl to wa_bseg-kostl,
    wa_kblp-pspnr to wa_bseg-projk,
    wa_kblp-geber to wa_bseg-geber,
    wa_kblp-saknr to wa_bseg-saknr,
    wa_kblp-fkber to wa_bseg-fkber,
    wa_kblp-grant_nbr to wa_bseg-grant_nbr,
    wa_kblp-gsber to wa_bseg-gsber,
    lv_bseg-dmbtr to wa_bseg-dmbtr.
    append wa_bseg to lt_bseg.
    lo_nd_edit_property = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG.EDIT_PROPERTY` ).
          get element via lead selection
          lo_el_edit_property = lo_nd_edit_property->get_element( ).
          lo_el_edit_property->set_attribute(
            name =  `EDIT_FIELD`
            value = 'ABAP_TRUE' ).
          lo_el_edit_property->set_attribute(
            name =  `EDIT_WBS`
            value = 'ABAP_TRUE' ).
    endif.
    endloop.
    o_nd_t_bseg = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG` ).
    get element via lead selection
            lo_el_t_bseg = lo_nd_t_bseg->get_element( ).
      CALL METHOD lo_nd_t_bseg->bind_table
        EXPORTING
          new_items            = lt_bseg.
    Can you please see what I am doing it wrong here....

  • Production order from sales order with multiple line item(for one material)

    Dear Gurus,
    I am working in MTO scenarios. If there is several line item in a sales order for one material, multiple production order( same as no. of sales order line item) is getting created against each of the line item.My requirement is,since the material code is same in each line item and sales order is one, one production order should be generated for all line item. please tell me how to do it.
    (Here for one material, multiple line item is required for some specific reason)
    Regards
    Rajib Pathak

    Hi,
    This is not possible.
    In Std SAP will create one production order for one sales order. The stock is also allocated to thet particular sales order only. Because each and every sales order may vary in any one of the parameters. Considering this, SAP has designed like this.
    Regards,
    V. Suresh

  • Single/ Consolidated  GR/IR entry for a PO having multiple line items

    Hi,
    In a PO there are couple of line items for materials of similar type and class. While making the Goods Receipt, the Accounting Document is making two no of line items for GR/IR accounts as credit and two no of inventory accounts as debit. Same is happening to GR/IR account while making Invoice Receipt document also.
    Informatively, both the materials above have been assigned to one GR/IR account in the OBYC table.
    My question is, is it possible to consolidate the value of both these materials and post one line item for GR/IR account. This is required as in our case in a PO, normally, we do have multiple line items and hence it is resulting multiple no of GR/IR and inventory accounts in a single accounting document. As we are getting details of the line item from PO history, we do not require it in the accounting document.
    Requested to kindly help.
    Regards
    B.Mohanty

    Hi
    This is not possible (you will compleet los the link between the Invoice and GR)
    The reason is that when you receive an invoice that this is based on a G/R line and the way arround when you receive first the invoice(s).
    The system need this for the automatecly clearing from the  G/R - I/R account, that is based on PO an PO line item number.

  • MM: PO Not Picking up PR Having Multiple Line Items

    Hi All,
    When Creating PO with Reference to PR Having multiple line items, not picking up the line items and also the vendor and also the where in we  have to select  input tax code.
    CASE1: Created PR 760001340 with single line item and also could able to create PO.
    Case2: Created PR 760001341 with multiple line items, When creating PO with reference to PR the line items and Vendor are not picking Up.
    Plz. Advise a solution.
    Thanks in Advance.....
    Regards
    Sudheer

    HI SHWN,
    Thanks for prompt response.
    ERROR Message: When referencing a requisition, please also enter a requisition item no.
    Regards
    Sudheer

  • How to Restrict Single Delivery Date for PO with Multiple Line Items

    Dear Experts,
    How to Restrict Single Delivery Date for PO with Multiple Line Items.
    System needs to through Error Message if User Inputs Different Delivery Dates for PO with Multiple Line Items in ME21N Tcode.
    Can we achive this by Some Enhancement in SAP or Not ???
    If so how to do it.
    Any Inputs is highly appreciated.
    Thanks and Regards,
    Selvakumar. M

    Hi Selvakumar,
    we can resrict the PO to have a single delivery date in all the line items by means of giving a error message or overwiting the delivery date keyed/determined in the line item.
    You can use the BADI -> ME_PROCESS_PO_CUST. In which you need to implement the method PROCESS_SCHEDULE.
    (for technical aid - This method will be called for each and every PO line item, From the imporing parameter im_schedule we can get all the details of current PO line, even we can change the data in the current PO line. )
    Regards,
    Madhu.

  • Creating a PO Using BAPI For Multiple PLants Or Multiple Line Items

    Hi All
        Can you please suggest me how to create a Purchase Order Using BAPI_PO_Create1 for Multiple Plants Or for Multiple Line items. The Requirement is like the PO is for single material for single vendor but for mulple stores i.e plants
    NOte:  Suggest me the  Creation of PO for MUltiple Line items or for multiple plants Using BAPI . Hope you people will give me the needful.
    Regards
    Shivakumar Bandari

    Hi,
    Here is the sample code to do that...
    *---> po header data
      wa_poheader-vendor    =  your vendor..
      wa_poheader-doc_type  =  Your doc type..check with Functional contact....
      wa_poheader-purch_org =  Purchasing Org..
      wa_poheader-pur_group =  Purchasing Group
    *---> po header data (change toolbar)
      wa_poheaderx-vendor    =  'X'.
      wa_poheaderx-doc_type  =  'X'.
      wa_poheaderx-purch_org =  'X'.
      wa_poheaderx-pur_group =  'X'.
    *---> poitem data
    data: item like ekpo-ebelp.
    item = '0010'.
    loop at t_parts.
      it_poitem-po_item  =  '00010'.
      IT_POITEM-PLANT    =  Plant..
      IT_POITEM-STGE_LOC =  Sloc...
    *---> poitemx (item data change toolbar)
      it_poitemx-po_item  =  '0010'.
      it_poitemx-po_itemx  =  'X'.
      IT_POITEMX-PLANT    =  'X'.
      IT_POITEMX-STGE_LOC =  'X'.
    *---> add record's to internal table
      APPEND:  it_poitem,
             it_poitemx.
    endloop.
    *call bapi_po_create1
      CLEAR v_ebeln.
      CALL FUNCTION 'BAPI_PO_CREATE1'
        EXPORTING
          poheader         = wa_poheader
          poheaderx        = wa_poheaderx
        IMPORTING
          exppurchaseorder = v_ebeln
        TABLES
          return           = it_return
          poitem           = it_poitem
          poitemx          = it_poitemx.
    *---> check the return table for error message
      READ TABLE it_return WITH KEY type = 'E'.
      IF sy-subrc NE 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      endif.
    Thanks,
    Murali

Maybe you are looking for

  • JTextField and JPasswordField

    Hi! How do I limit the character number that can be inserted into a JtextField and JPasswordField. For examen is the Password can be mam 6 characters, how do I do from limit the input? Thanks

  • Best export from FCP4.5 for conversion to Flash video player?

    Hi, I'm prepping a 5 min edit production for the best web presentation w/o excessive file size / loading time. The production has a lot of subtle detail & layered images so there a lot of opportunities for this to turn to mud (shot on low grade digit

  • Looping a flash movie

    I have been unable to find the correct property to test on a flash video to see if it is running or not. for an avi, i check the movierate, if it is not equal to 1, the video has stopped playing. for a wmv, i get its duration and loop for that length

  • Unable to update my software through creative cloud. receive download error

    unable to update my software through creative cloud. receive download error

  • Blackberry curve 8530 - startup problem, screen flashes white

    Whenever I try to start my phone this is essentially what happens.  I plug my phone into a charger, the red light lights up. Proceeds into the hourglass, then the screen partly flashes white. and then back to the red light. This then proceeds to happ