Application Development 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: 

Change item text in purchase order

Former Member
0 Kudos

Hi folks,

I'm trying to change some item text in the purchase order through the BAPI_PO_CHANGE

with the following test code:

REPORT zprueba_bapi_po_change.

DATA:
  itab_text LIKE TABLE OF bapiekpotx,
  wa_text   LIKE bapiekpotx,
  itab_lines LIKE TABLE OF tline,
  wa_lines   LIKE tline,
  itab_items LIKE TABLE OF BAPIEKPO,
  wa_items   LIKE BAPIEKPO.

DATA: name LIKE thead-tdname,
      id   LIKE thead-tdid,
      object LIKE thead-tdobject,
      v_result LIKE itcer.

DATA: itab_return LIKE TABLE OF BAPIRET2.

data: poorder like BAPIEKKO-PO_NUMBER.

poorder = '4500058923'.

CALL FUNCTION 'BAPI_PO_GETDETAIL'
  EXPORTING
    purchaseorder                    = poorder
   ITEMS                            = 'X'
*   ACCOUNT_ASSIGNMENT               = ' '
*   SCHEDULES                        = ' '
*   HISTORY                          = ' '
   item_texts                       = 'X'
*   HEADER_TEXTS                     = ' '
*   SERVICES                         = ' '
*   CONFIRMATIONS                    = ' '
*   SERVICE_TEXTS                    = ' '
*   EXTENSIONS                       = ' '
* IMPORTING
*   PO_HEADER                        =
*   PO_ADDRESS                       =
 TABLES
*   PO_HEADER_TEXTS                  =
   PO_ITEMS                         = itab_items
*   PO_ITEM_ACCOUNT_ASSIGNMENT       =
*   PO_ITEM_SCHEDULES                =
*   PO_ITEM_CONFIRMATIONS            =
   po_item_texts                    = itab_text
*   PO_ITEM_HISTORY                  =
*   PO_ITEM_HISTORY_TOTALS           =
*   PO_ITEM_LIMITS                   =
*   PO_ITEM_CONTRACT_LIMITS          =
*   PO_ITEM_SERVICES                 =
*   PO_ITEM_SRV_ACCASS_VALUES        =
*   RETURN                           =
*   PO_SERVICES_TEXTS                =
*   EXTENSIONOUT                     =
          .


COMMIT WORK AND WAIT.

name = '600007545900001'.
id = 'A01'.
object = 'EKPO'.

CALL FUNCTION 'READ_TEXT'
  EXPORTING
*   CLIENT                        = SY-MANDT
    id                            = id
    language                      = sy-langu
    name                          = name
    object                        = object
*   ARCHIVE_HANDLE                = 0
*   LOCAL_CAT                     = ' '
* IMPORTING
*   HEADER                        =
  TABLES
    lines                         = itab_lines
* EXCEPTIONS
*   ID                            = 1
*   LANGUAGE                      = 2
*   NAME                          = 3
*   NOT_FOUND                     = 4
*   OBJECT                        = 5
*   REFERENCE_CHECK               = 6
*   WRONG_ACCESS_TO_ARCHIVE       = 7
*   OTHERS                        = 8
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

LOOP AT itab_lines INTO wa_lines.
  CLEAR wa_text.
  wa_text-po_number = poorder.
  wa_text-po_item = '00001'.
  wa_text-text_form = wa_lines-tdformat.
  wa_text-text_line = wa_lines-tdline.
  wa_text-text_id = 'F03'.
  APPEND wa_text TO itab_text.
ENDLOOP.

SORT itab_text BY po_item text_id.

CALL FUNCTION 'BAPI_PO_CHANGE'
  EXPORTING
    purchaseorder                = poorder
*   POHEADER                     =
*   POHEADERX                    =
*   POADDRVENDOR                 =
*   TESTRUN                      =
*   MEMORY_UNCOMPLETE            =
*   MEMORY_COMPLETE              =
*   NO_MESSAGING                 =
*   NO_MESSAGE_REQ               =
*   NO_AUTHORITY                 =
*   NO_PRICE_FROM_PO             =
* IMPORTING
*   EXPHEADER                    =
TABLES
   RETURN                       = itab_return
*   POITEM                       =
*   POITEMX                      =
*   POADDRDELIVERY               =
*   POSCHEDULE                   =
*   POSCHEDULEX                  =
*   POACCOUNT                    =
*   POACCOUNTPROFITSEGMENT       =
*   POACCOUNTX                   =
*   POCONDHEADER                 =
*   POCONDHEADERX                =
*   POCOND                       =
*   POCONDX                      =
*   POLIMITS                     =
*   POCONTRACTLIMITS             =
*   POSERVICES                   =
*   POSRVACCESSVALUES            =
*   POSERVICESTEXT               =
*   EXTENSIONIN                  =
*   EXTENSIONOUT                 =
*   POTEXTHEADER                 =
   POTEXTITEM                   = itab_text
*   POPARTNER                    =
          .
COMMIT WORK AND WAIT.

However this code isn't updating the text. Does anyone could tell me what i'm missing?

Thanks for your help.

Kind Regards,

Gilberto Li

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Please check this code..It worked for me..Instead of 00001 try giving 00010

