VF01/VF02/VF03销售发票屏幕增强实例

销售发票选项卡没有增强和屏幕用户出口,SAP标准只有业务加载项(BADI_SD_CUST_HEAD , BADI_SD_CUST_ITEM)可以使用,但是这两个业务加载项使用SAP内部。SAP Note 864944有详细说明,SAP 只打算让这些业务加载项使用在单独的 SAP 解决方案中。
经过DEBUG发现,业务加载项定义BADI_SD_CUST_ITEM的实施WB2_IVGUI_LAYOUT_I是为全球贸易这个行业解决方案实现的,存储在WB2B_CORE这个包中。照此完整来看,为发票凭证增加自定义选项卡的业务加载项实施正是与屏幕6002和6102有关,既然这个业务加载项不允许我们自己来实施,我们可以尝试在屏幕6002和6102中注入类似的代码来成就目标。

增强步骤

1.为主表增加一个附加结构
在这里插入图片描述2.创建一个函数组用于存放所有的处理代码
在这里插入图片描述创建6002屏幕(抬头6001)
在这里插入图片描述增加PBO逻辑

PROCESS BEFORE OUTPUT.
 MODULE STATUS_6002.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_6002.
*&---------------------------------------------------------------------*
*& Module STATUS_6002 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_6002 OUTPUT.
  IF sy-tcode EQ 'VF03'.
    LOOP AT SCREEN.
      screen-input = '0'.
      MODIFY SCREEN .
    ENDLOOP.
  ENDIF.
ENDMODULE.

3.屏幕增强
在主程序SAPMV60A的屏幕6002中进行屏幕逻辑流增强
在这里插入图片描述创建四代增强,模式为声明
在这里插入图片描述

  PERFORM cust_item_active IN PROGRAM saplzfgfico_mv60a1 IF FOUND
                           USING vbrp vbrk vbuk
                           CHANGING gs_cust_tab-item_caption
                                    gs_cust_tab-item_program
                                    gs_cust_tab-item_dynpro
                                    gs_cust_tab-item_caption.

在自建的函数组包含文件中写FORM逻辑
在这里插入图片描述

FORM cust_item_active USING fvbrp TYPE vbrp
                            fvbrk TYPE vbrk
                            fvbuk TYPE vbuk
                      CHANGING
                            fcaption TYPE char40
                            fprogram TYPE syrepid
                            fdynpro  TYPE sydynnr
                            ftab     TYPE char40 .

  DATA:lv_zswitch    TYPE ztzq_switch-zswitch.

  SELECT SINGLE zswitch INTO lv_zswitch FROM ztzq_switch WHERE ztype = '4' AND zmk = 'FICO' AND zname = 'ZFGFICO_MV60A1'.
  CHECK lv_zswitch = 1.

  PERFORM check_badi_activate.
  CHECK badi_activate EQ abap_false .
  fcaption = '金税数据'(c01).
  fprogram = 'SAPLZFGFICO_MV60A1'.
  fdynpro  = '6002'.
  ftab = fcaption.
  LOOP AT SCREEN.
    IF screen-name EQ  'TABSTRIP_TAB08' ."'TABSTRIP_TAB06'.
      screen-active = 1.
      screen-invisible = 0 .
    ENDIF.
  ENDLOOP.

ENDFORM .

业务加载项BADI_SD_CUST_ITEM的另外三个是用在屏幕6102中的方法,建议不管当前有使用到,都应该增强到增强点中以能够随时使用,最好使用相同的实施名称,这样我们可以方便地使用SE20查看所有的增强。
具体代码逻辑可参考SAP内部实施点(抬头:WB2_IVGUI_LAYOUT_H;行项目:WB2_IVGUI_LAYOUT_I)
注:抬头屏幕增强则是业务加载项BADI_SD_CUST_HEAD,在屏幕6101同样方法中实施增强即可。
在这里插入图片描述

  PERFORM cust_item_set_data IN PROGRAM saplzfgfico_mv60a1 IF FOUND
                             USING      vbrk
                                        vbrp
                                        xvbrp_tabix
                                        t180
                             CHANGING   rv60a
                                        yvbadr[]
                                        xvbadr[]
                                        xvbpa[]
                                        yvbrk[]
                                        xvbrk[]
                                        yvbpa[]
                                        xvbrp[]
                                        yvbrp[]
                                        vbrk.
