FBL3N Layout 及增强
转自:https://www.cnblogs.com/sodacc/archive/2012/12/05/2802677.html
形如FBL3N,FBL1N,FBL5N显示总账,供应商,客户账户行项目,其Layout所提供的内容往往不能满足用户千奇百怪的需求,现以FBL3N为例展现对其LAYOUT做变更的两种方式。
进入FBL3N设置LAYOUT的方式,如下图,可将HIDDEN FIELDS选入即可。
现如果需要显示Material,标准的layout中没有此项内容,该如何新增。
方法一、通过Special Fiels选项添加
进入FBL3N中,菜单settings-special fields,即进入配置layout的界面
亦可通过SPRO进入(此处演示的是总账行项目的layout设置),其Tcode为 VBOU
进入如有权限配置,可新增field,注意此处只可从表 BESG BKPF中选择field,加入MATNR保存。
再进入LAYOUT在hidden field中即可看到MATERIAL。
到此处问题出现了,既然VBOU中限制了表,那如果需要添加此表中不存在的field该如何操作,这个要求太自然不过了。
如现在需要看到 在途科目的billing quantity,但此值存于表VBRP-FKIMG中,又该如何呢?
OK,现在给出第二种解决方法,也是扩展性最强的方式。
方法二、采用FI BTE(1650) 来实现
业务背景:在FBL3N中显示在途科目的billing quantity
上面已经说明找到此field存在于表VBRP-FKIMG中。
依以下步骤执行:
1.FIBF > Settings > Products > of a Customer
添加所需的field,此处称为product,同时需要激活勾选Active
2.FIBF > Settings > P/S Mod > of a Customer
添加内容
Event:00001650
Product:SEDUNM
Ctr:SE
Function Module:Z_FIxxxxxx
注此处所写入的Function Module需在后续的步骤中去创建。
*****************************************************************************
此处需要注意一点的是,在product 项 必须使用上面创建的product
即
event:00001650
product:ZFKIMNG(上面创建的field,用第一个就可以)
fm:Z_FI_INTERFACE_00001650FM
泣血提醒,如果这个地方设置错误,在进入FBL3N时将不会进入自定义的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 Function Group.
then Copy Function SAMPLE_INTERFACE_00001650 into ZSAMPLE_INTERFACE_00001650
此处的ZSAMPLE_INTERFACE_00001650请与step2中的名称一致。
此处需要加入code才能实现:
给出示例代码,来自SCN sample,其作用是加入物料群组
另说明在function model中务必将第一行注释取消掉。
E_POSTAB = I_POSTAB. data: ZMATNR type MATNR, ZMATKL type MATKL. select single MATNR from BSEG into ZMATNR where MATNR <> '' AND BELNR = I_POSTAB-BELNR. select single MATKL from MARA into ZMATKL where MATNR = ZMATNR. E_POSTAB-ZZMATKL = ZMATKL.
具体代码因人而异,此代码正确性不予置评,仅供参考。
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。
可尝试之,多测试,多实践,才能领悟更深。