Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI PO CHANGES

divsmart
Participant
0 Likes
3,975

Hi Guys,

I have a requirement for PO changes ie.,User will have an Excel format and when we upload need to changes in ME22n . So i wrote an BAPI as below . But i am not getting 'Changes in PO screen' Please guidance me what mistake doing here.

FORM get_form .

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = lt_bapi
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE 'Please input the correct data' TYPE 'E'.
  ENDIF.
  LOOP AT lt_bapi INTO ls_bapi.

* => Header Declarations.
    ls_bapimepoheader-po_number = ls_bapi-ebeln.
    ls_poheader-po_number = ls_bapi-ebeln.
    ls_poheader-purch_org = ls_bapi-ekorg.
    ls_poheader-pur_group = ls_bapi-ekgrp.
    ls_poheader-comp_code = ls_bapi-bukrs.
    APPEND ls_poheader TO lt_poheader.

*=>Header X Declartions.
    ls_poheader-po_number = 'X'.
    ls_poheaderx-purch_org = 'X'.
    ls_poheaderx-pur_group = 'X'.
    ls_poheaderx-comp_code = 'X'.
    APPEND ls_poheaderx TO lt_poheaderx.

*  =>Item Declartions.
    ls_poitem-po_item = ls_bapi-ebelp.
    ls_poitem-material = ls_bapi-matnr.
    ls_poitem-plant = ls_bapi-werks.
    ls_poitem-stge_loc = ls_bapi-lgort.
    ls_poitem-quantity = ls_bapi-menge.
    ls_poitem-po_unit = ls_bapi-meins.
    APPEND ls_poitem TO lt_poitem.

*=>Item X declartions.
    ls_poitemx-po_item = 'X'.
    ls_poitemx-material = 'X'.
    ls_poitemx-plant = 'X'.
    ls_poitemx-stge_loc = 'X'.
    ls_poitemx-quantity = 'X'.
    ls_poitemx-po_unit = 'X'.
    APPEND ls_poitemx TO lt_poitemx.

* =>Delivery date declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.
    ls_bapimeposchedule-delivery_date = ls_bapi-eindt.
    APPEND ls_bapimeposchedule TO lt_bapimeposchedule.

* =>Delivery date X declarations.
    ls_bapimeposchedulx-po_item = 'X'.
    ls_bapimeposchedulx-delivery_date = 'X'.
    APPEND ls_bapimeposchedulx TO lt_bapimeposchedulx.

*    BREAK-POINT.
    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder = ls_bapimepoheader-po_number
        poheader      = ls_poheader
        poheaderx     = ls_poheaderx
*  IMPORTING
*       EXPHEADER     =
*       EXPPOEXPIMPHEADER            =
      TABLES
        return        = lt_return
        poitem        = lt_poitem
        poitemx       = lt_poitemx
*       POADDRDELIVERY               =
        poschedule    = lt_bapimeposchedule
        poschedulex   = lt_bapimeposchedulx. 
1 ACCEPTED SOLUTION
Read only

RaymondGiuseppi
Active Contributor
0 Likes
3,636

Could you look for error before success, coul look like

IF lt_return IS NOT INITIAL. " some messages

  LOOP AT  lt_return INTO ls_return WHERE type = 'E'.

    ls_alv-ekorg    = ls_bapi-ekorg.
    ls_alv-ekgrp    = ls_bapi-ekgrp.
    ls_alv-bukrs    = ls_bapi-bukrs.
    ls_alv-ebelp    = ls_bapi-ebelp.
    ls_alv-matnr    = ls_bapi-matnr.
    ls_alv-ebeln    = ls_bapi-ebeln.
    ls_alv-message  = 'Error'.
    ls_alv-message1 = ls_return-message.
    APPEND ls_alv TO lt_alv.
    CLEAR ls_alv.

  ENDLOOP.

  IF sy-subrc NE 0. " no error

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    LOOP AT  lt_return INTO ls_return.

      ls_alv-ekorg    = ls_bapi-ekorg.
      ls_alv-ekgrp    = ls_bapi-ekgrp.
      ls_alv-bukrs    = ls_bapi-bukrs.
      ls_alv-ebelp    = ls_bapi-ebelp.
      ls_alv-matnr    = ls_bapi-matnr.
      ls_alv-ebeln    = ls_bapi-ebeln.
      CASE ls-return-type.
        WHEN 'S'.
          ls_alv-message  = 'Success'.
        WHEN OTHERS.
          ls_alv-message  = 'Warning'. " e.g. 'no change made..."
      ENDCASE.
      ls_alv-message1 = ls_return-message.
      APPEND ls_alv TO lt_alv.
      CLEAR ls_alv.

    ENDLOOP.

  ENDIF.


