前面一篇文章说过,BPS表单中的数据是可以通过计划功能出口传输到内表(是个HASH表),但我仅仅是通过LOOP,对其某一列值做了合计,并没有实际改动数据。
后来的需求中又涉及到这一部分,而且不光要改数值,还要增加数据记录,这次又试验了几把,结果是成功的~
BPS的功能,其实也比较完善了。对于预算管理甚至其他应用功能的开发,应该都是能提供一套解决方案的。然而,界面被吐槽,新产品的不断推出,不知还能存活多久?
补充解释一下hash表
ABAP中的HASH表,是由两部分构成,Characteristic Values 和 Key Figures。其中Characteristic Values相当于内表的Key,Key Figures里都是数值。
HASH表都要用key来读取,然后对其数值部分做操作。新增内表记录可以使用insert 将整行插入内表,但需要注意key不要与与有记录冲突。
看关键代码吧,哈希内表大部分都是在用指针读取或修改数据
*
LOOP AT ZETO_CHARSEL2 INTO WA_CHARSEL2.
ls_data = ls_data_00 ."
CLEAR ZRESULT.
ASSIGN COMPONENT 'S_CHAS' OF STRUCTURE ls_data to <F_CHA>.
IF <F_CHA> IS ASSIGNED.
<F_CHA>-0CALMONTH2 = WA_CHARSEL2-LOW.
"用key来读取hash表的一行,读到则更新指定figure,读不到则插入一行
READ TABLE XTH_DATA ASSIGNING <DATA> WITH KEY S_CHAS = <F_CHA> .
IF SY-SUBRC = 0.
ASSIGN COMPONENT 'S_KYFS' OF STRUCTURE <DATA> TO <F_KYF>.
IF <F_KYF> IS ASSIGNED.
"WA_EXITP-CHAVL是数据部分的一个字段名,ASSIGN的详细用法请百度,下面的4行语句完成数值修改
ASSIGN COMPONENT WA_EXITP-CHAVL OF STRUCTURE <F_KYF> TO <F>.
IF <F> IS ASSIGNED.
READ TABLE ZRESULT WITH KEY ZMON = <F_CHA>-0CALMONTH2.
<F> = ZRESULT-ZAMONT .
ENDIF.
ENDIF.
ELSE.
"下面的insert语句完成了内表记录的新增。本语句相当于将已有记录复制出来修改后再插入,有小BUG,仅供参考
ASSIGN COMPONENT 'S_KYFS' OF STRUCTURE ls_data TO <F_KYF>.
IF <F_KYF> IS ASSIGNED.
ASSIGN COMPONENT WA_EXITP-CHAVL OF STRUCTURE <F_KYF> TO <F>.
IF <F> IS ASSIGNED.
READ TABLE ZRESULT WITH KEY ZMON = <F_CHA>-0CALMONTH2.
<F> = ZRESULT-ZAMONT .
ENDIF.
ENDIF.
INSERT ls_data INTO TABLE XTH_DATA.
ENDIF.
ENDIF.
CLEAR ls_data.
ENDLOOP.