Application Development 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: 

Problem in using BAPI_MATERIAL_SAVEDATA

Former Member
0 Kudos

I want to extend a Material from Plant A to Plant B. I am getting the following error.

E MM 360 Key fields for user data PLANTDATA and checkbox structure PLANTDATAX are different

Please correct in the following code

data: la_headdata type BAPIMATHEAD,

la_clientdata type BAPI_MARA,

la_CLIENTDATAX type BAPI_MARAX,

la_PLANTDATA type BAPI_marc, "Plant View

la_PLANTDATAX type bapi_marcx, "Plant View

la_mbew type bapi_mbew, "Accounting View

la_mbewx type bapi_mbewx.

*la_return type BAPIRET2.

*to return messages

DATA:BEGIN OF la_RETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA:END OF la_RETURN.

data: i_materialdescription type table of BAPI_MAKT,

wa_mat_desc like line of i_materialdescription.

  • Header

la_headdata-MATERIAL = '000001000000004000'.

la_headdata-IND_SECTOR = 'M'.

la_headdata-MATL_TYPE = 'ZALB'.

la_headdata-basic_view = 'X'.

la_headdata-purchase_view = 'X'.

la_headdata-account_view = 'X'.

la_headdata-MRP_VIEW = 'X'.

la_headdata-STORAGE_VIEW = 'X'.

la_headdata-COST_VIEW = 'X'.

  • Client Data - Basic

la_clientdata-BASE_UOM = 'EA'.

la_CLIENTDATAX-BASE_UOM = 'X'.

la_clientdata-MATL_GROUP = '21001000'.

la_CLIENTDATAX-MATL_GROUP = 'X'.

la_clientdata-unit_of_wt = 'KG'.

la_clientdatax-unit_of_wt = 'X'.

la_clientdata-division = '10'.

la_clientdatax-division = 'X'.

  • Material Description

wa_mat_desc-langu = 'E'.

wa_mat_desc-MATL_DESC = '+TLA,FILTER KIT,BUNDLE B'.

append wa_mat_desc to i_materialdescription.

clear: wa_mat_desc.

  • Plant - Purchasing

la_PLANTDATA-plant = '5530'.

la_PLANTDATAX-plant = 'X'.

la_PLANTDATA-pur_group = '006'.

la_PLANTDATAX-pur_group = 'X'.

  • Accounting

la_mbew-val_area = '5530'.

la_mbewx-val_area = 'X'.

la_mbew-price_ctrl = 'S'.

la_mbewx-price_ctrl = 'X'.

la_mbew-std_price = '0.01'.

la_mbewx-std_price = 'X'.

*la_mbew-price_unit = '1.000'.

*la_mbewx-price_unit = 'X'.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

EXPORTING

headdata = la_headdata

CLIENTDATA = la_clientdata

CLIENTDATAX = la_CLIENTDATAX

PLANTDATA = la_PLANTDATA

PLANTDATAX = la_PLANTDATAX

  • FORECASTPARAMETERS =

  • FORECASTPARAMETERSX =

  • PLANNINGDATA =

  • PLANNINGDATAX =

  • STORAGELOCATIONDATA =

  • STORAGELOCATIONDATAX =

VALUATIONDATA = la_mbew

VALUATIONDATAX = la_mbewx

  • WAREHOUSENUMBERDATA =

  • WAREHOUSENUMBERDATAX =

  • SALESDATA =

  • SALESDATAX =

  • STORAGETYPEDATA =

  • STORAGETYPEDATAX =

  • FLAG_ONLINE = ' '

  • FLAG_CAD_CALL = ' '

IMPORTING

RETURN = la_return

TABLES

MATERIALDESCRIPTION = i_materialdescription

  • UNITSOFMEASURE =

  • UNITSOFMEASUREX =

  • INTERNATIONALARTNOS =

  • MATERIALLONGTEXT =

  • TAXCLASSIFICATIONS =

  • RETURNMESSAGES =

  • PRTDATA =

  • PRTDATAX =

  • EXTENSIONIN =

  • EXTENSIONINX =

.

read table la_return with key TYPE = 'S'.

if sy-subrc = 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

endif.

WRITE:/ la_RETURN-TYPE,

2 la_RETURN-ID,

22 la_RETURN-NUMBER,

25 la_RETURN-MESSAGE.

4 REPLIES 4

Former Member
0 Kudos

Hi Vankatesh Rao,

Error message is clearly telling that you are not passing the correct value for the PLANT field .

Your code :

la_PLANTDATA-plant = '5530'.

la_PLANTDATAX-plant = 'X'.

this needs to be changed to :

la_PLANTDATA-plant = '5530'.

la_PLANTDATAX-plant = '5530'.

Update field only needs to hold X and not the PLANT field on your structure " la_PLANTDATAX".

