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

Error with BAPI_PO_CREATE1

Former Member
0 Likes
2,600

Hi All,

I am creating a PO based on user selected rows.

When I select only one row it is creating PO properly.

But when I select more than one row to create PO, for the first record it is creating PO and for remaining remaining row's I am getting the following error.

Purchase order item 00010 still contains faulty account assignments

Please enter G/L account no.

Actually I am passing a const number

poaccount-gl_account = '0000603000'.

Can someone please help me.

Thanks,

Veni.

WHEN 'CRPO'.

LOOP AT gt2_zcoop INTO gs_zcoop1.

PERFORM pheaderdata.

PERFORM pitemdata.

APPEND gs_zcoop1 TO gt3_zcoop.

CLEAR gs_zcoop1.

PERFORM call_pofunction.

PERFORM update_po_gt_zcoop.

WRITE: /03 po_number.

PERFORM errorcheckandcommit.

CLEAR chbox.

REFRESH pitem.

REFRESH pitemx.

REFRESH plt_schedules_in.

REFRESH plt_schedules_inx.

REFRESH poaccount.

REFRESH poaccountx.

REFRESH potextheader.

REFRESH potextitem.

ENDLOOP.

PERFORM update_zsdcoop.

WRITE: /01(329) sy-uline.

PERFORM headings.

WRITE: /01(329) sy-uline.

PERFORM displaydata.

ENDCASE.

FORM pheaderdata.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = gs_zcoop1-kunnr

IMPORTING

output = lv_nvendor.

  • header data

pheader-comp_code = '1000'.

pheader-doc_type = 'NB'.

pheader-vendor = lv_nvendor.

pheader-purch_org = 'P000'.

pheader-pur_group = '006'.

pheader-incoterms1 = 'FOB'.

pheader-incoterms2 = 'ORIGIN'.

pheader-our_ref = 'AMBER N'.

pheaderx-comp_code = 'X'.

pheaderx-doc_type = 'X'.

pheaderx-vendor = 'X'.

pheaderx-purch_org = 'X'.

pheaderx-pur_group = 'X'.

pheaderx-incoterms1 = 'X'.

pheaderx-incoterms2 = 'X'.

pheaderx-our_ref = 'X'.

CLEAR lv_nvendor.

ENDFORM. " pheaderdata

FORM pitemdata.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_poitem

IMPORTING

output = lv_npoitem.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_aaord

IMPORTING

output = lv_naaord.

pitem-po_item = lv_npoitem.

pitem-short_text = gs_zcoop1-prdct.

pitem-matl_group = '200200001'.

pitem-quantity = gs_zcoop1-iamount. "'11000.000'.

pitem-po_unit = 'EA'.

pitem-net_price = '1.00'.

pitem-acctasscat = 'F'.

pitem-plant = 'SOAH'.

pitem-gr_basediv = 'X'.

APPEND pitem.

pitemx-po_item = lv_npoitem.

pitemx-po_itemx = 'X'.

pitemx-short_text = 'X'.

pitemx-matl_group = 'X'.

pitemx-quantity = 'X'.

pitemx-po_unit = 'X'.

pitemx-net_price = 'X'.

pitemx-acctasscat = 'X'.

pitemx-plant = 'X'.

pitemx-gr_basediv = 'X'.

APPEND pitemx.

*Fill schedule lines

plt_schedules_in-po_item = lv_npoitem.

plt_schedules_in-sched_line = '0001'.

plt_schedules_in-delivery_date = sy-datum. "'03/20/2008'.

plt_schedules_in-quantity = gs_zcoop1-iamount. "'11000.00'.

APPEND plt_schedules_in.

*Fill schedule line flags

plt_schedules_inx-po_item = lv_npoitem.

plt_schedules_inx-sched_line = '0001'.

plt_schedules_inx-delivery_date = 'X'.

plt_schedules_inx-quantity = 'X'.

APPEND plt_schedules_inx.

poaccount-po_item = lv_npoitem.

poaccount-gl_account = '0000603000'.

poaccount-orderid = lv_naaord.

APPEND poaccount.

poaccountx-po_item = lv_npoitem.

poaccountx-po_itemx = 'X'.

poaccountx-gl_account = 'X'.

poaccountx-orderid = 'X'.

APPEND poaccountx.

potextheader-po_item = lv_npoitem.

potextheader-text_line = gs_zcoop1-reason.

