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

How to create a Purchase order using BAPI's...?

Former Member
0 Likes
1,903

Hi All,

I have to create a Purchase order using BAPI's.Could you please let me know the steps to be followed?

What all the difficulties we've to face while creating P.O ?

If u have the code pls send it to me with all the explanation.It will be more helpfulto me.

Which function module should i've to use BAPI_PO_CREATE or BAPI_PO_CREATE1 ?

Thanking You.

Regards,

Nagarjuna.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
933

&----


*& Report ZBAPI_CREATE_PO *

*& *

&----


REPORT ZBAPI_CREATE_PO .

&----


*DATA DECLARATION

CONSTANTS : C_X VALUE 'X'.

*Structures to hold PO header data

DATA : HEADER LIKE BAPIMEPOHEADER ,

HEADERX LIKE BAPIMEPOHEADERX .

*Internal Tables to hold PO ITEM DATA

DATA : ITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,

ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,

**Internal table to hold messages from BAPI call

RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

data : w_header(40) value 'PO Header'.

data : ws_langu like sy-langu.

data: V_EXPPURCHASEORDER like BAPIMEPOHEADER-PO_NUMBER.

*text-001 = 'PO Header' - define as text element

selection-screen begin of block b1 with frame title text-001.

parameters : company like header-comp_code default '1000' ,

doctyp like HEADER-DOC_TYPE default 'NB' ,

cdate like HEADER-CREAT_DATE default sy-datum ,

vendor like HEADER-VENDOR default 'RAJ',

pur_org like HEADER-PURCH_ORG default '0001' ,

pur_grp like HEADER-PUR_GROUP default '001' .

selection-screen end of block b1.

selection-screen begin of block b2 with frame title text-002.

parameters : item_num like ITEM-PO_ITEM default '00020',

material like ITEM-MATERIAL default 'M-127' ,

plant like ITEM-PLANT default '0001' ,

quantity like ITEM-QUANTITY default 200.

selection-screen end of block b2.

*&----


**START-OF-SELECTION.

*&----


**DATA POPULATION

*&----


ws_langu = sy-langu. "Language variable

*POPULATE HEADER DATA FOR PO

HEADER-COMP_CODE = company .

HEADER-DOC_TYPE = doctyp .

HEADER-CREAT_DATE = cdate .

HEADER-VENDOR = vendor .

HEADER-LANGU = ws_langu .

HEADER-PURCH_ORG = pur_org .

HEADER-PUR_GROUP = pur_grp .

&----


*POPULATE HEADER FLAG.

&----


HEADERX-comp_code = c_x.

HEADERX-doc_type = c_x.

HEADERX-creat_date = c_x.

HEADERX-vendor = c_x.

HEADERX-langu = c_x.

HEADERX-purch_org = c_x.

HEADERX-pur_group = c_x.

*HEADERX-doc_date = c_x.

&----


*POPULATE ITEM DATA.

&----


ITEM-PO_ITEM = item_num.

ITEM-MATERIAL = material.

ITEM-PLANT = plant.

ITEM-QUANTITY = quantity.

APPEND ITEM.

&----


*POPULATE ITEM FLAG TABLE

&----


ITEMX-PO_ITEM = item_num.

ITEMX-MATERIAL = C_X.

ITEMX-PLANT = C_X .

*ITEMX-STGE_LOC = C_X .

ITEMX-QUANTITY = C_X .

*ITEMX-TAX_CODE = C_X .

*ITEMX-ITEM_CAT = C_X .

*ITEMX-ACCTASSCAT = C_X .

APPEND ITEMX.

&----


*BAPI CALL

&----


CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

POHEADER = HEADER

POHEADERX = HEADERX

POADDRVENDOR =

TESTRUN =

IMPORTING

EXPPURCHASEORDER = V_EXPPURCHASEORDER

EXPHEADER =

EXPPOEXPIMPHEADER =

TABLES

RETURN = RETURN

POITEM = ITEM

POITEMX = ITEMX.

&----


*Confirm the document creation by calling database COMMIT

&----


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'

IMPORTING

RETURN =

.

end-of-selection.

***&----


****Output the messages returned from BAPI call

