cancel
Showing results for 
Search instead for 
Did you mean: 

BAPI_PO_CREATE1 example

Former Member
0 Kudos

*&----


*

*& Report ZCHARLI *

*& *

*&----


*

*& *

*& *

*&----


*

*& *

*&----


*

*& Program demonstrates the BAPI call to create Purchase Order *

*& Minimum required parameters are used are as per the current *

*& system configuration *

*&----


*

REPORT ZBAPI_CREATE_PO .

*&----


*

*DATA DECLARATION

CONSTANTS : C_X VALUE 'X'.

*Structures to hold PO header data

DATA : HEADER LIKE BAPIMEPOHEADER ,

HEADERX LIKE BAPIMEPOHEADERX .

*Structures to hold PO account data

DATA : ACCOUNT LIKE BAPIMEPOACCOUNT OCCURS 0 WITH HEADER LINE ,

ACCOUNTX LIKE BAPIMEPOACCOUNTX OCCURS 0 WITH HEADER LINE .

*Structures to hold PO schedule data

DATA : ITEMSCHEDULE LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE ,

ITEMSCHEDULEX LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE .

*Structures to hold PO (distrib.imputac.lín.servicios) data

DATA : POSRVACCESSVALUES LIKE BAPIESKLC OCCURS 0 WITH HEADER LINE .

*Structures to hold PO services data

DATA : SERVICES LIKE BAPIESLLC OCCURS 0 WITH HEADER LINE .

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

*Internal table to hold messages from BAPI call

POCONTRACTLIMITS LIKE BAPIESUCC OCCURS 0 WITH HEADER LINE.

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

PURCHASEORDER LIKE BAPIMEPOHEADER-PO_NUMBER,

DELIVERY_DATE LIKE BAPIMEPOSCHEDULE-DELIVERY_DATE.

data : ws_langu like sy-langu.

*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 'PM' ,

cdate like HEADER-CREAT_DATE default sy-datum ,

vendor like HEADER-VENDOR default '100006' ,

pur_org like HEADER-PURCH_ORG default '1000' ,

pur_grp like HEADER-PUR_GROUP default '850' ,

sociedad like HEADER-COMP_CODE default '1000' ,

vendedor like HEADER-SALES_PERS default 'Wilda Messina'.

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 '00010',

material like ITEM-MATERIAL default 'CRANE' ,

tipo_imp like ITEM-ACCTASSCAT default 'K' ,

pos_doc like ITEM-ITEM_CAT default 'F' ,

shorttxt like ITEM-SHORT_TEXT default 'PRUEBA BAPI' ,

grup_art like ITEM-MATL_GROUP default '350001' ,

plant like ITEM-PLANT default '1000' ,

mpe like ITEM-TRACKINGNO default '9999' ,

contrato like ITEM-AGREEMENT default '4904000003' ,

quantity like ITEM-QUANTITY default 1 .

  • po_unit like ITEM-PO_UNIT default 'UP'.

selection-screen end of block b2.

  • Parámnetros para los servicios

selection-screen begin of block b3 with frame title text-003.

parameters : paquete like SERVICES-PCKG_NO default '956',

numlinin like SERVICES-LINE_NO default '9' ,

numlinea like SERVICES-EXT_LINE default '80',

service like SERVICES-SERVICE default '8010',

srv_cant like SERVICES-quantity default '5' ,

precio like SERVICES-GR_PRICE default '300' ,

impuesto like SERVICES-TAX_CODE default 'I2' .

selection-screen end of block b3.

  • Parámnetros de imputación

selection-screen begin of block b4 with frame title text-004.

parameters : centro like ACCOUNT-COSTCENTER default '120100',

cuenta like ACCOUNT-GL_ACCOUNT default '6501002000' ,

num_pos like ACCOUNT-PO_ITEM default '10' ,

serial like ACCOUNT-SERIAL_NO default '01' ,

ind_imp like ACCOUNT-TAX_CODE default 'I2' .

selection-screen end of block b4.

*&----


*

START-OF-SELECTION.

*&----


*

*DATA POPULATION

*&----


*

ws_langu = sy-langu. "Language variable

*POPULATE HEADER DATA FOR PO

HEADER-COMP_CODE = sociedad .

HEADER-DOC_TYPE = doctyp .

HEADER-VENDOR = vendor .

HEADER-CREAT_DATE = cdate .

HEADER-CREATED_BY = 'TD17191' .

HEADER-PURCH_ORG = pur_org .

