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_CREATE1

Former Member
0 Likes
5,607

Hi Friends,

Can you tell me input parameters to pass in Function Module BAPI_PO_CREATE1.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
3,206

dear frnd,

do take refrence wid follwing -

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

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

doctyp like HEADER-DOC_TYPE default 'EC' ,

cdate like HEADER-CREAT_DATE default sy-datum ,

vendor like HEADER-VENDOR default '0000005550',

pur_org like HEADER-PURCH_ORG default '3000' ,

pur_grp like HEADER-PUR_GROUP default '013' ,

currency like header-currency default 'usd'.

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

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

plant like ITEM-PLANT default '3200' ,

quantity like ITEM-QUANTITY default 200,

price like item-net_price default '25.00023'.

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 = sy-langu .

HEADER-PURCH_ORG = pur_org .

HEADER-PUR_GROUP = pur_grp .

header-currency = currency.

*&----


*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-currency = c_x.

*HEADERX-doc_date = c_x.

*&----


*POPULATE ITEM DATA.

*&----


ITEM-PO_ITEM = item_num.

ITEM-MATERIAL = material.

ITEM-PLANT = plant.

ITEM-QUANTITY = quantity.

item-net_price = price.

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-net_price = c_x.

*ITEMX-TAX_CODE = C_X .

*ITEMX-ITEM_CAT = C_X .

*ITEMX-ACCTASSCAT = C_X .

APPEND ITEMX.

IF INIT IS INITIAL.

INIT = 'X'.

*&----


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

.

endif.

end-of-selection.

***&----


****Output the messages returned from BAPI call

***&----


*LOOP AT RETURN.

WRITE / v_EXPPURCHASEORDER.

*ENDLOOP.

rgds.

Manish

7 REPLIES 7
Read only

GauthamV
Active Contributor
0 Likes
3,206

hi,

BAPI_PO_CREATE1 - Create Purchase Order

Functionality

Function module BAPI_PO_CREATE1 enables you to create purchase orders. The BAPI uses the technology behind the Enjoy purchase order transaction ( ME21N).

Alternatively, the IDoc type PORDCR1 is available. The data from this IDoc automatically populates the interface parameters of the function module BAPI_PO_CREATE1.

Functionality in Detail

Authorization

The following authorization objects are checked when an Enjoy purchase order is created (activity 01):

M_BEST_BSA (document type in PO)

M_BEST_EKG (purchasing group in PO)

M_BEST_EKO (purchasing organization in PO)

M_BEST_WRK (plant in PO)

Controlling adoption of field values via X bar

For most tables, you can determine via your own parameters in the associated X bar in each case (e.g. PoItemX) whether fields are to be set initial, values inserted via the interface, or default values adopted (e.g. from Customizing or master records) (for example, it is not mandatory to adopt the material group from an underlying purchase requisition - you can change it with the BAPI).

Transfer

Header data

The header data of the Enjoy purchase order is transferred in the table PoHeader.

Item data

The item data of the Enjoy purchase order is stored in the table PoItem (general item data). The delivery schedule lines are stored in the table PoSchedule.

Use the table PoAccount to specify the account assignment information. If account assignments have been specified for services and limits, you show the relevant account assignment line in PoAccount in the table PoSrvAccessValues via the package number of the service or the limit.

Services and limits

Services, free limits and limits with contract reference can be specified in the tables PoServices, PoLimits, and PoContractLimits.

Conditions

Conditions are transferred in the table PoCond; header conditions in the table PoCondHeader. Price determination is reinitiated via the parameter CALCTYPE in the table PoItem.

Vendor and delivery address

The vendor's address can be specified individually in the table PoAddrVendor; the delivery address in the table PoAddrDelivery. If you do not make any individual specification, the fields will be populated via the central address management facility.

Note

In this method, the following restrictions apply with regard to addresses:

Addresses can only be created with this method - they cannot be changed. You can only change address data with the method BAPI_ADDRESSORG_CHANGE.

When you create addresses, they are not checked by the method. An Enjoy purchase order may therefore contain faulty address data.

Partner roles

The partners can be maintained individually via the table PoPartner (with the exception of the partner role "vendor").

Import/export data

Import/Export data can be specified per item in the table PoExpImpItem. Foreign trade data can only be transferred as default data for new items.

Texts

Header and item texts can be transferred in the tables PoTextHeader and PoTextItem. Texts for services are imported in the table PoServicesText.

Version Management