* 发票数据到子屏幕
FORM cust_item_set_data USING f_vbrk TYPE vbrk
                              f_vbrp TYPE vbrp
                              f_tabix TYPE sytabix
                              ft180 TYPE t180
                        CHANGING
                              frv60a TYPE rv60a
                              fxyvbadr TYPE shp_sadrvb_t
                              fxvbadr TYPE shp_sadrvb_t
                              fxvbpa TYPE va_vbpavb_t
                              fxyvbrk TYPE vbrkvb_t
                              fxvbrk TYPE vbrkvb_t
                              fxyvbpa TYPE va_vbpavb_t
                              fxvbrp TYPE vbrpvb_t
                              fxyvbrp TYPE vbrpvb_t
                              fvbrk TYPE vbrk.

  PERFORM check_badi_activate.
  CHECK badi_activate EQ abap_false .
* check ADD ON active
    check not a_gtm_active is initial.
* check enhancement active
    check a_enhance = 2 or not a_cc_active is initial.
* set atributs
    a_vbrk = f_vbrk.
    a_vbrkvb = f_vbrk.
    a_vbrp = f_vbrp.
* set data
    call function 'WB2_IV_GET_ITEM_DATA'
      exporting
        i_t180    = ft180
      changing
        c_vbrk    = a_vbrk
        c_vbrp    = a_vbrp
        ct_vbpa   = fxvbpa
        ct_yvbpa  = fxyvbpa
        ct_vbadr  = fxvbadr
        ct_yvbadr = fxyvbadr.
* get komv
    if a_cc_active is not initial.
* fill condition data
      call function 'WB2_PROCESS_SERVICE_IV1'
        exporting
          it_vbrp = fxvbrp
          i_vbrk  = a_vbrkvb.
    endif.
ENDFORM.

在这里插入图片描述

    PERFORM cust_item_pass_code IN PROGRAM saplzfgfico_mv60a1 IF FOUND
                                USING fcode_gleiche_seite fcode.
FORM cust_item_pass_code USING ffcode_same_page TYPE fcode
                               ffcode TYPE fcode .
                               
  PERFORM check_badi_activate.
  CHECK badi_activate EQ abap_false .
* check ADD ON active
    check not a_gtm_active is initial.
* check enhancement active
    check a_enhance = 2 or not a_cc_active is initial.
* Fcode setzen
    call function 'WB2_TRADE_PASS_FCODE_ITEM'
      exporting
        i_fcode = ffcode.
ENDFORM.

在这里插入图片描述

    PERFORM cust_item_get_data IN PROGRAM saplzfgfico_mv60a1 IF FOUND
                               USING t180
                               CHANGING vbrk
                                        vbrp
                                        rv60a
                                        xvbpa[]
                                        yvbrk[]
                                        xvbrk[]
                                        yvbadr[]
                                        xvbadr[]
                                        yvbpa[]
                                        xvbrp[]
                                        yvbrp[]
                                        fcode.
* 子屏幕到发票数据
FORM cust_item_get_data USING
                              ft180 TYPE t180
                        CHANGING
                              fvbrk  TYPE vbrk
                              fvbrp  TYPE vbrp
                              frv60a TYPE rv60a
                              fxvbpa TYPE va_vbpavb_t
                              fxyvbrk TYPE vbrkvb_t
                              fxvbrk  TYPE vbrkvb_t
                              fxyvbadr TYPE shp_sadrvb_t
                              fxvbadr  TYPE shp_sadrvb_t
                              fxyvbpa  TYPE va_vbpavb_t
                              fxvbrp  TYPE vbrpvb_t
                              fxyvbrp TYPE vbrpvb_t
                              ffcode  TYPE fcode.

  PERFORM check_badi_activate.
  CHECK badi_activate EQ abap_false .
* check ADD ON active
    check not a_gtm_active is initial.
* check enhancement active
    check a_enhance = 2 or not a_cc_active is initial.
* Get fcode
    call function 'WB2_TRADE_FETCH_FCODE'
      importing
        e_fcode = ffcode.
* get changed data
    call function 'WB2_TRADE_DATA_GET'
      importing
        e_header_data = a_vbrk
        e_item_data   = a_vbrp.
* set data
    fvbrk = a_vbrk.
    fvbrp = a_vbrp.

    call function 'WB2_PROCESS_SERVICE_IV_FREE'.

ENDFORM.
DATA:badi_activate TYPE abap_bool.
FORM check_badi_activate .
  INCLUDE wb2_param_control_global.
  DATA:lr_badi TYPE REF TO if_ex_badi_sd_cust_item .
  CALL FUNCTION 'GET_HANDLE_SD_CUST_ITEM'
    IMPORTING
      handle = lr_badi
      active = badi_activate.
  IF badi_activate EQ 'X'.
    IF cl_wb2_check_add_on_active=>a_gtm_active EQ ' '.
      badi_activate = 'X' .
    ENDIF.
    IF cl_wb2_check_add_on_active=>a_enhance NE addon_all_active.
      badi_activate = ' ' .
    ENDIF.
  ENDIF.
ENDFORM.

增强效果
在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值