HEADER-PUR_GROUP = pur_grp .

HEADER-COMP_CODE = company .

HEADER-LANGU = ws_langu .

HEADER-SALES_PERS = vendedor .

HEADER-CURRENCY = 'DOP' .

*HEADER-ITEM_INTVL = 10 .

*HEADER-PMNTTRMS = 'N30' .

*HEADER-EXCH_RATE = 1 .

*&----


*

*POPULATE HEADER FLAG.

*&----


*

HEADERX-comp_code = c_x.

HEADERX-doc_type = c_x.

HEADERX-vendor = c_x.

HEADERX-creat_date = c_x.

HEADERX-created_by = c_x.

HEADERX-purch_org = c_x.

HEADERX-pur_group = c_x.

HEADERX-langu = c_x.

HEADERX-sales_pers = c_x.

HEADERX-CURRENCY = c_x.

*HEADER-ITEM_INTVL = c_x.

*HEADER-PMNTTRMS = c_x.

*HEADER-EXCH_RATE = c_x.

*HEADER-EXCH_RATE = c_x.

*&----


*

*POPULATE ITEM DATA.

*&----


*

ITEM-PO_ITEM = '10'.

ITEM-QUANTITY = '1'.

*ITEM-MATERIAL = material .

ITEM-SHORT_TEXT = 'prueba bapi_po_create1'.

ITEM-TAX_CODE = 'I2'.

ITEM-ACCTASSCAT = 'K' .

ITEM-ITEM_CAT = 'F' .

ITEM-MATL_GROUP = '350001' .

ITEM-PLANT = '1000' .

ITEM-TRACKINGNO = '99999'.

ITEM-AGREEMENT = '4904000004' .

ITEM-AGMT_ITEM = '0010'.

ITEM-QUANTITY = '1' .

ITEM-PO_UNIT = 'UP'.

*ITEM-ORDERPR_UN = 'UP'.

ITEM-CONV_NUM1 = '1'.

ITEM-CONV_DEN1 = '1'.

ITEM-NET_PRICE = '1000000' .

ITEM-PRICE_UNIT = '1'.

ITEM-GR_PR_TIME = '0'.

ITEM-PRNT_PRICE = 'X'.

ITEM-UNLIMITED_DLV = 'X'.

ITEM-GR_IND = 'X' .

ITEM-IR_IND = 'X' .

ITEM-GR_BASEDIV = 'X'.

ITEM-PCKG_NO = '2748' .

APPEND ITEM. CLEAR ITEM.

*&----


*

*POPULATE ITEM FLAG TABLE

*&----


*

ITEMX-PO_ITEM = item_num.

ITEMX-PO_ITEMX = c_x.

*ITEMX-MATERIAL = C_X.

ITEMX-SHORT_TEXT = C_X.

ITEMX-QUANTITY = C_X.

ITEMX-TAX_CODE = C_X.

ITEMX-ACCTASSCAT = C_X.

ITEMX-ITEM_CAT = c_x.

ITEMX-MATL_GROUP = C_X.

ITEMX-PLANT = C_X.

ITEMX-TRACKINGNO = C_X.

ITEMX-AGREEMENT = C_X.

ITEMX-AGMT_ITEM = c_x.

ITEMX-STGE_LOC = C_X.

ITEMX-QUANTITY = C_X.

ITEMX-PO_UNIT = C_X.

*ITEMX-ORDERPR_UN = C_X.

ITEMX-CONV_NUM1 = C_X.

ITEMX-CONV_DEN1 = C_X.

ITEMX-NET_PRICE = C_X.

ITEMX-PRICE_UNIT = C_X.

ITEMX-GR_PR_TIME = C_X.

ITEMX-PRNT_PRICE = C_X.

ITEMX-UNLIMITED_DLV = C_X.

ITEMX-GR_IND = C_X .

ITEMX-IR_IND = C_X .

ITEMX-GR_BASEDIV = C_X .

ITEMX-PCKG_NO = C_X.

APPEND ITEMX. CLEAR ITEMX.

*&----


*

*POPULATE ITEM SCHEDULE DATA.

*&----


*

ITEMSCHEDULE-PO_ITEM = '00010'.

ITEMSCHEDULE-DEL_DATCAT_EXT = 'T'.

ITEMSCHEDULE-DELIVERY_DATE = '21.04.2005'. "sy-datum + 2 dias.

*ITEM_SCHEDULE-QUANTITY = '1'. "ITDETALLE-CANTIDAD.

APPEND ITEMSCHEDULE.