You can make use of the Version Management facility via the table AllVersions.

Return

The PO number is returned in the parameter ExpPurchaseOrder. In addition, all information except the service and export/import tables is placed in the output structures.

Return messages

Messages are returned in the parameter Return. This also contains information as to whether interface data has been wrongly or probably wrongly (heuristical interface check) populated. If a PO has been successfully created, the PO number is also placed in the return table with the appropriate message.

Please also refer to current information in Note 197958 in this connection.

Example

Example of population of BAPI interface in the Function Builder

Parameter: POHEADER

COMP_CODE = 1000

DOC_TYPE = NB

ITEM_INTVL = 00001

VENDOR = 0000001000

PMNTTRMS = 0001

PURCH_ORG = 1000

PUR_GROUP = 001

CURRENCY = EUR

Parameter: POHEADERX

COMP_CODE = X

DOC_TYPE = X

ITEM_INTVL = X

VENDOR = X

PMNTTRMS = X

PURCH_ORG = X

PUR_GROUP = X

Parameter: POITEM

PO_ITEM = 00001

MATERIAL = 100-100

PLANT = 1000

STGE_LOC = 0001

QUANTITY = 15.000

TAX_CODE = V0

ITEM_CAT = 0

ACCTASSCAT = K

Parameter: POITEMX

PO_ITEM = 00001

MATERIAL = X

PLANT = X

STGE_LOC = X

QUANTITY = X

TAX_CODE = X

ITEM_CAT = X

ACCTASSCAT = X

Parameter: POSCHEDULE

PO_ITEM = 00001

SCHED_LINE = 0001

DELIVERY_DATE = 02.12.2002

QUANTITY = 6.000

PO_ITEM = 00001

SCHED_LINE = 0002

DELIVERY_DATE = 03.12.2002

QUANTITY = 5.000

PO_ITEM = 00001

SCHED_LINE = 0003

DELIVERY_DATE = 04.12.2002

QUANTITY = 4.000

Parameter: POSCHEDULEX

PO_ITEM = 00001

SCHED_LINE = 0001

PO_ITEMX = X

SCHED_LINEX = X

DELIVERY_DATE = X

QUANTITY = X

PO_ITEM = 00001

SCHED_LINE = 0002

PO_ITEMX = X

SCHED_LINEX = X

DELIVERY_DATE = X

QUANTITY = X

PO_ITEM = 00001

SCHED_LINE = 0003

PO_ITEMX = X

SCHED_LINEX = X

DELIVERY_DATE = X

QUANTITY = X

Parameter: POACCOUNT

PO_ITEM = 00001

SERIAL_NO = 01

QUANTITY = 15.000

GL_ACCOUNT = 0000400000

COSTCENTER = 0000001000

CO_AREA = 1000

Parameter: POACCOUNTX

PO_ITEM = 00001

SERIAL_NO = 01

QUANTITY = X

GL_ACCOUNT = X

COSTCENTER = X

CO_AREA = X

Parameter: POCOND

ITM_NUMBER = 000001

COND_ST_NO = 001

COND_TYPE = PB00

COND_VALUE = 79.900000000

CURRENCY = EUR

CURRENCY_ISO = EUR

COND_UNIT = KG

COND_P_UNT = 1

CHANGE_ID = U

Parameter: POCONDX

ITM_NUMBER = 000001

COND_ST_NO = 000

ITM_NUMBERX = X

COND_TYPE = X

COND_VALUE = X

CURRENCY = X

CHANGE_ID = X

Parameter: POPARTNER

PARTNERDESC = OA

LANGU = EN

BUSPARTNO = 0000001100

PARTNERDESC = GS

LANGU = EN

BUSPARTNO = 0000001200

PARTNERDESC = PI

LANGU = EN

BUSPARTNO = 0000001000

Help in the Case of Problems

1. Note 197958 lists answers to frequently asked questions (FAQs). (Note 499626 contains answers to FAQs relating to External Services Management.)

2. If you have detected an error in the function of a BAPI, kindly create a reproducible example in the test data directory in the Function Builder (transaction code SE37). Note 375886 tells you how to do this.

3. If the problem persists, please create a Customer Problem Message for the componente MM-PUR-PO-BAPI, and document the reproducible example where necessary.

Customer Enhancements

The following user exits (function modules) are available for the BAPI BAPI_PO_CREATE1:

EXIT_SAPL2012_001 (at start of BAPI)

