标准增强出口
配置路径
Maintain Field Movements
可以直接配置字段赋值,如果需要写代码逻辑配置增强
程序复制RGIFS000和RGIVS000
但是FB01做手工凭证时,此增强中传入的利润中心是空的
Execute Enhancements
FMC10011 EXIT_SAPLFCIN_250,不是每次都进,部分场景才会进来
自开发增强
FAGLFLEXA位置
写入ECMCA的位置
做两个隐式增强
Include LGLINF90
FORM WRITE_TO_DB.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form WRITE_TO_DB, Start A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZIMPL_ECCS_MOVE_FIELD. "active version
export TAB_FAGLFLEXA = TAB_FAGLFLEXA[] to MEMORY id 'ZIMPL_ECCS_MOVE_FIELD'.
ENDENHANCEMENT.
Include LFCINF11
FORM POST_ECMCA
TABLES IT_ECMCA STRUCTURE ECMCA
IT_ECMCA_ADD STRUCTURE RGIAD1
USING LD_FLG_upd_task TYPE FC_FLG.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form POST_ECMCA, Start A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZIMPL_ECCS_MOVE_FIELD_02. "active version
data:
lt_tab_faglflexa type table of faglflexa,
ls_tab_faglflexa type faglflexa,
ls_ecmca like line of it_ecmca,
lv_docln type n length 6,
lv_docln_c type c length 6,
lv_docln_i type i,
lv_buzei type n length 3,
begin of ls_del,
docln type ecmca-docln,
end of ls_del,
lt_del like table of ls_del,
begin of ls_fla_split,
buzei type faglflexa-buzei,
count type i,
end of ls_fla_split,
lt_fla_split like table of ls_fla_split,
lv_split,
lv_waers type t001-waers,
lv_hsl type faglflexa-hsl.
import tab_faglflexa = lt_tab_faglflexa from memory id 'ZIMPL_ECCS_MOVE_FIELD'.
*未拆分和新增行:利润中心替代
loop at it_ecmca into ls_ecmca where zzprctr is initial.
lv_buzei = ls_ecmca-docln. "用buzei匹配,才可以cover凭证拆分的场景
read table lt_tab_faglflexa into ls_tab_faglflexa with key buzei = lv_buzei rldnr = '0L' rbukrs = ls_ecmca-robukrs ryear = ls_ecmca-ryear.
if sy-subrc = 0 .
ls_ecmca-zzprctr = ls_tab_faglflexa-prctr.
modify it_ecmca from ls_ecmca.
endif.
endloop.
*PCA 凭证拆分和新增行的场景
*先统计凭证拆分行
read table it_ecmca into ls_ecmca index 1.
loop at lt_tab_faglflexa into ls_tab_faglflexa where rldnr = '0L' and rbukrs = ls_ecmca-robukrs and ryear = ls_ecmca-ryear and buzei is not initial.
ls_fla_split-buzei = ls_tab_faglflexa-buzei.
ls_fla_split-count = 1.
collect ls_fla_split into lt_fla_split.
endloop.
delete lt_fla_split where count = 1.
loop at lt_tab_faglflexa into ls_tab_faglflexa where rldnr = '0L' and rbukrs = ls_ecmca-robukrs and ryear = ls_ecmca-ryear.
clear lv_split.
if ls_tab_faglflexa-buzei is initial. "为空是新增行
read table it_ecmca into ls_ecmca index 1.
else. "不为空判断是否拆分
read table lt_fla_split into ls_fla_split with key buzei = ls_tab_faglflexa-buzei.
if sy-subrc = 0. "拆分才删,如果一一对应则不动
lv_split = 'X'.
lv_buzei = ls_tab_faglflexa-buzei.
lv_docln_c = lv_buzei.
shift lv_docln_c left deleting leading '0'.
lv_docln_i = lv_docln_c.
lv_docln_c = lv_docln_i.
read table it_ecmca into ls_ecmca with key docln = lv_docln_c. "原凭证行作为模板
ls_del-docln = ls_ecmca-docln. "删除原凭证行,新增拆分行
collect ls_del into lt_del.
endif.
endif.
if ls_tab_faglflexa-buzei is initial or lv_split = 'X'. "fla表有改变币种的情况,所以非新增行和拆分行还是不要动
if lv_waers is initial.
select single waers
into lv_waers
from t001
where bukrs = ls_tab_faglflexa-rbukrs.
endif.
ls_ecmca-rbunit = ls_tab_faglflexa-rbukrs.
zcl_lan=>conv_alpha_in( changing cv_field = ls_ecmca-rbunit ).
ls_ecmca-zzfkber = ls_tab_faglflexa-rfarea.
ls_ecmca-zzprctr = ls_tab_faglflexa-prctr.
ls_ecmca-zzrstgr = ls_tab_faglflexa-zzrstgr.
ls_ecmca-ritem = ls_tab_faglflexa-racct.
ls_ecmca-rbuptr = ls_tab_faglflexa-rassc.
zcl_lan=>CONV_ALPHA_IN( changing CV_FIELD = ls_ecmca-rbuptr ) .
ls_ecmca-tsl = ls_tab_faglflexa-tsl.
ls_ecmca-hsl = ls_tab_faglflexa-hsl.
if lv_waers = 'CNY'. "如果Local currency = CNY 的话,group currency 复制local currency的值
ls_ecmca-ksl = ls_tab_faglflexa-hsl.
else.
ls_ecmca-ksl = ls_tab_faglflexa-ksl.
endif.
append ls_ecmca to it_ecmca. "存在fa表有buzei,ecmca表没有的情况,不新增
endif.
endloop.
*拆分行删除原行
loop at it_ecmca into ls_ecmca.
read table lt_del transporting no fields with key docln = ls_ecmca-docln.
if sy-subrc = 0.
delete lt_del index sy-tabix.
delete it_ecmca.
endif.
endloop.
*行项目重新编号
sort it_ecmca by docln.
loop at it_ecmca into ls_ecmca.
ls_ecmca-docln = sy-tabix.
modify it_ecmca from ls_ecmca.
lv_hsl = lv_hsl + ls_ecmca-hsl.
endloop.
IF lv_hsl is NOT INITIAL.
MESSAGE e001(00) WITH 'ECCS document total amount is not zero'.
ENDIF.
ENDENHANCEMENT.