CLEAR ITEMSCHEDULE.

*&----


*

*POPULATE ITEM FLAG FOR SCHEDULE TABLE.

*&----


*

ITEMSCHEDULEX-PO_ITEM = '10'.

ITEMSCHEDULEX-PO_ITEMX = c_x .

ITEMSCHEDULEX-DEL_DATCAT_EXT = c_x.

ITEMSCHEDULEX-DELIVERY_DATE = c_x .

*ITEMSCHEDULEX-QUANTITY = '1' . "ITDETALLE-CANTIDAD.

APPEND ITEMSCHEDULEX.

CLEAR ITEMSCHEDULEX.

*&----


*

*POPULATE ACCOUNT DATA.

*&----


*

ACCOUNT-PO_ITEM = '10' .

ACCOUNT-SERIAL_NO = serial .

ACCOUNT-CREAT_DATE = sy-datum .

ACCOUNT-COSTCENTER = centro .

ACCOUNT-GL_ACCOUNT = cuenta .

ACCOUNT-CO_AREA = 'CD01' .

ACCOUNT-TAX_CODE = 'I2' .

APPEND ACCOUNT. CLEAR ACCOUNT.

*&----


*

*POPULATE ACCOUNT FLAG TABLE.

*&----


*

ACCOUNTX-PO_ITEM = '10' .

ACCOUNTX-PO_ITEMX = c_x .

ACCOUNTX-SERIAL_NO = serial .

ACCOUNTX-SERIAL_NOX = c_x .

ACCOUNTX-CREAT_DATE = c_x .

ACCOUNTX-COSTCENTER = c_x .

ACCOUNTX-GL_ACCOUNT = c_x .

ACCOUNTX-CO_AREA = c_x .

ACCOUNTX-TAX_CODE = c_x .

APPEND ACCOUNTX. CLEAR ACCOUNTX.

*&----


*

*POPULATE POSRVACCESSVALUES TABLE DATA.

*&----


*

  • FIRST ENTRY

POSRVACCESSVALUES-PCKG_NO = '0000002749' .

POSRVACCESSVALUES-LINE_NO = '0000000002' .

POSRVACCESSVALUES-SERNO_LINE = '01'.

POSRVACCESSVALUES-PERCENTAGE = '100'.

POSRVACCESSVALUES-SERIAL_NO = '01'.

*POSRVACCESSVALUES-QUANTITY = '1'.

POSRVACCESSVALUES-NET_VALUE = '850'.

APPEND POSRVACCESSVALUES . CLEAR POSRVACCESSVALUES.

  • SECOND ENTRY

POSRVACCESSVALUES-PCKG_NO = '0000002749' .

POSRVACCESSVALUES-LINE_NO = '0000000003' .

POSRVACCESSVALUES-SERNO_LINE = '01'.

POSRVACCESSVALUES-PERCENTAGE = '100'.

POSRVACCESSVALUES-SERIAL_NO = '01'.

*POSRVACCESSVALUES-QUANTITY =

POSRVACCESSVALUES-NET_VALUE = '150'.

APPEND POSRVACCESSVALUES . CLEAR POSRVACCESSVALUES.

*&----


*

*POPULATE SERVICES DATA.

*&----


*

  • servicio JERARQUIA SUPERIOR

SERVICES-PCKG_NO = '2748'.

SERVICES-LINE_NO = '0000000001' .

SERVICES-EXT_LINE = '0000000000' .

SERVICES-OUTL_LEVEL = '0'.

SERVICES-OUTL_NO = ' '.

SERVICES-OUTL_IND = 'X'.

SERVICES-SUBPCKG_NO = '2749'.

*SERVICES-SERVICE = ' ' .

SERVICES-EDITION = '0000' .

*SERVICES-BASE_UOM = '

SERVICES-QUANTITY = '0' .

SERVICES-OVF_TOL = '0' .

SERVICES-GR_PRICE = '0' .

SERVICES-FROM_LINE = '1' .

SERVICES-PERS_NO = '00000000' .

SERVICES-PLN_PCKG = '0000000000' .

SERVICES-PLN_LINE = '0000000000' .

SERVICES-CON_PCKG = '0000000000' .

SERVICES-CON_LINE = '0000000000' .

SERVICES-TMP_PCKG = '0000000000' .

SERVICES-TMP_LINE = '0000000000' .

SERVICES-LIMIT_LINE = '0000000000' .

SERVICES-TAX_CODE = impuesto .