EXIT_SAPL2012_003 (at end of BAPI)

The following user exits (function modules) are available for the BAPI BAPI BAPI_PO_CHANGE:

EXIT_SAPL2012_002 (at start of BAPI)

EXIT_SAPL2012_004 (at end of BAPI)

These exits belong to the enhancement SAPL2012 (see also transaction codes SMOD and CMOD).

There is also the option of populating customer-specific fields for header, item, or account assignment data via the parameter EXTENSIONIN.

Further Information

1. Note 197958 contains up-to-date information on the purchase order BAPIs.

2. If you test the BAPIs BAPI_PO_CREATE1 or BAPI_PO_CHANGE in the Function Builder (transaction code SE37), no database updates will be carried out. If you need this function, please take a look at Note 420646.

3. The BAPI BAPI_PO_GETDETAIL serves to read the details of a purchase order. The BAPI cannot read all details (e.g. conditions). However, you can use the BAPI BAPI_PO_CHANGE for this purpose if only the document number is populated and the initiator has change authorizations for purchase orders.

4. Frequently used BAPIs for purchase orders are BAPI_PO_CREATE, BAPI_PO_CREATE1, BAPI_PO_CHANGE, BAPI_PO_GETDETAIL, BAPI_PO_GETITEMS, BAPI_PO_GETITEMSREL, and BAPI_PO_GETRELINFO.

5. For more information on purchase orders, refer to the SAP library (under MM Purchasing -> Purchase Orders) or the Help for the Enjoy Purchase Order, or choose the path Tools -> ABAP Workbench -> Overview -> BAPI Explorer from the SAP menu.

Parameters

POHEADER

POHEADERX

POADDRVENDOR

TESTRUN

MEMORY_UNCOMPLETE

MEMORY_COMPLETE

POEXPIMPHEADER

POEXPIMPHEADERX

VERSIONS

NO_MESSAGING

NO_MESSAGE_REQ

NO_AUTHORITY

NO_PRICE_FROM_PO

EXPPURCHASEORDER

EXPHEADER

EXPPOEXPIMPHEADER

RETURN

POITEM

POITEMX

POADDRDELIVERY

POSCHEDULE

POSCHEDULEX

POACCOUNT

POACCOUNTPROFITSEGMENT

POACCOUNTX

POCONDHEADER

POCONDHEADERX

POCOND

POCONDX

POLIMITS

POCONTRACTLIMITS

POSERVICES

POSRVACCESSVALUES

POSERVICESTEXT

EXTENSIONIN

EXTENSIONOUT

POEXPIMPITEM

POEXPIMPITEMX

POTEXTHEADER

POTEXTITEM

ALLVERSIONS

POPARTNER

reward points if hlpful.

Read only

Former Member
0 Likes
3,206

&----


*& Report YBAPI_PO_CREATE1

*&

&----


*&

*&

&----


REPORT YBAPI_PO_CREATE1.

data:

header like BAPIMEPOHEADER,

headerx like BAPIMEPOHEADERX,

it_item like standard table of BAPIMEPOITEM,

it_itemx like standard table of BAPIMEPOITEMX,

return like standard table of BAPIRET2,

wa_item like BAPIMEPOITEM,

wa_itemx like BAPIMEPOITEMX,

p_int type i,

p_matnr like mara-matnr,

p_pono like ekko-ebeln.

constants:

c_x type c value 'X'.

header-comp_code = '3000'.

header-doc_type = 'DP25'.

header-creat_date = sy-datum.

header-item_intvl = '10'.

header-vendor = 'ARAMI-00'.

header-langu = sy-langu.

header-pmnttrms = '0001'.

header-purch_org = '3000'.

header-pur_group = '010'.

header-currency = 'USD'.

headerx-comp_code = c_x.

headerx-doc_type = c_x.

headerx-creat_date = c_x.

headerx-item_intvl = c_x .

headerx-vendor = c_x.

headerx-langu = c_x.

headerx-pmnttrms = c_x .

headerx-purch_org = c_x.

headerx-pur_group = c_x.

*LOOP AT it_final2 INTO wa_final2.

p_int = p_int + 10.

wa_item-po_item = p_int.

p_matnr = 'T-SRM01'.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

EXPORTING

input = p_matnr

IMPORTING

output = p_matnr

EXCEPTIONS

length_error = 1

OTHERS = 2.

*IF sy-subrc = 0.

*MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

*WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

*ENDIF.

wa_item-material = p_matnr.

