注意点:
ECC版本没有单独修改成本中心组的BAPI,当前使用的BAPI都是创建,只是该BAPI可以重复创建,覆盖之前的成本中心组
所以修改就是把原有的所有数据全部取出来,重新创建就会覆盖实现修改的目的
DATA:ls_return TYPE bapiret2, "
lv_language TYPE sy-langu, "
lt_sethier TYPE STANDARD TABLE OF sethier_co, "
ls_sethier TYPE sethier_co, "
lt_setval TYPE STANDARD TABLE OF setval_co, "
ls_setval TYPE setval_co, "
lv_top_node_only TYPE sy-datar, " SPACE
lv_tolerate_ambiguity TYPE sy-datar. " SPACE
CLEAR ls_setval.
REFRESH lt_setval.
ls_setval-valfrom = ps_data-kostl.
ls_setval-valto = ps_data-kostl.
APPEND ls_setval TO lt_setval.
SELECT
*
INTO TABLE @DATA(lt_setleaf)
FROM setleaf
WHERE setname = @ps_data-telfx.
IF sy-subrc = 0.
LOOP AT lt_setleaf INTO DATA(ls_setleaf).
CLEAR ls_setval.
ls_setval-valfrom = ls_setleaf-valfrom.
ls_setval-valto = ls_setleaf-valto.
APPEND ls_setval TO lt_setval.
ENDLOOP.
ENDIF.
SORT lt_setval .
DELETE ADJACENT DUPLICATES FROM lt_setval COMPARING ALL FIELDS.
lv_language = ps_setheadert-langu.
CLEAR ls_sethier.
REFRESH lt_sethier.
ls_sethier-setclass = ps_setheadert-setclass."组类型
ls_sethier-co_area = ps_data-kokrs."控制范围
ls_sethier-chrt_accts = ‘YD00’."帐目表
ls_sethier-groupname = ps_data-telfx."组名称
ls_sethier-hierlevel = ‘0’."项目的层次
ls_sethier-valcount = lines( lt_setval )."计数器:价值表
ls_sethier-descript = ps_setheadert-descript."组的简要说明
APPEND ls_sethier TO lt_sethier.
CALL FUNCTION ‘K_GROUP_REMOTE_GENERATE’ "Create or change CO hierarchy
EXPORTING
language = lv_language
top_node_only = lv_top_node_only
tolerate_ambiguity = lv_tolerate_ambiguity
IMPORTING
return = ls_return
TABLES
it_sethier = lt_sethier
it_setval = lt_setval
. " K_GROUP_REMOTE_GENERATE
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ps_return-message = sy-msgv1 && sy-msgv2 && sy-msgv3 && sy-msgv4.
ps_return-status = ‘E’.
ROLLBACK WORK.
ENDIF.
SELECT SINGLE
*
INTO @DATA(lss_setleaf)
FROM setleaf
WHERE setclass = @ps_setheadert-setclass
AND subclass = ‘YD00’
AND setname = @ps_data-telfx
AND valfrom = @ps_data-kostl.
IF sy-subrc <> 0.
ps_return-message = ‘成本中心组更新失败’.
ps_return-status = ‘E’.
ENDIF.