最近接到一个需求,客户想在IDCNACCTBLN(科目余额表)添加累计借贷金额字段,跟踪标准程序后屏幕需求可以做,下面记录下解决思路。
需求要在界面添加当前借方累计发生额、贷方累计发生额字段。
ALV添加字段首先考虑是使用的标准结构还是定义内表,查找ALV所在屏幕号,找ALV display相关代码。
在ALV字段上查看技术信息得到对应表名为:IDCN_ACCTBLNSTR_ALVBALANCE,但依然要从程序上确认ALV是否是直接引用的该结构;
ALV 所在RFIDCN_ACCTBLN 300屏幕,翻阅程序逻辑流代码能找到控制ALV输出的代码,进而确认ALV数据结构即:IDCN_ACCTBLNSTR_ALVBALANCE
在该结构中添加附加结构
紧接着更改Fieldcat结构赋值,找到build fieldcat 对应的FORM,在该FORM下创建隐式增强
清空TECH赋值才能显示字段,更改BALANCE_CUM、WAERS列COL_POS赋值的目的是为了把累计借方金额、累计贷方金额放在余额之前,尝试更改两个增强字段的COL_POS值不生效,有知道的小伙伴麻烦告知下原因,截图方案为替代方案。
解决完显示问题后,我们着手解决赋值问题。通过debug我们得到,中间处理内表GT_BALANCE中存在累计金额行,即为我们想要的数据,所以只要在合适位置读取该内表赋值到显示内表即可。
在refresh_balance_grid MEDULE下pbo_prepare_balance_list FORM里为显示内表赋值,这些信息都是通过debug程序获得,位置要选在GT_BALANCE内表值不在更新后。在该FORM最后做隐式增强,赋值代码如下。
DATA: LT_ZZBALANCE LIKE GT_BALANCE.
DATA: LS_ZZBALANCE LIKE LINE OF LT_ZZBALANCE.
DATA: LV_PERIOD TYPE IDCN_S_BAL_ITEM-PERIOD.
DATA: LV_MON TYPE N LENGTH 3.
DATA: LV_LEVEL_ORD TYPE IDCN_ACCTBLNSTR_ALVBALANCE-LEVEL_ORD.
DATA: BEGIN OF LS_SUMM,
ZZJFLJ TYPE IDCN_ACCTBLNSTR_ALVBALANCE-ZZJFLJ,
ZZDFLJ TYPE IDCN_ACCTBLNSTR_ALVBALANCE-ZZDFLJ,
END OF LS_SUMM.
IF is_selscreen_params-ENDE_MONAT IS NOT INITIAL.
LV_MON = is_selscreen_params-ENDE_MONAT.
ELSE.
LV_MON = is_selscreen_params-START_MONAT.
ENDIF.
LV_PERIOD = LV_MON.
LV_LEVEL_ORD = 1.
IF is_selscreen_params-saknr IS INITIAL.
LT_ZZBALANCE[] = GT_BALANCE[].
SORT LT_ZZBALANCE BY RACCT DESCR PERIOD.
CLEAR: LS_SUMM.
LOOP AT ct_balance_outtab ASSIGNING <fs_balance_outtab> WHERE RACCT IS NOT INITIAL.
READ TABLE LT_ZZBALANCE INTO LS_ZZBALANCE WITH KEY RACCT = <fs_balance_outtab>-RACCT
DESCR = '累计'
PERIOD = LV_PERIOD BINARY SEARCH.
IF SY-SUBRC = 0.
<fs_balance_outtab>-ZZJFLJ = LS_ZZBALANCE-DEBIT.
<fs_balance_outtab>-ZZDFLJ = LS_ZZBALANCE-CREDIT.
LS_SUMM-ZZJFLJ = LS_SUMM-ZZJFLJ + <fs_balance_outtab>-ZZJFLJ.
LS_SUMM-ZZDFLJ = LS_SUMM-ZZDFLJ + <fs_balance_outtab>-ZZDFLJ.
ENDIF.
ENDLOOP.
READ TABLE ct_balance_outtab ASSIGNING <fs_balance_outtab> WITH KEY LEVEL_ORD = LV_LEVEL_ORD.
IF SY-SUBRC = 0.
<fs_balance_outtab>-ZZJFLJ = LS_SUMM-ZZJFLJ.
<fs_balance_outtab>-ZZDFLJ = LS_SUMM-ZZDFLJ.
ENDIF.
CLEAR: LT_ZZBALANCE[],LS_SUMM.
ENDIF.
LEVEL_ORD=1是为了赋值总计行。
测试显示正常,增强完成。
在上述增强完成后,客户又提出了延伸需求,要求在双击显示凭证明细界面添加供应商字段。
同样是通过debug代码找到ALV显示的调用位置
同样的步骤,增强字段、修改显示fieldcat、赋值内表。
测试成功!搞定。