‎2011 Aug 17 12:05 PM
Hi Experts,
I am writing program for uploading material master using BAPI_Material_Savedata. Its works fine for all data except description. But when I check materials using TCode MM03, I found that one material having description of other Material's. I checked in debugging mode while uploading the file. The internal Table having same data & order as maintained in File with correct material's Description. When execute FM Bapi_material_savedata, its changing the order of description.
Please help me to fix this issue.
Thanks in advance
‎2011 Aug 17 12:53 PM
Hello,
It'll help you a lot if you can post relevant portions ofyour BAPI call.
Back to your question, i am 100% sure that there might be some minor bug in your code for e.g., clearing of work area, incorrect loop control mechanism, incorrect reading of table entries etc.
BR,
Suhas
‎2011 Aug 17 12:53 PM
Hello,
It'll help you a lot if you can post relevant portions ofyour BAPI call.
Back to your question, i am 100% sure that there might be some minor bug in your code for e.g., clearing of work area, incorrect loop control mechanism, incorrect reading of table entries etc.
BR,
Suhas
‎2011 Aug 18 5:33 AM
Thanks Suhas for reply.
As per your suggestion , I am trying to find the bug.
‎2011 Aug 18 8:15 AM
Data:
BAPI_HEAD LIKE BAPIMATHEAD,
BAPI_MAKT LIKE BAPI_MAKT,
BAPI_MARA1 LIKE BAPI_MARA,
BAPI_MARAX LIKE BAPI_MARAX,
BAPI_MARD1 LIKE BAPI_MARD,
BAPI_MARDX LIKE BAPI_MARDX,
BAPI_MARC1 LIKE BAPI_MARC,
BAPI_MARCX LIKE BAPI_MARCX,
BAPI_MBEW1 LIKE BAPI_MBEW,
BAPI_MBEWX LIKE BAPI_MBEWX,
BAPI_RETURN LIKE BAPIRET2.
DATA: BEGIN OF IT_MAKT OCCURS 0.
INCLUDE STRUCTURE BAPI_MAKT.
DATA: END OF IT_MAKT.
DATA : BEGIN OF IT_DATA OCCURS 0,
MATNR(18), " Material Number
* MBRSH(1), " Industry Type
MTART(4), " Material Type
WERKS(4), " Plant
LGORT(4), " Storage Location
MAKTX(40), " Material Description
MEINS(3), " Unit
MATKL(9), " Material Group
* SPART(2), " Division
* KAUTB(1), " Auto PO Indicator
BKLAS(4), " Valuation Class
END OF IT_DATA.
START-OF-SELECTION.
PERFORM UPLOAD_DATA.
FORM UPLOAD_DATA.
DESCRIBE TABLE IT_DATA LINES COUNT.
CLEAR IT_DATA.
LOOP AT IT_DATA.
PRCNTG = ( SY-TABIX / COUNT ) * 100.
TABIX = SY-TABIX.
CONCATENATE text-002 IT_DATA-MATNR text-003 TABIX text-004 COUNT
into TXT separated by SPACE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = PRCNTG
TEXT = TXT.
BAPI_HEAD-MATERIAL = IT_DATA-MATNR.
BAPI_HEAD-IND_SECTOR = 'A'. "IT_DATA-MBRSH.
BAPI_HEAD-MATL_TYPE = IT_DATA-MTART.
BAPI_HEAD-BASIC_VIEW = 'X'.
BAPI_HEAD-PURCHASE_VIEW = 'X'.
BAPI_HEAD-STORAGE_VIEW = 'X'.
BAPI_HEAD-ACCOUNT_VIEW = 'X'.
BAPI_HEAD-COST_VIEW = 'X'.
* Material Description*
IT_MAKT-LANGU = 'E'.
IT_MAKT-MATL_DESC = IT_DATA-MAKTX.
APPEND IT_MAKT.
CLEAR IT_MAKT.
* Storage Locations*
BAPI_MARD1-PLANT = IT_DATA-WERKS.
BAPI_MARD1-STGE_LOC = IT_DATA-LGORT.
BAPI_MARDX-PLANT = IT_DATA-WERKS.
BAPI_MARDX-STGE_LOC = IT_DATA-LGORT.
* Basic View*
BAPI_MARA1-BASE_UOM = IT_DATA-MEINS.
BAPI_MARA1-MATL_GROUP = IT_DATA-MATKL.
BAPI_MARA1-DIVISION = '01'. "IT_DATA-SPART.
BAPI_MARAX-BASE_UOM = 'X'.
BAPI_MARAX-MATL_GROUP = 'X'.
BAPI_MARAX-DIVISION = 'X'.
* Plant Data*
BAPI_MARC1-PLANT = IT_DATA-WERKS.
BAPI_MARC1-ISS_ST_LOC = IT_DATA-LGORT.
BAPI_MARCX-PLANT = IT_DATA-WERKS.
BAPI_MARCX-ISS_ST_LOC = 'X'.
*purchasing view*
BAPI_MARC1-AUTO_P_ORD = 'X'. "IT_DATA-KAUTB.
BAPI_MARCX-AUTO_P_ORD = 'X'.
* Accounting*
BAPI_MBEW1-VAL_AREA = IT_DATA-WERKS.
BAPI_MBEW1-VAL_CLASS = IT_DATA-BKLAS.
BAPI_MBEW1-PRICE_CTRL = 'V'.
* BAPI_MBEW1-STD_PRICE = '0.00'.
* BAPI_MBEW1-PRICE_UNIT = '1'.
BAPI_MBEWX-VAL_AREA = IT_DATA-WERKS.
BAPI_MBEWX-VAL_CLASS = 'X'.
BAPI_MBEWX-PRICE_CTRL = 'X'.
* BAPI_MBEWX-STD_PRICE = 'X'.
* BAPI_MBEWX-PRICE_UNIT = 'X'.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = BAPI_HEAD
CLIENTDATA = BAPI_MARA1
CLIENTDATAX = BAPI_MARAX
PLANTDATA = BAPI_MARC1
PLANTDATAX = BAPI_MARCX
STORAGELOCATIONDATA = BAPI_MARD1
STORAGELOCATIONDATAX = BAPI_MARDX
VALUATIONDATA = BAPI_MBEW1
VALUATIONDATAX = BAPI_MBEWX
IMPORTING
RETURN = BAPI_RETURN
TABLES
MATERIALDESCRIPTION = IT_MAKT.
IF BAPI_RETURN-TYPE = 'E'.
WRITE:/ 'Error:' ,BAPI_RETURN-MESSAGE ,'for material:' ,
IT_DATA-MATNR COLOR = 6 INVERSE ON.
ELSEIF BAPI_RETURN-TYPE = 'S'.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .
WRITE AT :/LEN1 TABIX,
LEN2 'Successfully created material',
LEN6 it_data-matnr.
ENDIF.
ENDIF.
CLEAR IT_DATA.
ENDLOOP.
ENDFORM. " END OF UPLOAD_DATAAs execution reach at Bapi_material_Savedata, it changes the order of Description in Internal Table IT_MAKT.
Please suggest me how to fix this issue.
Thanks in Advance.
‎2011 Aug 18 8:49 AM
Hi ,
you are calling in BAPI in loop , so better to clear all variables before you go for next record.
regards
Prabhu
‎2011 Aug 18 9:36 AM
Just After statement, "LOOP AT IT_DATA" add
Refresh it_makt.
.
This should solve your problem of incorrect description.
Though it is better to clear all other structures and tables also after, loop at it_data statement, otherwise some other thing might go wrong which is not caught now.
BR,
Diwakar
‎2011 Aug 18 9:51 AM
Thanks Suhas, Prabhu & Diwakar.
Problem is solved.
‎2011 Aug 18 10:06 AM
Hello Rajdeep,
This is just for future reference!
For mass maintenance of materials you should rather use BAPI_MATERIAL_SAVEREPLICA and not BAPI_MATERIAL_SAVEDATA.
Cheers,
Suhas