*SERVICES-SHORT_TEXT = 'prueba creacion BAPI'.

*SERVICES-MATL_GROUP = '350001'.

APPEND SERVICES. CLEAR SERVICES .

  • servicio 1

SERVICES-PCKG_NO = '2749'.

SERVICES-LINE_NO = '2' .

SERVICES-EXT_LINE = '10' .

SERVICES-OUTL_LEVEL = '0'.

*SERVICES-OUTL_NO = ' '.

*SERVICES-OUTL_IND = 'X'.

SERVICES-SUBPCKG_NO = '0000000000'.

SERVICES-SERVICE = '000000000000008010'.

SERVICES-EDITION = '0000' .

SERVICES-BASE_UOM = 'UNO' .

SERVICES-UOM_ISO = 'C62' .

SERVICES-QUANTITY = '1' .

SERVICES-PRICE_UNIT = '1' .

SERVICES-OVF_TOL = '0' .

*SERVICES-FROM_LINE = '1' .

SERVICES-SHORT_TEXT = 'prueba creacion BAPI'.

SERVICES-PERS_NO = '00000000' .

SERVICES-PLN_PCKG = '0000001980' .

SERVICES-PLN_LINE = '0000000002' .

SERVICES-CON_PCKG = '0000001980' .

SERVICES-CON_LINE = '0000000002' .

SERVICES-TMP_PCKG = '0000000000' .

SERVICES-TMP_LINE = '0000000000' .

SERVICES-LIMIT_LINE = '0000000000' .

SERVICES-TAX_CODE = 'I2' .

SERVICES-GR_PRICE = '850' .

SERVICES-MATL_GROUP = '350001'.

APPEND SERVICES. CLEAR SERVICES .

*&----


*

*POPULATE CONTRACT LIMITS DATA.

*&----


*

POCONTRACTLIMITS-PCKG_NO = '956'.

POCONTRACTLIMITS-CON_NUMBER = '4903000004'.

POCONTRACTLIMITS-CON_ITEM = '10'.

POCONTRACTLIMITS-NO_LIMIT = c_x.

POCONTRACTLIMITS-PRICE_CHG = c_x.

APPEND POCONTRACTLIMITS. CLEAR POCONTRACTLIMITS .

*&----


*

*BAPI CALL

*&----


*

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

POHEADER = HEADER

POHEADERX = HEADERX

  • POADDRVENDOR =

  • TESTRUN =

IMPORTING

EXPPURCHASEORDER = PURCHASEORDER

  • EXPHEADER =

  • EXPPOEXPIMPHEADER =

TABLES

RETURN = RETURN

POITEM = ITEM

POITEMX = ITEMX

POSCHEDULE = ITEMSCHEDULE

POSCHEDULEX = ITEMSCHEDULEX

POACCOUNT = ACCOUNT

POACCOUNTX = ACCOUNTX

POSERVICES = SERVICES.

*&----


*

*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 / RETURN-MESSAGE.

ENDLOOP.

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Charli ,

i have seen u r code , BAPI_PO_CREATE1, i need a clarification regarding package number , the package number is allocated automatically when we are creating PO using ME21 , so how can we assign a package number in BAPI_PO_CREATE1 manually .

Former Member
0 Kudos

This is the code I use to get the package number:

vebeln = AGREEMENT. "open purchase order

first = 'N'.

SELECT * FROM eslh WHERE ebeln = vebeln ORDER BY packno.

IF first = 'N'.

first_pack = eslh-packno.

primero = 'S'.

ELSE.

last_pack = eslh-packno.

ENDIF.

ENDSELECT.

SELECT packno introw extrow srvpos package sub_packno meins brtwr FROM esll INTO TABLE itserv

WHERE packno BETWEEN first_pack AND last_pack.

at the end you'll get the ITSERV internal table with all the services for that specific agreement or contract. Agreement is the same as a BAPIMEPOITEM-AGREEMENT. This services will let you populate the BAPI's SERVICES internal table and you'll have in the "first_pack" variable the value you have to put in the item table in the field item-pckg_no.

Former Member
0 Kudos

Thanks Charli,

Thats great...

Was that post a mistake? 8-)

Brad

Former Member
0 Kudos

Come on, Brad. It's a first post. And I can see that it isn't marked as a question...:-)

By the way, Charli, it was nice of you to have shared the code. But unfortunately, most of the times, the data will depend on the current configuration settings (as you have correctly mentioned in your program comments).

So even when someone has trouble creating a PO through the above BAPI, the code cannot be used without modifications...