wa_item-plant = '3200'.

wa_item-quantity = 100.

wa_item-conf_ctrl = 'Z01'.

wa_item-ACKN_REQD = 'X'.

WA_ITEM-ERS = ''.

APPEND wa_item TO it_item.

wa_itemx-po_item = p_int.

wa_itemx-material = c_x.

wa_itemx-plant = c_x .

wa_itemx-stge_loc = c_x .

wa_itemx-quantity = c_x .

wa_itemx-item_cat = c_x .

wa_itemx-acctasscat = c_x .

wa_itemx-conf_ctrl = 'X'.

wa_itemx-ACKN_REQD = 'X'.

WA_ITEMX-ERS = 'X'.

APPEND wa_itemx TO it_itemx.

*ENDLOOP.

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

poheader = header

poheaderx = headerx

IMPORTING

exppurchaseorder = p_pono

TABLES

return = return

poitem = it_item

poitemx = it_itemx.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  • EXPORTING

  • WAIT =

  • IMPORTING

  • RETURN =

.

write:/ p_pono.

Read only

Former Member
0 Likes
3,206

hi

check this code

report zgmimm_me21 no standard page heading line-size 255.

tables: t100.

type-pools: truxs.

types: begin of i_upload,

lifnr like ekko-lifnr, "Vendor Number

bukrs like ekko-bukrs, "Order type

bedat like ekko-bedat, "Purchase Order Date

ekorg like ekko-ekorg, "Purchasing organization

ausnr like ekko-ausnr, "Purchase order

ekgrp like ekko-ekgrp, "Purchasing group

eddat like ekko-bedat, "Delivery date

werks like ekpo-werks, "Plant

lgort like ekpo-lgort, "Storage location

zterm like ekko-zterm, "Payment terms

ematn like ekpo-ematn, "Material

menge like ekpo-menge, "PO Quantity

lewed like ekpo-lewed, "Latest GR Date

end of i_upload.

data: begin of i_input occurs 0,

pbg(10) type c,

bldat(07) type c, "001

  • BLDAT like BKPF-BUDAT,

hkont(10) type c,

kostl(10) type c,

wrbtr(11) type c,

dbcrflag(01) type c,

sgtxt(32) type c,

end of i_input.

data: v_counter(2) type n.

data: v_mod type i.

data: v_ebelp like ekpo-ebelp.

data: v_fname(132) type c.

data: v_fname1(132) type c.

data: v_tabix like sy-tabix.

data : ws_text(200) type c.

data : wa_mag(1).

data: begin of int_msg occurs 0,

cnt type i,

massage(1) type c,

text(200) type c,

end of int_msg.

data : begin of i_final occurs 0,

lifnr like ekko-lifnr, "Vendor Number

bukrs like ekko-bukrs, "Order type

bedat(10),

ekorg like ekko-ekorg, "Purchasing organization

ausnr like ekko-ausnr, "Purchase order

ekgrp like ekko-ekgrp, "Purchasing group

eddat(10),

werks like ekpo-werks, "Plant

lgort like ekpo-lgort, "Storage location

zterm like ekko-zterm, "Payment terms

ematn like ekpo-ematn, "Material

menge type char15, "PO Quantity

lewed(10),

TAX_CODE type mwskz,

GR_BASEDIV,

end of i_final.

data: it_datatab type standard table of i_upload,

wa_datatab type i_upload.

data: it_raw type truxs_t_text_data.

data: begin of bdcdata occurs 0.

include structure bdcdata.

data: end of bdcdata.

data: begin of messtab occurs 0.

include structure bdcmsgcoll.

data: end of messtab.

data: begin of t_input occurs 0.

include structure i_input.

data: end of t_input.

data: begin of i_local_output occurs 0,

text(2800) type c,

end of i_local_output.

data: begin of i_error occurs 0.

include structure i_input.

data: text(50) type c.

data: end of i_error.

data : _datum1(10).

data : t_datum1(10).

data: msgno like sy-msgno,

msgid like sy-msgid,

msgty like sy-msgty,

message like message.

*Data : TEXT(50) Type c value 'File Shoud be in Excel Format'.

data: wa_head type bapimepoheader,

wa_headx type bapimepoheaderx,

i_return type bapiret2 occurs 0 with header line,

i_item type bapimepoitem occurs 0 with header line,

i_itemx type bapimepoitemx occurs 0 with header line,

i_sch type bapimeposchedule occurs 0 with header line,

