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

Strange Behavior of program while using BAPI_PO_CREATE1

Former Member
0 Likes
708

Hello SAP GURUs,

I've created an Upload Program using BAPI_PO_CREATE1 for Mass Service PO Creation.

When I execute the program and Specify the File for uploading, It Gives me errors as

E BAPI 1 No instance of object type PurchaseOrder has been created. External reference:

E MEPO 0 Purchase order still contains faulty items

E 6 436 In case of account assignment, please enter acc. assignment data for item

But when I come back to Selection Screen of the Program and specify the SAME FILE AGAIN and Execute,

The Program runs successfully and generates the PO number.

I have never seen such strange behavior in any BAPIs before.

Pls help..

3 REPLIES 3
Read only

Former Member
0 Likes
646

can u paste ur code of program....??

Read only

0 Likes
646

PERFORM refresh_tables.

PERFORM fill_tables.

_____________________________________________________________________

END-OF-SELECTION.

  • Display the Summary as an ALV Grid Display

IF NOT ig_mymssg[] IS INITIAL.

PERFORM display_basic_list . "Grid Display

ELSE.

MESSAGE s000 WITH 'No data exists'(051).

STOP.

ENDIF.

&----


*& Form refresh_tables

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM refresh_tables .

REFRESH: ig_fieldcat,

ig_mymssg,

poitem,

poitemx,

poaccount,

poaccountx,

poservices,

ig_return.

  • wt_itab, record, record2 .

ENDFORM. " refresh_tables

&----


*& Form fill_tables

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fill_tables .

record2[] = record[].

record3[] = record[].

DELETE ADJACENT DUPLICATES FROM record COMPARING id_no.

DELETE ADJACENT DUPLICATES FROM record2 COMPARING id_no po_item.

SELECT MAX( packno ) FROM esll INTO wrk_packno.

LOOP AT record.

CLEAR : poheader, poheaderx, wa_poitem, wa_poitemx, wa_poservices, wa_poaccount, wa_poaccountx, wa_poschedulex, wa_poschedule.

REFRESH: poitem, poitemx, poaccount, poaccountx, poservices, ig_return, posrvaccessvalues, poschedule, poschedulex.

PERFORM po_header.

LOOP AT record2 WHERE id_no = record-id_no.

wrk_packno = wrk_packno + 1.

PERFORM po_item.

PERFORM po_scheudle.

PERFORM acc_assignment.

PERFORM po_services.

ENDLOOP.

PERFORM create_po.

ENDLOOP.

ENDFORM. " fill_tables

&----


*& Form display_basic_list

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_basic_list .

g_repid = sy-repid.

PERFORM f2000_fieldcat_init .

PERFORM display_alv_grid_1.

ENDFORM. " display_basic_list

&----


*& Form f2000_fieldcat_init

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM f2000_fieldcat_init .

REFRESH ig_fieldcat.

PERFORM fill_fields_of_fieldcatalog USING 'IG_MYMSSG'

'STATUS'

c_x

'Status'

'10'.

PERFORM fill_fields_of_fieldcatalog USING 'IG_MYMSSG'

'RECORD'

c_x

'Record'

'20'.

PERFORM fill_fields_of_fieldcatalog USING 'IG_MYMSSG'

'ERRMSG'

' '

'Message'

'100'.

ENDFORM. " f2000_fieldcat_init

&----


*& Form display_alv_grid_1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_alv_grid_1 .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_repid

i_structure_name = 'IG_MYMSSG'

i_grid_title = 'LOG'

is_layout = wg_layout

it_fieldcat = ig_fieldcat[]

i_save = c_save

TABLES

t_outtab = ig_mymssg

EXCEPTIONS

program_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.

ENDFORM. " display_alv_grid_1

&----


*& Form fill_fields_of_fieldcatalog

&----


  • text

----


  • -->P_0626 text

  • -->P_0627 text

  • -->P_C_X text

  • -->P_0629 text

  • -->P_0630 text

----


FORM fill_fields_of_fieldcatalog USING p_tabname TYPE slis_tabname

