这里写自定义目录标题
1、BAPI_BATCH_CREATE:创建批次
2、BAPI_OBJCL_GETDETAIL :获取批次属性信息
3、BAPI_OBJCL_CREATE :创建批次特性值
4、BAPI_OBJCL_CHANGE:修改批次的特性值
该文章注主要是针对批次号存在或者批次号不存在进行的批次创建以及批次属性创建或者修改的操作
1、批次号不存在的话,先调用BAPI_BATCH_CREATE创建批次,示例如下:
call function 'BAPI_BATCH_CREATE'
exporting
material = lv_matnr
batch = lv_charg
plant = lv_werks
tables
return = lt_rettab.
read table lt_rettab into ls_rettab with key type = 'S' id = '12' number = '128'. "#EC CI_STDSEQ
if sy-subrc = 0. "批次创建成功
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
<ls_value_message> = | { <ls_value_message> } { '[批次创建成功!]' } |.
else. "批次创建失败
call function 'BAPI_TRANSACTION_ROLLBACK'.
<ls_value_icon> = c_red.
<ls_value_message> = |错误:{ ls_rettab-type } ID:{ ls_rettab-id } Number:{ ls_rettab-number } 消息:{ ls_rettab-message }|.
continue.
endif.
2、如果批次存在,则调用BAPI_OBJCL_GETDETAIL 获取批次属性信息,如果批次属性有特性值则调用BAPI_OBJCL_CHANGE修改特性值,如果批次属性没有特性值,则调用BAPI_OBJCL_CREATE创建批次特性值
data :lv_objek type cuobn,
lv_obtab type bapi1003_key-objecttable,
lv_klart type klassenart,
lv_class type klasse_d.
data:lv_key type bapi1003_key-object,
lv_table type bapi1003_key-objecttable,
lv_class_1 type bapi1003_key-classnum,
lv_class_type type bapi1003_key-classtype,
lv_status type bapi1003_key-status,
lv_long type bapi1003_key-object_long.
data: lt_alloc_curr type table of bapi1003_alloc_values_curr, "是货币类型特性值
lt_alloc_num type table of bapi1003_alloc_values_num, "是数值类型的特性值
lt_alloc_char type table of bapi1003_alloc_values_char, "是CHAR类型的特性值
ls_alloc_char type bapi1003_alloc_values_char,
lt_alloc_char_cr type table of bapi1003_alloc_values_char.
data:lv_atnam type atnam,
lv_imerk type atinn.
“通过物料,批次,工厂先获取到批次的信息
call function 'VB_BATCH_2_CLASS_OBJECT'
exporting
i_matnr = pv_matnr_1
i_charg = pv_charg_1
i_werks = pv_werks_1
importing
e_objek = lv_objek
e_obtab = lv_obtab
e_klart = lv_klart
e_class = lv_class.
*****获取到分类值
clear:lv_imerk,lv_atnam.
read table lt_ksml into data(ls_ksml) with key class = lv_class
klart = lv_class_type.
if sy-subrc = 0.
lv_imerk = ls_ksml-imerk.
call function 'CONVERSION_EXIT_ATINN_OUTPUT'
exporting
input = lv_imerk
importing
output = lv_atnam.
endif.
"获取批次属性信息 BAPI_OBJCL_GETDETAIL
call function 'BAPI_OBJCL_GETDETAIL'
exporting
objectkey = lv_key
objecttable = lv_table
classnum = lv_class_1
classtype = lv_class_type
language = sy-langu
objectkey_long = lv_long
importing
status = lv_status
tables
allocvaluesnum = lt_alloc_num
allocvalueschar = lt_alloc_char
allocvaluescurr = lt_alloc_curr
return = lt_return.
lt_alloc_char_cr = lt_alloc_char.
"将品味的值转换成大写
lv_atwrt = pv_atwrt.
lv_atwrt = to_upper( lv_atwrt ).
read table lt_alloc_char into ls_alloc_char with key charact = lv_atnam ##WARN_OK
value_char = lv_atwrt .
if sy-subrc = 0.
cv_flag = 'X'.
return.
endif.
"如果特性值有修改则调用函数修改批次值
if cv_flag is initial.
***再调用bapi_objcl_change将特性值写入批次特性
lr_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( t_dyn_table[] ).
lr_descr_ref ?= lr_tabledescr_ref->get_table_line_type( ).
lt_field = lr_descr_ref->components.
delete lt_field where name <> 'ATWRT'. "#EC CI_STDSEQ
read table lt_field into ls_field index 1.
if sy-subrc = 0.
assign component ls_field-name of structure pv_dyn_table to <ls_value>.
read table lt_alloc_char assigning <ls_s_alloc_char> with key charact = lv_atnam.
if sy-subrc = 0.
if <ls_value> is assigned..
<ls_s_alloc_char>-charact = lv_atnam.
<ls_s_alloc_char>-value_char = <ls_value>.
<ls_s_alloc_char>-value_neutral = <ls_value>.
<ls_s_alloc_char>-value_char_long = <ls_value>.
<ls_s_alloc_char>-value_neutral_long = <ls_value>.
else.
delete lt_alloc_char where charact = lv_atnam.
endif.
else.
if <ls_value> is assigned.
append initial line to lt_alloc_char assigning <ls_s_alloc_char>.
<ls_s_alloc_char>-charact = lv_atnam.
<ls_s_alloc_char>-value_char = <ls_value>.
<ls_s_alloc_char>-value_neutral = <ls_value>.
<ls_s_alloc_char>-value_char_long = <ls_value>.
<ls_s_alloc_char>-value_neutral_long = <ls_value>.
endif.
endif.
clear:lt_return.
"如果批次值为空,则创建批次特性值 BAPI_OBJCL_CREATE
if lt_alloc_char_cr is initial and lv_status is initial.
call function 'BAPI_OBJCL_CREATE'
exporting
objectkeynew = lv_key
objecttablenew = lv_table
classnumnew = lv_class_1
classtypenew = lv_class_type
objectkeynew_long = lv_long
tables
allocvaluesnum = lt_alloc_num
allocvalueschar = lt_alloc_char
allocvaluescurr = lt_alloc_curr
return = lt_return.
else. "否则就直接修改批次的特性值即可
call function 'BAPI_OBJCL_CHANGE'
exporting
objectkey = lv_key
objecttable = lv_table
classnum = lv_class_1
classtype = lv_class_type
status = '1'
keydate = sy-datum
objectkey_long = lv_long
importing
classif_status = lv_status
tables
allocvaluesnumnew = lt_alloc_num
allocvaluescharnew = lt_alloc_char
allocvaluescurrnew = lt_alloc_curr
return = lt_return.
endif.
ct_return = lt_return[]. "将返回结果传出去
endif.
endif.