13 REPLIES 13
Read only

pataselano
Active Contributor
0 Likes
3,636
*=>Item X declartions.
   ls_poitemx-po_item = ls_bapi-ebelp.
   ls_poitemx-po_itemx = 'X'.
   ls_poitemx-material = 'X'.
   ls_poitemx-plant = 'X'.
   ls_poitemx-stge_loc = 'X'.
   ls_poitemx-quantity = 'X'.
   ls_poitemx-po_unit = 'X'.
   APPEND ls_poitemx TO lt_poitemx.

* =>Delivery date declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.
    ls_bapimeposchedule-SCHED_LINE = EKET-ETENR. (get from EKET table).
    ls_bapimeposchedule-delivery_date = ls_bapi-eindt.
    APPEND ls_bapimeposchedule TO lt_bapimeposchedule.

* =>Delivery date X declarations.
    ls_bapimeposchedulx-po_item = ls_bapi-ebelp.
    ls_bapimeposchedulx-SCHED_LINE = EKET-ETENR.
    ls_bapimeposchedulx-po_itemx = 'X'.
    ls_bapimeposchedulx-SCHED_LINEX = 'X'.
    ls_bapimeposchedulx-delivery_date = 'X'.
    APPEND ls_bapimeposchedulx TO lt_bapimeposchedulx.

Read only

0 Likes
3,636

Hi Andy,

Thanks for response. I have passed as your guidance but the data not changes in PO screen

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = lt_bapi
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE 'Please input the correct data' TYPE 'E'.
  ENDIF.

  SELECT ebeln
         ebelp
         etenr INTO TABLE lt_eket FROM eket FOR ALL ENTRIES IN lt_bapi WHERE
                                                            ebeln = lt_bapi-ebeln ."AND
*                                                            ebelp = lt_bapi-ebelp.

  LOOP AT lt_bapi INTO ls_bapi.



* => Header Declarations.
    ls_bapimepoheader-po_number = ls_bapi-ebeln.
    ls_poheader-po_number = ls_bapi-ebeln.
    ls_poheader-purch_org = ls_bapi-ekorg.
    ls_poheader-pur_group = ls_bapi-ekgrp.
    ls_poheader-comp_code = ls_bapi-bukrs.
    APPEND ls_poheader TO lt_poheader.

*=>Header X Declartions.
    ls_poheader-po_number = 'X'.
    ls_poheaderx-purch_org = 'X'.
    ls_poheaderx-pur_group = 'X'.
    ls_poheaderx-comp_code = 'X'.
    APPEND ls_poheaderx TO lt_poheaderx.

*  =>Item Declartions.
    ls_poitem-po_item = ls_bapi-ebelp.
    ls_poitem-material = ls_bapi-matnr.
    ls_poitem-plant = ls_bapi-werks.
    ls_poitem-stge_loc = ls_bapi-lgort.
    ls_poitem-quantity = ls_bapi-menge.
    ls_poitem-po_unit = ls_bapi-meins.
    APPEND ls_poitem TO lt_poitem.

*=>Item X declartions.
    ls_poitemx-po_item = 'X'.
    ls_poitemx-material = 'X'.
    ls_poitemx-plant = 'X'.
    ls_poitemx-stge_loc = 'X'.
    ls_poitemx-quantity = 'X'.
    ls_poitemx-po_unit = 'X'.
    APPEND ls_poitemx TO lt_poitemx.

* =>Delivery date declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.

    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.
      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.

    ls_bapimeposchedule-delivery_date = ls_bapi-eindt.
    APPEND ls_bapimeposchedule TO lt_bapimeposchedule.

* =>Delivery date X declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.


    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.

      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.
    ls_bapimeposchedulx-po_itemx = 'X'.
    ls_bapimeposchedulx-sched_linex = 'X'.
    ls_bapimeposchedulx-delivery_date = 'X'.
    APPEND ls_bapimeposchedulx TO lt_bapimeposchedulx.