p_field TYPE slis_fieldname

p_key TYPE c

p_name

len.

  • To fill in the fields of the table fieldcatalog depending on the field

CLEAR wg_fieldcat.

wg_fieldcat-fieldname = p_field. " The field name and the table

wg_fieldcat-tabname = p_tabname.. " name are the two minimum req

wg_fieldcat-key = p_key. " Specifies the column as a key

wg_fieldcat-seltext_l = p_name. " Column Header

wg_fieldcat-outputlen = len.

APPEND wg_fieldcat TO ig_fieldcat.

ENDFORM. " fill_fields_of_fieldcatalog

&----


*& Form create_po

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM create_po .

CLEAR : wg_return.

REFRESH : ig_return.

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

poheader = poheader

poheaderx = poheaderx

IMPORTING

exppurchaseorder = po_no

TABLES

return = ig_return

poitem = poitem

poitemx = poitemx

poschedule = poschedule

poschedulex = poschedulex

poaccount = poaccount

poaccountx = poaccountx

poservices = poservices

posrvaccessvalues = posrvaccessvalues.

SORT ig_return BY type.

READ TABLE ig_return INTO wg_return WITH KEY type = 'S'.

IF sy-subrc EQ 0.

CLEAR : wg_return.

REFRESH : ig_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

CLEAR wg_errmsg.

WRITE icon_green_light AS ICON TO wg_errmsg-status.

CONCATENATE record-id_no po_no INTO wg_errmsg-record SEPARATED BY '/'.

  • wg_errmsg-record = po_no.

wg_errmsg-errmsg = 'PO created'.

APPEND wg_errmsg TO ig_mymssg.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

READ TABLE ig_return INTO wg_return WITH KEY type = 'E' TRANSPORTING message.

CLEAR wg_errmsg.

WRITE icon_red_light AS ICON TO wg_errmsg-status.

wg_errmsg-record = record-id_no.

wg_errmsg-errmsg = wg_return-message.

APPEND wg_errmsg TO ig_mymssg.

ENDIF.

ENDFORM. " create_po

&----


*& Form po_header

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM po_header .

poheader-comp_code = record-comp_code.

poheader-doc_type = record-doc_type.

poheader-vendor = record-vendor.

poheader-purch_org = 'SERV'.

poheader-pur_group = record-pur_group.

poheader-currency = 'INR'.

poheaderx-comp_code = 'X'.

poheaderx-doc_type = 'X'.

poheaderx-vendor = 'X'.

poheaderx-purch_org = 'X'.

poheaderx-pur_group = 'X'.

poheaderx-currency = 'X'.

ENDFORM. " po_header

&----


*& Form po_item

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM po_item .

  • DATA : days TYPE num2.

  • DATA : final_dt TYPE datum.

  • DATA : is_ok TYPE boole_d.

  • DATA : msg_hndlr TYPE REF TO if_hrpa_message_handler.

  • days = 20.

  • CALL FUNCTION 'HR_ECM_ADD_PERIOD_TO_DATE'

  • EXPORTING

  • orig_date = sy-datum

  • num_days = days

  • signum = '+'

  • message_handler = msg_hndlr

  • IMPORTING

  • result_date = final_dt

  • is_ok = is_ok.

CLEAR: wa_poitem,wa_poitemx.

wa_poitem-po_item = record2-po_item.

wa_poitem-short_text = record2-short_text.

wa_poitem-plant = record2-plant.

wa_poitem-matl_group = 'S001'.

wa_poitem-tax_code = 'LA'.

wa_poitem-item_cat = item_cat.

wa_poitem-pckg_no = wrk_packno.

wa_poitem-acctasscat = acctasscat.

  • wa_poitem-gr_to_date = final_dt.

APPEND wa_poitem TO poitem.

wa_poitemx-po_item = record2-po_item.

wa_poitemx-po_itemx = 'X'.

wa_poitemx-short_text = 'X'.

wa_poitemx-plant = 'X'.

