‎2014 Jun 05 12:28 PM
Dear Professional,
I want create using Po using BAPI_PO_CREATE1. Following code
Here i attached error and uploaded excel sheet
REPORT ZMM_BAPI_PO_CREATE.
TYPES: BEGIN OF T_EKKO,
NUM(5) TYPE C,
COMP_CODE TYPE BUKRS,
DOC_TYPE(4) TYPE C,
CREAT_DATE(10) TYPE C,
ITEM_INTVL(5) TYPE C,
VENDOR(10) TYPE C,
PMNTTRMS(4) TYPE C,
PURCH_ORG(4) TYPE C,
PUR_GROUP(3) TYPE C,
COLLECT_NO(10) TYPE C,
END OF T_EKKO.
TYPES: BEGIN OF T_EKPO,
NUM(5) TYPE C,
PO_ITEM(5) TYPE C,
ITEM_CAT(1) TYPE C,
MATERIAL(18) TYPE C,
PLANT(4) TYPE C,
QUANTITY(13) TYPE C,
* po_unit(3) TYPE c,
NET_PRICE(28) TYPE C,
TAX_CODE(2) TYPE C,
NET_VALUE(28) TYPE C,
END OF T_EKPO.
TYPES: BEGIN OF T_ITAB,
NUM(5) TYPE C,
COMP_CODE TYPE BUKRS,
DOC_TYPE(4) TYPE C,
CREAT_DATE(10) TYPE C,
ITEM_INTVL(5) TYPE C,
VENDOR(10) TYPE C,
PMNTTRMS(4) TYPE C,
PURCH_ORG(4) TYPE C,
PUR_GROUP(3) TYPE C,
COLLECT_NO(10) TYPE C,
PO_ITEM(5) TYPE C,
ITEM_CAT(1) TYPE C,
MATERIAL(18) TYPE C,
PLANT(4) TYPE C,
QUANTITY(13) TYPE C,
* po_unit(3) TYPE c,
NET_PRICE(28) TYPE C,
TAX_CODE(2) TYPE C,
END OF T_ITAB.
DATA: W_EKKO TYPE T_EKKO,
I_EKKO TYPE TABLE OF T_EKKO.
DATA: W_EKPO TYPE T_EKPO,
I_EKPO TYPE TABLE OF T_EKPO.
DATA: W_ITAB TYPE T_ITAB,
I_ITAB TYPE TABLE OF T_ITAB.
DATA: ITAB1 LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER
LINE.
DATA : POHEADER TYPE BAPIMEPOHEADER ,
POHEADERX TYPE BAPIMEPOHEADERX ,
POITEM TYPE BAPIMEPOITEM ,
POITEMX TYPE BAPIMEPOITEMX ,
POACCOUNT TYPE BAPIMEPOACCOUNT ,
POACCOUNTX TYPE BAPIMEPOACCOUNTX .
DATA: POHEADER1 TYPE TABLE OF BAPIMEPOHEADER ,
POHEADERX1 TYPE TABLE OF BAPIMEPOHEADERX ,
POITEM1 TYPE TABLE OF BAPIMEPOITEM ,
POITEMX1 TYPE TABLE OF BAPIMEPOITEMX ,
POACCOUNT1 TYPE TABLE OF BAPIMEPOACCOUNT ,
POACCOUNTX1 TYPE TABLE OF BAPIMEPOACCOUNTX .
DATA: GD_CURRENTROW TYPE I.
DATA : PURCHASEORDER LIKE EKKO-EBELN.
DATA : BEGIN OF IT_ERROR OCCURS 0,
PONO LIKE EKKO-EBELN,
ERR_MSG(73) TYPE C, "TO RETREIVE ERROR MESSAGES
END OF IT_ERROR.
DATA: TOT_REC TYPE I, "Total Records
GD_UPDATE TYPE I, "Main Table Increement Counter
GD_LINES TYPE I, "Success Table increement Counter
W_TEXTOUT LIKE T100-TEXT. "VARIABLE TO GET ERROR LOG
DATA : BEGIN OF IT_SUCCESS OCCURS 0,
PURCHASEORDER LIKE EKKO-EBELN, "PROJECT
END OF IT_SUCCESS.
DATA: RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE . " Message Return table
DATA: V_NUM(5) TYPE C.
PARAMETERS : FILEPATH LIKE RLGRAP-FILENAME OBLIGATORY. "TYPE IBIPPARMS-PATH.
*------------------------------------------------------*
*Initialization
*------------------------------------------------------*
*At screen selection
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILEPATH.
*------------------------------------------------------*
PERFORM VALUE_HELP.
*Top of page
*------------------------------------------------------*
START-OF-SELECTION.
*------------------------------------------------------*
*End-of-selection
*------------------------------------------------------*
PERFORM: DATA_UPLOAD.
*&---------------------------------------------------------------------*
*& Form DATA_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DATA_UPLOAD .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = FILEPATH
I_BEGIN_COL = '1'
I_BEGIN_ROW = '2' "'Do not require headings
I_END_COL = '17' "'22'
I_END_ROW = '10000'
TABLES
INTERN = ITAB1
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE E010(ZZ) WITH TEXT-001. "Problem uploading Excel Spreadsheet
ENDIF.
*UPLOAD
SORT ITAB1 BY ROW COL.
* Get first row retrieved
READ TABLE ITAB1 INDEX 1.
* Set first row retrieved to current row
GD_CURRENTROW = ITAB1-ROW.
LOOP AT ITAB1.
* Reset values for next row
IF ITAB1-ROW NE GD_CURRENTROW.
APPEND W_ITAB TO I_ITAB .
CLEAR W_ITAB.
GD_CURRENTROW = ITAB1-ROW.
ENDIF.
CASE ITAB1-COL.
WHEN '0001'.
W_ITAB-NUM = ITAB1-VALUE.
WHEN '0002'.
W_ITAB-COMP_CODE = ITAB1-VALUE.
WHEN '0003'.
W_ITAB-DOC_TYPE = ITAB1-VALUE.
WHEN '0004'.
W_ITAB-CREAT_DATE = ITAB1-VALUE.
WHEN '0005'.
W_ITAB-ITEM_INTVL = ITAB1-VALUE.
WHEN '0006'.
W_ITAB-VENDOR = ITAB1-VALUE.
WHEN '0007'.
W_ITAB-PMNTTRMS = ITAB1-VALUE.
WHEN '0008'.
W_ITAB-PURCH_ORG = ITAB1-VALUE.
WHEN '0009'.
W_ITAB-PUR_GROUP = ITAB1-VALUE.
WHEN '0010'.
W_ITAB-COLLECT_NO = ITAB1-VALUE.
WHEN '0011'.
W_ITAB-PO_ITEM = ITAB1-VALUE.
WHEN '0012'.
W_ITAB-ITEM_CAT = ITAB1-VALUE.
WHEN '0013'.
W_ITAB-MATERIAL = ITAB1-VALUE.
WHEN '0014'.
W_ITAB-PLANT = ITAB1-VALUE.
WHEN '0015'.
W_ITAB-QUANTITY = ITAB1-VALUE.
WHEN '0016'.
W_ITAB-NET_PRICE = ITAB1-VALUE.
WHEN '0017'.
W_ITAB-TAX_CODE = ITAB1-VALUE.
ENDCASE.
ENDLOOP.
APPEND W_ITAB TO I_ITAB.
CLEAR W_ITAB.
LOOP AT I_ITAB INTO W_ITAB.
IF W_ITAB-NUM <> V_NUM.
W_EKKO-NUM = W_ITAB-NUM.
W_EKKO-COMP_CODE = W_ITAB-COMP_CODE.
W_EKKO-DOC_TYPE = W_ITAB-DOC_TYPE.
W_EKKO-CREAT_DATE = W_ITAB-CREAT_DATE.
W_EKKO-ITEM_INTVL = W_ITAB-ITEM_INTVL.
W_EKKO-VENDOR = W_ITAB-VENDOR.
W_EKKO-PMNTTRMS = W_ITAB-PMNTTRMS.
W_EKKO-PURCH_ORG = W_ITAB-PURCH_ORG.
W_EKKO-PUR_GROUP = W_ITAB-PUR_GROUP.
W_EKKO-COLLECT_NO = W_ITAB-COLLECT_NO.
APPEND W_EKKO TO I_EKKO.
ENDIF.
W_EKPO-NUM = W_ITAB-NUM.
W_EKPO-PO_ITEM = W_ITAB-PO_ITEM.
W_EKPO-ITEM_CAT = W_ITAB-ITEM_CAT.
W_EKPO-MATERIAL = W_ITAB-MATERIAL.
W_EKPO-PLANT = W_ITAB-PLANT.
W_EKPO-QUANTITY = W_ITAB-QUANTITY.
* w_ekpo-po_unit = w_itab-po_unit.
W_EKPO-NET_PRICE = W_ITAB-NET_PRICE.
W_EKPO-TAX_CODE = W_ITAB-TAX_CODE.
W_EKPO-NET_VALUE = W_EKPO-NET_PRICE * W_EKPO-QUANTITY.
CONDENSE W_EKPO-NET_VALUE.
V_NUM = W_EKKO-NUM.
APPEND W_EKPO TO I_EKPO.
ENDLOOP.
LOOP AT I_EKKO INTO W_EKKO.
POHEADER-COMP_CODE = W_EKKO-COMP_CODE.
POHEADER-DOC_TYPE = W_EKKO-DOC_TYPE.
POHEADER-DOC_DATE = W_EKKO-CREAT_DATE.
POHEADER-ITEM_INTVL = W_EKKO-ITEM_INTVL.
POHEADER-VENDOR = W_EKKO-VENDOR.
POHEADER-PMNTTRMS = W_EKKO-PMNTTRMS.
POHEADER-PURCH_ORG = W_EKKO-PURCH_ORG.
POHEADER-PUR_GROUP = W_EKKO-PUR_GROUP.
POHEADER-COLLECT_NO = W_EKKO-COLLECT_NO.
POHEADER-CURRENCY_ISO = 'USD'. "Narendra
APPEND POHEADER TO POHEADER1.
POHEADERX-COMP_CODE = 'X'.
POHEADERX-DOC_TYPE = 'X'.
POHEADERX-CREAT_DATE = 'X'.
POHEADERX-ITEM_INTVL = 'X'.
POHEADERX-VENDOR = 'X'.
POHEADERX-PMNTTRMS = 'X'.
POHEADERX-PURCH_ORG = 'X'.
POHEADERX-PUR_GROUP = 'X'.
POHEADERX-COLLECT_NO = 'X'.
APPEND POHEADERX TO POHEADERX1.
LOOP AT I_EKPO INTO W_EKPO WHERE NUM = W_EKKO-NUM.
POITEM-PO_ITEM = W_EKPO-PO_ITEM.
POITEM-ITEM_CAT = W_EKPO-ITEM_CAT.
POITEM-MATERIAL = W_EKPO-MATERIAL.
POITEM-PLANT = W_EKPO-PLANT .
POITEM-QUANTITY = W_EKPO-QUANTITY.
POITEM-NET_PRICE = W_EKPO-NET_PRICE.
POITEM-TAX_CODE = W_EKPO-TAX_CODE.
APPEND POITEM TO POITEM1.
POITEMX-PO_ITEM = W_EKPO-PO_ITEM.
POITEMX-PO_ITEMX = 'X'.
POITEMX-ITEM_CAT = 'X'.
POITEMX-MATERIAL = 'X'.
POITEMX-PLANT = 'X'.
POITEMX-QUANTITY = 'X'.
POITEMX-NET_PRICE = 'X'.
POITEMX-TAX_CODE = 'X'.
APPEND POITEMX TO POITEMX1.
POACCOUNT-PO_ITEM = W_EKPO-PO_ITEM.
POACCOUNT-NET_VALUE = W_EKPO-NET_VALUE.
APPEND POACCOUNT TO POACCOUNT1.
POACCOUNTX-PO_ITEM = W_EKPO-PO_ITEM.
POACCOUNTX-PO_ITEMX = 'X'.
POACCOUNTX-NET_VALUE = 'X'.
APPEND POACCOUNTX TO POACCOUNTX1.
ENDLOOP.
BREAK NIRDEV01.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = POHEADER
POHEADERX = POHEADERX
IMPORTING
EXPPURCHASEORDER = PURCHASEORDER
TABLES
RETURN = RETURN
POITEM = POITEM1
POITEMX = POITEMX1
POACCOUNT = POACCOUNT1
POACCOUNTX = POACCOUNTX1.
IF PURCHASEORDER <> SPACE.
COMMIT WORK AND WAIT.
ADD 1 TO GD_UPDATE.
IT_SUCCESS-PURCHASEORDER = PURCHASEORDER.
APPEND IT_SUCCESS.
ELSE.
LOOP AT RETURN.
IT_ERROR-PONO = W_ITAB-COLLECT_NO.
IT_ERROR-ERR_MSG = RETURN-MESSAGE .
APPEND IT_ERROR.
ENDLOOP.
ENDIF.
CLEAR: POACCOUNTX1,POACCOUNT1, POITEMX1, POITEM1, POHEADERX1, POHEADER1.
CLEAR: RETURN[], POHEADER, POITEM, POACCOUNT.
ENDLOOP.
DESCRIBE TABLE IT_SUCCESS LINES GD_LINES.
IF GD_LINES GT 0.
* Display result report column headings
PERFORM DISPLAY_COLUMN_HEADINGS.
* Display result report
PERFORM DISPLAY_SUCESS.
ENDIF.
* IF SUCESS FAILS Display Error Report
DESCRIBE TABLE IT_ERROR LINES GD_LINES.
IF GD_LINES GT 0.
PERFORM ERRORHEADINGS.
PERFORM ERRORREPORT.
ENDIF.
ENDFORM. "data_upload
*&---------------------------------------------------------------------*
*& Form display_column_headings
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DISPLAY_COLUMN_HEADINGS.
WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
SKIP.
WRITE:2 'The following records inserted successfully:'(013).
WRITE:/ SY-ULINE(15).
FORMAT COLOR COL_HEADING.
WRITE:/ SY-VLINE,
(10) 'Purchase order'(004), SY-VLINE.
WRITE:/ SY-ULINE(15).
ENDFORM. "display_column_headings
*Subroutine to display SUCESS REPORT
FORM DISPLAY_SUCESS.
FORMAT COLOR COL_NORMAL.
LOOP AT IT_SUCCESS.
WRITE:/ SY-VLINE,
(10) IT_SUCCESS-PURCHASEORDER, SY-VLINE.
CLEAR IT_SUCCESS.
ENDLOOP.
WRITE:/ SY-ULINE(15).
REFRESH: IT_SUCCESS.
FORMAT COLOR COL_BACKGROUND.
ENDFORM. "DISPLAY_REPORT
*&---------------------------------------------------------------------*
*& Form errorreport
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ERRORREPORT.
LOOP AT IT_ERROR.
WRITE:/ SY-VLINE,
(10) IT_ERROR-PONO, SY-VLINE,
(80) IT_ERROR-ERR_MSG, SY-VLINE.
ENDLOOP.
WRITE:/ SY-ULINE(134).
REFRESH: IT_ERROR.
ENDFORM. "errorreport
*&---------------------------------------------------------------------*
*& Form ERRORHEADINGS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ERRORHEADINGS.
SKIP.
WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
SKIP.
WRITE:2 'The following records failed during update:'(008).
WRITE:/ SY-ULINE(134).
FORMAT COLOR COL_HEADING.
WRITE:/ SY-VLINE,
(10) 'ERROR.'(009), SY-VLINE.
WRITE:/ SY-ULINE(134).
FORMAT COLOR COL_NORMAL.
ENDFORM. "ERRORHEADINGS
*&---------------------------------------------------------------------*
*& Form VALUE_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM VALUE_HELP.
CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'
EXPORTING
DEF_FILENAME = ' '
DEF_PATH = ' '
MASK = ',*.*,*.*.'
MODE = 'O'
TITLE = ' '
IMPORTING
FILENAME = FILEPATH
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
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. " VALUE_HELP
Here i attached error and uploaded excel sheet
Thanks In advance
| NUM | COMP_CODE | DOC_TYPE | CREAT_DATE | ITEM_INTVL | VENDOR | PMNTTRMS | PURCH_ORG | PUR_GROUP | COLLECT_NO | PO_ITEM | ITEM_CAT | MATERIAL | PLANT | QUANTITY | NET_PRICE | TAX_CODE |
| 1 | 1000 | NB | 20123105 | 10 | 1000309 | 1000 | A | 1001013541 | 10 | 0 | 19000026 | 1110 | 100 | 50 | ||
‎2014 Jun 05 5:19 PM
I have no one mm functional person my i want create with reference of purchase requisition using po upload funcation
‎2014 Jun 05 12:36 PM
Hi Narendra,
You need to correct these errors, for example - Account assignment mandatory means you need to supply account assignment value in your excel sheet! Sit with your functional consultant and test the data in function builder.
A small tip - use function module BAPI_PO_GETDETAIL1 or BAPI_PO_GETDETAIL to get the details of a created PO, then check as to are you returning the same in you excel sheet for PO creation.
Cheers,
Varun
‎2014 Jun 05 3:04 PM
Hi,
You need to correct the proper data. Vendor, Material, You need to maintain initial value for the material which you are using in PO.
Take some help from Functional (MM) Person, It would make your life easy
Thanks
‎2014 Jun 05 12:37 PM
BAPI are not BDC they require internal format of data. Some call of conversion-exit FM like
CONVERSION_EXIT_ALPHA_INPUT or CONVERSION_EXIT_MATN1_INPUT are required, lok at domain definition of the fields to identify any conversion-exit.
Also analyze the RETURN table yourself, a "No master records exitst for" or "mandatory field" error message are self-explanatory.
NB: Please don't post the whole code, or attach it in a txt file
Regards,
Raymond
‎2014 Jun 05 5:19 PM
I have no one mm functional person my i want create with reference of purchase requisition using po upload funcation
‎2014 Jun 06 5:21 AM
Hi Nadrendra,
I would suggest you to test the BAPI first in SE37 by giving the inputs in se37 only and correct the errors with the return tab and also note all the fields given after the succesfull runing of BAPI
you can refer the FM Documentation where you can find some help in filling the BAPI structures.
No master record exists for vendor 1000309
check wheather vendor 1000309 has maintained master data or not in XK02.
account assignment category mandatory for material 19000026
Check the master data for Material 19000026 in MM02
Have u maintained Accounting Views for that material.
if yes, please give the valuation class in Acct View1.
if not, go to MM01 and add acct Views
material does not exists or not active
Append zero's before the material number and try
Regards,
Pavan
‎2014 Jun 06 10:23 AM