学习内容描述:利用SAP的标准BAPI创建/修改成本中心
业务参考文档:【SAP-CO】成本中心的创建、变更与删除_sap ks01 函数-CSDN博客
重点知识:标准BAPI的调用
1、创建:BAPI_COSTCENTER_CREATEMULTIPLE
DATA: lt_costcenterlist TYPE TABLE OF bapi0012_ccinputlist,
ls_costcenterlist TYPE bapi0012_ccinputlist.
DATA: ls_language TYPE bapi0015_10.
DATA: lt_return TYPE STANDARD TABLE OF bapiret2.
DATA: ls_return TYPE bapiret2.
ls_language-langu = sy-langu. "语言代码
ls_costcenterlist-costcenter = <fs_data>-kostl. "成本中心
ls_costcenterlist-valid_from = <fs_data>-startdate. "有效期起始日期
ls_costcenterlist-valid_to = <fs_data>-enddate. "有效期截至日期
ls_costcenterlist-name = <fs_data>-name. "一般姓名
ls_costcenterlist-descript = <fs_data>-describe. "描述
* ls_costcenterlist-person_in_charge_user = <fs_data>-verak_user. "负责的用户
ls_costcenterlist-person_in_charge = <fs_data>-verapc. "负责人
ls_costcenterlist-costcenter_type = <fs_data>-type. "成本中心类型
ls_costcenterlist-costctr_hier_grp = <fs_data>-khinr. "层次结构范围
ls_costcenterlist-comp_code = <fs_data>-bukrs. "公司代码
ls_costcenterlist-currency = <fs_data>-waers. "货币
ls_costcenterlist-profit_ctr = <fs_data>-prctr. "利润中心
ls_costcenterlist-func_area_long = <fs_data>-fkber. "功能范围
ls_costcenterlist-lock_ind_actual_primary_costs = <fs_data>-bkzkp. "实际初级成本的冻结标志
ls_costcenterlist-lock_ind_plan_primary_costs = <fs_data>-pkzkp. "计划初级成本冻结标志
ls_costcenterlist-lock_ind_act_secondary_costs = <fs_data>-bkzks. "实际次级成本的冻结标志
ls_costcenterlist-lock_ind_plan_secondary_costs = <fs_data>-pkzks. "计划次级成本冻结标志
ls_costcenterlist-lock_ind_actual_revenues = <fs_data>-bkzer. "实际收入登记的冻结标志
ls_costcenterlist-lock_ind_plan_revenues = <fs_data>-pkzer. "计划收入冻结标志
APPEND ls_costcenterlist TO lt_costcenterlist.
CALL FUNCTION 'BAPI_COSTCENTER_CREATEMULTIPLE'
EXPORTING
controllingarea = <fs_data>-fkber "控制范围
language = ls_language
TABLES
costcenterlist = lt_costcenterlist
return = lt_return.
IF lt_return IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_out-id = <fs_data>-kostl. " 成本中心
ls_out-msg = '成本中心创建成功'. "消息
ls_out-status = '1'. "状态 0失败,1成功
APPEND ls_out TO lt_out.
CLEAR ls_out.
ELSE.
LOOP AT lt_return INTO ls_return.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_out-id = <fs_data>-kostl . "成本中心
ls_out-msg = ls_out-msg && '//' && ls_return-message. "消息
ls_out-status = '0'. "状态 0失败,1成功
ENDLOOP.
APPEND ls_out TO lt_out.
CLEAR ls_out.
ENDIF.
2、修改:BAPI_COSTCENTER_CHANGEMULTIPLE
修改和创建逻辑大体相同,不过有个巨坑,就是“实际初级成本的冻结标志”、“计划初级成本冻结标志”、“实际次级成本的冻结标志”、“计划次级成本冻结标志”、“实际收入登记的冻结标志”、“计划收入冻结标志”这6个字段,在修改时,传值要注意:解除冻结标识要传“!”,传空 不做任何处理,传“X”是冻结。
难点知识:标准报错的解释。
报错信息:等级被等级而不能更改。(吐槽:每个字都认识,连起来就是不知道说的啥)
原因:层次结构范围 khinr 错误。
收获与总结:
修改成本中心的冻结字段赋值需要注意的三种情况:
- 冻结 "X" ;
- 解除冻结 “!”(英文的!);
- 不做处理 “ ”。
反思与计划:下一篇写创建利润中心。
学习时间:20240720
学习天数:3年20天