APPEND potextheader.

potextitem-po_item = lv_npoitem.

potextitem-text_line = 'Item Text'.

APPEND potextitem.

ENDFORM. " pheaderdata

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,972

Hello Veni Reddy,

May be the hardcoded G/L number is valid only for the first material number that you are using in the loop. So check the other materials master data...

Thanks,

Greetson

8 REPLIES 8
Read only

Former Member
0 Likes
1,973

Hello Veni Reddy,

May be the hardcoded G/L number is valid only for the first material number that you are using in the loop. So check the other materials master data...

Thanks,

Greetson

Read only

0 Likes
1,972

Hi Greetson,

For this type of PO's they use only G/L Acct no 603000. Am I missing any mandatory fields here. If so why it is creating for the first selected record. Do I have to clear any values?

Second time if I select 2nd row only it is creating PO for that also.

If I select one at a time it is creating all PO's. If I select 4 rows for the first one it is creating po and for remaining it is giving me error.

poaccount-po_item = lv_npoitem.

poaccount-gl_account = '0000603000'.

poaccount-orderid = lv_naaord.

APPEND poaccount.

poaccountx-po_item = lv_npoitem.

poaccountx-po_itemx = 'X'.

poaccountx-gl_account = 'X'.

poaccountx-orderid = 'X'.

APPEND poaccountx.

Please someone guide me what is the problem.

Thanks,

Veni.

Read only

0 Likes
1,972

Hi All,

Can someone please shed some light on this issue.

I have to show this program tomorrow in the user meeting. I am still getting the same error. 'Please enter G/L Acctno'.

I was giving a date before, now I changed it to sys date and it is not acccepting the date(20080313) in this format. Should I convert it.

plt_schedules_in-delivery_date = sy-datum. "'03/20/2008'.

I will appriciate your help.

Thanks,

Veni.

Read only

0 Likes
1,972

hi veni,

u can do 1 thing to test...

go to standard transaction of creating PO (ME21N) and enter all the values that you enter in your bapi.

Check that and you will understand the error (on what more is left to be added in bapi)

regards,

Read only

0 Likes
1,972

Hi Sneha,

I did that and also I single tested the BAPI,both creating PO's fine. From program also it creates PO fine if I choose one line. Error is comming only with creating multiple PO's. If I have to create 4 PO's 1st one is creating properly next 3 are erroring out with 'Enter G/L Acct Num'.

Can some one in the forum please guide me. Today I have to show it to the users.

Thanks,

Veni.

Read only

0 Likes
1,972

Hi Veni,

I am placing our code logic that was prepared by the techno functionall side that we used in one of my project :

*POPULATE POHEADER AND POHEADERX FLAG TABLE

POHEADER-PO_NUMBER = ‘000000000%’

POHEADERX-PO_NUMBER = ‘X’

POHEADER-COMP_CODE = AUFK-BUKRS

POHEADERX-COMP_CODE = ‘X’

If PS_VENDOR = ‘X’

POHEADER-DOC_TYPE = ‘ZFP’

POHEADERX-DOC_TYPE = ‘X’

ELSE

POHEADER-DOC_TYPE = ‘ZFS’

POHEADERX-DOC_TYPE = ‘X’

Endif