i_schx type bapimeposchedulx occurs 0 with header line.

**----


*

    • SELECTION SCREEN

**----


parameters: p_file type rlgrap-filename obligatory modif id app.

  • Write : /3 Text.

**----


*

    • START OF SELECTION

**----


at selection-screen on value-request for p_file.

call function 'F4_FILENAME'

exporting

field_name = 'P_FILE'

importing

file_name = p_file.

start-of-selection.

perform data_from_excel_to_sap.

perform pass_data_to_final_int_tab.

  • perform fill_bdc_data.

perform fill_bapi_parameters.

perform call_po_create_bapi.

&----


*& Form DATA_FROM_EXCEL_TO

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form data_from_excel_to_sap.

call function 'TEXT_CONVERT_XLS_TO_SAP'

exporting

  • I_FIELD_SEPERATOR =

i_line_header = 'X'

i_tab_raw_data = it_raw " WORK TABLE

i_filename = p_file

tables

i_tab_converted_data = it_datatab[] "ACTUAL DATA

exceptions

conversion_failed = 1

others = 2.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

endif.

endform. " DATA_FROM_EXCEL_TO

&----


*& Form PASS_DATA_TO_FINAL_INTERNAL_TA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form pass_data_to_final_int_tab.

loop at it_datatab into wa_datatab.

move wa_datatab-lifnr to i_final-lifnr. "Vendor Number

move wa_datatab-bukrs to i_final-bukrs. "Order type

move wa_datatab-bedat to i_final-bedat. "Purchase Order Date

concatenate i_final-bedat6(2) '.' i_final-bedat4(2) '.20'

i_final-bedat+2(2) into _datum1.

i_final-bedat = _datum1.

move wa_datatab-ekorg to i_final-ekorg. "Purchasing organization

move wa_datatab-ausnr to i_final-ausnr. "Purchase order

move wa_datatab-ekgrp to i_final-ekgrp. "Purchasing group

move wa_datatab-eddat to i_final-eddat. "Delivery date

concatenate i_final-eddat6(2) '.' i_final-eddat4(2) '.20'

i_final-eddat+2(2) into _datum1.

i_final-eddat = _datum1.

move wa_datatab-werks to i_final-werks. "Plant

move wa_datatab-lgort to i_final-lgort. "Storage location

move wa_datatab-zterm to i_final-zterm. "Payment terms

move wa_datatab-ematn to i_final-ematn. "Material

move wa_datatab-menge to i_final-menge. "PO Quantity

move wa_datatab-lewed to i_final-lewed. "Latest GR Date

***Value Hard coaded considering this Program is only for Import.

I_FINAL-TAX_CODE = 'V0'.

I_FINAL-GR_BASEDIV = ' '.

concatenate i_final-lewed6(2) '.' i_final-lewed4(2) '.20'

i_final-lewed+2(2) into _datum1.

i_final-lewed = _datum1.

append i_final.

endloop.

endform. " PASS_DATA_TO_FINAL_INTERNAL_TA

&----


*& Form FILL_BDC_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fill_bdc_data.

read table i_final index 1.

perform f0510_bdcdata using :

'X' 'SAPMM06E' '0100',

' ' 'BDC_CURSOR' 'RM06E-MATKL',

' ' 'BDC_OKCODE' '=KOPF',

' ' 'EKKO-LIFNR' i_final-lifnr,

' ' 'RM06E-BSART' i_final-bukrs,

' ' 'RM06E-BEDAT' i_final-bedat,

' ' 'RM06E-BSTNR' i_final-ausnr,

' ' 'EKKO-EKORG' i_final-ekorg,

' ' 'EKKO-EKGRP' i_final-ekgrp,

' ' 'RM06E-EEIND' i_final-eddat,

' ' 'RM06E-LPEIN' 'T',

' ' 'RM06E-WERKS' i_final-werks,

' ' 'RM06E-LGORT' i_final-lgort.

perform f0510_bdcdata using :

'X' 'SAPMM06E' '0101',

' ' 'BDC_OKCODE' '=AB',

' ' 'EKKO-ZTERM' i_final-zterm.

move: '01' to v_counter.

loop at i_final.

move: sy-tabix to v_tabix.

concatenate 'EKPO-EMATN(' v_counter ')' into v_fname.

concatenate 'EKPO-MENGE(' v_counter ')' into v_fname1.

perform f0510_bdcdata using :

'X' 'SAPMM06E' '0120',