***&----


*LOOP AT RETURN.

WRITE / v_EXPPURCHASEORDER.

*ENDLOOP.

cheers,

Hi All,

I have to create a Purchase order using BAPI's.Could you please let me know the steps to be followed?

What all the difficulties we've to face while creating P.O ?

If u have the code pls send it to me with all the explanation.It will be more helpfulto me.

Which function module should i've to use BAPI_PO_CREATE or BAPI_PO_CREATE1 ?

Thanking You.

Regards,

Nagarjuna.

4 REPLIES 4
Read only

Former Member
0 Likes
934

&----


*& Report ZBAPI_CREATE_PO *

*& *

&----


REPORT ZBAPI_CREATE_PO .

&----


*DATA DECLARATION

CONSTANTS : C_X VALUE 'X'.

*Structures to hold PO header data

DATA : HEADER LIKE BAPIMEPOHEADER ,

HEADERX LIKE BAPIMEPOHEADERX .

*Internal Tables to hold PO ITEM DATA

DATA : ITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,

ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,

**Internal table to hold messages from BAPI call

RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

data : w_header(40) value 'PO Header'.

data : ws_langu like sy-langu.

data: V_EXPPURCHASEORDER like BAPIMEPOHEADER-PO_NUMBER.

*text-001 = 'PO Header' - define as text element

selection-screen begin of block b1 with frame title text-001.

parameters : company like header-comp_code default '1000' ,

doctyp like HEADER-DOC_TYPE default 'NB' ,

cdate like HEADER-CREAT_DATE default sy-datum ,

vendor like HEADER-VENDOR default 'RAJ',

pur_org like HEADER-PURCH_ORG default '0001' ,

pur_grp like HEADER-PUR_GROUP default '001' .

selection-screen end of block b1.

selection-screen begin of block b2 with frame title text-002.

parameters : item_num like ITEM-PO_ITEM default '00020',

material like ITEM-MATERIAL default 'M-127' ,

plant like ITEM-PLANT default '0001' ,

quantity like ITEM-QUANTITY default 200.

selection-screen end of block b2.

*&----


**START-OF-SELECTION.

*&----


**DATA POPULATION

*&----


ws_langu = sy-langu. "Language variable

*POPULATE HEADER DATA FOR PO

HEADER-COMP_CODE = company .

HEADER-DOC_TYPE = doctyp .

HEADER-CREAT_DATE = cdate .

HEADER-VENDOR = vendor .

HEADER-LANGU = ws_langu .

HEADER-PURCH_ORG = pur_org .

HEADER-PUR_GROUP = pur_grp .

&----


*POPULATE HEADER FLAG.

&----


HEADERX-comp_code = c_x.

HEADERX-doc_type = c_x.

HEADERX-creat_date = c_x.

HEADERX-vendor = c_x.

HEADERX-langu = c_x.

HEADERX-purch_org = c_x.

HEADERX-pur_group = c_x.

*HEADERX-doc_date = c_x.

&----


*POPULATE ITEM DATA.

&----


ITEM-PO_ITEM = item_num.

ITEM-MATERIAL = material.

ITEM-PLANT = plant.

ITEM-QUANTITY = quantity.

APPEND ITEM.

&----


*POPULATE ITEM FLAG TABLE

&----


ITEMX-PO_ITEM = item_num.

ITEMX-MATERIAL = C_X.

ITEMX-PLANT = C_X .

*ITEMX-STGE_LOC = C_X .

ITEMX-QUANTITY = C_X .

*ITEMX-TAX_CODE = C_X .

*ITEMX-ITEM_CAT = C_X .

*ITEMX-ACCTASSCAT = C_X .

APPEND ITEMX.

&----


*BAPI CALL

&----


CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

POHEADER = HEADER

POHEADERX = HEADERX

POADDRVENDOR =

TESTRUN =

IMPORTING

EXPPURCHASEORDER = V_EXPPURCHASEORDER

EXPHEADER =

EXPPOEXPIMPHEADER =

TABLES

RETURN = RETURN

POITEM = ITEM

POITEMX = ITEMX.

&----


*Confirm the document creation by calling database COMMIT

