自学内容网 自学内容网

FB03屏幕增强实现显示/修改的转换

背景

因为 FICO 模块增强了 CodingBlock 字段,这个 9999 子屏幕的自定义字段在 FB01 是支持修改的,但是在 FB02/FB03 事务码都是没法直接修改的,因此应财务用户要求,对屏幕增强修改功能

类似会计分配和文本一样,是空白区域,而不是灰色区域:

在这里插入图片描述

实现方式

最直观的方法就是通过增强屏幕,然后写代码去控制 PBO。以往的做法,可能在代码中用 sy-tcode 去控制是显示和修改,但是标准程序是有个 显示/修改 的切换,即使是 FB03 先进行查看,也能通过如下图的按钮切换到修改模式:

在这里插入图片描述
因此在这种场景下,如果只通过 Tcode 去控制,会不符合用户的常用使用习惯,达不到要求。

因此需要 Debug 研究标准代码,看点击这个按钮的时候做了哪些变化。

很快就定位到这段:

在这里插入图片描述
然后发现这个显示/修改状态是通过 t020-aktyp 来转换的。然后去看了这个表的内容,确实是 FI/AM 业务控制逻辑,可以看一下关于 FB0X 事务码的内容:

在这里插入图片描述
从中可以看出,AKTYP 分别的值对应:

  • H:creation 创建
  • V:modification 修改
  • A:display 显示

因此,我们很好理解,获取当前屏幕的 aktyp 的值,如果不是 ‘A’,就需要将屏幕更改为可以输入的类型。将屏幕的 screen-input 设置为 1,然后 MODIFY SCREEN

在自定义屏幕 9999 中,中插入这样一段代码:

PROCESS BEFORE OUTPUT.
  MODULE INIT_9999.
*{   INSERT                                           
    MODULE FRM_MODIFY_SCREEN. " 支持显示/修改的切换
*}   INSERT
*
PROCESS AFTER INPUT.
  CHAIN.
      FIELD COBL-ZZTEST01.
      FIELD COBL-ZZSCTG
      FIELD COBL-ZZSCTG2.
    MODULE CHECK_FLAG ON CHAIN-REQUEST.
  ENDCHAIN.

然后在 FRM_MODIFY_SCREEN 中写下如下代码:

MODULE frm_modify_screen OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'
*    IF sy-tcode = 'FB02'. " 因FB03也能进入修改状态,因此不能仅仅用事务码判断
  FIELD-SYMBOLS: <lfs_t020> LIKE t020,
                 <fs_aktyp> TYPE t020-aktyp.
  ASSIGN ('(SAPMF05L)T020') TO <lfs_t020>.
  CHECK <lfs_t020> IS ASSIGNED.
  ASSIGN COMPONENT 'AKTYP' OF STRUCTURE <lfs_t020> TO <fs_aktyp>.
  IF <fs_aktyp> IS ASSIGNED.
    DATA(lv_aktyp) = <fs_aktyp>.
  ENDIF.

  IF lv_aktyp IS INITIAL.
    ASSIGN ('(SAPMF05A)T020') TO <lfs_t020>.
    CHECK <lfs_t020> IS ASSIGNED.
    ASSIGN COMPONENT 'AKTYP' OF STRUCTURE <lfs_t020> TO <fs_aktyp>.
    IF <fs_aktyp> IS ASSIGNED.
      lv_aktyp = <fs_aktyp>.
    ENDIF.
  ENDIF.

  IF lv_aktyp IS INITIAL.
    ASSIGN ('(SAPLF040)T020') TO <lfs_t020>.
    CHECK <lfs_t020> IS ASSIGNED.
    ASSIGN COMPONENT 'AKTYP' OF STRUCTURE <lfs_t020> TO <fs_aktyp>.
    IF <fs_aktyp> IS ASSIGNED.
      lv_aktyp = <fs_aktyp>.
    ENDIF.
  ENDIF.

  IF lv_aktyp IS NOT INITIAL AND lv_aktyp <> 'A'.
    LOOP AT SCREEN.
      IF screen-name+0(7) = 'COBL-ZZ'.
        screen-input = 1.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDMODULE.

增强成功的效果图如下:

在这里插入图片描述

自定义字段全部支持修改,也能在 FB02/03 中自由切换,到此,完美实现用户要求!

鼓掌👏撒花★,°:.☆( ̄▽ ̄)/$:.°★

其他使用到 AKTYP 的表

同理,销售订单/采购订单/物料 对应的屏幕也能这样操作,下面是使用到 AKTYP 字段的表格,找到你需要的表格,试试吧~

List of Tables using AKTYP Field
TableNote
AT185Treasury: Starting Values for Subsequent Screen Control
OIGSHTD Shipment History
T020FI/AM Transaction Control
T063Screen Control: Inventory Management
T066Screen Selection, Invoice Verification
T078SAction Type Screen Selection for G/L Acct Master Data
T130MTransaction control parameters: material master maintenance
T138BMaterial master screen sequence control
T148MTransaction control parameters: special stocks
T168Screen Control, Purchasing
T180Screen Sequence Control: Transaction Default Values
T185FScreen Control: Function Codes
T342Control of Screen Sequence in WM
T342TAssignment of Title Bar to PF Status
T370AActivity Category for PM Lists
T401MTransaction control paramters: MRP profiles
T440BControl table for creating MRP record
T441MForecast transaction control
T450PTransaction control for maintaining ind. requirements
TC62Sequence of detail screens when processing header externally
TJ180Initial Values of Transaction in IS-M
TK180Default Values per Transaction (Screen Sequence Control)
TKSB0Transaction control CO
TTABSTables with Special Maintenance
/BEV3/CH180Screen Sequence Control: Transaction Default Values

原文地址:https://blog.csdn.net/SAP_yu/article/details/143744658

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!