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

Using BAPI_PO_CREATE1

narendra_rajput
Explorer
0 Likes
2,564

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.

DATAW_EKKO TYPE T_EKKO,
        I_EKKO TYPE TABLE OF T_EKKO.

DATAW_EKPO TYPE T_EKPO,
        I_EKPO TYPE TABLE OF T_EKPO.

DATAW_ITAB TYPE T_ITAB,
        I_ITAB TYPE TABLE OF T_ITAB.
DATAITAB1 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 .

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

DATAGD_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.
DATATOT_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.

DATARETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE . " Message Return table
DATAV_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,
        (10IT_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





NUMCOMP_CODEDOC_TYPECREAT_DATEITEM_INTVLVENDORPMNTTRMSPURCH_ORGPUR_GROUPCOLLECT_NOPO_ITEMITEM_CATMATERIALPLANTQUANTITYNET_PRICETAX_CODE
11000NB201231051010003091000A100101354110019000026111010050
1 ACCEPTED SOLUTION
Read only

narendra_rajput
Explorer
0 Likes
2,363

I have no  one mm functional person my i want create with reference of purchase requisition using po upload funcation

6 REPLIES 6
Read only

Former Member
0 Likes
2,363

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

Read only

0 Likes
2,363

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

Read only

RaymondGiuseppi
Active Contributor
0 Likes
2,363

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

Read only

narendra_rajput
Explorer
0 Likes
2,364

I have no  one mm functional person my i want create with reference of purchase requisition using po upload funcation

Read only

0 Likes
2,363

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

Read only

0 Likes
2,363

thank you my problem solve