Skip to Content
0
Former Member
May 18, 2010 at 09:20 AM

how to update the material characteristics,

1820 Views

hi,

i am having material class with 40 characteristics ,i am trying to update only 2 characteristics values in that class, i was written the below code , it is updating the those 2 characteristics but it is removing remaining characteristics data in material class.

CODE:

&----


*& Report ZCHAR_MATERIAL_UPDATE

*&

&----


*&

*&

&----


REPORT ZCHAR_MATERIAL_UPDATE.

TABLES : mara.

DATA: t_key TYPE cuobn.

DATA: cl_sys(10) TYPE c.

DATA: wa_len TYPE i.

DATA: str(30) TYPE c.

DATA: wa_cawn LIKE cawn.

DATA: i_mara TYPE TABLE OF mara,

wa_mara LIKE mara.

DATA: t_class LIKE sclass OCCURS 0,

object LIKE ausp-objek,

object_data LIKE clobjdat OCCURS 0,

wa LIKE clobjdat.

DATA : BEGIN OF gs_chars,

classtype TYPE bapi1003_key-classtype,

classnum TYPE bapi1003_key-classnum,

atnam TYPE atwrt,

atwrt_from TYPE atwrt,

atwrt_to TYPE atwrt,

END OF gs_chars.

DATA : lt_chars LIKE STANDARD TABLE OF gs_chars WITH HEADER LINE.

DATA: ls_charactdetail TYPE bapicharactdetail.

DATA: l_objectkey LIKE bapi1003_key-object,

l_objecttable LIKE bapi1003_key-objecttable,

l_classnum LIKE bapi1003_key-classnum,

l_classtype LIKE bapi1003_key-classtype.

DATA: ls_allocvaluesnumnew TYPE bapi1003_alloc_values_num,

ls_allocvaluescharnew TYPE bapi1003_alloc_values_char,

ls_allocvaluescurrnew TYPE bapi1003_alloc_values_curr,

ls_return TYPE bapiret2.

DATA: lt_allocvaluesnumnew TYPE STANDARD TABLE OF bapi1003_alloc_values_num,

lt_allocvaluescharnew TYPE STANDARD TABLE OF bapi1003_alloc_values_char,

lt_allocvaluescurrnew TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,

lt_return TYPE STANDARD TABLE OF bapiret2.

DATA: lt_alloclist TYPE STANDARD TABLE OF bapi1003_alloc_list,

ls_alloclist TYPE bapi1003_alloc_list.

DATA : l_cust_class TYPE klasse_d.

CONSTANTS : gc_cmclosereason TYPE atnam VALUE 'CLCM_CMCLSEREASONTXT',

gc_cmenddate TYPE atnam VALUE 'CLCM_CMENDDATE'.

SELECT * FROM mara INTO TABLE i_mara

WHERE MTART EQ 'ZDI0'.

LOOP AT i_mara INTO wa_mara.

object = wa_mara-matnr.

CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'

EXPORTING

classtype = '001'

object = object

TABLES

t_class = t_class

t_objectdata = object_data

EXCEPTIONS

no_classification = 1

no_classtypes = 2

invalid_class_type = 3

OTHERS = 4.

IF sy-subrc <> 0.

CASE sy-subrc.

WHEN 1.

WRITE 'No Classification found'.

WHEN 2.

WRITE 'No Class type found'.

WHEN OTHERS.

WRITE 'Invalid class type'.

ENDCASE.

ENDIF.

READ TABLE object_data INTO wa WITH KEY atnam = 'CLCM_CMENDDATE'.

if sy-subrc EQ 0 .

if not wa-ausp1 is initial .

str = wa-ausp1.

if str ne '00.00.0000'.

wa_len = strlen( str ).

IF wa_len GE 8.

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'

EXPORTING

DATE_EXTERNAL = wa-ausp1

  • ACCEPT_INITIAL_DATE =

IMPORTING

DATE_INTERNAL = wa-ausp1

  • EXCEPTIONS

  • DATE_EXTERNAL_IS_INVALID = 1

  • OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

if wa-ausp1 LT sy-datum .

CLEAR : lt_chars[].

REFRESH : lt_chars[].

PERFORM f_build_chars TABLES lt_chars.

SORT lt_chars.

l_objecttable = 'MARA'.

l_objectkey = object.