' ' 'BDC_OKCODE' '=DETZ',

  • ' ' 'RM06E-EBELP' '5',

' ' v_fname i_final-ematn,

' ' v_fname1 i_final-menge.

*----


perform f0510_bdcdata using :

'X' 'SAPMM06E' '0112',

' ' 'BDC_CURSOR' 'EKPO-LEWED',

' ' 'BDC_OKCODE' '/00',

' ' 'EKPO-LEWED' i_final-lewed,

' ' 'EKPO-PRDAT' i_final-bedat.

  • ' ' 'EKPO-IPRKZ' 'D'.

*----


v_mod = v_counter mod 5.

if v_mod eq 0.

clear v_ebelp.

move: v_tabix to v_ebelp.

perform f0510_bdcdata using :

'X' 'SAPMM06E' '0120',

' ' 'BDC_OKCODE' '/00',

' ' 'RM06E-EBELP' v_ebelp.

v_counter = '02'.

else.

v_counter = v_counter + 1.

endif.

endloop.

  • loop at i_final.

  • clear: v_fname.

  • v_counter = sy-tabix.

  • v_ebelp = sy-tabix.

  • concatenate 'RM06E-TCSELFLAG(' '01' ')' into v_fname.

  • perform f0510_bdcdata using :

  • 'X' 'SAPMM06E' '0120',

  • ' ' 'RM06E-EBELP' v_ebelp,

  • ' ' 'BDC_OKCODE' '/00'.

*

  • perform f0510_bdcdata using :

  • 'X' 'SAPMM06E' '0120',

  • ' ' 'BDC_CURSOR' 'RM06E-BSTPO(01)',

  • ' ' 'BDC_OKCODE' '=DETZ',

    • ' ' 'RM06E-EBELP' v_ebelp,

  • ' ' v_fname 'X'.

*

  • perform f0510_bdcdata using :

  • 'X' 'SAPMM06E' '0112',

  • ' ' 'BDC_CURSOR' 'EKPO-LEWED',

  • ' ' 'BDC_OKCODE' '/00',

  • ' ' 'EKPO-PLIFZ' '91',

  • ' ' 'EKPO-GEWEI' 'KG',

  • ' ' 'EKPO-PRDAT' i_final-bedat,

  • ' ' 'EKPO-IPRKZ' 'D',

  • ' ' 'EKPO-LEWED' i_final-lewed.

  • endloop.

perform f0510_bdcdata using :

'X' 'SAPMM06E' '0120',

' ' 'BDC_CURSOR' 'RM06E-BSTPO(10)',

' ' 'BDC_OKCODE' '=BU',

' ' 'RM06E-EBELP' '1'.

perform f0510_bdcdata using :

'X' 'SAPLSPO1' '0300',

' ' 'BDC_OKCODE' '=YES'.

call transaction 'ME21' using bdcdata messages into messtab

mode 'A' update 'S'.

perform f000_process_errors.

clear: bdcdata, messtab.

refresh: bdcdata, messtab.

loop at int_msg.

write:/ int_msg-text.

endloop.

endform. " FILL_BDC_DATA

&----


*& Form F0510_BDCDATA

&----


  • text

----


  • -->dynbegin text

  • -->name text

  • -->value text

----


form f0510_bdcdata using value(dynbegin)

value(name)

value(value).

if dynbegin = 'X'.

clear bdcdata.

move: name to bdcdata-program,

value to bdcdata-dynpro,

'X' to bdcdata-dynbegin.

append bdcdata.

else.

clear bdcdata.

move: name to bdcdata-fnam,

value to bdcdata-fval.

append bdcdata.

endif.

endform. " F0510_BDCDATA

&----


*& Form F000_PROCESS_ERRORS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form f000_process_errors.

loop at messtab.

clear t100.

select single * from t100 where sprsl = messtab-msgspra

and arbgb = messtab-msgid

and msgnr = messtab-msgnr.

ws_text = t100-text.

wa_mag = messtab-msgtyp.

if ws_text cs '&1'.

replace '&1' with messtab-msgv1 into ws_text.

replace '&2' with messtab-msgv2 into ws_text.

replace '&3' with messtab-msgv3 into ws_text.

replace '&4' with messtab-msgv4 into ws_text.

else.

replace '&' with messtab-msgv1 into ws_text.

replace '&' with messtab-msgv2 into ws_text.

replace '&' with messtab-msgv3 into ws_text.