&----


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'

IMPORTING

RETURN =

.

end-of-selection.

***&----


****Output the messages returned from BAPI call

***&----


*LOOP AT RETURN.

WRITE / v_EXPPURCHASEORDER.

*ENDLOOP.

cheers,

Read only

Former Member
0 Likes
933

BAPI_PO_CREATE is for normal tcode me21

BAPI_PO_CREATE1 is for njoy tcodes me21n.

CALL FUNCTION 'BAPI_PO_CREATE'

EXPORTING

PO_HEADER = PO_HEADER

PO_HEADER_ADD_DATA = PO_HEADER_ADD_DATA

HEADER_ADD_DATA_RELEVANT = HEADER_ADD_DATA_RELEVANT

PO_ADDRESS = PO_ADDRESS

SKIP_ITEMS_WITH_ERROR = SKIP_ITEMS_WITH_ERROR

ITEM_ADD_DATA_RELEVANT = ITEM_ADD_DATA_RELEVANT

IMPORTING

PURCHASEORDER = PURCHASEORDER

TABLES

PO_ITEMS = PO_ITEMS

PO_ITEM_ADD_DATA = PO_ITEM_ADD_DATA

PO_ITEM_SCHEDULES = PO_ITEM_SCHEDULES

PO_ITEM_ACCOUNT_ASSIGNMENT = PO_ITEM_ACCOUNT_ASSIGNMENT

PO_ITEM_TEXT = PO_ITEM_TEXT

RETURN = RETURN

PO_LIMITS = PO_LIMITS

PO_CONTRACT_LIMITS = PO_CONTRACT_LIMITS

PO_SERVICES = PO_SERVICES

PO_SRV_ACCASS_VALUES = PO_SRV_ACCASS_VALUES

PO_SERVICES_TEXT = PO_SERVICES_TEXT

PO_BUSINESS_PARTNER = PO_BUSINESS_PARTNER

EXTENSIONIN = EXTENSIONIN

POADDRDELIVERY = POADDRDELIVERY

EXCEPTIONS

OTHERS = 1.

Reward if useful.

Dara.

Read only

Former Member
0 Likes
933

Hi ,

Please refer the coding below.

  • PO header

WA_POHEADER-COMP_CODE = C_CODE.

WA_POHEADER-DOC_TYPE = C_DTYP.

WA_POHEADER-VENDOR = WA_HEADER_PO-LIFNR.

WA_POHEADER-PURCH_ORG = C_ORG.

WA_POHEADER-PUR_GROUP = C_GRP.

WA_POHEADER-REF_1 = WA_HEADER_PO-TRCNO.

WA_POHEADER-SALES_PERS = WA_HEADER_PO-DRVER.

  • PO Header update

WA_POHEADERX-COMP_CODE = C_ATX.

WA_POHEADERX-DOC_TYPE = C_ATX.

WA_POHEADERX-VENDOR = C_ATX.

WA_POHEADERX-PURCH_ORG = C_ATX.

WA_POHEADERX-PUR_GROUP = C_ATX.

WA_POHEADERX-REF_1 = C_ATX.

WA_POHEADERX-SALES_PERS = C_ATX.

  • PO Item

WA_POITEM-PO_ITEM = C_ITEM.

WA_POITEM-MATERIAL = C_MATL.

WA_POITEM-PLANT = C_PLNT.

WA_POITEM-QUANTITY = C_QTY.

WA_POITEM-NET_PRICE = C_NPR.

WA_POITEM-ACCTASSCAT = C_ASI.

APPEND WA_POITEM TO T_POITEM.

  • PO item update

WA_POITEMX-PO_ITEM = C_ITEM.

WA_POITEMX-PO_ITEMX = C_ATX.

WA_POITEMX-MATERIAL = C_ATX.

WA_POITEMX-PLANT = C_ATX.

WA_POITEMX-QUANTITY = C_ATX.

WA_POITEMX-NET_PRICE = C_ATX.

WA_POITEMX-ACCTASSCAT = C_ATX.

APPEND WA_POITEMX TO T_POITEMX.

  • PO schdule item