LOOP AT lt_chars.

AT NEW classnum.

CLEAR: lt_allocvaluesnumnew,

lt_allocvaluescharnew,

lt_allocvaluescurrnew,

lt_return.

REFRESH: lt_allocvaluesnumnew,

lt_allocvaluescharnew,

lt_allocvaluescurrnew,

lt_return.

l_classnum = lt_chars-classnum.

l_classtype = lt_chars-classtype.

ENDAT.

REFRESH lt_return.

CALL FUNCTION 'BAPI_CHARACT_GETDETAIL'

EXPORTING

charactname = lt_chars-atnam

  • KEYDATE = SY-DATUM

  • LANGUAGE =

IMPORTING

charactdetail = ls_charactdetail

TABLES

return = lt_return.

READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.

IF sy-subrc = 0.

  • g_input_error = gc_yes.

MESSAGE i000(zclcm_sm) WITH lt_chars-atnam ls_return-message(60).

EXIT.

ENDIF.

if lt_chars-atnam eq 'CLCM_CMENDDATE'.

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'

EXPORTING

DATE_INTERNAL = SY-DATUM

IMPORTING

DATE_EXTERNAL = cl_sys

EXCEPTIONS

DATE_INTERNAL_IS_INVALID = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

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

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

ENDIF.

move cl_sys to lt_chars-atwrt_from.

ELSEIF lt_chars-atnam eq 'CLCM_CMCLSEREASONTXT'.

move 'Closed by System' to lt_chars-atwrt_from.

endif.

CASE ls_charactdetail-data_type.

WHEN 'CHAR'.

ls_allocvaluescharnew-charact = lt_chars-atnam.

ls_allocvaluescharnew-value_neutral = lt_chars-atwrt_from.

APPEND ls_allocvaluescharnew TO lt_allocvaluescharnew.

  • MODIFY TABLE lt_allocvaluescharnew FROM ls_allocvaluescharnew.

WHEN 'DATE'.

ls_allocvaluescharnew-charact = lt_chars-atnam.

ls_allocvaluescharnew-value_neutral = lt_chars-atwrt_from.

APPEND ls_allocvaluescharnew TO lt_allocvaluescharnew.

  • MODIFY TABLE lt_allocvaluescharnew FROM ls_allocvaluescharnew.

ENDCASE.

AT END OF classnum.

REFRESH lt_return.

CALL FUNCTION 'BAPI_OBJCL_CHANGE'

EXPORTING

objectkey = l_objectkey

objecttable = l_objecttable

classnum = l_classnum

classtype = l_classtype

NO_DEFAULT_VALUES = ' '

TABLES

allocvaluesnumnew = lt_allocvaluesnumnew

allocvaluescharnew = lt_allocvaluescharnew

allocvaluescurrnew = lt_allocvaluescurrnew

return = lt_return.

READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.

IF sy-subrc = 0.

MESSAGE e002(zfiex) WITH ls_return-message(90).

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

ENDIF.

ENDAT.

ENDLOOP.

ENDIF.

ENDIF.

endif.

ENDIF.

ENDIF.

ENDLOOP.

&----


*& Form F_BUILD_CHARS

&----


  • text

----


  • -->P_LT_CHARS text

----


FORM f_build_chars TABLES pt_chars STRUCTURE gs_chars.

DATA: l_count(2) TYPE n,

l_charname(30) TYPE c,

l_fieldname(30) TYPE c.

FIELD-SYMBOLS: <fs> TYPE ANY.

  • Macro Definition to Characteristics

DEFINE addchar.

clear pt_chars.

pt_chars-classtype = '001'.

pt_chars-classnum = &1.

pt_chars-atnam = &2.

pt_chars-atwrt_from = &3.

append pt_chars.

END-OF-DEFINITION.

DATA: BEGIN OF gs_custclass,

class TYPE klasse_d,

material TYPE matnr,

enddate LIKE sy-datum,

close_reason(30) TYPE c.

DATA: END OF gs_custclass.

DATA: gt_custclass LIKE STANDARD TABLE OF gs_custclass.

addchar 'CLCM-SMCUSTOMER1' gc_cmenddate gs_custclass-enddate.

addchar 'CLCM-SMCUSTOMER1' gc_cmclosereason gs_custclass-close_reason.

ENDFORM. " F_BUILD_CHARS