replace '&' with messtab-msgv4 into ws_text.

endif.

condense ws_text.

move ws_text to int_msg-text.

move wa_mag to int_msg-massage.

append int_msg.

endloop.

delete int_msg where massage = 'W'.

endform. " F000_PROCESS_ERRORS

&----


*& Form fill_bapi_parameters

&----


  • Subroutine to fill BAPI Parameters

----


form fill_bapi_parameters.

clear: wa_head, wa_headx, i_return, i_item, i_itemx, i_sch, i_schx.

perform fill_bapi_header.

perform fill_bapi_items.

endform. " fill_bapi_parameters

&----


*& Form fill_bapi_header

&----


  • Subroutine to fill the bapi header

----


form fill_bapi_header.

read table i_final index 1.

check sy-subrc eq 0.

move: i_final-ausnr to wa_head-po_number,

i_final-bukrs to wa_head-doc_type,

i_final-zterm to wa_head-pmnttrms,

i_final-ekorg to wa_head-purch_org,

i_final-ekgrp to wa_head-pur_group,

'FOB' to wa_head-incoterms1,

'Free On Board' to wa_head-incoterms2.

call function 'CONVERSION_EXIT_ALPHA_INPUT'

exporting

input = i_final-lifnr

importing

output = i_final-lifnr.

move: i_final-lifnr to wa_head-vendor.

concatenate i_final-bedat+6(4)

i_final-bedat+3(2)

i_final-bedat(2) into wa_head-doc_date.

move: 'X' to wa_headx-po_number,

'X' to wa_headx-doc_type,

'X' to wa_headx-vendor,

'X' to wa_headx-pmnttrms,

'X' to wa_headx-purch_org,

'X' to wa_headx-pur_group,

'X' to wa_headx-doc_date,

'X' to wa_headx-incoterms1,

'X' to wa_headx-incoterms2.

endform. " fill_bapi_header

&----


*& Form fill_bapi_items

&----


  • Subroutine to fill the bapi items

----


form fill_bapi_items.

loop at i_final.

call function 'CONVERSION_EXIT_ALPHA_INPUT'

exporting

input = i_final-ematn

importing

output = i_final-ematn.

move: sy-tabix to i_item-po_item,

i_final-ematn to i_item-material,

i_final-werks to i_item-plant,

i_final-lgort to i_item-stge_loc,

i_final-menge to i_item-quantity.

I_ITEM-TAX_CODE = I_FINAL-TAX_CODE.

I_ITEM-GR_BASEDIV = I_FINAL-GR_BASEDIV.

concatenate i_final-lewed+6(4)

i_final-lewed+3(2)

i_final-lewed(2) into i_item-gr_to_date.

move: sy-tabix to i_itemx-po_item,

'X' to i_itemx-po_itemx,

'X' to i_itemx-material,

'X' to i_itemx-plant,

'X' to i_itemx-stge_loc,

'X' to i_itemx-quantity,

'X' to i_itemx-gr_to_date.

move: 'X' TO i_itemx-TAX_CODE ,

'X' TO i_itemx-GR_BASEDIV.

append: i_item, i_itemx.

*----


move: sy-tabix to i_sch-po_item,

'0001' to i_sch-sched_line,

'D' to i_sch-del_datcat_ext.

  • i_final-menge to i_sch-quantity.

concatenate i_final-eddat(2)

i_final-eddat+3(2)

i_final-eddat+6(4) into i_sch-delivery_date.

move: sy-tabix to i_schx-po_item,

'0001' to i_schx-sched_line,

'X' to i_schx-po_itemx,

'X' to i_schx-sched_linex,

  • 'X' to i_schx-quantity,

'X' to i_schx-delivery_date,

'X' to i_schx-del_datcat_ext.

append: i_sch, i_schx.

endloop.

endform. " fill_bapi_items

&----


*& Form call_po_create_bapi

&----


  • Subroutine to call PO CREATE BAPI

----


form call_po_create_bapi.

call function 'BAPI_PO_CREATE1'

exporting

poheader = wa_head

poheaderx = wa_headx

tables

return = i_return

poitem = i_item

poitemx = i_itemx

poschedule = i_sch

poschedulex = i_schx.

read table i_return with key type = 'S'

id = '06'

number = '017'.

if sy-subrc eq 0.

call function 'BAPI_TRANSACTION_COMMIT'

exporting

wait = 'X'.

write:/ i_return-message.

else.

