‎2007 Apr 24 9:24 AM
Hi,
I am uploading materials using Bapi_Material_Savedata. I am putting values in Plant as 'ABC1' and Plantx as 'X'. Values are passed to the function module but in the coding of the function module, there is a loop that if (plant ne plantx), it will give error.
In the return table, i am getting error as
"Key field for use data PLANTDATA and checkbox structure PLANTDATAX are different."
This is error comes when, PLANT is mentioned and no entry in PLANTX is done or vice-versa.But, I have passed both the values. I am not getting the cause of error.
Thanks.
‎2007 Apr 24 9:30 AM
It is the process for any of the tables...
Check if material is already extended to Target Plant. if yes
Continue to next record.
CALL FUNCTION 'C144_MATERIAL_PLANT_CHECK'
EXPORTING
i_matnr = it_mat_data-matnr
i_werks = p_werks1
IMPORTING
e_existing = flag.
IF flag = 'X'.
CONCATENATE
'Material Already Exits in Plant '
P_WERKS1
INTO t_ialv-message.
t_ialv-matnr = it_mat_data-matnr.
t_ialv-lights = '1'.
APPEND t_ialv.
CONTINUE.
ENDIF. " IF flag = 'X'.
Read the material with Source plant details.
CALL FUNCTION 'BAPI_MATERIAL_GET_ALL'
EXPORTING
material = it_mat_data-matnr
plant = p_werks
salesorg = it_mvke-vkorg
distr_chan = it_mvke-vtweg
IMPORTING
clientdata = clientdata
plantdata = plantdata
salesdata = salesdata.
*Populate the Target plant
MOVE p_werks1 TO : plantdata-plant,
plantdatax-plant.
plantdata-pur_group = it_mat_data-ekgrp.
plantdata-mrp_ctrler = it_mat_data-dispo.
plantdata-iss_st_loc = it_mat_data-lgpro.
plantdatax-pur_group = it_mat_data-ekgrp.
plantdatax-mrp_ctrler = it_mat_data-dispo.
plantdatax-iss_st_loc = it_mat_data-lgpro.
MOVE-CORRESPONDING: clientdata TO clientdata1,
plantdata TO plantdata1.
Modify Header data for Target plant
headdata-material = it_mat_data-matnr.
headdata-ind_sector = it_mara-mbrsh.
headdata-matl_type = it_mara-mtart.
Fill Client Data (MARA)
PERFORM get_tab_fields TABLES dfies_tab
USING 'BAPI_MARAX'.
PERFORM fill_x TABLES dfies_tab
USING clientdatax
clientdata1.
Fill Plant data
PERFORM get_tab_fields TABLES dfies_tab
USING 'BAPI_MARCX'.
PERFORM fill_x TABLES dfies_tab
USING plantdatax
plantdata1.
Fill Sales data
IF no_sales IS INITIAL.
salesdata-sales_org = p_vkorg1.
salesdata-distr_chan = p_vtweg1.
MOVE-CORRESPONDING salesdata TO salesdata1.
salesdata1-delyg_plnt = p_werks1. "Delivery Plant
PERFORM get_tab_fields TABLES dfies_tab
USING 'BAPI_MVKEX'.
PERFORM fill_x TABLES dfies_tab
USING salesdatax
salesdata1.
ENDIF.
storagelocationdata1-plant = p_werks1.
storagelocationdata1-stge_loc = it_mat_data-lgpro.
storagelocationdatax-plant = p_werks1.
PERFORM get_tab_fields TABLES dfies_tab
USING 'BAPI_MARDX'.
PERFORM fill_x TABLES dfies_tab
USING storagelocationdatax
storagelocationdata1.
CLEAR: return1, t_ialv.
Extend the plant Storage location views.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = headdata
clientdata = clientdata1
clientdatax = clientdatax
plantdata = plantdata1
plantdatax = plantdatax
salesdata = salesdata1
salesdatax = salesdatax
storagelocationdata = storagelocationdata1
storagelocationdatax = storagelocationdatax
IMPORTING
return = return1.
IF return1-type EQ 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
MOVE : '3' TO t_ialv-lights.
ELSE.
MOVE : '1' TO t_ialv-lights.
ENDIF. " IF return1-type EQ 'E'.
‎2007 Apr 24 9:32 AM
Hello,
Check this code
BAPI to Copy Materials from one Plant to Another
*
Copy Materials from one Plant to Another
First run GETDATA AS CHECKBOX, "Tick to download materials data to local harddisk
Second run UPDDATA AS CHECKBOX. "Tick to update date to Materials Master
Check data in Excel before Second run
REPORT ZBAPIMM01 LINE-SIZE 255 NO STANDARD PAGE HEADING
LINE-COUNT 065(001).
TABLES: T001L, "Storage Locations
MARA, "General Material Data
MAKT, "Material Descriptions
MBEW, "Material Valuation
MARC. "Plant Data for Material
DATA: BAPI_HEAD LIKE BAPIMATHEAD,
BAPI_MAKT LIKE BAPI_MAKT, "Material Description
BAPI_MARA1 LIKE BAPI_MARA, "Client Data
BAPI_MARAX LIKE BAPI_MARAX,
BAPI_MARC1 LIKE BAPI_MARC, "Plant View
BAPI_MARCX LIKE BAPI_MARCX,
BAPI_MBEW1 LIKE BAPI_MBEW, "Accounting View
BAPI_MBEWX LIKE BAPI_MBEWX,
BAPI_RETURN LIKE BAPIRET2.
DATA: BEGIN OF INT_MAKT OCCURS 100.
INCLUDE STRUCTURE BAPI_MAKT.
DATA: END OF INT_MAKT.
DATA: BEGIN OF INT_MAT 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 INT_MAT.
SELECT-OPTIONS:
PLANT FOR MARC-WERKS OBLIGATORY MEMORY ID PLT,
MATERIAL FOR MARA-MATNR MEMORY ID MAT,
MATLTYPE FOR MARA-MTART MEMORY ID MTY,
DIVISION FOR MARA-SPART MEMORY ID DIV.
PARAMETERS: F_FILE LIKE RLGRAP-FILENAME
DEFAULT 'C:\DATA\ZMATERIAL.XLS' MEMORY ID F_FILE,
GETDATA AS CHECKBOX, "Tick to download materials data to local harddisk
UPDDATA AS CHECKBOX. "Tick to update date to Materials Master
IF GETDATA = 'X'.
PERFORM DOWNLOAD_DATA.
PERFORM DOWNLOAD_FILE.
ENDIF.
IF UPDDATA = 'X'.
PERFORM UPLOAD_FILE.
PERFORM UPDATE_MM.
ENDIF.
FORM DOWNLOAD_DATA.
SELECT * FROM MARC WHERE LVORM EQ ' '
AND WERKS IN PLANT
AND MATNR IN MATERIAL.
CLEAR MARA.
SELECT SINGLE * FROM MARA WHERE MATNR = MARC-MATNR.
CHECK MATLTYPE.
CHECK DIVISION.
CLEAR MBEW.
SELECT SINGLE * FROM MBEW WHERE MATNR = MARC-MATNR
AND BWKEY = MARC-WERKS.
CLEAR MAKT.
SELECT SINGLE * FROM MAKT WHERE SPRAS = 'EN'
AND MATNR = MARC-MATNR.
WRITE:/ MARC-WERKS, "Plant
MARA-MTART, "Material type
MARA-MATNR, "Material number
MARA-MATKL, "Material group
MARA-MBRSH, "Industry sector
MARA-MEINS, "Base unit of measure
MARA-GEWEI, "Weight Unit
MARA-SPART, "Division
MARC-EKGRP, "Purchasing group
MBEW-VPRSV, "Price control indicator
MBEW-STPRS, "Standard price
MBEW-PEINH, "Price unit
MAKT-SPRAS, "Language key
MAKT-MAKTX. "Material description
INT_MAT-WERKS = MARC-WERKS. "Plant
INT_MAT-MTART = MARA-MTART. "Material type
INT_MAT-MATNR = MARA-MATNR. "Material number
INT_MAT-MATKL = MARA-MATKL. "Material group
INT_MAT-MBRSH = MARA-MBRSH. "Industry sector
INT_MAT-MEINS = MARA-MEINS. "Base unit of measure
INT_MAT-GEWEI = MARA-GEWEI. "Weight Unit
INT_MAT-SPART = MARA-SPART. "Division
INT_MAT-EKGRP = MARC-EKGRP. "Purchasing group
INT_MAT-VPRSV = MBEW-VPRSV. "Price control indicator
INT_MAT-STPRS = MBEW-STPRS. "Standard price
INT_MAT-PEINH = MBEW-PEINH. "Price unit
INT_MAT-SPRAS = MAKT-SPRAS. "Language key
INT_MAT-MAKTX = MAKT-MAKTX. "Material description
APPEND INT_MAT.
CLEAR INT_MAT.
ENDSELECT.
ENDFORM.
FORM DOWNLOAD_FILE.
call function 'WS_DOWNLOAD'
EXPORTING
FILENAME = F_FILE
FILETYPE = 'DAT'
FILETYPE = 'WK1'
tables
data_tab = INT_MAT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC = 0.
FORMAT COLOR COL_GROUP.
WRITE:/ 'Data Download Successfully to your local harddisk'.
SKIP.
ENDIF.
ENDFORM.
FORM UPLOAD_FILE.
call function 'WS_UPLOAD'
EXPORTING
FILENAME = F_FILE
FILETYPE = 'DAT'
FILETYPE = 'WK1'
tables
data_tab = INT_MAT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC = 0.
FORMAT COLOR COL_GROUP.
WRITE:/ 'Data Upload Successfully from your local harddisk'.
SKIP.
ENDIF.
ENDFORM.
FORM UPDATE_MM.
LOOP AT INT_MAT.
Header
BAPI_HEAD-MATERIAL = INT_MAT-MATNR.
BAPI_HEAD-IND_SECTOR = INT_MAT-MBRSH.
BAPI_HEAD-MATL_TYPE = INT_MAT-MTART.
BAPI_HEAD-BASIC_VIEW = 'X'.
BAPI_HEAD-PURCHASE_VIEW = 'X'.
BAPI_HEAD-ACCOUNT_VIEW = 'X'.
Material Description
REFRESH INT_MAKT.
INT_MAKT-LANGU = INT_MAT-SPRAS.
INT_MAKT-MATL_DESC = INT_MAT-MAKTX.
APPEND INT_MAKT.
Client Data - Basic
BAPI_MARA1-MATL_GROUP = INT_MAT-MATKL.
BAPI_MARA1-BASE_UOM = INT_MAT-MEINS.
BAPI_MARA1-UNIT_OF_WT = INT_MAT-GEWEI.
BAPI_MARA1-DIVISION = INT_MAT-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 = INT_MAT-WERKS.
BAPI_MARC1-PUR_GROUP = INT_MAT-EKGRP.
BAPI_MARCX-PLANT = INT_MAT-WERKS.
BAPI_MARCX-PUR_GROUP = 'X'.
Accounting
BAPI_MBEW1-VAL_AREA = INT_MAT-WERKS.
BAPI_MBEW1-PRICE_CTRL = INT_MAT-VPRSV.
BAPI_MBEW1-STD_PRICE = INT_MAT-STPRS.
BAPI_MBEW1-PRICE_UNIT = INT_MAT-PEINH.
BAPI_MBEWX-VAL_AREA = INT_MAT-WERKS.
BAPI_MBEWX-PRICE_CTRL = 'X'.
BAPI_MBEWX-STD_PRICE = 'X'.
BAPI_MBEWX-PRICE_UNIT = 'X'.
WRITE:/ BAPI_HEAD, BAPI_MARC1.
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 = INT_MAKT
UNITSOFMEASURE =
UNITSOFMEASUREX =
INTERNATIONALARTNOS =
MATERIALLONGTEXT =
TAXCLASSIFICATIONS =
RETURNMESSAGES =
PRTDATA =
PRTDATAX =
EXTENSIONIN =
EXTENSIONINX =
.
IF BAPI_RETURN-TYPE = 'E'.
WRITE:/ 'Error Message ', BAPI_RETURN.
ENDIF.
ENDLOOP.
ENDFORM.
*---End of Program
[/code]
Regards,
Vasanth
‎2007 May 26 5:13 PM
Hi,
You need to pass value of Plant(ABC1) to both PLANT and PLANTX.
You can check this if you execute the BAPI in SE37. Goto PLANTX, there is no flag of 1 character in PLANTX but 4 character space for you to write the Plant name.
Priyanka.