‎2009 Mar 04 4:47 PM
Hi,
I'm using the following FM to create the CLASSIFICTION view - MM. This is being done in batch ...
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lv_matnr
objecttablenew = 'MARA'
classnumnew = lv_classnum
classtypenew = '001' " mat class
TABLES
allocvaluesnum = ialloc_num
allocvalueschar = ialloc_char
allocvaluescurr = ialloc_curr
return = ireturn.
When I create the 1st class with it's characteristics - no problems but when I create the 2nd class, I get an error that says that my allocation is invalid and not created --> MM01 transaction.
When I run the same part number again - meaning a MM02 transaction will be used - the 2nd class is being created. I've copied the logic from the CHANGE to the STORE but still the same error.
Please if you can help ... I don't know where to look anymore.
Thanx !
‎2009 Mar 04 10:30 PM
Hi Mare,
I've used this BAPI without problem, check my code, maybe you can get something useful:
FORM carga_clase USING l_nombre_clase LIKE klah-class
l_nombre_caract LIKE cabn-atnam.
****** BAPI Required Variables *****
* Header
DATA:
l_object_key LIKE ausp-objek,
l_object_table LIKE bapi1003_key-objecttable VALUE 'LFA1',
l_classnum_or LIKE bapi1003_key-classnum,
l_classnum LIKE bapi1003_key-classnum,
l_classtype LIKE bapi1003_key-classtype VALUE '010'.
* Tables
DATA:
itab_allocations LIKE STANDARD TABLE OF bapi1003_alloc_values_char,
itab_numnew LIKE STANDARD TABLE OF bapi1003_alloc_values_num,
itab_currnew LIKE STANDARD TABLE OF bapi1003_alloc_values_curr,
itab_ret LIKE STANDARD TABLE OF bapiret2.
* Work Areas
DATA:
wa_allocations LIKE LINE OF itab_allocations,
wa_ret LIKE LINE OF itab_ret.
***********************************************
DATA: l_contador_registros TYPE i,
l_contador_clase TYPE i,
l_contador_registros_str TYPE string,
l_contador_clase_str TYPE string,
l_charact_or LIKE cabn-atnam,
l_charact LIKE cabn-atnam.
l_classnum_or = l_nombre_clase.
l_charact_or = l_nombre_caract.
l_contador_registros = 0.
l_contador_clase = 0.
LOOP AT itab_lfa1 INTO wa_lfa1.
l_contador_registros = 0.
l_contador_clase = 0.
l_classnum = l_classnum_or.
l_charact = l_nombre_caract.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
LOOP AT itab_result INTO wa_result
WHERE lifnr = wa_lfa1-lifnr AND class = l_nombre_clase.
CLEAR: wa_allocations.
IF l_contador_registros = 998.
l_contador_clase = l_contador_clase + 1.
l_contador_registros = 0.
l_object_key = wa_lfa1-lifnr.
* Se crea la clase y caracteristica para el proveedor
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = l_object_key
objecttablenew = l_object_table
classnumnew = l_classnum
classtypenew = l_classtype
TABLES
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
* Se agregan los valores a la caracteristica recien creada
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_object_key
objecttable = l_object_table
classnum = l_classnum
classtype = l_classtype
TABLES
allocvaluesnumnew = itab_numnew
allocvaluescharnew = itab_allocations
allocvaluescurrnew = itab_currnew
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
CLEAR wa_log.
wa_log-lifnr = wa_lfa1-lifnr.
wa_log-class = l_classnum.
wa_log-message = wa_ret-message.
APPEND wa_log TO itab_log.
ENDLOOP.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
CLEAR l_classnum.
l_contador_clase_str = l_contador_clase.
CONCATENATE l_classnum_or l_contador_clase_str INTO l_classnum.
CONCATENATE l_charact_or l_contador_clase_str INTO l_charact.
ENDIF.
wa_allocations-charact = l_charact.
wa_allocations-value_char = wa_result-atwrt.
APPEND wa_allocations TO itab_allocations.
l_contador_registros = l_contador_registros + 1.
ENDLOOP.
l_object_key = wa_lfa1-lifnr.
* Se crea la clase y caracteristica para el proveedor
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = l_object_key
objecttablenew = l_object_table
classnumnew = l_classnum
classtypenew = l_classtype
TABLES
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
* Se agregan los valores a la caracteristica recien creada
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_object_key
objecttable = l_object_table
classnum = l_classnum
classtype = l_classtype
TABLES
allocvaluesnumnew = itab_numnew
allocvaluescharnew = itab_allocations
allocvaluescurrnew = itab_currnew
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
CLEAR wa_log.
wa_log-lifnr = wa_lfa1-lifnr.
wa_log-class = l_classnum.
wa_log-message = wa_ret-message.
APPEND wa_log TO itab_log.
ENDLOOP.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
ENDLOOP.
ENDFORM. " CARGA_CLASERegards,
Gilberto Li
‎2009 Mar 04 4:56 PM
I think after using this BAPI you are you have used commit work. In BAPI_TRANSACTION_COMMIT you check the option for wait. I think that may solve your problem.
Kuntal
‎2009 Mar 04 6:01 PM
Hi,
I can suggest you another idea for creating classification fro materials.
There is a Tcode CL24N which will take input of Classtype and Class name and then material number, you can have a record in LSMW and run the LSMW for the materials you need.
If it works, jus check it out.
Thanks and Regards
Vipin Das V
‎2009 Mar 04 10:30 PM
Hi Mare,
I've used this BAPI without problem, check my code, maybe you can get something useful:
FORM carga_clase USING l_nombre_clase LIKE klah-class
l_nombre_caract LIKE cabn-atnam.
****** BAPI Required Variables *****
* Header
DATA:
l_object_key LIKE ausp-objek,
l_object_table LIKE bapi1003_key-objecttable VALUE 'LFA1',
l_classnum_or LIKE bapi1003_key-classnum,
l_classnum LIKE bapi1003_key-classnum,
l_classtype LIKE bapi1003_key-classtype VALUE '010'.
* Tables
DATA:
itab_allocations LIKE STANDARD TABLE OF bapi1003_alloc_values_char,
itab_numnew LIKE STANDARD TABLE OF bapi1003_alloc_values_num,
itab_currnew LIKE STANDARD TABLE OF bapi1003_alloc_values_curr,
itab_ret LIKE STANDARD TABLE OF bapiret2.
* Work Areas
DATA:
wa_allocations LIKE LINE OF itab_allocations,
wa_ret LIKE LINE OF itab_ret.
***********************************************
DATA: l_contador_registros TYPE i,
l_contador_clase TYPE i,
l_contador_registros_str TYPE string,
l_contador_clase_str TYPE string,
l_charact_or LIKE cabn-atnam,
l_charact LIKE cabn-atnam.
l_classnum_or = l_nombre_clase.
l_charact_or = l_nombre_caract.
l_contador_registros = 0.
l_contador_clase = 0.
LOOP AT itab_lfa1 INTO wa_lfa1.
l_contador_registros = 0.
l_contador_clase = 0.
l_classnum = l_classnum_or.
l_charact = l_nombre_caract.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
LOOP AT itab_result INTO wa_result
WHERE lifnr = wa_lfa1-lifnr AND class = l_nombre_clase.
CLEAR: wa_allocations.
IF l_contador_registros = 998.
l_contador_clase = l_contador_clase + 1.
l_contador_registros = 0.
l_object_key = wa_lfa1-lifnr.
* Se crea la clase y caracteristica para el proveedor
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = l_object_key
objecttablenew = l_object_table
classnumnew = l_classnum
classtypenew = l_classtype
TABLES
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
* Se agregan los valores a la caracteristica recien creada
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_object_key
objecttable = l_object_table
classnum = l_classnum
classtype = l_classtype
TABLES
allocvaluesnumnew = itab_numnew
allocvaluescharnew = itab_allocations
allocvaluescurrnew = itab_currnew
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
CLEAR wa_log.
wa_log-lifnr = wa_lfa1-lifnr.
wa_log-class = l_classnum.
wa_log-message = wa_ret-message.
APPEND wa_log TO itab_log.
ENDLOOP.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
CLEAR l_classnum.
l_contador_clase_str = l_contador_clase.
CONCATENATE l_classnum_or l_contador_clase_str INTO l_classnum.
CONCATENATE l_charact_or l_contador_clase_str INTO l_charact.
ENDIF.
wa_allocations-charact = l_charact.
wa_allocations-value_char = wa_result-atwrt.
APPEND wa_allocations TO itab_allocations.
l_contador_registros = l_contador_registros + 1.
ENDLOOP.
l_object_key = wa_lfa1-lifnr.
* Se crea la clase y caracteristica para el proveedor
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = l_object_key
objecttablenew = l_object_table
classnumnew = l_classnum
classtypenew = l_classtype
TABLES
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
* Se agregan los valores a la caracteristica recien creada
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_object_key
objecttable = l_object_table
classnum = l_classnum
classtype = l_classtype
TABLES
allocvaluesnumnew = itab_numnew
allocvaluescharnew = itab_allocations
allocvaluescurrnew = itab_currnew
return = itab_ret.
IF c_test <> 'X'.
COMMIT WORK AND WAIT.
ENDIF.
LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
CLEAR wa_log.
wa_log-lifnr = wa_lfa1-lifnr.
wa_log-class = l_classnum.
wa_log-message = wa_ret-message.
APPEND wa_log TO itab_log.
ENDLOOP.
CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.
ENDLOOP.
ENDFORM. " CARGA_CLASERegards,
Gilberto Li