07-07-2013 2:32 PM
Hello,
I have developed program to upload service material through AC01 and i have used Bapi BAPI_SERVICE_CREATE to create new service material and
BAPI_SERVICE_CHANGE to change service material,everything is working fine.
when service material is already in use so we can not change base UOM(unit of measue) but we can change other field manually, issue is when program try to change any other field I am getting error message say "Unit of measure cannot be changed(contarct contain service) and even i am not passing UOM to BAPI.
Could any body tell me why this is happing?
Regards,
Nee
07-13-2013 7:31 PM
07-13-2013 7:47 PM
07-15-2013 3:11 AM
Can you check the table where you are passing the 'X' flag of BAPI may be you are passing the 'X' there.
Also can you paste the code so it could be checked
07-15-2013 9:46 PM
Hi,
Thanks for replying , No I am not passing the 'X' flag to BAPI, kindly find the code below:-
LOOP AT itab INTO wa.
CASE wa-name.
*Activity Number
WHEN 'MATNR'.
IF wa-value <> ' '.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa-value
IMPORTING
output = matnr_zeros.
bapisrv_asmd-service = matnr_zeros.
bapisrv_asmdx-service = matnr_zeros.
ENDIF.
*Material Group
WHEN 'MATKL' .
bapisrv_asmd-matl_group = wa-value.
bapisrv_asmdx-matl_group = 'X'.
*Base Unit of Measure
WHEN 'MEINS'.
IF wa-value = 'UN'.
wa-value = 'ST'.
ELSEIF wa-value = 'BOL'.
wa-value = 'BAG'.
ELSEIF wa-value = 'CJ'.
wa-value = 'CS'.
ELSEIF wa-value = 'GLN'.
wa-value = 'GLL'.
ELSEIF wa-value = 'PUL'.
wa-value = 'IN'.
ELSEIF wa-value = 'T'.
wa-value = 'TO'.
ELSEIF wa-value = 'BTO'.
wa-value = 'PAK'.
ELSEIF wa-value = 'D'.
wa-value = '10'.
ENDIF.
bapisrv_asmd-base_uom = wa-value.
bapisrv_asmdx-base_uom = 'X'.
**Check if material is already exist**************
SELECT * FROM SRV_CONT INTO wa_srv_cont
WHERE SRVPOS = bapisrv_asmd-service
AND BSTYP = 'K'
AND LOEKZK = SPACE
AND PSTYP = '9'
AND LOEKZ = SPACE
AND DEL = SPACE.
EXIT.
ENDSELECT.
IF SY-SUBRC = 0.
bapisrv_asmd-base_uom = ' '.
bapisrv_asmdx-base_uom = ' '.
ENDIF.
*Service Category
WHEN 'MTART'.
bapisrv_asmd-serv_cat = wa-value.
bapisrv_asmdx-serv_cat = 'X'.
*Delete Indicator
WHEN 'LVORM'.
bapisrv_asmd-del_ind = wa-value.
bapisrv_asmdx-del_ind = 'X'.
*Valuation Class
WHEN 'BKLAS'.
bapisrv_asmd-val_class = wa-value.
bapisrv_asmdx-val_class = 'X'.
*Tax Indicator for Service (Purchasing)
WHEN 'TAXIM'.
bapisrv_asmd-tax_ind = wa-value.
bapisrv_asmdx-tax_ind = 'X'.
*Formula Number
WHEN 'FORMELNR'.
bapisrv_asmd-formula = wa-value.
bapisrv_asmdx-formula = 'X'.
*International Article Number (EAN/UPC)
WHEN 'EAN11'.
bapisrv_asmd-ean_upc = wa-value.
bapisrv_asmdx-ean_upc = 'X'.
******************************************************************Changes as on 24.06.2013
*Alternative unit of Measure
* Denominator for Conversion
WHEN 'IWUMN'.
bapisrv_asmd-conv_den = wa-value.
bapisrv_asmdx-conv_den = 'X'.
*Numerator for conversion
WHEN 'IWUMZ'.
bapisrv_asmd-conv_num = wa-value.
bapisrv_asmdx-conv_num = 'X'.
*Unit for Work
WHEN 'IWEIN'.
IF wa-value = 'YR'.
wa-value = 'JHR'.
ELSEIF wa-value = 'MSE'.
wa-value = 'MS'.
ELSEIF wa-value = 'HR'.
wa-value = 'STD'.
ELSEIF wa-value = 'DAY'.
wa-value = 'TAG'.
ELSEIF wa-value = 'WK'.
wa-value = 'WCH'.
ENDIF.
bapisrv_asmd-work_uom = wa-value.
bapisrv_asmdx-work_uom = 'X'.
ENDCASE.
CLEAR wa.
ENDLOOP.
LOOP AT itab_temp_en INTO wa_temp_en.
value = wa_temp_en-value.
service_long_texts-language = 'E'.
service_long_texts-line = value."STRING_TEXT_EN.
service_long_texts-format = 'N1'.
service_long_texts-change_id = 'U'.
APPEND service_long_texts.
CLEAR: wa_temp_en.
ENDLOOP.
LOOP AT itab_temp_es INTO wa_temp_es.
value_es = wa_temp_es-value.
service_long_texts-language = 'S'.
service_long_texts-line = value_es."STRING_TEXT_EN.
service_long_texts-format = 'N1'.
service_long_texts-change_id = 'U'.
APPEND service_long_texts.
CLEAR: wa_temp_en.
ENDLOOP.
LOOP AT itab_short_desp_en INTO wa_short_desp_en.
bapisrv_asmd-chgtext = 'X'.
bapisrv_asmdx-chgtext = 'X'.
service_description-language = 'E'.
service_description-change_id = 'U'.
service_description-short_text = wa_short_desp_en-value.
APPEND service_description.
CLEAR: wa_short_desp_en.
ENDLOOP.
LOOP AT itab_short_desp_es INTO wa_short_desp_es.
bapisrv_asmd-chgtext = 'X'.
bapisrv_asmdx-chgtext = 'X'.
service_description-language = 'S'.
service_description-change_id = 'U'.
service_description-short_text = wa_short_desp_es-value.
APPEND service_description.
CLEAR: wa_short_desp_es.
ENDLOOP.
IF bapisrv_asmd-service = ' '.
IF erp_action = 'ARCHIVE'.
bapisrv_asmd-del_ind = 'X'.
bapisrv_asmdx-del_ind = 'X'.
ENDIF.
********BAPI for create Service material
CALL FUNCTION 'BAPI_SERVICE_CREATE'
EXPORTING
im_service_data = bapisrv_asmd
im_service_datax = bapisrv_asmdx
* NO_NUMBER_RANGE_CHECK =
* TESTRUN =
IMPORTING
service = service_number
* EX_SERVICE_DATA =
* EX_SERVICE_DATAX =
TABLES
return = it_return_serv
service_description = service_description
service_long_texts = service_long_texts
* EXTENSION_IN =
* EXTENSION_OUT =
.
IF erp_action = 'UNARCHIVE'." AND IT_RETURN_SERV-TYPE <> 'E'.
SELECT SINGLE * FROM asmd INTO wa_asmd WHERE asnum = bapisrv_asmd-service
AND lvorm = 'X'.
wa_asmd-lvorm = ' '.
MODIFY asmd FROM wa_asmd.
ENDIF.
ELSEIF bapisrv_asmd-service <> ' '.
bapisrv_asmd-serv_cat = ' '.
bapisrv_asmdx-serv_cat = ' '.
IF erp_action = 'ARCHIVE'.
bapisrv_asmd-del_ind = 'X'.
bapisrv_asmdx-del_ind = 'X'.
ENDIF.
********BAPI for Update Service material
CALL FUNCTION 'BAPI_SERVICE_CHANGE'
EXPORTING
servicenumber = bapisrv_asmd-service
im_service_data = bapisrv_asmd
im_service_datax = bapisrv_asmdx
* TESTRUN =
* IMPORTING
* ex_service_data = ex_service_data
* ex_service_datax = ex_service_datax
TABLES
return = it_return_serv
service_description = service_description
service_long_texts = service_long_texts
* EXTENSION_IN =
* EXTENSION_OUT =
.
ENDIF.
07-17-2013 2:59 AM
Hi Neeru,
The error you are getting is for SERVICE_CHANGE I suppose and not for SERVICE_CREATE
If that is the case... Then you are passing the UoM data .....
Please confirm where you are getting the issue which BAPI in debug.
Regards