Let me know if you have any questions.

Thanks,

Greetson

0 Kudos

Hi,

hope this code gives you an idea

*&---------------------------------------------------------------------*

*& Report ZKAR_MATMAS_BAPI

*&---------------------------------------------------------------------*

*& This program demonstrates how easy it is to create Material master

*& data using BAPI_MATERIAL_SAVEDATA

*& The program also generates a report post-execution displaying errors

*& as well as successful uploads

*&---------------------------------------------------------------------*
REPORT ZKAR_MATMAS_BAPI.
*----------------------------------------------------------------------*

* TABLES

*----------------------------------------------------------------------*
*----------------------------------------------------------------------*

* FLAGS *

*----------------------------------------------------------------------*
DATA: F_STOP. " Flag used to stop processing
*----------------------------------------------------------------------*

* DATA DECLARATIONS *

*----------------------------------------------------------------------*
DATA : V_EMPTY TYPE I, " No. of empty records

V_TOTAL TYPE I. " Total no. of records.
*----------------------------------------------------------------------*

* STRUCTURES & INTERNAL TABLES

*----------------------------------------------------------------------*
*BAPI structures

*----------------------------------------------------------------------*

DATA: BAPI_HEAD LIKE BAPIMATHEAD, " Header Segment with Control Information

BAPI_MAKT LIKE BAPI_MAKT, " Material Description

BAPI_MARA1 LIKE BAPI_MARA, " Client Data

BAPI_MARAX LIKE BAPI_MARAX, " Checkbox Structure for BAPI_MARA

BAPI_MARC1 LIKE BAPI_MARC, " Plant View

BAPI_MARCX LIKE BAPI_MARCX, " Checkbox Structure for BAPI_MARC

BAPI_MBEW1 LIKE BAPI_MBEW, " Accounting View

BAPI_MBEWX LIKE BAPI_MBEWX, " Checkbox Structure for BAPI_MBEW

BAPI_RETURN LIKE BAPIRET2. " Return Parameter

*--- Internal table to hold excel file data

DATA: IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

*--- Internal table to hold Matetrial descriptions

DATA: BEGIN OF IT_MAKT OCCURS 100.

        INCLUDE STRUCTURE BAPI_MAKT.

DATA: END OF IT_MAKT.

*--- Internal to hold the records in the text file

DATA : BEGIN OF IT_DATA OCCURS 100,

            WERKS(4), " Plant

            MTART(4), " Material type

            MATNR(18), " Material number

            MATKL(9) , " Material group

            MBRSH(1), " Industry sector

            MEINS(3), " Base unit of measure

            GEWEI(3), " Weight Unit

            SPART(2), " Division

            EKGRP(3), " Purchasing group

            VPRSV(1), " Price control indicator

            STPRS(12), " Standard price

            PEINH(3), " Price unit

            SPRAS(2), " Language key

            MAKTX(40), " Material description

            END OF IT_DATA.

*----------------------------------------------------------------------*

* SELECTION SCREEN. *

*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-111.

PARAMETER : P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT " Input File

'C:\Material_master.XLS'.

PARAMETER : P_MAX(4) OBLIGATORY DEFAULT '100'. " no.of recs in a session

PARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header Lines

PARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY,

P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY,

P_ENDCOL TYPE I DEFAULT 100 NO-DISPLAY,

P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY.

SELECTION-SCREEN END OF BLOCK SCR1.

*---------------------------------------------------------------------*

* AT SELECTION-SCREEN *

*---------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

*--- Validating file

  PERFORM VALIDATE_FILE USING P_FILE.

*----------------------------------------------------------------------*

* START-OF-SELECTION

*----------------------------------------------------------------------*

START-OF-SELECTION.

*--- Perform to convert the Excel data into an internal table

  PERFORM CONVERT_XLS_ITAB.

  IF NOT IT_DATA[] IS INITIAL.

*--- Perform to delete Header lines

    PERFORM DELETE_HEADER_EMPTY_RECS.

  ENDIF.

*----------------------------------------------------------------------*

* END OF SELECTION. *

*----------------------------------------------------------------------*

END-OF-SELECTION.

*--- Perform to upload Material Master data

  PERFORM UPLOAD_MATMAS.

*----------------------------------------------------------------------*

* Form : validate_input_file

*----------------------------------------------------------------------*

* Description : To provide F4 help for file if read from PC

*----------------------------------------------------------------------*

FORM VALIDATE_FILE USING F_FILE TYPE RLGRAP-FILENAME.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    CHANGING
      FILE_NAME     = F_FILE
    EXCEPTIONS
      MASK_TOO_LONG = 1
      OTHERS        = 2.

  IF SY-SUBRC <> 0.

    MESSAGE S010(ZLKPL_MSGCLASS). " 'Error in getting filename'.

  ENDIF.