*    BREAK-POINT.
    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder = ls_bapimepoheader-po_number
        poheader      = ls_poheader
        poheaderx     = ls_poheaderx
*  IMPORTING
*       EXPHEADER     =
*       EXPPOEXPIMPHEADER            =
      TABLES
        return        = lt_return
        poitem        = lt_poitem
        poitemx       = lt_poitemx
*       POADDRDELIVERY               =
        poschedule    = lt_bapimeposchedule
        poschedulex   = lt_bapimeposchedulx.

    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO ls_return WITH KEY type = 'S'.
      IF sy-subrc = 0.


        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        ls_alv-ebeln  = ls_bapi-ebeln.
        ls_alv-ekorg  = ls_bapi-ekorg.
        ls_alv-ekgrp  = ls_bapi-ekgrp.
        ls_alv-bukrs  = ls_bapi-bukrs.
        ls_alv-ebelp = ls_bapi-ebelp.
        ls_alv-matnr  = ls_bapi-matnr.
        ls_alv-message  = 'Po changes are made'.
        APPEND ls_alv TO lt_alv.
        CLEAR ls_alv.

      ELSE.

        LOOP AT  lt_return INTO ls_return WHERE type = 'E'.

          ls_alv-ekorg  = ls_bapi-ekorg.
          ls_alv-ekgrp  = ls_bapi-ekgrp.
          ls_alv-bukrs  = ls_bapi-bukrs.
          ls_alv-ebelp = ls_bapi-ebelp.
          ls_alv-matnr  = ls_bapi-matnr.
          ls_alv-ebeln = 'Changes are already made'.
          ls_alv-message = 'Error'.
          ls_alv-message1 = ls_return-message.

          APPEND ls_alv TO lt_alv.
          CLEAR ls_alv.

        ENDLOOP.
      ENDIF.
      CLEAR : ls_poheader,ls_poheaderx,ls_poitem,ls_poitemx,ls_bapimeposchedule,ls_bapimeposchedulx, ls_return .
      REFRESH : lt_poheader,lt_poheaderx,lt_poitem,lt_poitemx,lt_bapimeposchedule,lt_bapimeposchedulx.
    ENDIF.

    IF NOT lt_alv IS INITIAL.
      lt_alv1[] = lt_alv[].
    ENDIF.
  ENDLOOP.
Read only

0 Likes
3,636

The correct code is:

*=>Item X declartions.
   ls_poitemx-po_item = ls_bapi-ebelp.
   ls_poitemx-po_itemx ='X'.
   .......

Your code is different with my above suggestion.

Read only

0 Likes
3,636

Hi Andy ,

Sorry for coming again. Please see the code below. But however upload excel data's NOT updating in PO screen.

Please advice me.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = lt_bapi
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE 'Please input the correct data' TYPE 'E'.
  ENDIF.


  SELECT ebeln
         ebelp
         etenr INTO TABLE lt_eket FROM eket FOR ALL ENTRIES IN lt_bapi WHERE
                                                            ebeln = lt_bapi-ebeln AND
                                                            ebelp = lt_bapi-ebelp.


  LOOP AT lt_bapi INTO ls_bapi.
* => Header Declarations.
    ls_bapimepoheader-po_number = ls_bapi-ebeln.
    ls_poheader-po_number = ls_bapi-ebeln.
    ls_poheader-purch_org = ls_bapi-ekorg.
    ls_poheader-pur_group = ls_bapi-ekgrp.
    ls_poheader-comp_code = ls_bapi-bukrs.
    APPEND ls_poheader TO lt_poheader.


*=>Header X Declartions.
    ls_poheaderx-po_number = 'X'.
    ls_poheaderx-purch_org = 'X'.
    ls_poheaderx-pur_group = 'X'.
    ls_poheaderx-comp_code = 'X'.
    APPEND ls_poheaderx TO lt_poheaderx.


*  =>Item Declartions.
    ls_poitem-po_item = ls_bapi-ebelp.
    ls_poitem-material = ls_bapi-matnr.
    ls_poitem-plant = ls_bapi-werks.
    ls_poitem-stge_loc = ls_bapi-lgort.
    ls_poitem-quantity = ls_bapi-menge.
    ls_poitem-po_unit = ls_bapi-meins.
    APPEND ls_poitem TO lt_poitem.


