前言
需求:批量修改物料期初分类账信息,BAPI:CKMMC_MANCHANG_AUTOMATED代码,以及一下报错问题的修改。
一、前台事务
CKMCCC
配置成本构成名称底表:TCKH3
二、BAPI代码及相关报错问题
1.代码参考
BAPI:CKMMC_MANCHANG_AUTOMATED
代码如下:
DATA:lt_ckml_t_change_ccs TYPE ckml_t_change_ccs,
lv_cmf_nr TYPE cmf_nr,
lt_cmfmsg TYPE TABLE OF cmfmsg,
lv_mes TYPE string,
lv_mesg TYPE string.
CLEAR:lt_ckml_t_change_ccs,lv_cmf_nr,lt_cmfmsg,lv_mesg.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE sel = c_true AND flg IS INITIAL.
APPEND INITIAL LINE TO lt_ckml_t_change_ccs ASSIGNING FIELD-SYMBOL(<fs_data>).
<fs_data>-material = <fs_alv>-matnr. " 物料编码
<fs_data>-plant = <fs_alv>-werks. " 工厂
<fs_data>-year = <fs_alv>-gjahr. " 年度
<fs_data>-period = <fs_alv>-poper. " 月份
<fs_data>-sd_doc = <fs_alv>-vbeln. " 销售凭证
<fs_data>-sd_pos = <fs_alv>-posnr. " 行项目
<fs_data>-category = <fs_alv>-rldnr. " 物料分类账类别
<fs_data>-curr_type = <fs_alv>-curtp. " 货币
<fs_data>-kst001 = <fs_alv>-kst001. "
<fs_data>-kst003 = <fs_alv>-kst003. "
<fs_data>-kst005 = <fs_alv>-kst005. "
<fs_data>-kst007 = <fs_alv>-kst007. "
<fs_data>-kst009 = <fs_alv>-kst009. "
<fs_data>-kst011 = <fs_alv>-kst011. "
<fs_data>-kst013 = <fs_alv>-kst013. "
ENDLOOP.
* 调用函数
CALL FUNCTION 'CKMMC_MANCHANG_AUTOMATED'
EXPORTING
it_ccs = lt_ckml_t_change_ccs
* I_KONGR =
* I_RUN_TYPE =
* I_RUN_APPL =
* I_KEART = 'H'
* I_TEST = ' '
* I_MLCCT = ' '
* I_BKTXT =
IMPORTING
e_prot_nr = lv_cmf_nr.
* 获取消息
CALL FUNCTION 'CM_F_MESSAGES_GET'
* EXPORTING
* APLID = 'ACT '
* OBJECT = ' '
* WITH_OBJECTINDEPENDENT = 'X'
* LAST_MESSAGES = 0
TABLES
e_msgprot = lt_cmfmsg
* i_object_filter =
EXCEPTIONS
not_active = 1
OTHERS = 2.
IF NOT line_exists( lt_cmfmsg[ msgty = 'E' ] ).
* 成功
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
MODIFY gt_alv FROM VALUE #( icon = c_green message = |成功!| flg = c_true )
TRANSPORTING icon message flg
WHERE sel = c_true
AND flg IS INITIAL.
ELSE.
* 失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
lv_mesg = '失败:'.
LOOP AT lt_cmfmsg ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE msgty = 'E' .
CLEAR lv_mes.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = <fs_return>-arbgb
msgnr = <fs_return>-msgnr
msgv1 = <fs_return>-msgv2
msgv2 = <fs_return>-msgv1
msgv3 = <fs_return>-msgv3
msgv4 = <fs_return>-msgv4
IMPORTING
message_text_output = lv_mes.
lv_mesg = |{ lv_mesg };{ lv_mes }|.
ENDLOOP.
MODIFY gt_alv FROM VALUE #( icon = c_red message = |{ lv_mesg }| )
TRANSPORTING icon message
WHERE sel = c_true
AND flg IS INITIAL.
ENDIF.
2.问题处理
报错:批量数据调用一次函数处理报E类型错 消息号:C+ 701 信息:内部界面中的数据不能处理
问题原因:
批量处理物料的会计1视图的价格确定不同(lt_ckml_t_change_ccs表中物料的价格确定值需要相同)
错误问题位置:
总结
可能不够清晰详细,请多包含!