ENDFORM. " validate_input_file

*&---------------------------------------------------------------------*

*& Form CONVER_XLS_ITAB

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM CONVERT_XLS_ITAB.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME    = P_FILE
      I_BEGIN_COL = P_BEGCOL
      I_BEGIN_ROW = P_BEGROW
      I_END_COL   = P_ENDCOL
      I_END_ROW   = P_ENDROW
    TABLES
      INTERN      = IT_INTERN.

  IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

*--- Perform to move the data into an internal data

  PERFORM MOVE_DATA.

ENDFORM. " CONVERT_XLS_ITAB

*&---------------------------------------------------------------------*

*& Form MOVE_DATA

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM MOVE_DATA.

  DATA : LV_INDEX TYPE I.

  FIELD-SYMBOLS <FS>.

*--- Sorting the internal table

  SORT IT_INTERN BY ROW COL.

  CLEAR IT_INTERN.

  LOOP AT IT_INTERN.

    MOVE IT_INTERN-COL TO LV_INDEX.

*--- Assigning the each record to an internal table row

    ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO <FS>.

*--- Asigning the field value to a field symbol

    MOVE IT_INTERN-VALUE TO <FS>.

    AT END OF ROW.

      APPEND IT_DATA.

      CLEAR IT_DATA.

    ENDAT.

  ENDLOOP.

ENDFORM. " MOVE_DATA

*&---------------------------------------------------------------------*

*& Form DELETE_HEADER_EMPTY_RECS

*&---------------------------------------------------------------------*

* To delete the Header and empty records

*----------------------------------------------------------------------*

FORM DELETE_HEADER_EMPTY_RECS.

  DATA: LV_TABIX LIKE SY-TABIX.

  IF NOT P_HEADER IS INITIAL.

    LOOP AT IT_DATA.

      IF P_HEADER > 0 AND NOT IT_DATA IS INITIAL.

        DELETE IT_DATA FROM 1 TO P_HEADER.

* P_HEADER = 0.

        EXIT.

      ENDIF.

    ENDLOOP.

  ENDIF.

  CLEAR IT_DATA.

*--- To delete the empty lines from internal table

  LOOP AT IT_DATA.

    LV_TABIX = SY-TABIX.

    IF IT_DATA IS INITIAL.

      V_EMPTY = V_EMPTY + 1.

      DELETE IT_DATA INDEX LV_TABIX..

    ENDIF.

  ENDLOOP.

  CLEAR IT_DATA.

*--- Total no of recs in file

  DESCRIBE TABLE IT_DATA LINES V_TOTAL.

  IF V_TOTAL = 0.

    MESSAGE I013(ZLKPL_MSGCLASS). " No records in the file

    F_STOP = 'X'.

    STOP.

  ENDIF.

ENDFORM. " DELETE_HEADER_EMPTY_RECS

*&---------------------------------------------------------------------*

*& Form UPLOAD_MATMAS

*&---------------------------------------------------------------------*

* to upload Material Master data

*----------------------------------------------------------------------*

FORM UPLOAD_MATMAS .

  LOOP AT IT_DATA.

* Header
    UNPACK IT_DATA-MATNR TO IT_DATA-MATNR.
    BAPI_HEAD-MATERIAL = IT_DATA-MATNR.

    BAPI_HEAD-IND_SECTOR = IT_DATA-MBRSH.

    BAPI_HEAD-MATL_TYPE = IT_DATA-MTART.

    BAPI_HEAD-BASIC_VIEW = 'X'.

    BAPI_HEAD-PURCHASE_VIEW = 'X'.

    BAPI_HEAD-ACCOUNT_VIEW = 'X'.

* Material Description

    REFRESH IT_MAKT.

    IT_MAKT-LANGU = IT_DATA-SPRAS.

    IT_MAKT-MATL_DESC = IT_DATA-MAKTX.

    APPEND IT_MAKT.

* Client Data - Basic

    BAPI_MARA1-MATL_GROUP = IT_DATA-MATKL.

    BAPI_MARA1-BASE_UOM = IT_DATA-MEINS.

    BAPI_MARA1-UNIT_OF_WT = IT_DATA-GEWEI.

    BAPI_MARA1-DIVISION = IT_DATA-SPART.

    BAPI_MARAX-MATL_GROUP = 'X'.

    BAPI_MARAX-BASE_UOM = 'X'.

    BAPI_MARAX-UNIT_OF_WT = 'X'.

    BAPI_MARAX-DIVISION = 'X'.

* Plant - Purchasing

    BAPI_MARC1-PLANT = IT_DATA-WERKS.

    BAPI_MARC1-PUR_GROUP = IT_DATA-EKGRP.

    BAPI_MARCX-PLANT = IT_DATA-WERKS.

    BAPI_MARCX-PUR_GROUP = 'X'.