*=>Item X declartions.
    ls_poitemx-po_item = ls_bapi-ebelp.
    ls_poitemx-po_item = 'X'.
    ls_poitemx-material = 'X'.
    ls_poitemx-plant = 'X'.
    ls_poitemx-stge_loc = 'X'.
    ls_poitemx-quantity = 'X'.
    ls_poitemx-po_unit = 'X'.
    APPEND ls_poitemx TO lt_poitemx.


* =>Delivery date declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.


    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.
      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.


    ls_bapimeposchedule-delivery_date = ls_bapi-eindt.
    APPEND ls_bapimeposchedule TO lt_bapimeposchedule.


* =>Delivery date X declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.




    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.


      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.
    ls_bapimeposchedulx-po_itemx = 'X'.
    ls_bapimeposchedulx-sched_linex = 'X'.
    ls_bapimeposchedulx-delivery_date = 'X'.
    APPEND ls_bapimeposchedulx TO lt_bapimeposchedulx.


*    BREAK-POINT.
    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder = ls_bapimepoheader-po_number
        poheader      = ls_poheader
        poheaderx     = ls_poheaderx
*  IMPORTING
*       EXPHEADER     =
*       EXPPOEXPIMPHEADER            =
      TABLES
        return        = lt_return
        poitem        = lt_poitem
        poitemx       = lt_poitemx
*       POADDRDELIVERY               =
        poschedule    = lt_bapimeposchedule
        poschedulex   = lt_bapimeposchedulx.


    IF lt_return IS NOT INITIAL.


      LOOP AT lt_return INTO ls_return WHERE type = 'E'.


        ls_alv-ebeln  = ls_bapi-ebeln.
        ls_alv-ekorg  = ls_bapi-ekorg.
        ls_alv-ekgrp  = ls_bapi-ekgrp.
        ls_alv-bukrs  = ls_bapi-bukrs.
        ls_alv-ebelp = ls_bapi-ebelp.
        ls_alv-eindt = ls_bapi-eindt.
        ls_alv-matnr  = ls_bapi-matnr.
        ls_alv-message  = 'Error'.
        APPEND ls_alv TO lt_alv.
        CLEAR ls_alv.
      ENDLOOP.


      IF sy-subrc NE 0.


        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        LOOP AT lt_return INTO ls_return.


          ls_alv-ebeln  = ls_bapi-ebeln.
          ls_alv-ekorg  = ls_bapi-ekorg.
          ls_alv-ekgrp  = ls_bapi-ekgrp.
          ls_alv-bukrs  = ls_bapi-bukrs.
          ls_alv-ebelp = ls_bapi-ebelp.
          ls_alv-eindt = ls_bapi-eindt.
          ls_alv-matnr  = ls_bapi-matnr.


          CASE ls_return-type.
            WHEN 'S'.
              ls_alv-message = 'SUCCESS'.
            WHEN OTHERS.
              ls_alv-message = 'WARNING'.
          ENDCASE.
          ls_alv-message = ls_return-message.
          APPEND ls_alv TO lt_alv.
          CLEAR ls_alv.
        ENDLOOP.
     ENDIF.
     CLEAR : ls_poheader,ls_poheaderx,ls_poitem,ls_poitemx,ls_bapimeposchedule,ls_bapimeposchedulx, ls_return .
      REFRESH : lt_poheader,lt_poheaderx,lt_poitem,lt_poitemx,lt_bapimeposchedule,lt_bapimeposchedulx.
    ENDIF.


    IF NOT lt_alv IS INITIAL.
      lt_alv1[] = lt_alv[].
    ENDIF.
  ENDLOOP.



Read only

3,636

Because your question already have "Best Answer ", you have no problem again.

So, why you still need advice from me?

Read only

0 Likes
3,636

Where did you pass ls_bapimeposchedulx-sched_line-po_item and sched_line?

Read only

0 Likes
3,636

Sorry I didn't get it.

Please explain in briefly it is an urgent.

Thanks,

Senthil.

Read only

0 Likes
3,636

