Ristrict line items in me21n

Hi,
Is there any BADI or user exit to ristrict the number of line items while creating purchase order by transaction me21n.

Hi,
  Implement the BADI  ME_PROCESS_PO_CUST in SE19.In the method PROCESS_ITEM write the following logic:
1)get the details of the PO.
  DATA:wl_mepoitem     TYPE mepoitem.
  wl_mepoitem = im_item->get_data( ).
get the item no in wl_mepoitem-ebelp.
check whether the no of items exceeds the limit.
If so give a warning msg.

Similar Messages

  • Probelm in  addition of line item in ME21N

    Hi,
    I am working on a requirement where after providing the data for line item 1 of a PO (ME21N),  when the User presses enter, based on certain conditions a new line item should get added to the PO.
    Using the BADI ME_PROCESS_PO_CUST and Method Process_ITEM but are not able to get the same.
    Any pointers on this will be helpful.
    Best regards
    Saurabh

    Hi,
    Try to do in Method  FIELDSELECTION_ITEM
    Thanks & Regards
    Prashant Gupta

  • Passing delivery date from line item in ME21N to VOFM

    Hi to all,
    I need to modify pricing on the purchase order (ME21N), so that the pricing condition PB00 would use the delivery date (EEIND) from the line item instead of the document date.
    Working with the functional analyst, we decided to create a condition value through transaction VOFM (we created 600). I found the which date to override (komk-prsdt). My problem is that I can't find the line item delivery date. I found structure KOMP, which seems to have other line item info, but not delivery date. I have gone through every other condition out there, but if they use L/I info, they get it from KOMP. I can't find the delivery date anywhere. I'm running in 'debug' with a specific date so I could tell if I found it.
    Can someone tell me how to pass EEIND to the routine, or find where it is? Thanks in advance.

    thanks

  • ME21N add new line item when creating a PO

    Hi guys,
    I am new to badi & oop.
    I want to add a PO line item after clicking the save button in ME21n.
    I found the BADI IF_PURCHASE_ORDER_MM.
    I have coded in the method POST by using method create_item.
    However, it still does not work? Any ideas how to use this method to create the new line item or any sample code?
    Please help! points will be rewarded.
    Many thanks...

    Hi Sen,
    You mean by executing the BAPI call? Maybe you did understand my question wrongly.
    What my requirement is that, user will be keying in details for PO and its line item in ME21N.
    And upon saving, need to auto add in an additional line to the PO. Eg user key in 3 line items, the BADI/userexit suppose to add a new line item to it.
    The bapi that you proposed, creates PO from d scratch right?
    I guess it can't just create an PO item with that bapi unfortunately.
    Any other help? I need a help in coding this create_item method in interface class IF_PURCHASE_ORDER_MM.
    Please help.. I have an urgent requirements.
    Many thanks in advance.

  • 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.

  • PO line item table EKPO-TECHS?

    Dear Gurus,
    Kindly inform me what is this EKPO-TECHS (Parameter Variant/Standard Variant) field?
    The F1 doucmentaion does not explain the business process how it is used.
    Also, where can we find this field in PO line item detail (ME21n)?
    We have Zero entries in this field and we want to use this field for some other purpose.
    Kindly share your inputs.
    Thanks & Best Regards,
    Mohan

    Hi,
    As far as I could research this field (TECHS) has to do with PP and could lead to problem in the BOMs if it is not filled. Please read note 791750 with this information.
    I hope this helps!.
    Best Regards,
    Arminda

  • EXIT to change / add line items during STO PO creation in T.Code ME21N

    Hi
    Can somebody suggest me a EXIT or a BADI  to change / add line items during STO PO creation in T.Code ME21N.
    The requirement is as below.
    When the user enters a material no ( which has a BOM created in CS01), and presses enter or saves the PO, i need to get the sub components of the BOM and populate them as the next line items.
    This is because the user needs to create the delivery with reference to the PO. In the delivery, the BOM material needs to be populated with all the sub components of the BOM.
    I tried to do it using EXIT_SAPMM06E_013 in which i am able to change / add the line items in the XEKPO and YEKPO internal tables. The entries are available in the internal table when the EXIT is executed.
    But when the PO is posted internally, the item is not changed/added.
    Thanks in advance.
    Guna.

    Hi,
    Try BADI "ME_PROCESS_PO_CUST".
    cheers,

  • ME21N - new field added and same value posted to it for all line items

    hi all
    i have added new field under item  level in me21n screen.
    data for new filed fetched from tables with values entered in header level material number.
    For one record, it is ok
    but for multiple records, same value is fetched for all line items
    i have written coding in screen exit for 0111
    and function exits EXIT_SAPMM06E_016 and EXIT_SAPMM06E_018
    how to solve
    pl help
    regards
    senthil

    MODULE STATUS_0111 OUTPUT.
    SET PF-STATUS 'xxxxxxxx'.
    SET TITLEBAR 'xxx'.
      if sy-tcode eq 'ME23N' or sy-tcode eq 'ME23'.
        LOOP at SCREEN.
          if screen-group1 ne 'PCS'.
            screen-input = 0.
            MODIFY SCREEN.
          endif.
        ENDLOOP.
      ENDIF.
      TYPES : BEGIN OF ty_cabn1,
             atnam TYPE cabn-atnam,
           end of ty_cabn1.
      DATA : itab_cabn1 TYPE STANDARD TABLE OF ty_cabn1 INITIAL SIZE 0,
             wa_cabn1 TYPE ty_cabn1.
      TYPES : BEGIN OF ty_cawn1,
        atinn TYPE cawn-atinn,
        atzhl TYPE cawn-atzhl,
        atwrt TYPE cawn-atwrt,
        end of ty_cawn1.
      DATA : itab_cawn1 TYPE STANDARD TABLE OF ty_cawn1 INITIAL SIZE 0,
             wa_cawn1 TYPE ty_cawn1.
      TYPES : BEGIN OF ty_cawnt1,
       pcs TYPE cawnt-atwtb,
        atinn TYPE cawnt-atinn,
        atzhl TYPE cawnt-atzhl,
        atwtb TYPE cawnt-atwtb,
          end of ty_cawnt1.
      DATA : itab_cawnt1 TYPE TABLE OF ty_cawnt1,
             wa_cawnt1 TYPE ty_cawnt1.
      TYPES : BEGIN OF ty_pcs1,
    pcs TYPE cawnt-atwtb,
      atwrt TYPE cawn-atwrt,
      atwtb TYPE cawnt-atwtb,
        end of ty_pcs1.
      DATA : itab_pcs3 TYPE TABLE OF ty_pcs1,
             itab_pcs4 TYPE TABLE OF ty_pcs1,
             wa_pcs1 TYPE ty_pcs1.
      TYPES : BEGIN OF ty_pcsn,
      matnr TYPE ausp-objek,
      ebelp TYPE dynpread-stepl,
      atwrt TYPE cawn-atwrt,
      atwtb TYPE cawnt-atwtb,
      END OF ty_pcsn.
      DATA : itab_pcsn TYPE TABLE OF ty_pcsn,
             wa_pcsn TYPE ty_pcsn.
      TYPES : BEGIN OF ty_ausp1,
         objek TYPE ausp-objek,
         atinn TYPE ausp-atinn,
         atwrt TYPE ausp-atwrt,
       END OF ty_ausp1.
      DATA : itab_ausp1 TYPE STANDARD TABLE OF ty_ausp1 INITIAL SIZE 0,
             wa_ausp1   TYPE ty_ausp1.
      DATA : param_name1(35) TYPE  c.
      DATA: progname1      TYPE sy-repid,
            dynnum1        TYPE sy-dynnr,
            dynpro_values1 TYPE TABLE OF dynpread,
            dynpro_values2 TYPE TABLE OF dynpread,
            field_value1   LIKE LINE OF dynpro_values1,
            ematn1         TYPE mara-matnr.
      if sy-tcode ne 'ME23N' and sy-tcode ne 'ME23'.  "psk
        clear : itab_cabn1,itab_cawn1,itab_cawnt1,itab_pcs3,itab_pcs4,itab_pcsn,itab_ausp1.
        clear : wa_cawn1,wa_cawnt1,wa_pcs1,wa_ausp1.
        if sy-uname eq 'IBM_ABAP'.
          param_name1 = '000000001'.
        else.
          param_name1 = '000000013'.
        endif.
        SELECT atnam
        FROM cabn
        INTO CORRESPONDING FIELDS OF TABLE itab_cabn1
        WHERE atinn  = param_name1.
        select *
        FROM cawn
        into CORRESPONDING FIELDS OF TABLE itab_cawn1
        WHERE atinn = param_name1.
        if itab_cawn1[] is NOT INITIAL.
          SELECT atinn atzhl atwtb
          FROM cawnt
          INTo CORRESPONDING FIELDS OF TABLE itab_cawnt1
          FOR ALL ENTRIES IN itab_cawn1
          WHERE atinn = itab_cawn1-atinn
          AND atzhl = itab_cawn1-atzhl.
        endif.
        if itab_cawnt1[] is NOT INITIAL.
          sort itab_cawnt1 by atinn atzhl.
          loop at itab_cawnt1 INTO wa_cawnt1.
            READ TABLE itab_cawn1 INTO wa_cawn1 with key atinn = wa_cawnt1-atinn
                                                         atzhl = wa_cawnt1-atzhl BINARY SEARCH.
            if sy-subrc eq 0.
           CONCATENATE wa_cawn-atwrt '->' wa_cawnt-atwtb INTO wa_cawnt-pcs.
           MODIFY itab_cawnt FROM wa_cawnt TRANSPORTING pcs.
           wa_pcs-pcs = wa_cawnt-pcs.
              wa_pcs1-atwrt = wa_cawn1-atwrt.
              wa_pcs1-atwtb = wa_cawnt1-atwtb.
              append wa_pcs1 to itab_pcs3.
            ENDIF.
            CLEAR : wa_cawnt1,wa_cawn1, wa_pcs1.
          ENDLOOP.
        ENDIF.
        CLEAR: dynpro_values1, field_value1.
    dynpro_values-FIELDNAME = 'MEPO1211-EMATN'.
    APPEND dynpro_values.
        field_value1-fieldname = 'MEPO1211-ematn'.
        APPEND field_value1 TO dynpro_values1.
        progname1 = 'SAPLMEGUI'.
        dynnum1 = '1211'.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME                               = progname1
            DYNUMB                               = dynnum1
      TRANSLATE_TO_UPPER                   = ' '
         REQUEST                                = 'A'
      PERFORM_CONVERSION_EXITS             = ' '
      PERFORM_INPUT_CONVERSION             = ' '
      DETERMINE_LOOP_INDEX                 = ' '
      START_SEARCH_IN_CURRENT_SCREEN       = ' '
      START_SEARCH_IN_MAIN_SCREEN          = ' '
      START_SEARCH_IN_STACKED_SCREEN       = ' '
      START_SEARCH_ON_SCR_STACKPOS         = ' '
      SEARCH_OWN_SUBSCREENS_FIRST          = ' '
      SEARCHPATH_OF_SUBSCREEN_AREAS        = ' '
          TABLES
            DYNPFIELDS                           = dynpro_values1
       EXCEPTIONS
         INVALID_ABAPWORKAREA                 = 1
         INVALID_DYNPROFIELD                  = 2
         INVALID_DYNPRONAME                   = 3
         INVALID_DYNPRONUMMER                 = 4
         INVALID_REQUEST                      = 5
         NO_FIELDDESCRIPTION                  = 6
         INVALID_PARAMETER                    = 7
         UNDEFIND_ERROR                       = 8
         DOUBLE_CONVERSION                    = 9
         STEPL_NOT_FOUND                      = 10
         OTHERS                               = 11
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
    READ TABLE dynpro_values1 INTO field_value1 with KEY fieldname = 'MEPO1211-EMATN'.
        LOOP at dynpro_values1 INTO field_value1 WHERE fieldname = 'MEPO1211-EMATN'.
          clear ematn1.
          if sy-subrc eq 0.
            ematn1 = field_value1-fieldvalue.
          endif.
          if ematn1 is not INITIAL.
            clear : wa_cawn1,wa_cawnt1,wa_pcs1,wa_ausp1.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                INPUT  = ematn1
              IMPORTING
                OUTPUT = ematn1.
            select *
            FROM ausp
            INTO CORRESPONDING FIELDS OF TABLE itab_ausp1
            WHERE objek = ematn1
            and atinn = param_name1.
            CLEAR itab_pcs4.
            if itab_ausp1[] is not INITIAL.
              sort itab_ausp1 by atinn atwrt.
              sort itab_cawn1 by atinn.
              READ TABLE itab_ausp1 INTO wa_ausp1 INDEX 1.
              loop at itab_cawn1 INTO wa_cawn1 WHERE atinn = wa_ausp1-atinn AND atwrt = wa_ausp1-atwrt.
                READ TABLE itab_cawnt1 INTO wa_cawnt1 WITH KEY atinn = wa_cawn1-atinn
                                                                atzhl = wa_cawn1-atzhl.
                if sy-subrc eq 0.
                  wa_pcs1-atwrt = wa_cawn1-atwrt.
                  wa_pcs1-atwtb = wa_cawnt1-atwtb.
                  append wa_pcs1 to itab_pcs4.
                  wa_pcsn-matnr = wa_ausp1-objek.
                  wa_pcsn-ebelp = field_value1-stepl.
                  wa_pcsn-atwrt = wa_cawn1-atwrt.
                  wa_pcsn-atwtb = wa_cawnt1-atwtb.
                  APPEND wa_pcsn to itab_pcsn.
                ENDIF.
                clear : wa_ausp1,wa_cawn1,wa_cawnt1.
              ENDLOOP.
            ENDIF.
           clear wa_pcs1.
           read TABLE itab_pcs4 into wa_pcs1 index 1.
           if sy-subrc eq 0.
             EKPO_CI-ZPCS = wa_pcs1-atwrt.
           endif.
          ENDIF.
        ENDLOOP.
        CLEAR: field_value1.
        LOOP at dynpro_values1 INTO field_value1 WHERE fieldname = 'MEPO1211-EMATN'.
          clear wa_pcsn.
          if field_value1-fieldvalue is not INITIAL.
            read TABLE itab_pcsn INTO wa_pcsn with key  matnr = field_value1-fieldvalue
                                                        ebelp = field_value1-stepl.
            if sy-subrc eq 0.
              clear  EKPO_CI-ZPCS.
    *EKPO_CI-ZPCS = wa_pcs1-atwrt.
              EKPO_CI-ZPCS = wa_pcsn-atwrt.
            endif.
          endif.
        ENDLOOP.
       CLEAR: field_value1, dynpro_values1.
       progname1 = 'SAPLXM06'.
       dynnum1   = '0111'.
       field_value1-fieldname = 'EKPO_CI-ZPCS'.
       APPEND field_value1 TO dynpro_values1.
       if ematn1 is not INITIAL.
         clear wa_pcs1.
         read TABLE itab_pcs4 into wa_pcs1 index 1.
         if sy-subrc eq 0.
           EKPO_CI-ZPCS = wa_pcs1-atwrt.
         endif.
       ENDIF.
      endif.
    ENDMODULE.                 " STATUS_0111  OUTPUT
    Function exits:
    ^^^^^^^^^^^^^^^^^
    EXIT_SAPMM06E_016
    ^^^^^^^^^^^^^^^^^
    INCLUDE ZXM06U41 .
    DATA XFISTL LIKE EKPO-FISTL.
    TABLES: ADRC, T001W.
    DATA: PLANT LIKE T001W-WERKS.
    SELECT SINGLE * FROM T001W WHERE WERKS = I_EKPO-WERKS.
    SELECT SINGLE * FROM ADRC WHERE ADDRNUMBER = T001W-ADRNR.
    XFISTL = ADRC-SORT2.
    SET PARAMETER ID 'FIS' FIELD XFISTL.
    * Added For PCS 12.11.2010
    DATA : fs_ekpo type EKPO_CI.
    if sy-tcode = 'ME22N' or sy-tcode = 'ME23N'.
    *  if tekpo-zpcs is INITIAL.
    *    message e000(zmm) with 'PCS Type should be chosen'.
    *  endif.
      loop at tekpo.
        if ( tekpo-ebeln eq i_ekpo-ebeln and tekpo-ebelp eq i_ekpo-ebelp ).
          ekpo_ci-zpcs = tekpo-zpcs.
        endif.
      ENDLOOP.
    endif.
    ^^^^^^^^^^^^^^^^^
    EXIT_SAPMM06E_018
    ^^^^^^^^^^^^^^^^^
    INCLUDE ZXM06U40 .
    E_CI_EKPO-ZPCS = EKPO_CI-ZPCS.
    E_CI_UPDATE = 'X'.

  • 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  *

  • Add New Line item while creating a new PO in ME21N

    Hi All,
    I have a requirement to add a new line item when user is pressing enter on the Line item 1 based on some condition.
    I am using the BADI 'ME_PROCESS_PO_CUST' and Method is 'PROCESS_ITEM'.
    I have tried lots of options and also look for method 'Create_Item ' but not able to understand what exactly I need to pass in that method.
    Can somebody elaborate on it if somebody has work on it? Even sample code will also help me.
    Thanks in advance.
    With regards
    Sachin Gupta

    Hi Sachin,
    Please find the sample code :
    METHOD if_ex_me_process_po_cust~process_item .
      DATA: ls_mepoitem TYPE mepoitem,
            ls_customer TYPE mepo_badi_exampl,
            ls_tbsg     TYPE tbsg.
    * here we check customers data
      ls_mepoitem = im_item->get_data( ).
      IF ls_mepoitem-loekz EQ 'D'.
    * a physical deletion of the item was carried out. therrefor we have to
    * delete customer data on the level of the item
        ls_customer-ebeln = ls_mepoitem-ebeln.
        ls_customer-ebelp = ls_mepoitem-ebelp.
        CALL FUNCTION 'MEPOBADIEX_SET_DATA'
          EXPORTING
            im_data                    = ls_customer
            im_physical_delete_request = 'X'.
      ELSE.
    * update/insert operation
        CALL FUNCTION 'MEPOBADIEX_GET_DATA'
          EXPORTING
            im_ebeln = ls_mepoitem-ebeln
            im_ebelp = ls_mepoitem-ebelp
          IMPORTING
            ex_data  = ls_customer.
    * check customers data
    * check field badi_bsgru. This should be carried out only for new items. Once the PO is posted the
    * field should no longer be changeable. This is done in Method FIELDSELECTION_ITEM.
        IF im_item->is_persistent( ) EQ mmpur_no.
          IF ls_customer-badi_bsgru IS INITIAL.
    * Place the cursor onto field badi_bsgru. The metafield was defined in BAdI ME_GUI_PO_CUST,
    * Method MAP_DYNPRO_FIELDS.
            mmpur_metafield mmmfd_cust_01.
            mmpur_message_forced 'W' 'ME' '083' text-002 '' '' ''.
          ELSE.
    * check whether the field is valid
            SELECT SINGLE * FROM tbsg INTO ls_tbsg WHERE bsgru EQ ls_customer-badi_bsgru.
            IF NOT sy-subrc IS INITIAL.
              mmpur_metafield mmmfd_cust_01.
              mmpur_message_forced 'E' 'ME' '083' text-004 '' '' ''.
    * invalidate the object
              CALL METHOD im_item->invalidate( ).
            ENDIF.
          ENDIF.
        ENDIF.
    Try to check the import and export paremeters to pass the vales.
    I hope this may helpfull.
    Thank you,
    Thanks,
    AMS

  • How to ristrict 10 line items in Check Printing Form F110_PRENUM_CHCK

    Hi,
    I have requirement in Check Printing form F110_PRENUM_CHCK. I have to print only 10 invoices (line items) for the corresponding Document number. If there are more than 10 invoices (line items), 11th invoice onwards should print in another printer in plain papaer. But upto 10th invoice should print in actual Check form. 
    How can we handle 10 no of invoices restriction in actual Check Form ? If more than 10, 11th invoice should print in plain paper.
    I copied F110_PRENUM_CHCK into Zform.
    Pls suggest me.
    Thanks in advance.
    Regards,

    Hi,
    Thank u for u r reply.
    I assigned in custumization, Still I am not able to display when we have morethan 10 line items. If we have 20 line items, It should display 10 line items in Actual check form and 11th line item onwards should print in another plain paper or 1st line to 20th line in another form.
    Regards,

  • Verify Line Item fields in ME21N

    Hi,
    I have a requirment that needs to check that only one Requisitioner is enetered in the Requisitioner field in any of the line items. Example. If I placed "ReqA" in line item 1, and "ReqB" in line item 2, it should generate an error when I press enter or save, Both should have "ReqA" or "ReqB" as Requisitioner.
    Kindly Help.
    Thanks in Advance.

    Hi,
        Try to Implement the BADI ME_PROCESS_PO_CUST in that look at for Method PROCESS_ITEM, do the coding here, Read the BADI documentation and sample codes available along with the BADI.
    Regards
    Bala Krishna

  • Me21n change line item dropdown list value

    hi experts,
    i have a requirement to automatically remove the aulty po line item when user click on CHECK or SAVE button, i done this by removing the record from ETT[] and POT[] at ENHANCEMENT-POINT mm06ef0p_pruefen_01 SPOTS es_mm06ef0p_pruefen INCLUDE BOUND.
    it is working fine except one scenario which is, if the faulty line item is 00020, and the line item dropdown list is selected line item 20, after i removed the record from POT[], it hits abap runtime error. when i check at debugger, it is caused by system will look for line item 00020 ( follow dropdown list value ) but the record is removed, so come to error... it is working fine if the dropdown list is selected line item 10.
    so i am looking for a way to change the dropdown list value.
    or you all have some other suggestion?
    please help... i need it urgently coz i have been solving the problem for 2 weeks....
    thanks a lot

    Hi,
    generally it's not a good idea to delete item without using standard method. You can see one example why it is usually complicated. Maybe I have a workaround for you. You can try to use BADI ME_PROCESS_PO_CUST. There is a method CHECK where you get reference to PO header. You can easily get references to your items by calling method GET_ITEMS. So you will perform your check for each item and for wrong items you will call method INVALIDATE. This item will be marked as invalid and it will not be posted. Here I do not know how it will be displayed to user. Maybe the user will have to delete this item manually.
    Cheers

  • To Set Goods Receipt Indicator For Particular Line Items In SRM

    Hi All,
      i am working on BBP_DOC_CHANGE_BADI in SRM. i am trying to set the goods receipt indicator for particular line items based upon certain conditions. The values are being set in the badi. But when the Purchase Order is created in the backend R/3 i coudn't able to find the goods receipt indiactor being set..
    i used this field to set the GR indicator
      GR_IND = 'X'.  " Goods Receipt Indicator
    Can anyone help me in this?
    helpfull answers will be rewarded....
    Thanks,
    Murali

    To Murali and Christophe,
    I have set the GR and GR non val indicator in CREATE_PO BADI but I face the following situation :
    problem -
    In case of multiple account assignment in the shopping cart, the R/3 transaction ME21N sets these flags. 
    The flag status determined as per EBP conditions is lost.
    I need to retain the flag status as per EBP conditions even in this multiple account assignment scenario.
    proposed solution -
    - CREATE PO badi is already implemented in EBP and customised logic for GR and GR non valflag is in place.
    - I create user exit in R/3 backend system in ME21N transaction 
    - I make RFC call in this user exit to EBP and check the table BBP_PDPSET for the shopping cart.
    This is how I get the flag status as per EBP conditions and copy the same to R/3 thereby overriding the multiple account assignment check of the R/3 system.
    issue - 
    When I tried to verify that I can check the BBP_PDPSET table from R/3, I found that this table is not having entries for all the records in  CRMD_ORDERADM_I table.
    For which shopping carts will the BBP_PDPSET table not  be populated ?
    thank you in advance,
    Bhakti.

  • PO - Line Items Payment Status Report

    Hi Friends,
    Is it possible to get a PO (Line Items wise) Payment Status Report.
    My client wants PO Line wise payment status as a MM report development.
    We have Down Payment, Residual & Retention money as a business practise with our vendors
    Following is the MM-FI flow in our company code..
    Create & Release PR u2013 MM - Creating PR
    Create & Release PO (ME21N) u2013 MM u2013 Creating PO
    F-47 Down Payment Request u2013 MM u2013 Creating DPR
    F-48 Post Vendor Down Payment u2013 FI - Posting DPR
    FBZ5 Print Check for Payment Document u2013 FI - For printing cheques for DP only
    MIGO/ML81N, GR u2013 MM u2013 SES/GR for PO
    MIR7/MIR6 IR - MM/FI u2013 Parking & IR
    F-44 Clear Vendor u2013 Linking advance with IR (as residual clearing)
    F-53/F-58 u2013 Posting Payments after deducting Retention
    F-04 Post with Clearing u2013 Clearing Outgoing account entries with Main account
    Thanks in advance.
    Regards,
    Vikrant Sood
    Moderator: This thread has been locked due to crossposting.
                       Please do not post the same question in different forums.

    hi
    there is no sap standard report available you have to develop your z report.

Maybe you are looking for

  • 0HR_PT_1 Loading Issue

    I am currently loading 0HR_PT_1 in Dev (InfoCube 0PT_C01) using delta initialization. However, monitor status is being displayed in 'Yellow' and data is not available for reporting in the Cube, even though 'Data Processing' indicator is all set to 'G

  • Inbound IDocs will only process immediately

    Hello.  I have been having an issue with our inbound INVOIC02 IDocs coming from our EDI server.  We are processing a high number of invoices and I wanted to change the processing from immediate to collective.  The immediate processing is causing a st

  • Message in service entry sheet

    I wnat to convert an error message into warning in Service entry sheet. What is the procedure? Regards VS

  • Break-points in adobe forms.....

    can we put break-points in adobe forms?, if it is possible how can we do this?is there ay way to see the data of an internal table in a adobe forms?......................... Edited by: dasr r on Jul 9, 2008 8:49 AM

  • APD - I'm trying to send a File to AS but 'Could not close the file 'AP_DP'

    Dear Expert, I'm trying to sen a file to Application Server through Analysis Process Design, but the messega that the log show is: Could not close the file 'AP_DP'; operating system error: 9 (Bad file descriptor) I have three compoent in the analysis