【增强】FI行项目报表增强任意字段
业务背景:例如在FBL1N/FBL3N/FBL5N中显示总账科目名称、供应商名称1、客户名称1
依以下步骤执行:
1.FIBF > Settings > Products > of a Customer
添加所需的field,此处称为product,同时需要**勾选Active
2.FIBF > Settings > P/S Mod > of a Customer
添加内容
Event:00001650
Product:XXXXXX
Ctr:SE
Function Module:Z_FI_ITEMREPORT
注此处所写入的Function Module需在后续的步骤中去创建。
************************************************************************
此处需要注意一点的是,在product 项 必须使用上面创建的product
即 event:00001650
product:ZKNAME1(上面创建的field,用第一个就可以)
fm:Z_FI_ITEMREPORT
泣血提醒,如果这个地方设置错误,在进入FBL1N\3N\5N时将不会进入自定义的FM,谨记。
************************************************************************
3.Se11:Append Structure to RFPOS
在Append Structure中写入你需要添加的field,保存**。
4.Se11:Append Structure to RFPOSX
在RFPOSX中加入和RFPOS同样的field,保存**。
此处这两个structure则是控制layout的数据。
5.Se37 Creating a Z_FI_FG Function Group.
then Copy Function SAMPLE_INTERFACE_00001650 into Z_FI_ITEMREPORT
此处的Z_FI_ITEMREPORT请与step2中的名称一致。
加入code实现:
FUNCTION Z_FI_ITEMREPORT.
*"--------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(I_POSTAB) LIKE RFPOS STRUCTURE RFPOS
*" EXPORTING
*" VALUE(E_POSTAB) LIKE RFPOS STRUCTURE RFPOS
*"--------------------------------------------------------------------
*-------------- Initialize Output by using the following line ----------
E_POSTAB = I_POSTAB.
*BREAK-POINT.
data: ZKNAME1 type LFA1-NAME1,
ZDNAME1 type KNA1-NAME1,
ZSKATTXT type SKAT-TXT20.
"得到供应商名称1
IF I_POSTAB-KOART = 'K'.
select single NAME1 from LFA1
into ZKNAME1
where LIFNR = I_POSTAB-KONTO.
ENDIF.
"得到客户名称1
IF I_POSTAB-KOART = 'D'.
select single NAME1 from KNA1
into ZKNAME1
where KUNNR = I_POSTAB-KONTO.
ENDIF.
"得到总账科目名称
select single TXT20 from SKAT
into ZSKATTXT
where SAKNR = I_POSTAB-HKONT
AND KTOPL = '1000'.
E_POSTAB-ZKNAME1 = ZKNAME1.
E_POSTAB-ZDNAME1 = ZDNAME1.
E_POSTAB-ZSKATTXT = ZSKATTXT.
ENDFUNCTION.
6.Se38 Run Report RFPOSXEXTEND then click Yes
此处执行的这个pm,是用来**前面的两个structure 。
在执行的时候,会提示如下页面
点击yes执行。
如遇此种报错
请找Basis查看系统中是否有安装note 947573
此Note控制这个设置。
**********************************************************************
此处修正一点,这个NOTE是不可以解决这个问题的,究竟为什么,因为这个NOTE解决的是报错 003
至于这个原因是什么,我追究了好久,没有结果,有的人说是T021S这个表的问题,有的人说是别的NOTE,
反正不管了,我给出我的解决方案。
为什么要执行 RFPOSXEXTEND这个程序,其实就是为了将在RFPOS中新增的field加入到结构RFPOSXEXT中,
那不能执行这个程序难道就不能添加到这个结构中了吗,当然有更直白的方法,
既然在RFPOS和RFPOSX中是采用Append Structure新增field,那么就直接采用Append Structure将
field添加到RFPOSXEXT中不久可以了吗,就这么简单!
所以最终的结果是在RFPOS、RFPOSX、RFPOSXEXT三个结构中Append Structure 新增的field,保存**,OK!
此处给我的教训就是,要弄清楚每一个步骤的意义是什么,否则还是没有真正学会它。
***********************************************************************
到此为止,已经可以实现对layout的任意设置,任意TABLE,任意field。