此文转载至:https://blog.csdn.net/weixin_43929815/article/details/113928655
在对销售订单抬头和行项目的屏幕做增强开发有两种方法可选:
一.使用BADI:BADI_SD_SALES_BASIC下的BADI_SLS_HEAD_SCR_CUS和BADI_SLS_ITEM_SCR_CUS来实现屏幕增强
1.创建增强结构,附加到VBAK或者VBAP表中,这里以表头为例
2.SE18查看BADI:BADI_SLS_HEAD_SCR_CUS,创建BADI实施ZSD_BADI_SLS_HEAD_SCR_CUS
创建之后可以看到接口下有四个方法,其中1.用来把屏幕挂在销售订单2.将数据读取到子屏幕3.从子屏幕读取数据
3.创建子屏幕
首先创建函数组ZSD_HEAD
新建子屏幕,屏幕内容即为新增的附加结构
新建两个函数模块,用来传递子屏幕的值
以下为这两个函数模块的代码
FUNCTION ZSD_HEAD_INPUT. *"---------------------------------------------------------------------- "“本地接口: *” IMPORTING *" REFERENCE(IS_VBAK) TYPE VBAK *" REFERENCE(IS_T180) TYPE T180 *"---------------------------------------------------------------------- gs_vbak = is_vbak. gs_t180 = is_t180. "这个用来判断是显示还是修改 A代表显示 MOVE-CORRESPONDING is_vbak to zsd_VBAK_1. ENDFUNCTION. FUNCTION ZSD_HEAD_OUTPUT. *"---------------------------------------------------------------------- "“本地接口: *” EXPORTING *" REFERENCE(ES_VBAK) TYPE VBAK *"---------------------------------------------------------------------- MOVE-CORRESPONDING zsd_vbak_1 to gs_vbak. es_vbak = gs_vbak. ENDFUNCTION.
4.在增强实施中的方法调用这个函数组
方法1. method IF_EX_SLS_HEAD_SCR_CUS~ACTIVATE_TAB_PAGE. DATA ls_tab like LINE OF CT_CUS_HEAD_TAB. IF sy-tcode CP ‘VA++’. ls_tab-HEAD_CAPTION = ‘项目信息’. ls_tab-HEAD_PROGRAM = ‘SAPLZSD_HEAD’."函数组主程序名称 ls_tab-HEAD_DYNPRO = ‘9001’. APPEND ls_tab to CT_CUS_HEAD_TAB. ENDIF. endmethod.
方法2. method IF_EX_SLS_HEAD_SCR_CUS~TRANSFER_DATA_TO_SUBSCREEN. CALL FUNCTION ‘ZSD_HEAD_INPUT’ EXPORTING is_vbak = is_vbak is_t180 = is_t180 endmethod.
方法3. method IF_EX_SLS_HEAD_SCR_CUS~TRANSFER_DATA_FROM_SUBSCREEN. CALL FUNCTION ‘ZSD_HEAD_OUTPUT’ IMPORTING ES_VBAK = CS_VBAK endmethod.
二.使用销售订单程序SAPMV45A中预留的屏幕8309,8459实现增强
此种方法实现较简单
1.找到销售订单主程序SAPMV45A,再找到这两个子屏幕
直接根据新增的结构编辑子屏幕
同时增加字段控制代码
MODULE SO_ADD_8309 OUTPUT. LOOP AT SCREEN. IF SY-TCODE = 'VA03' OR SY-TCODE = 'VA23'. SCREEN-INPUT = '0'. ELSE. IF SCREEN-GROUP1 EQ 'Z1'. SCREEN-INPUT = '0'. ELSE. SCREEN-INPUT = '1'. ENDIF. ENDIF. MODIFY SCREEN.
ENDLOOP. ENDMODULE.