Senthil, as Andy pointed, you need to pass ETENR in schedule line structure. As you do not have ETENR in your excel, pass a constant like 0001 there. Also as you are passing data from excel, I guess there will be multiple PO to change. In that case your code has to change and BAPI call has to be inside the LOOP.

Read only

Sandra_Rossi
Active Contributor
0 Likes
3,636

Don't forget to call BAPI_TRANSACTION_COMMIT to commit the changes.

If the BAPI does not update data, what is important to know are the error message(s) you get in LT_RETURN.

Read only

vipinsaraika
Participant
0 Likes
3,636

Hi Senthil,

The best way to know what to pass in each internal table is to follow the below steps:

  1. Create a manual PO or take the exitsing PO for which you trying to create via the ABAP program.
  2. Pass that PO in Transaction SE37 - BAPI_PO_GETDETAIL
  3. Execute and check the entries populating in each internal table
  4. Compare that with your ABAP program for BAP_PO-CREATE1 and pass the data the same way it was retrieved
  5. This is the best way to create PO using BAPI, it worked for me always for each type of PO scenario I have ever encountered
Read only

divsmart
Participant
0 Likes
3,636

Hi Vipin,

Thanks for response.

I doesn't need to get the data . i need to change the data's in PO screen.

Thanks.

Read only

RaymondGiuseppi
Active Contributor
0 Likes
3,637

Could you look for error before success, coul look like

IF lt_return IS NOT INITIAL. " some messages

  LOOP AT  lt_return INTO ls_return WHERE type = 'E'.

    ls_alv-ekorg    = ls_bapi-ekorg.
    ls_alv-ekgrp    = ls_bapi-ekgrp.
    ls_alv-bukrs    = ls_bapi-bukrs.
    ls_alv-ebelp    = ls_bapi-ebelp.
    ls_alv-matnr    = ls_bapi-matnr.
    ls_alv-ebeln    = ls_bapi-ebeln.
    ls_alv-message  = 'Error'.
    ls_alv-message1 = ls_return-message.
    APPEND ls_alv TO lt_alv.
    CLEAR ls_alv.

  ENDLOOP.

  IF sy-subrc NE 0. " no error

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    LOOP AT  lt_return INTO ls_return.

      ls_alv-ekorg    = ls_bapi-ekorg.
      ls_alv-ekgrp    = ls_bapi-ekgrp.
      ls_alv-bukrs    = ls_bapi-bukrs.
      ls_alv-ebelp    = ls_bapi-ebelp.
      ls_alv-matnr    = ls_bapi-matnr.
      ls_alv-ebeln    = ls_bapi-ebeln.
      CASE ls-return-type.
        WHEN 'S'.
          ls_alv-message  = 'Success'.
        WHEN OTHERS.
          ls_alv-message  = 'Warning'. " e.g. 'no change made..."
      ENDCASE.
      ls_alv-message1 = ls_return-message.
      APPEND ls_alv TO lt_alv.
      CLEAR ls_alv.

    ENDLOOP.

  ENDIF.


Read only

0 Likes
3,636

Hi Raymond,

Thanks for response and Sorry for coming again. I done as advice but my excel file NOT updating in PO screen.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = lt_bapi
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE 'Please input the correct data' TYPE 'E'.
  ENDIF.


  SELECT ebeln
         ebelp
         etenr INTO TABLE lt_eket FROM eket FOR ALL ENTRIES IN lt_bapi WHERE
                                                            ebeln = lt_bapi-ebeln AND
                                                            ebelp = lt_bapi-ebelp.


  LOOP AT lt_bapi INTO ls_bapi.
* => Header Declarations.
    ls_bapimepoheader-po_number = ls_bapi-ebeln.
    ls_poheader-po_number = ls_bapi-ebeln.
    ls_poheader-purch_org = ls_bapi-ekorg.
    ls_poheader-pur_group = ls_bapi-ekgrp.
    ls_poheader-comp_code = ls_bapi-bukrs.
    APPEND ls_poheader TO lt_poheader.


*=>Header X Declartions.
    ls_poheaderx-po_number = 'X'.
    ls_poheaderx-purch_org = 'X'.
    ls_poheaderx-pur_group = 'X'.
    ls_poheaderx-comp_code = 'X'.
    APPEND ls_poheaderx TO lt_poheaderx.


