‎2008 Mar 13 8:54 PM
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
‎2008 Mar 13 9:15 PM
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
‎2008 Mar 13 9:15 PM
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
‎2008 Mar 13 10:17 PM
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.
‎2008 Mar 13 10:47 PM
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.
‎2008 Mar 14 4:14 AM
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,
‎2008 Mar 14 2:28 PM
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.
‎2008 Mar 14 2:53 PM
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
‎2008 Mar 14 4:19 PM
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.
‎2008 Mar 13 10:13 PM
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