delete i_return where type = 'S'.

delete i_return where type = 'I'.

delete i_return where type = 'W'.

write:/ 'Following Errors occured in PO Creation:'.

skip.

loop at i_return.

write:/ i_return-message.

endloop.

endif.

endform. " call_po_create_bapi

thanks

sitaram

Read only

0 Likes
3,206

Hi guru...

Can you please give me flat file format ... It will be very helpful to me ...

Surely rewarded ..........

Thanks and Regards,

Murugesh R

Read only

0 Likes
3,206

Check this link, it provides a detailed description of using that BAPI

http://abap.wikiprog.com/wiki/BAPI_PO_CREATE1

Regards

Bala Krishna

Read only

Former Member
0 Likes
3,206

Hi,

Below things are mandatory

*Header Data*
Parameter: POHEADER

COMP_CODE = 1000
DOC_TYPE = NB
ITEM_INTVL = 00001
VENDOR = 0000001000
PMNTTRMS = 0001
PURCH_ORG = 1000
PUR_GROUP = 001
CURRENCY = EUR

Parameter: POHEADERX

COMP_CODE = X
DOC_TYPE = X
ITEM_INTVL = X
VENDOR = X
PMNTTRMS = X
PURCH_ORG = X
PUR_GROUP = X

*Item data*

Parameter: POITEM

PO_ITEM = 00001
MATERIAL = 100-100
PLANT = 1000
STGE_LOC = 0001
QUANTITY = 15.000
TAX_CODE = V0
ITEM_CAT = 0
ACCTASSCAT = K

Parameter: POITEMX

PO_ITEM = 00001
MATERIAL = X
PLANT = X
STGE_LOC = X
QUANTITY = X
TAX_CODE = X
ITEM_CAT = X
ACCTASSCAT = X

Parameter: POSCHEDULE

PO_ITEM = 00001
SCHED_LINE = 0001
DELIVERY_DATE = 02.12.2002
QUANTITY = 6.000
PO_ITEM = 00001
SCHED_LINE = 0002
DELIVERY_DATE = 03.12.2002
QUANTITY = 5.000
PO_ITEM = 00001
SCHED_LINE = 0003
DELIVERY_DATE = 04.12.2002
QUANTITY = 4.000

Parameter: POSCHEDULEX

PO_ITEM = 00001
SCHED_LINE = 0001
PO_ITEMX = X
SCHED_LINEX = X
DELIVERY_DATE = X
QUANTITY = X
PO_ITEM = 00001
SCHED_LINE = 0002
PO_ITEMX = X
SCHED_LINEX = X
DELIVERY_DATE = X
QUANTITY = X
PO_ITEM = 00001
SCHED_LINE = 0003
PO_ITEMX = X
SCHED_LINEX = X
DELIVERY_DATE = X
QUANTITY = X

Thanks

Vikanth

Read only

Former Member
0 Likes
3,207

dear frnd,

do take refrence wid follwing -

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

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

doctyp like HEADER-DOC_TYPE default 'EC' ,

cdate like HEADER-CREAT_DATE default sy-datum ,

vendor like HEADER-VENDOR default '0000005550',

pur_org like HEADER-PURCH_ORG default '3000' ,

pur_grp like HEADER-PUR_GROUP default '013' ,

currency like header-currency default 'usd'.

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

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

plant like ITEM-PLANT default '3200' ,

quantity like ITEM-QUANTITY default 200,

price like item-net_price default '25.00023'.

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 = sy-langu .

HEADER-PURCH_ORG = pur_org .

HEADER-PUR_GROUP = pur_grp .

header-currency = currency.

*&----


*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-currency = c_x.

*HEADERX-doc_date = c_x.

*&----


*POPULATE ITEM DATA.

*&----


ITEM-PO_ITEM = item_num.

ITEM-MATERIAL = material.

ITEM-PLANT = plant.

ITEM-QUANTITY = quantity.

item-net_price = price.

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-net_price = c_x.

*ITEMX-TAX_CODE = C_X .

*ITEMX-ITEM_CAT = C_X .

*ITEMX-ACCTASSCAT = C_X .

APPEND ITEMX.

IF INIT IS INITIAL.

INIT = 'X'.

*&----


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

.

endif.

end-of-selection.

***&----


****Output the messages returned from BAPI call

***&----


*LOOP AT RETURN.

WRITE / v_EXPPURCHASEORDER.

*ENDLOOP.

rgds.

Manish