PARAMETERS: p_ebeln TYPE ebeln OBLIGATORY.

PARAMETERS: p_text(50) OBLIGATORY.

PARAMETERS: p_textid TYPE bapimepotext-text_id OBLIGATORY.

DATA:

lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,

lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,

lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,

lt_bapi_itemtext LIKE bapimepotext OCCURS 0 WITH HEADER LINE.

<b>lt_poitem-po_item = '00010'.</b>

APPEND lt_poitem.

<b>lt_poitem-po_item = '00010'.</b>

APPEND lt_poitem.

lt_bapi_itemtext-po_number = p_ebeln.

<b>lt_bapi_itemtext-po_item = '00010'.</b>

lt_bapi_itemtext-text_id = p_textid.

lt_bapi_itemtext-text_line = p_text.

APPEND lt_bapi_itemtext.

  • call the BAPI.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = p_ebeln

TABLES

return = lt_return

poitem = lt_poitem

poitemx = lt_poitemx

potextitem = lt_bapi_itemtext.

LOOP AT lt_return WHERE type = 'A' OR type = 'E'.

EXIT.

ENDLOOP.

IF sy-subrc = 0.

WRITE: / 'Error'.

ELSE.

COMMIT WORK.

WRITE: / 'Success'.

ENDIF.

Thanks,

Naren

7 REPLIES 7

Former Member
0 Kudos

Please use BAPI COMMIT .. instead of commit work.

It will work.

Point reward. If answer is helpful.

Kannu.

Former Member
0 Kudos

Hi,

Pass the PO_ITEM and PO_ITEMX in the BAPI_PO_CHANGE.

DATA: lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,

lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,

  • Populate the PO item

LT_POITEM-po_item = '00001'.

APPEND lt_poitem.

  • Populate the PO item X.

LT_POITEMX-po_item = '00001'.

APPEND lt_poitemX.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = poorder

TABLES

RETURN = itab_return

<b> POITEM = LT_POITEM

POITEMX = LT_POITEMX</b>

POTEXTITEM = itab_text

.

COMMIT WORK AND WAIT.

Thanks,

Naren

Former Member
0 Kudos

Gilberto

Try using BAPI Transaction commit.

By the way, if you do a BAPI_PO_GETDETAILS, can you see your text? or Please check the 'Material text' label in PO item details

I called the BAPI from SE37 and it is working perfectly. I filled the following parms,

1) Purchase order number

2) POTEXTITEM - PO_number, PO_item, PO-text id = 'F03' and Format - "*"

My program works with commit wait and return too,

poorder = '4700002503'.

wa_text-po_number = poorder.

wa_text-po_item = '00001'.

wa_text-text_form = '*'.

wa_text-text_id = 'F03'.

wa_text-text_line = 'eXTENSIVE CHANGES to bapi'.

APPEND wa_text TO itab_text.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = poorder

TABLES

RETURN = itab_return

POTEXTITEM = itab_text

.

COMMIT WORK AND WAIT.

Former Member
0 Kudos

Hi Gilberto,

Use the FM SAVE_TEXT instead of 'BAPI_PO_CHANGE' and pass itab_text into it.

Reward points if found useful...!

Cheers

Abhishek

0 Kudos

Hi Folks,

I've tried changing to bapi_transaction_commit and adding the poitem and poitemx tables to the BAPI still didn't work.

I think I will have to try the save_text way.

More suggestions are welcome.

Thanks for your help guys.

Kind Regards,

Gilberto Li

Message was edited by:

Gilberto Li

Former Member
0 Kudos

Hi,

Please check this code..It worked for me..Instead of 00001 try giving 00010

PARAMETERS: p_ebeln TYPE ebeln OBLIGATORY.

PARAMETERS: p_text(50) OBLIGATORY.

PARAMETERS: p_textid TYPE bapimepotext-text_id OBLIGATORY.

DATA:

lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,

lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,

lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,

lt_bapi_itemtext LIKE bapimepotext OCCURS 0 WITH HEADER LINE.

<b>lt_poitem-po_item = '00010'.</b>

APPEND lt_poitem.

<b>lt_poitem-po_item = '00010'.</b>

APPEND lt_poitem.

lt_bapi_itemtext-po_number = p_ebeln.

<b>lt_bapi_itemtext-po_item = '00010'.</b>

lt_bapi_itemtext-text_id = p_textid.

lt_bapi_itemtext-text_line = p_text.

APPEND lt_bapi_itemtext.

  • call the BAPI.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = p_ebeln

TABLES

return = lt_return

poitem = lt_poitem

poitemx = lt_poitemx

potextitem = lt_bapi_itemtext.

LOOP AT lt_return WHERE type = 'A' OR type = 'E'.

EXIT.

ENDLOOP.

IF sy-subrc = 0.

WRITE: / 'Error'.

ELSE.

COMMIT WORK.

WRITE: / 'Success'.

ENDIF.

Thanks,

Naren

Former Member
0 Kudos

Hi again,

Naren, i've checked your code however I found that my problem was some budget issues that didn't let the BAPI execute correctly. Still I really appreciate everyone's help.

Thanks again.

Kind Regards,

Gilberto Li