wa_poitemx-tax_code = 'X'.

wa_poitemx-item_cat = 'X'.

wa_poitemx-acctasscat = 'X'.

wa_poitemx-pckg_no = 'X'.

wa_poitemx-matl_group = 'X'.

wa_poitem-gr_to_date = 'X'.

APPEND wa_poitemx TO poitemx.

ENDFORM. " po_item

&----


*& Form PO_SERVICES

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM po_services .

CLEAR: wa_poservices, wa_posrvaccessvalues.

wa_poservices-pckg_no = wrk_packno.

wa_poservices-line_no = '0000000001'.

wa_poservices-outl_ind = 'X'.

wa_poservices-subpckg_no = wa_poservices-pckg_no + 1.

wa_poservices-from_line = '000001'.

APPEND wa_poservices TO poservices.

CLEAR wa_poservices.

wrk_packno = wrk_packno + 1.

wa_poservices-pckg_no = wrk_packno.

wa_poservices-line_no = '0000000002'.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = record2-service

IMPORTING

output = record2-service.

wa_poservices-ext_line = '0000000010'.

wa_poservices-service = record2-service.

wa_poservices-quantity = record2-quantity.

wa_poservices-gr_price = record2-gr_price.

wa_posrvaccessvalues-pckg_no = wrk_packno.

wa_posrvaccessvalues-line_no = '0000000002'.

wa_posrvaccessvalues-serial_no = '01'.

wa_posrvaccessvalues-serno_line = '01'.

  • wa_posrvaccessvalues-quantity = record2-quantity.

  • wa_posrvaccessvalues-net_value = record2-gr_price.

APPEND wa_poservices TO poservices.

APPEND wa_posrvaccessvalues TO posrvaccessvalues.

ENDFORM. " PO_SERVICES

&----


*& Form ACC_ASSIGNMENT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM acc_assignment .

DATA : tmp_gl LIKE bapimepoaccount-gl_account.

tmp_gl = '400265'.

CLEAR : wa_poaccount, wa_poaccountx.

wa_poaccount-po_item = record2-po_item.

wa_poaccount-serial_no = '01'.

wa_poaccount-co_area = '1000'.

wa_poaccount-quantity = record2-quantity.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = tmp_gl

IMPORTING

output = wa_poaccount-gl_account.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = record2-orderid

IMPORTING

output = wa_poaccount-orderid.

APPEND wa_poaccount TO poaccount.

wa_poaccountx-po_item = record2-po_item.

wa_poaccountx-serial_no = '01'.

wa_poaccountx-co_area = 'X'.

wa_poaccountx-quantity = 'X'.

wa_poaccountx-gl_account = 'X'.

wa_poaccountx-orderid = 'X'.

APPEND wa_poaccountx TO poaccountx.

ENDFORM. " ACC_ASSIGNMENT

&----


*& Form PO_SCHEUDLE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM po_scheudle .

CLEAR : wa_poschedule, wa_poschedulex.

wa_poschedule-po_item = record2-po_item.

wa_poschedule-sched_line = '0001'.

  • wa_poschedule-del_datcat_ext = 'D'.

wa_poschedule-delivery_date = sy-datum.

wa_poschedule-quantity = record2-quantity.

APPEND wa_poschedule TO poschedule.

wa_poschedulex-po_item = record2-po_item.

wa_poschedulex-sched_line = '0001'.

wa_poschedulex-po_itemx = 'X'.

wa_poschedulex-sched_linex = 'X'.

  • wa_poschedulex-del_datcat_ext = 'X'

wa_poschedulex-delivery_date = 'X'.

wa_poschedulex-quantity = 'X'.

APPEND wa_poschedulex TO poschedulex.

ENDFORM. " PO_SCHEUDLE

Read only

Former Member
0 Likes
646

Resolved...

The problem was with the Package Number assignment.

I was assigning package number as Last record from ESLL table + 1 to posrvaccessvalues.

The Package NUmber assignment should be out of number range assignment which is in SNUM for SERVICE object.

i.e. it should be Dummy.