Report有时涉及到key date的问题,即有些infoobject的attribute是时间依赖的(time-dependent),所以报表一般会有一个时间,而同时也要求输Keydate的时间,如果没有定义report的keydate,那么系统会默认用当前的系统时间,这样有些数据出来就是错误的。
report做了定义,用户不明白原因,导致对此项设置的抱怨,于是采用enhancement 。
CMOD-Enhancements :建立工程,对enhancement的实际应用
SMOD-SAP Enhancement Management :管理enhancement本身
因为有战友已建立了一个处理report变量的工程,所以我是用CMOD进去的,输入工程名,会有两个比较显眼的按键
“Enhancement Assign”和“Components”。第一个按键是定义工程将用到的Enhancement,Component显示的是En的内部组成(不是很清楚)。
我要用到的是
RSR00001:BW: Enhancements for global variables in reporting
点击进入:Components,选择EXIT_SAPLRRS0_001,双击进入Function,
Function内容为“INCLUDE ZXRSRU01” . 进入include program“ZXRSRU01”
跳过前面几行的参数定义,可以看到 CASE i_vnam. 这个就是对变量进行过滤的段落,翻到 此Case的末尾,新增一个when段落,注意其他人的东西不要去动,否则后果自负。
比如,我在report里面定义report的时间变量为 zperiod,key date的变量为 zkeydate,那么 when 后面的字符就是用keydate的变量名即“zkeydate”,
大体代码如下:
WHEN 'ZKEYDATE'.
DATA: g_date_1(10) TYPE c.
IF i_step = 2.
LOOP AT i_t_var_range INTO loc_var_range
WHERE vnam = 'ZPERIOD' .
CLEAR l_s_range.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
CLEAR g_date_1.
CONCATENATE
loc_var_range-low+0(4)
loc_var_range-low+5(2)
'01'
INTO g_date_1.
l_s_range-low = g_date_1.
APPEND l_s_range TO e_t_range.
EXIT.
ENDLOOP.
ENDIF.
应该代码都很容易,即输入的report的时间变量为年周期,我改为年周期日。
这里要注意,key date的参数类型要为Customer Exit,否则没得搞。当然用RSRT去debug还是很容易发现的。
记录一下。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-351777/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/554557/viewspace-351777/