VF01/VF02/VF03屏幕增强及BAPI增强字段处理
1.在销售发票抬头表中增加增强字段

2.创建处理程序
主程序SAPMV60A中的所有包含文件都是以MV60AF打头的,所以我们创建一个独立的程序 SE38(ZSDU0001) 来存放所有的处理代码

创建屏幕9001,确保屏幕类型为子屏幕

屏幕字段可从VBRK表中获取


*&---------------------------------------------------------------------*
*& Module PBO_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE pbo_9001 OUTPUT.
CASE sy-ucomm.
WHEN 'VF03'.
LOOP AT SCREEN.
screen-input = '0'.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
ZSDU0001报表程序代码参考
*&---------------------------------------------------------------------*
*& Report ZSDU0001
*&---------------------------------------------------------------------*
*&作者:HW
*&日期:20240329
*&描述:销售发票屏幕增强程序
*&---------------------------------------------------------------------*
REPORT zsdu0001.
DATA:badi_active TYPE sap_bool.
FORM cust_head_activate USING fvbrk TYPE vbrk
fvbuk TYPE vbuk
fxvbpa TYPE va_vbpavb_t
CHANGING fcaption TYPE char40
fprogram TYPE sy-repid
fdynpro TYPE sy-dynnr
ftab TYPE char40.
PERFORM frm_check_badi_active.
CHECK:badi_active EQ abap_false.
fcaption = '抬头增强字段'. "页签名称
fprogram = 'ZSDU0001'.
fdynpro = '9001'.
ftab = fcaption.
LOOP AT SCREEN.
IF screen-name EQ 'TABSTRIP_TAB06'.
screen-active = 1.
screen-invisible = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM.
FORM cust_head_set_data USING f_vbrk TYPE vbrk
ft180 TYPE t180
CHANGING fxvbpa TYPE va_vbpavb_t
fxyvbrk TYPE vbrkvb_t
fxvbrk TYPE vbrkvb_t
frv60a TYPE rv60a
fxyvbadr TYPE shp_sadrvb_t
fxvbadr TYPE shp_sadrvb_t
fxyvbpa TYPE va_vbpavb_t
fxvbrp TYPE vbrpvb_t
fxyvbrp TYPE vbrpvb_t
fvbrk TYPE vbrk.
PERFORM frm_check_badi_active.
CHECK:badi_active EQ abap_false.
ENDFORM.
FORM cust_head_pass_fcode USING ffcode_same_page TYPE fcode
ffcode TYPE fcode.
PERFORM frm_check_badi_active.
CHECK:badi_active EQ abap_false.
ENDFORM.
FORM cust_head_get_data USING ft180 TYPE t180
CHANGING fvbrk TYPE vbrk
fxvbpa TYPE va_vbpavb_t
fxyvbrk TYPE vbrkvb_t
fxvbrk TYPE vbrkvb_t
frv60a TYPE rv60a
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 frm_check_badi_active.
CHECK:badi_active EQ abap_false.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module PBO_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE pbo_9001 OUTPUT.
CASE sy-ucomm.
WHEN 'VF03'.
LOOP AT SCREEN.
screen-input = '0'.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_check_badi_active
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_badi_active.
INCLUDE wb2_param_control_global.
DATA:lr_badi TYPE REF TO if_ex_badi_sd_cust_head.
CALL FUNCTION 'GET_HANDLE_SD_CUST_HEAD'
IMPORTING
handle = lr_badi
active = badi_active.
IF badi_active EQ abap_true.
IF cl_wb2_check_add_on_active=>a_gtm_active EQ abap_false.
badi_active = abap_false.
ENDIF.
IF cl_wb2_check_add_on_active=>a_enhance NE addon_all_active.
badi_active = abap_false.
ENDIF.
ENDIF.
ENDFORM.
3.屏幕增强
在主程序SAPMV60A 的 屏幕6001中 双击 CUST_HEAD_ACTIVATE 直到对应的FORM


显示隐式增强->创建实施->使用 PERFORM … IN PROGRAM … IF FOUND 创建增强

FORM涉及详细的逻辑代码,在ZSDU0001程序中编写,在上边
ENHANCEMENT 1 ZE_SAPMV60A. "active version
PERFORM cust_head_activate IN PROGRAM zsdu0001 IF FOUND
USING vbrk vbuk xvbpa[]
CHANGING gs_cust_tab-head_caption
gs_cust_tab-head_program
gs_cust_tab-head_dynpro
tabstrip_tab06.
ENDENHANCEMENT.
业务加载项BADI_SD_CUST_HEAD的另外三个方法是用在屏幕6101中,建议不管当前是否有使用到,都应当进行增强到程序ZMV60AFZCUST_HEAD中以预留将来可以方便的修改,所有的增强实施都应当使用同一个名称ZE_SAPMV60A,这样我们可以方便地使用SE20查看所有的增强