* Accounting

    BAPI_MBEW1-VAL_AREA = IT_DATA-WERKS.

    BAPI_MBEW1-PRICE_CTRL = IT_DATA-VPRSV.

    BAPI_MBEW1-STD_PRICE = IT_DATA-STPRS.

    BAPI_MBEW1-PRICE_UNIT = IT_DATA-PEINH.

    BAPI_MBEWX-VAL_AREA = IT_DATA-WERKS.

    BAPI_MBEWX-PRICE_CTRL = 'X'.

    BAPI_MBEWX-STD_PRICE = 'X'.

    BAPI_MBEWX-PRICE_UNIT = 'X'.

*--- BAPI to create material

    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

    EXPORTING

    HEADDATA = BAPI_HEAD

    CLIENTDATA = BAPI_MARA1

    CLIENTDATAX = BAPI_MARAX

    PLANTDATA = BAPI_MARC1

    PLANTDATAX = BAPI_MARCX

* FORECASTPARAMETERS =

* FORECASTPARAMETERSX =

* PLANNINGDATA =

* PLANNINGDATAX =

* STORAGELOCATIONDATA =

* STORAGELOCATIONDATAX =

* VALUATIONDATA = BAPI_MBEW1

* VALUATIONDATAX = BAPI_MBEWX

* WAREHOUSENUMBERDATA =

* WAREHOUSENUMBERDATAX =

* SALESDATA = BAPI_MVKE1

* SALESDATAX = BAPI_MVKEX

* STORAGETYPEDATA =

* STORAGETYPEDATAX =

    IMPORTING

    RETURN = BAPI_RETURN

    TABLES

    MATERIALDESCRIPTION = IT_MAKT

* UNITSOFMEASURE =

* UNITSOFMEASUREX =

* INTERNATIONALARTNOS =

* MATERIALLONGTEXT =

* TAXCLASSIFICATIONS =

* RETURNMESSAGES =

* PRTDATA =

* PRTDATAX =

* EXTENSIONIN =

* EXTENSIONINX =

    .

    IF BAPI_RETURN-TYPE = 'E'.

      WRITE:/ 'Error:' ,BAPI_RETURN-MESSAGE ,'for material:' ,IT_DATA-MATNR.

    ELSEIF BAPI_RETURN-TYPE = 'S'.

      WRITE: 'Successfully created material' ,IT_DATA-MATNR.

    ENDIF.

  ENDLOOP.

ENDFORM. " UPLOAD_MATMAS

Regards,

V.Balaji

Reward if Usefull...

Former Member
0 Kudos

Hi Greetson,

Thank you for the valuable information.

Actually I want to extend material XXX from plant 5500 to 5530.

I have changed PLANTDATAX-plant value as you suggested.

The material has been created successfully.

The system was prompted to maintain the values for AVAILCHECK, MRP_TYPE, MRP_CTRLER, SM_KEY and LOTSIZEKEY. I have checked the material in MARC for plant 5500 and given the same values for plant 5530.

*---- Plant - Purchasing

la_PLANTDATA-plant = '5530'.

la_PLANTDATAX-plant = '5530'.

la_PLANTDATA-pur_group = '006'.

la_PLANTDATAX-pur_group = 'X'.

*BAPI_MARC-AVAILCHECK

la_PLANTDATA-AVAILCHECK = '02'.

la_PLANTDATAX-AVAILCHECK = '02'.

*MRP Type

la_PLANTDATA-MRP_TYPE = 'PD'.

la_PLANTDATAX-MRP_TYPE = 'PD'.

*MRP Controller

la_PLANTDATA-MRP_CTRLER = '001'.

la_PLANTDATAX-MRP_CTRLER = '001'.

*Scheduling Margin Key for Floats

la_PLANTDATA-SM_KEY = '000'.

la_PLANTDATAX-SM_KEY = '000'.

*Lot size (materials planning)

la_PLANTDATA-LOTSIZEKEY = 'EX'.

la_PLANTDATAX-LOTSIZEKEY = 'EX'.

Finally the material is got created. But the way I am doing is it correct?

And also I need to maintain this for all the views Basic Data 1, Basic Data 2, Sales: Sales Org. Data 1, Sales: Sales Org. Data 2, Sales: General/Plant Data, Sales Text, Purchasing, Purchase Order Text, MRP 1, MRP 2, MRP 3, MRP 4, Work Scheduling, General Plant Data / Storage 1, General Plant Data / Storage 2, Accounting 1, Accounting 2, Costing 1 and Costing 2.

Please guide me how to pass the values to BAPI for these views.

Regards,

Vankatesh

0 Kudos

Your answer is still usefull : great help for me !

Have a nice day,

Best regards,

Paskalo