1、文档说明
S4系统中,对供应商和客户的操作统一到BP中,当需要对主数据新增字段时,可以使用新增页签的办法,展示增强字段。
本文档以客户主数据增强为例,介绍BP新增页签增强。因为BP为供应商和客户共用,因此供应商的新增页签增强,也可以按照本文档实现,方法类似,注意区分。
2、代码实现
2.1、增强表字段
在KNA1表的INCL_EEW_KNA1结构中添加增强字段ZODRATE
在更新结构中也加入增强字段
BP各表新增字段的默认结构
KNA1:INCL_EEW_KNA1,INCL_EEW_KNA1_X
KNB1:INCL_EEW_KNB1,INCL_EEW_KNB1_X
KNVV:INCL_EEW_KNVV,INCL_EEW_KNVV_X
LFA1:INCL_EEW_LFA1,INCL_EEW_LFA1_X
LFB1:INCL_EEW_LFB1,INCL_EEW_LFB1_X
BUT000:INCL_EEW_BUT000-CL_EEW_BUT000,INCL_EEW_BUT000-CL_EEW_BUT000_X
2.2、创建页签函数组
创建函数组
函数组TOP
bash
"--------------------@斌将军--------------------
FUNCTION-POOL ZSD_09. "MESSAGE-ID ..
* INCLUDE LZSD_09D... " Local class definition
TABLES : kna1.
CONSTANTS : table_name_kna1 TYPE fsbp_table_name VALUE 'KNA1'." tabname
CONSTANTS : false TYPE boole-boole VALUE ' '.
DATA : gs_kna1 TYPE kna1.
"--------------------@斌将军--------------------
创建页签屏幕9001
9001
bash
"--------------------@斌将军--------------------
PROCESS BEFORE OUTPUT.
MODULE status_9001.
*
PROCESS AFTER INPUT.
MODULE user_command_9001.
"--------------------@斌将军--------------------
屏幕流
bash
"--------------------@斌将军--------------------
MODULE status_9001 OUTPUT.
CALL FUNCTION 'BUS_PBO'.
ENDMODULE.
MODULE user_command_9001 INPUT.
CALL FUNCTION 'BUS_PAI'.
ENDMODULE.
"--------------------@斌将军--------------------
函数模块:ZSD_09_EVENT_ISDAT
bash
"--------------------@斌将军--------------------
FUNCTION zsd_09_event_isdat.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CALL FUNCTION 'CVIC_BUPA_KNA1_GET'
IMPORTING
e_kna1 = gs_kna1.
kna1-zodrate = gs_kna1-zodrate. "增强字段赋值
ENDFUNCTION.
"--------------------@斌将军--------------------
创建结构。
也可以使用标准表中附加的那个结构
函数模块:ZSD_09_EVENT_DSAVB
bash
"--------------------@斌将军--------------------
FUNCTION ZSD_09_EVENT_DSAVB.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
MOVE-CORRESPONDING gs_kna1 TO kna1.
CALL FUNCTION 'CVIC_BUPA_KNA1_COLLECT'
EXPORTING
i_subname = 'ZSSDV002_KNA1' "附加结构
i_kna1 = kna1.
ENDFUNCTION.
"--------------------@斌将军--------------------
函数模块:ZSD_09_EVENT_XCHNG
bash
"--------------------@斌将军--------------------
FUNCTION zsd_09_event_xchng.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(E_XCHNG) TYPE BOOLE_D
*"----------------------------------------------------------------------
IF gs_kna1-zodrate <> kna1-zodrate.
e_xchng = 'X'.
ENDIF.
ENDFUNCTION.
"--------------------@斌将军--------------------
函数模块:ZSD_09_EVENT_DLVE1
bash
"--------------------@斌将军--------------------
FUNCTION zsd_09_event_dlve1.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CLEAR gs_kna1-zodrate.
ENDFUNCTION.
"--------------------@斌将军--------------------
函数模块:ZSD_09_PAI
bash
"--------------------@斌将军--------------------
FUNCTION zsd_09_pai.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA: lt_kna1 TYPE TABLE OF kna1.
FIELD-SYMBOLS: <kna1> LIKE LINE OF lt_kna1.
CHECK cvi_bdt_adapter=>is_direct_input_active( ) = false.
cvi_bdt_adapter=>get_current_bp_data(
EXPORTING
i_table_name = table_name_kna1
IMPORTING
e_data_table = lt_kna1[]
).
IF lt_kna1[] IS INITIAL.
IF gs_kna1 IS NOT INITIAL.
gs_kna1-kunnr = cvi_bdt_adapter=>get_current_customer( ).
APPEND gs_kna1 TO lt_kna1.
ENDIF.
ELSE.
READ TABLE lt_kna1 ASSIGNING <kna1> INDEX 1.
<kna1>-zodrate = gs_kna1-zodrate.
ENDIF.
cvi_bdt_adapter=>data_pai(
i_table_name = table_name_kna1
i_data_new = lt_kna1[]
i_validate = false
).
ENDFUNCTION.
"--------------------@斌将军--------------------
函数模块:ZSD_09_PBO
bash
"--------------------@斌将军--------------------
FUNCTION ZSD_09_PBO.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA:lt_kna1 TYPE TABLE OF kna1.
cvi_bdt_adapter=>data_pbo(
EXPORTING
i_table_name = table_name_kna1
IMPORTING
e_data_table = lt_kna1[]
).
IF lt_kna1[] IS INITIAL.
CLEAR gs_kna1.
ELSE.
READ TABLE lt_kna1 INTO gs_kna1 INDEX 1.
ENDIF.
ENDFUNCTION.
"--------------------@斌将军--------------------
另外,可视情况而定,增加ZSD_09_DCHCK函数,增加逻辑判断,用于检查数据
2.3、供应商公司视图增强示例
增强字段
ZMM19_PBO
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_pbo.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA:lt_lfb1 TYPE TABLE OF lfb1,
lv_lifnr TYPE lfb1-lifnr,
lv_bukrs TYPE lfb1-bukrs.
lv_lifnr = cvi_bdt_adapter=>get_current_vendor( ).
lv_bukrs = cvi_bdt_adapter=>get_current_company_code( ).
IF lv_bukrs IS INITIAL.
CLEAR:lfb1.
ELSE.
cvi_bdt_adapter=>data_pbo(
EXPORTING
i_table_name = table_name_lfb1
IMPORTING
e_data_table = lt_lfb1[]
).
READ TABLE lt_lfb1 INTO lfb1 WITH KEY lifnr = lv_lifnr bukrs = lv_bukrs.
IF sy-subrc EQ 0.
gs_lfb1 = lfb1.
ELSE.
CLEAR:gs_lfb1,lfb1.
ENDIF.
ENDIF.
ENDFUNCTION.
"--------------------@斌将军--------------------
ZMM19_PAI
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_pai.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA: lt_lfb1 TYPE TABLE OF lfb1,
lv_lifnr TYPE lfb1-lifnr,
lv_bukrs TYPE lfb1-bukrs.
FIELD-SYMBOLS: <lfb1> LIKE LINE OF lt_lfb1.
CHECK cvi_bdt_adapter=>is_direct_input_active( ) = false.
CHECK cvi_bdt_adapter=>get_current_company_code( ) IS NOT INITIAL.
"公司代码
lv_lifnr = cvi_bdt_adapter=>get_current_vendor( ).
lv_bukrs = cvi_bdt_adapter=>get_current_company_code( ).
cvi_bdt_adapter=>get_current_bp_data(
EXPORTING
i_table_name = table_name_lfb1
IMPORTING
e_data_table = lt_lfb1[]
).
IF lt_lfb1[] IS INITIAL.
IF lfb1 IS NOT INITIAL.
lfb1-lifnr = lv_lifnr.
lfb1-bukrs = lv_bukrs.
IF lfb1-lifnr IS NOT INITIAL AND lfb1-bukrs IS NOT INITIAL.
APPEND lfb1 TO lt_lfb1.
ENDIF.
ENDIF.
ELSE.
READ TABLE lt_lfb1 ASSIGNING <lfb1> WITH KEY lifnr = lv_lifnr bukrs = lv_bukrs.
IF sy-subrc EQ 0.
<lfb1>-zgmp = lfb1-zgmp.
ENDIF.
ENDIF.
cvi_bdt_adapter=>data_pai(
i_table_name = table_name_lfb1
i_data_new = lt_lfb1[]
i_validate = false
).
ENDFUNCTION.
"--------------------@斌将军--------------------
ZMM19_EVENT_DSAVB
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_event_dsavb.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
DATA:lt_lfb1 TYPE TABLE OF lfb1,
ls_lfb1 TYPE lfb1,
ls_lfb1_temp TYPE lfb1,
lv_lifnr TYPE lfb1-lifnr,
lv_bukrs TYPE lfb1-bukrs.
lv_bukrs = cvi_bdt_adapter=>get_current_company_code( ).
CHECK lv_bukrs = '3060'.//此处可以根据具体增强的公司代码视图进行控制
ls_lfb1 = lfb1.
CHECK ls_lfb1 IS NOT INITIAL.
MOVE-CORRESPONDING gs_lfb1 TO ls_lfb1_temp.
IF lv_bukrs IS NOT INITIAL.//避免采购视图切换为公司视图时,得到的公司代码为空,并赋值给系统变量,导致后续系统缺失BUKRS而报各种错误
ls_lfb1_temp-bukrs = lv_bukrs.
ENDIF.
ls_lfb1_temp-zgmp = lfb1-zgmp."是否GMP
APPEND ls_lfb1_temp TO lt_lfb1.
CALL FUNCTION 'CVIV_BUPA_LFB1_COLLECT'
EXPORTING
i_subname = 'ZMMS_LFB1' "附加结构
TABLES
t_lfb1 = lt_lfb1.
lv_lifnr = cvi_bdt_adapter=>get_current_vendor( ).
lv_bukrs = cvi_bdt_adapter=>get_current_company_code( ).
READ TABLE lt_lfb1 INTO ls_lfb1 WITH KEY lifnr = lv_lifnr bukrs = lv_bukrs.
IF sy-subrc EQ 0.
lfb1 = ls_lfb1.
gs_lfb1 = lfb1.
ENDIF.
ENDFUNCTION.
"--------------------@斌将军--------------------
ZMM19_EVENT_ISDAT
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_event_isdat.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CALL FUNCTION 'CVIV_BUPA_LFB1_GET'
IMPORTING
e_lfb1 = gs_lfb1.
lfb1-zgmp = gs_lfb1-zgmp. "增强字段赋值
ENDFUNCTION.
"--------------------@斌将军--------------------
ZMM19_EVENT_XCHNG
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_event_xchng.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" REFERENCE(E_XCHNG) TYPE BOOLE_D
*"----------------------------------------------------------------------
IF gs_lfb1-zgmp <> lfb1-zgmp.
e_xchng = 'X'.
ENDIF.
ENDFUNCTION.
"--------------------@斌将军--------------------
ZMM19_EVENT_DLVE1
bash
"--------------------@斌将军--------------------
FUNCTION zmm19_event_dlve1.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CLEAR:gs_lfb1,lfb1.
ENDFUNCTION.
"--------------------@斌将军--------------------
创建屏幕
屏幕流
bash
"--------------------@斌将军--------------------
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
CALL FUNCTION 'BUS_PBO'.
DATA:lv_bukrs TYPE lfb1-bukrs.
lv_bukrs = cvi_bdt_adapter=>get_current_company_code( ).
LOOP AT SCREEN.
IF screen-name+0(4) = 'LFB1'.
IF lv_bukrs = '3060'."
screen-active = '1'.
ELSE.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
CALL FUNCTION 'BUS_PAI'.
ENDMODULE.
"--------------------@斌将军--------------------
3、BP配置
3.1、配置说明
新增页签涉及到配置,因此请在业务人员使用的配置client中进行,防止出现开发client和配置client中定制配置不一致,导致请求传输后覆盖业务人员配置的内容。
3.2、配置过程
BUS1
BUS23
BUS2
新建字段组,保证编号没被使用
添加字段结构
BUS3
创建视图,引入函数组
选择创建的字段组
BUS4
新增部分
关联视图
BUS5
新增屏幕
新增部分,
如果是基础视图,BUP009必输
如果是供应商的公司视图,则需要添加FI0201
否则会导致进入到增强页签时,或者点击公司代码切换时,公司代码数据显示不正常
同理,如果是供应商采购视图,则需要添加CVIV00
BUS6
创建屏幕顺序ZBPA01
新增屏幕项目,其中项目编号,要保证没被占用。例如可以到BUS7中模块方法ISDAT的事件功能模块中,查看是否有别的BP增强占用了项目号
新增顺序种类
添加屏幕顺序
添加项目到标准屏幕顺序BUP001中
BUSD
对FLCU00和FLCU01两个视图分别执行数据集、调用应用程序、屏幕顺序三种配置
数据集
调用应用程序
屏幕顺序
重复步骤执行FLCU01
BUS7
BP标准事件调用流程图
配置对应模块方法ISDAT
配置对应模块方法DSAVB
配置对应模块方法XCHNG
配置对应模块方法DLVE1
3.3、SPRO配置
路径如下
分别进入FLCU00和FLCU01中
设置FLCU00中字段状态
FLCU01中字段状态
效果展示
4、结语
以上就是BP新增页签的介绍,希望对您有所帮助。
在总结过程中,该篇文档给予了极大的帮助和借鉴