FBL3N Layout 及增强

转自:https://www.cnblogs.com/sodacc/archive/2012/12/05/2802677.html


形如FBL3N,FBL1N,FBL5N显示总账,供应商,客户账户行项目,其Layout所提供的内容往往不能满足用户千奇百怪的需求,现以FBL3N为例展现对其LAYOUT做变更的两种方式。

进入FBL3N设置LAYOUT的方式,如下图,可将HIDDEN FIELDS选入即可。

image

image

现如果需要显示Material,标准的layout中没有此项内容,该如何新增。

方法一、通过Special Fiels选项添加

进入FBL3N中,菜单settings-special fields,即进入配置layout的界面

亦可通过SPRO进入(此处演示的是总账行项目的layout设置),其Tcode为 VBOU

image

进入如有权限配置,可新增field,注意此处只可从表 BESG BKPF中选择field,加入MATNR保存。

image

再进入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

image

2.FIBF > Settings > P/S Mod > of a Customer

添加内容

Event:00001650

Product:SEDUNM

Ctr:SE

Function Module:Z_FIxxxxxx

注此处所写入的Function Module需在后续的步骤中去创建。

image

*****************************************************************************

此处需要注意一点的是,在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中务必将第一行注释取消掉。

image

复制代码
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 。

在执行的时候,会提示如下页面

image

点击yes执行。

如遇此种报错image

请找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。

可尝试之,多测试,多实践,才能领悟更深。

原文地址:https://www.cnblogs.com/rainysblog/p/14184627.html