POHEADER-VENDOR = A_VENDOR {vendor logged in

POHEADERX-VENDOR = ‘X’

POHEADER-PURCH_ORG = EBAN-EKORG

POHEADERX-PURCH_ORG = ‘X’

POHEADER-PUR_GROUP = EBAN-EKGRP

POHEADERX-PUR_GROUP = ‘X’

POHEADER-CURRENCY = AUFK-WAERS

POHEADERX-CURRENCY = ‘X’

POHEADER-DOC_DATE = SYDATUM

POHEADERX-DOC_DATE = ‘X’

POHEADER-VPER_START = A_REPDATE

POHEADERX-VPER_START = ‘X’

POHEADER-QUOTATION = AFIH-EQUNR

POHEADERX-QUOTATION = ‘X’

POHEADER-SALES_PERS = A_VENDORINVOICENUMBER

POHEADERX-SALES_PERS = ‘X’

POHEADER-OUR_REF = ‘OPEN’

POHEADERX-OUR_REF = ‘X’

Append POHEADER

Append POHEADERX

*Set counters for item, package

Set ITEM_COUNTER = ‘00010’

Set PACK_NO_COUNTER = ‘000000001’

Loop through each EBAN-BNFPO (line item)

*POPULATE POITEM AND POITEMX FLAG TABLE

POITEM-PO_ITEM = ITEM_COUNTER

POITEMX-PO_ITEM = ‘X’

IF EBAN-PSTYP = ‘9’

POITEM-SHORT_TEXT = ZFLT_PARTS_SUMMARY-VMRS_TEXT

POITEMX-SHORT_TEXT = ‘X’

Endif

POITEM-PLANT = EBAN-WERKS

POITEMX-PLANT = ‘X’

POITEM-MATKL = EBAN-MATKL

POITEMX-MATKL = ‘X’

POITEM-ITEM_CAT = EBAN-PSTYP

POITEMX-ITEM_CAT = ‘X’

POITEM-ACCTASSCAT = ‘F’

POITEMX-ACCTASSCAT = ‘X’

POITEM-GR_IND = ‘ ’ {Space

POITEMX-GR_IND = ‘X’

POITEM-IR_IND = ‘X’

POITEMX-IR_IND = ‘X’

POITEM-GR_BASEDIV = ‘ ’ {Space

POITEMX-GR_BASEDIV = ‘X’

POITEM-PREQ_NO = EBAN-BANFN

POITEMX-PREQ_NO = ‘X’

POITEM-PREQ_ITEM = EBAN-BNFPO

POITEMX-PREQ_ITEM = ‘X’

IF EBAN-PSTYP = ‘9’

POITEM-PCKG_NO = PACK_NO_COUNTER

POITEMX-PCKG_NO = ‘X’

POITEM-PREQ_NAME = ZFLT_LABORDATA-PRICE

POITEMX-PREQ_NAME = ‘X’

POITEM-VEND_MAT = ZFLT_LABORDATA-REPAIRTIME

POITEMX-VEND_MAT = ‘X’

POITEM-ACKNOWL_NO = ZFLT_LABORDATA-TAXRATE

POITEMX-ACKNOWL_NO = ‘X’

ELSE { item_cat = 0

POITEM-PCKG_NO = ‘000000000’

POITEMX-PCKG_NO = ‘ ’ {space

Endif

Append POITEM

Append POITEMX

*POPULATE POACCOUNT AND POACCOUNTX FLAG TABLE

POACCOUNT-PO_ITEM = POITEM-PO_ITEM

POACCOUNTX-PO_ITEM = POITEM-PO_ITEM

POACCOUNTX-PO_ITEMX = ‘X’

POACCOUNT-SERIAL_NO = ‘01’

POACCOUNTX-SERIAL_NO = ‘01’

POACCOUNTX-SERIAL_NOX = ‘X’

POACCOUNT-GL_ACCOUNT = EBKN-SAKTO

POACCOUNTX-GL_ACCOUNT = ‘X’

POACCOUNT- BUS_AREA = EBKN-GSBER

POACCOUNTX- BUS_AREA = ‘X’

POACCOUNT-CO_AREA = EBKN-KOKRS

POACCOUNTX-CO_AREA = ‘X’

POACCOUNT-ORDERID = Order # passed in

POACCOUNTX-ORDERID = ‘X’

Append POACCOUNT

Append POACCOUNTX

IF EBAN-PACKNO <> 0

*Get sub-package from ESLL from the purch req package #.

Select SUB_PACKNO

From ESLL

Where PACKNO = EBAN-PACKNO

*Get sub-package and service data from ESLL for Service structure

Select PACKNO, INTROW, SRVPOS, LBNUM, AUSGB, STLVPOS, KTEXT1, MENGE, MEINS, TBTWR, MATKL, USERF1_NUM, USERF1_TXT, USERF2_TXT

From ESLL

Where PACKNO = ESLL-SUB_PACKNO

*POPULATE SERVICE STRUCTURES

*POPULATE POSERVICES TABLE DATA – 2 LINES PER PSTYP = 9

1st line:

POSERVICES-PCKG_NO = PACK_NO_COUNTER

POSERVICES-LINE_NO = ‘0000000001’

POSERVICES-EXT_LINE = ‘0000000000’

Set PACK_NO_COUNTER = PACK_NO_COUNTER +1

POSERVICES-SUBPCKG_NO = PACK_NO_COUNTER

POSERVICES-FROM_LINE = ‘1’.

Append POSERVICES

2nd line:

POSERVICES-PCKG_NO = PACK_NO_COUNTER

POSERVICES-LINE_NO = ‘0000000002’

POSERVICES-EXT_LINE = ‘0000000010’

POSERVICES-SERVICE = ESLL-SRVPOS

POSERVICES-SERV_TYPE = ESLL-LBNUM

POSERVICES-EDITION = ESLL-AUSGB

POSERVICES-SSC_ITEM = ESLL-STLVPOS

POSERVICES-SHORT_TEXT = ESLL-KTEXT1

POSERVICES-QUANTITY = ESLL-MENGE

POSERVICES-BASE_UOM = ‘H’

POSERVICES-GR_PRICE = ESLL-TBTWR

POSERVICES-PRICE_UNIT = 1

POSERVICES-MATL_GROUP = ESLL-MATKL

POSERVICES-PLN_PCKG = ESLL-PACKNO

POSERVICES-PLN_LINE = ESLL-INTROW

POSERVICES-USERF1_NUM = ESLL-USERF1_NUM

POSERVICES-USERF1_TXT = ESLL-USERF1_TXT

POSERVICES-USERF2_TXT = ESLL-USERF2_TXT

Append POSERVICES

*POPULATE POLIMITS TABLE DATA

POLIMITS-PCKG_NO = PACK_NO_COUNTER

Append POLIMITS

*POPULATE POSRVACCESSVALUES TABLE DATA

POSRVACCESSVALUES-PCKG_NO = PACK_NO_COUNTER

POSRVACCESSVALUES-LINE_NO = ‘0000000002’

POSRVACCESSVALUES-SERNO_LINE = ‘01’

POSRVACCESSVALUES-PERCENTAGE = ‘100’

POSRVACCESSVALUES-SERIAL_NO = ‘01’

POSRVACCESSVALUES-QUANTITY = ESLL-MENGE

POSRVACCESSVALUES-NET_VALUE = ESLL-MENGE * ESLL-TBTWR

Append POSRVACCESSVALUES

Endif. {for package no exist

*Increment Package counter

Set PACK_NO_COUNTER = PACK_NO_COUNTER + 1

*POPULATE POCOND AND POCONDX FLAG TABLE DATA FOR EACH ITEM

*Get Tax condition fields from ZSMT23000 (021-02-ZFTX)

Select BUKRS, TXT20, TEXT100

From ZSMT23000

Where REPID = HSFLEET_TAXCOND

POCOND-CONDITION_NO = ‘000000000%’

POCONDX-CONDITION_NO = ‘000000000%’

POCONDX-CONDITION_NOX = ‘X’

POCOND-ITEM_NO = POITEMS-PO_ITEM

POCONDX-ITM_NUMBER = POITEMS-PO_ITEM

POCOND-COND_ST_NO = ZSMT23000-BUKRS

POCONDX-COND_ST_NO = ZSMT23000-BUKRS

POCONDX-COND_ST_NOX = ‘X’

POCOND-COND_COUNT = ZSMT23000-TXT20

POCONDX-COND_COUNT = ‘X’

POCOND-COND_TYPE = ZSMT23000-TEXT100

POCONDX-COND_TYPE = ‘X’

*Calculate Tax Amount

If EBAN-PSTYP = 0

Tax_Amount = (EBAN-MENGE * EBAN-PREIS) * (EBKN-WEMPF / 100)

Item_Total = EBAN-MENGE * EBAN-PREIS

ELSE

Tax_Amount = (ESLL-MENGE * ESLL-TBTWR) * ESLL-USERF1_NUM / 100

Item_Total = ESLL-MENGE * ESLL-TBTWR

Endif.

POCOND-COND_VALUE = Tax_Amount

POCONDX-COND_VALUE = ‘X’

POCOND-CURRENCY = AUFK-WAERS

POCONDX-CURRENCY = ‘X’

POCOND-COND_P_UNIT = 1

POCONDX-COND_P_UNIT = ‘X’

POCOND-CONEXCHRAT = 1

POCONDX-CONEXCHRAT = ‘X’

POCOND-NUMCONVERT = 1

POCONDX-NUMCONVERT = ‘X’

POCOND-DENOMINATO = 1

POCONDX-DENOMINATO = ‘X’

POCOND-CHANGE_ID = ‘U’

POCONDX-CHANGE_ID = ‘X’

Append POCOND

Append POCONDX

*POPULATE POTEXTITEM TABLE DATA FOR EACH ITEM

*POPULATE Complaint, Cause & Correction into F01 text –

For the EBAN-BEDNR = Repair #, retrieve CAUSE_COMPLAINT_TEXT from AT_ITEMS_TABLE

POTEXTITEM-PO_NUMBER = ‘000000000%’

POTEXTITEM-PO_ITEM = POITEMS-PO_ITEM

POTEXTITEM-TEXT_ID = ‘F01’

POTEXTITEM-TEXT_FORM = ‘*’

POTEXTITEM-TEXT_LINE = CAUSE_COMPLAINT_TEXT

Append POTEXTITEM

End Loop

*POPULATE POTEXTHEADER TABLE DATA

Removed 4/3 – will use POHEADER field instead

*Set Invoice Status in F01 text

POTEXTHEADER-PO_NUMBER = ‘000000000%’

POTEXTHEADER-PO_ITEM = ‘00000’

POTEXTHEADER-TEXT_ID = ‘F01’

POTEXTHEADER-TEXT_FORM = ‘*’

POTEXTHEADER-TEXT_LINE = ‘OPEN’

Append POTEXTHEADER

*Invoice Remarks in F07 text from Work order header text

POTEXTHEADER-PO_NUMBER = ‘000000000%’

POTEXTHEADER-PO_ITEM = ‘00000’

POTEXTHEADER-TEXT_ID = ‘F07’

POTEXTHEADER-TEXT_FORM = ‘*’

POTEXTHEADER-TEXT_LINE = A_INVOICEREMARKS

Append POTEXTHEADER

Removed 4/3 – will use POHEADER field instead

*Service Provider Invoice Numer in F08 text

POTEXTHEADER-PO_NUMBER = ‘000000000%’

POTEXTHEADER-PO_ITEM = ‘00000’

POTEXTHEADER-TEXT_ID = ‘F08’

POTEXTHEADER-TEXT_FORM = ‘*’

POTEXTHEADER-TEXT_LINE = A_VENDORINVOICENUMBER

Append POTEXTHEADER

*Odometer Reading in F09 text

POTEXTHEADER-PO_NUMBER = ‘000000000%’

POTEXTHEADER-PO_ITEM = ‘00000’

POTEXTHEADER-TEXT_ID = ‘F09’

POTEXTHEADER-TEXT_FORM = ‘*’

POTEXTHEADER-TEXT_LINE = A_ODOMETER

Append POTEXTHEADER

*POPULATE entire VIN # in F10 text

POTEXTHEADER-PO_NUMBER = ‘000000000%’

POTEXTHEADER-PO_ITEM = ‘00000’

POTEXTHEADER-TEXT_ID = ‘F10’

POTEXTHEADER-TEXT_FORM = ‘*’

POTEXTHEADER-TEXT_LINE = A_VIN_NUMBER

Append POTEXTHEADER

*POPULATE Fleet # in F11 text

PO_NUMBER = ‘000000000%’

PO_ITEM = ‘00000’

TEXT_ID = ‘F11’

TEXT_FORM = ‘*’

TEXT_LINE = A_FLEET

Append POTEXTHEADER

Call BAPI_PO_CREATE1

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

Loop at i_return.

We were able to create PO's without any problem.....

Let me know how it goes.

Thanks,

Greetson

Read only

0 Likes
1,972

Hi Greetson,

I really really appriciate your help. You saved my day. I am very happy to show it to the users later today.

Program is working fine now.

Hi SKJ,

Thank you.

In the following code, I forgot to add ' poaccountx-serial_no = '01'', I was just giving only

'poaccountx-serial_nox = 'X''. That's what was the error.

poaccountx-po_item = lv_npoitem.

poaccountx-po_itemx = 'X'.

poaccountx-serial_no = '01'.

poaccountx-serial_nox = 'X'.

poaccountx-quantity = 'X'.

poaccountx-gl_account = 'X'.

poaccountx-orderid = 'X'.

APPEND poaccountx.

Thanks Again to all.

Regards,

Veni.

Read only

Former Member
0 Likes
1,972

I guess the isssue is with first PO item only. I could see in your code that you are not passing SERIAL_NO. Try passing a hard coded value in this field as 01.

Also, check if GL exists in SKA1 OR SKB1.

Thanks,

SKJ