CSAP_MAT_BOM_MAINTAIN问题:
1.exception不一定是e,比如“计量单位 ROL 不支持十进制小数”是个W,却出现在exception里了。原因是别的地方raise了error,然后程序继续执行,返回的消息是最后一条可能是非E的消息。比如删除BOM组件时,返回的是I 29 862 项目 & & & 被删除,这不是错误消息,但是如果此时修改了抬头,检查抬头字段是否可以修改时会报错E 29 282BOM 抬头仅能被显示。输入被忽略,表示部分字段不能修改,raise了error,但是返回的消息是删除项目的消息,最终不会提交。检查head处代码
2.“BOM 抬头仅能被显示。输入被忽略”,没有修改bom,如果此时传入了新的变更号,就会报错。29 031
demo
form frm_bom_create
using
pv_matnr
pv_werks
pv_stlan
pv_stlal
pv_zjdbs "add by cuijunhu for lucky 20160811
pv_stktx
changing
pv_rc
pv_msg
.
data: o_stko type stko_api02.
data: lt_stpo type table of stpo_api02 with header line.
data: lt_item type table of stpo_api03 with header line.
data: stko like stko_api01.
data: datuv(10),
stlalr type stalt, "展开用可选BOM号
stlalm type stalt. "修改用可选BOM号
perform cunit_output changing mara-meins.
stko-base_unit = mara-meins.
* stko-base_quan = '1' .
stko-bom_status = '01' .
stko-alt_text = pv_stktx .
stko-zjdbs = pv_zjdbs. "add by cuijunhu for lucky 20160811
* stko-bom_text = pv_stktx .
loop at it_upload into wa_upload
where matnr = pv_matnr
and werks = pv_werks.
clear:lt_item .
check wa_upload-idnrk is not initial.
perform matn1_input changing wa_upload-idnrk.
*校验
select single * from marc
where matnr = wa_upload-idnrk and
werks = wa_upload-werks.
if sy-subrc <> 0.
shift wa_upload-idnrk left deleting leading '0'.
pv_msg = '物料' && wa_upload-idnrk && '未在工厂' && wa_upload-werks && '维护'.
pv_rc = 'E'.
exit.
endif.
perform numcv_input changing wa_upload-posnr.
lt_item-item_no = wa_upload-posnr.
lt_item-item_categ = wa_upload-postp.
lt_item-component = wa_upload-idnrk.
lt_item-comp_qty = wa_upload-menge.
lt_item-comp_unit = wa_upload-meins.
lt_item-item_text1 = wa_upload-potx1.
lt_item-item_text2 = wa_upload-potx2.
lt_item-sortstring = wa_upload-sortf."add by cuijunhu for lucky 20160811
lt_item-rel_engin = ' '. "标志: 与工程相关项目
lt_item-rel_cost = 'X'. "标志: 与成本核算相关项目
lt_item-rel_prod = 'X'. "标志: 与生产相关项目
append lt_item.
endloop.
check pv_rc ne 'E'.
write sy-datum to datuv.
call function 'CSAP_MAT_BOM_MAINTAIN'
exporting
material = pv_matnr
plant = pv_werks
bom_usage = pv_stlan
alternative = pv_stlal
valid_from = datuv
i_stko = stko
fl_bom_create = 'X'
fl_new_item = 'X'
fl_complete = 'X'
fl_commit_and_wait = 'X'
fl_default_values = 'X'
importing
o_stko = o_stko
tables
t_stpo = lt_item
exceptions
error_message = 1
error = 2
others = 3.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into pv_msg.
pv_rc = 'E'.
else.
pv_rc = 'S'.
endif.
endform. " FRM_BOM_CREATE