*  =>Item Declartions.
    ls_poitem-po_item = ls_bapi-ebelp.
    ls_poitem-material = ls_bapi-matnr.
    ls_poitem-plant = ls_bapi-werks.
    ls_poitem-stge_loc = ls_bapi-lgort.
    ls_poitem-quantity = ls_bapi-menge.
    ls_poitem-po_unit = ls_bapi-meins.
    APPEND ls_poitem TO lt_poitem.


*=>Item X declartions.
    ls_poitemx-po_item = ls_bapi-ebelp.
    ls_poitemx-po_item = 'X'.
    ls_poitemx-material = 'X'.
    ls_poitemx-plant = 'X'.
    ls_poitemx-stge_loc = 'X'.
    ls_poitemx-quantity = 'X'.
    ls_poitemx-po_unit = 'X'.
    APPEND ls_poitemx TO lt_poitemx.


* =>Delivery date declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.


    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.
      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.


    ls_bapimeposchedule-delivery_date = ls_bapi-eindt.
    APPEND ls_bapimeposchedule TO lt_bapimeposchedule.


* =>Delivery date X declarations.
    ls_bapimeposchedule-po_item = ls_bapi-ebelp.




    READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_bapi-ebeln
                                             ebelp = ls_bapi-ebelp.
    IF sy-subrc = 0.


      ls_bapimeposchedule-sched_line = ls_eket-etenr.
    ENDIF.
    ls_bapimeposchedulx-po_itemx = 'X'.
    ls_bapimeposchedulx-sched_linex = 'X'.
    ls_bapimeposchedulx-delivery_date = 'X'.
    APPEND ls_bapimeposchedulx TO lt_bapimeposchedulx.


*    BREAK-POINT.
    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        purchaseorder = ls_bapimepoheader-po_number
        poheader      = ls_poheader
        poheaderx     = ls_poheaderx
*  IMPORTING
*       EXPHEADER     =
*       EXPPOEXPIMPHEADER            =
      TABLES
        return        = lt_return
        poitem        = lt_poitem
        poitemx       = lt_poitemx
*       POADDRDELIVERY               =
        poschedule    = lt_bapimeposchedule
        poschedulex   = lt_bapimeposchedulx.


    IF lt_return IS NOT INITIAL.


      LOOP AT lt_return INTO ls_return WHERE type = 'E'.


        ls_alv-ebeln  = ls_bapi-ebeln.
        ls_alv-ekorg  = ls_bapi-ekorg.
        ls_alv-ekgrp  = ls_bapi-ekgrp.
        ls_alv-bukrs  = ls_bapi-bukrs.
        ls_alv-ebelp = ls_bapi-ebelp.
        ls_alv-eindt = ls_bapi-eindt.
        ls_alv-matnr  = ls_bapi-matnr.
        ls_alv-message  = 'Error'.
        APPEND ls_alv TO lt_alv.
        CLEAR ls_alv.
      ENDLOOP.


      IF sy-subrc NE 0.


        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        LOOP AT lt_return INTO ls_return.


          ls_alv-ebeln  = ls_bapi-ebeln.
          ls_alv-ekorg  = ls_bapi-ekorg.
          ls_alv-ekgrp  = ls_bapi-ekgrp.
          ls_alv-bukrs  = ls_bapi-bukrs.
          ls_alv-ebelp = ls_bapi-ebelp.
          ls_alv-eindt = ls_bapi-eindt.
          ls_alv-matnr  = ls_bapi-matnr.


          CASE ls_return-type.
            WHEN 'S'.
              ls_alv-message = 'SUCCESS'.
            WHEN OTHERS.
              ls_alv-message = 'WARNING'.
          ENDCASE.
          ls_alv-message = ls_return-message.
          APPEND ls_alv TO lt_alv.
          CLEAR ls_alv.
        ENDLOOP.
     ENDIF.
     CLEAR : ls_poheader,ls_poheaderx,ls_poitem,ls_poitemx,ls_bapimeposchedule,ls_bapimeposchedulx, ls_return .
      REFRESH : lt_poheader,lt_poheaderx,lt_poitem,lt_poitemx,lt_bapimeposchedule,lt_bapimeposchedulx.
    ENDIF.


    IF NOT lt_alv IS INITIAL.
      lt_alv1[] = lt_alv[].
    ENDIF.
  ENDLOOP.