perform cust_head_set_data->(FORM涉及详细的逻辑代码,在ZSDU0001程序中编写,在上边)

ENHANCEMENT 2 ZE_SAPMV60A. "active version
PERFORM cust_head_set_data IN PROGRAM zsdu0001 IF FOUND
USING vbrk t180
CHANGING xvbpa[]
yvbrk[]
xvbrk[]
rv60a
yvbadr[]
xvbadr[]
yvbpa[]
xvbrp[]
yvbrp[]
vbrk.
ENDENHANCEMENT.
perform cust_head_pass_fcode

ENHANCEMENT 3 ZE_SAPMV60A. "active version
PERFORM cust_head_pass_fcode IN PROGRAM ZSDU0001 IF FOUND
USING fcode_gleiche_seite
fcode.
ENDENHANCEMENT.
perform cust_head_get_data

ENHANCEMENT 4 ZE_SAPMV60A. "active version
PERFORM cust_head_get_data IN PROGRAM zsdu0001 IF FOUND
USING t180
CHANGING vbrk
xvbpa[]
yvbrk[]
xvbrk[]
rv60a
yvbadr[]
xvbadr[]
yvbpa[]
xvbrp[]
yvbrp[]
fcode.
ENDENHANCEMENT.
用VF02修改发票凭证,转到抬头–>抬头增强字段,填写相关的数据并保存,然后检查表VBRK发现增强字段已经保存成功


用VF03查看发票凭证,发现页签是只读格式,创建增强字段成功
以上为抬头屏幕增强,行项目增强在6002屏幕上
可参考链接:屏幕增强 - 3.为发票凭证VF01/2/3增加自定义选项卡 - 《ABAP 开发笔记》 - 极客文档 (geekdaxue.co)
行项目屏幕增强同以上方法,可参考链接:VF01/VF02/VF03销售发票屏幕增强实例_vf01屏幕增强-CSDN博客
BAPI中如何传参

"声明对象 CREATE DATA lr_header_bapi_ext. lo_bapi_mapping = cl_cfd_bapi_mapping=>get_instance( ). "赋值 LOOP AT billingdatain. lv_vgbel = billingdatain-ref_doc. lv_vgpos = billingdatain-ref_item. lv_key = lv_vgbel && lv_vgpos. lr_header_bapi_ext->key = lv_key. lr_header_bapi_ext->data-zzyggh = iv_zzyggh. lr_header_bapi_ext->data-zzygxm = iv_zzygxm. lr_header_bapi_ext->data-zzjspzt = iv_zzjspzt. "传入增强字段 CALL METHOD lo_bapi_mapping->map_to_bapiparex_single EXPORTING ir_source_structure = lr_header_bapi_ext CHANGING ct_bapiparex = extensionin1. ENDLOOP. CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE' EXPORTING creatordatain = creatordatain testrun = testrun posting = posting TABLES billingdatain = billingdatain conditiondatain = conditiondatain ccarddatain = ccarddatain textdatain = textdatain errors = errors return = return success = success extensionin = extensionin1 partnerdatain = partnerdatain nfmetallitms = nfmetallitms. FREE MEMORY ID 'ZBAPI_BILLINGDOC_CREATE'.

FORM userexit_fill_vbrk_vbrp. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form USEREXIT_FILL_VBRK_VBRP, Start A *$*$-Start: (1)---------------------------------------------------------------------------------$*$* ENHANCEMENT 1 ZEN_VBRK_YG. "active version vbrk-zzyggh = xkomfkgn-zzyggh. vbrk-zzygxm = xkomfkgn-zzygxm. vbrk-zzjspzt = xkomfkgn-zzjspzt. ENDENHANCEMENT. *$*$-End: (1)---------------------------------------------------------------------------------$*$* * Example: change Tax country * VBRK-LANDTX = T001-LAND1. DATA:iv_kurrf TYPE kurrf. IMPORT iv_kurrf = iv_kurrf FROM MEMORY ID 'ZBAPI_BILLINGDOC_CREATE'. IF iv_kurrf IS NOT INITIAL. * FREE MEMORY ID 'ZBAPI_BILLINGDOC_CREATE'. vbrk-kurrf = iv_kurrf. CLEAR iv_kurrf. ENDIF. ENDFORM.


浙公网安备 33010602011771号