WA_POSCHEDULE-PO_ITEM = C_ITEM.

WA_POSCHEDULE-SCHED_LINE = C_SCLN.

WA_POSCHEDULE-QUANTITY = C_QTY.

APPEND WA_POSCHEDULE TO T_POSCHEDULE.

  • PO schdule item update

WA_POSCHEDULX-PO_ITEM = C_ITEM.

WA_POSCHEDULX-SCHED_LINE = C_SCLN.

WA_POSCHEDULX-PO_ITEMX = C_ATX.

WA_POSCHEDULX-SCHED_LINEX = C_ATX.

WA_POSCHEDULX-QUANTITY = C_ATX.

APPEND WA_POSCHEDULX TO T_POSCHEDULX.

  • PO condition

WA_POCOND-ITM_NUMBER = C_ITEM.

WA_POCOND-COND_ST_NO = C_COIT.

WA_POCOND-COND_TYPE = C_CTYP.

WA_POCOND-COND_VALUE = C_NPR.

APPEND WA_POCOND TO T_POCOND.

  • PO condition update

WA_POCONDX-ITM_NUMBER = C_ITEM.

WA_POCONDX-COND_ST_NO = C_COIT.

WA_POCONDX-ITM_NUMBERX = C_ATX.

WA_POCONDX-COND_ST_NOX = C_ATX.

WA_POCONDX-COND_TYPE = C_ATX.

WA_POCONDX-COND_VALUE = C_ATX.

APPEND WA_POCONDX TO T_POCONDX.

  • PO account

WA_POACCOUNT-PO_ITEM = C_ITEM.

WA_POACCOUNT-COSTCENTER = C_CCTR.

APPEND WA_POACCOUNT TO T_POACCOUNT.

  • PO account update

WA_POACCOUNTX-PO_ITEM = C_ITEM.

WA_POACCOUNTX-COSTCENTER = C_ATX.

APPEND WA_POACCOUNTX TO T_POACCOUNTX.

PERFORM CREATE_PO.

CLEAR : WA_POHEADER,

WA_POHEADERX,

WA_POITEM,

WA_POITEMX,

WA_POSCHEDULE,

WA_POSCHEDULX,

WA_POACCOUNT,

WA_POACCOUNTX.

CLEAR : T_POHEADER,

T_POHEADERX,

T_POITEM,

T_POITEMX,

T_POSCHEDULE,

T_POSCHEDULX,

T_POACCOUNT,

T_POACCOUNTX.

ENDLOOP.

ENDFORM. " POPULATE

&----


*& Form CREATE_PO

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM CREATE_PO .

  • Create PO with the combination of vendor and truck number

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

POHEADER = WA_POHEADER

POHEADERX = WA_POHEADERX

IMPORTING

EXPPURCHASEORDER = EX_PO_NUMBER

TABLES

RETURN = T_RETURN

POITEM = T_POITEM

POITEMX = T_POITEMX

POSCHEDULE = T_POSCHEDULE

POSCHEDULEX = T_POSCHEDULX

  • POCONDHEADER = T_POCONDHEADER

  • POCONDHEADERX = T_POCONDHEADERX

  • POCOND = T_POCOND

  • POCONDX = T_POCONDX

POACCOUNT = T_POACCOUNT

POACCOUNTX = T_POACCOUNTX

.

IF EX_PO_NUMBER IS NOT INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

  • IF DETAIL EQ 'X'.

  • PERFORM SHOW_RESULT.

  • ELSE.

WRITE 😕 'THE PURCHASE ORDER DOCUMENT IS : ', EX_PO_NUMBER.

  • ENDIF.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

  • IF DETAIL EQ 'X'.

  • PERFORM SHOW_RESULT.

  • ELSE.

WRITE 😕 'THE PURCHASE ORDER DOCUMENT IS NOT GENERATED '.

  • ENDIF.

ENDIF.

ENDFORM. " CREATE_PO

Regards

Raj.K

Read only

Former Member
0 Likes
933

Hi,

Refer the blog

/people/sap.user72/blog/2005/03/22/sample-code-to-create-purchase-order-using-bapi-in-r3

Regards

Kiran Sure