需求描述:
在内向交货单(VL31N / VL32N / VL33N) 与外向交货单(VL01N / VL02N / VL03N) 的抬头和行项目增加”自定义字段“页签,如下图所示
实现方法:
1. 往表LIKP和LIPS增加自定义字段
2. 新建函数组ZFG_SD002,定义增强子屏幕,以便增强使用
2.1 交货单抬头增强子屏幕9100
MODULE STATUS_9100设置了是否可以输入,判断逻辑如下:
① SAP根据Tcode在T180里配置了界面是否可编辑,故获取变量(SAPMV50A)T180-TRTYP的值,A为显示,其余为编辑
② 已发货过账完成的交货单为仅显示,判断条件为LIKP-WBSTK = 'C'
MODULE STATUS_9100 OUTPUT.FIELD-SYMBOLS <FS_ANY>.ASSIGN ('(SAPMV50A)T180-TRTYP') TO <FS_ANY>.IF <FS_ANY> IS ASSIGNED.LOOP AT SCREEN.IF <FS_ANY> = 'A'.SCREEN-INPUT = '0'.ELSE.IF GS_LIKP-WBSTK = 'C'.IF SCREEN-GROUP1 = 'G1'.SCREEN-INPUT = '1'.ELSE.SCREEN-INPUT = '0'.ENDIF.ELSE.SCREEN-INPUT = '1'.ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.ENDIF.ENDMODULE.
2.2 交货单行项目增强子屏幕9200
MODULE TEXTEDIT_9200是定义了一个文本框,将自建表数据拼接显示在文本框中,此功能在另一篇博客中,请参考https://blog.csdn.net/ROYHAO/article/details/119894307
MODULE STATUS_9200同抬头屏幕设置了是否可以输入
MODULE STATUS_9200 OUTPUT.LOOP AT SCREEN.IF GS_LIPS-WBSTA = 'C'.SCREEN-INPUT = '0'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 1 ).ENDIF.ELSE.ASSIGN ('(SAPMV50A)T180-TRTYP') TO <FS_ANY>.IF <FS_ANY> IS ASSIGNED.IF <FS_ANY> = 'A'.SCREEN-INPUT = '0'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 1 ).ENDIF.ELSE.SCREEN-INPUT = '1'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 0 ).ENDIF.ENDIF.ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.ENDMODULE.
3. 在上述函数组ZFG_SD002,创建屏幕和数据交互函数,以便增强使用
3.1 新建函数ZSD_SHP_HEAD_FROM_SUBSCREEN,将交货单抬头屏幕回传数据
3.2 新建函数ZSD_SHP_HEAD_TO_SUBSCREEN,将交货单抬头数据传到屏幕
3.3 新建函数ZSD_SHP_ITEM_FROM_SUBSCREEN,将交货单行项目屏幕回传数据
3.4 新建函数ZSD_SHP_ITEM_TO_SUBSCREEN,将交货单行项目数据传到屏幕
4. 交货单抬头屏幕增强BADI:LE_SHP_TAB_CUST_HEAD
4.1 修改方法ACTIVATE_TAB_PAGE添加页签
METHOD IF_EX_LE_SHP_TAB_CUST_HEAD~ACTIVATE_TAB_PAGE.EF_CAPTION = '自定义字段'(001).EF_POSITION = 20.EF_PROGRAM = 'SAPLZFG_SD002'.EF_DYNPRO = '9100'.CS_V50AGL_CUST = 'X'.ENDMETHOD.
其中EF_PROGRAM是函数组名字,EF_DYNPRO是屏幕号
4.2 修改方法TRANSFER_DATA_TO_SUBSCREEN,调用函数ZSD_SHP_HEAD_TO_SUBSCREEN,将交货单抬头数据传到屏幕
METHOD IF_EX_LE_SHP_TAB_CUST_HEAD~TRANSFER_DATA_TO_SUBSCREEN.CALL FUNCTION 'ZSD_SHP_HEAD_TO_SUBSCREEN'EXPORTINGIS_LIKP = IS_LIKP.ENDMETHOD.
4.3 修改方法TRANSFER_DATA_FROM_SUBSCREEN,调用函数ZSD_SHP_HEAD_FROM_SUBSCREEN,将交货单抬头屏幕回传数据
METHOD IF_EX_LE_SHP_TAB_CUST_HEAD~TRANSFER_DATA_FROM_SUBSCREEN.CALL FUNCTION 'ZSD_SHP_HEAD_FROM_SUBSCREEN'IMPORTINGES_LIKP = CS_LIKP.ENDMETHOD.
5. 交货单行项目屏幕增强BADI:LE_SHP_TAB_CUST_ITEM
S/4里显示该BADI已迁移至增强点LE_SHP_TAB_CUST_ITEM,故此情形需增强该增强点
5.1 修改方法ACTIVATE_TAB_PAGE添加页签
METHOD IF_EX_LE_SHP_TAB_CUST_ITEM~ACTIVATE_TAB_PAGE.EF_CAPTION = '自定义字段'(001).EF_POSITION = 20.EF_PROGRAM = 'SAPLZFG_SD002'.EF_DYNPRO = '9200'.CS_V50AGL_CUST = 'X'.ENDMETHOD.
其中EF_PROGRAM是函数组名字,EF_DYNPRO是屏幕号
5.2 修改方法TRANSFER_DATA_TO_SUBSCREEN,调用函数ZSD_SHP_ITEM_TO_SUBSCREEN,将交货单行项目数据传到屏幕
METHOD IF_EX_LE_SHP_TAB_CUST_ITEM~TRANSFER_DATA_TO_SUBSCREEN.CALL FUNCTION 'ZSD_SHP_ITEM_TO_SUBSCREEN'EXPORTINGIS_LIPS = IS_LIPS.ENDMETHOD.
5.3 修改方法TRANSFER_DATA_FROM_SUBSCREEN,调用函数ZSD_SHP_ITEM_FROM_SUBSCREEN,将交货单行项目屏幕回传数据
METHOD IF_EX_LE_SHP_TAB_CUST_ITEM~TRANSFER_DATA_FROM_SUBSCREEN.CALL FUNCTION 'ZSD_SHP_ITEM_FROM_SUBSCREEN'IMPORTINGES_LIPS = CS_LIPS.ENDMETHOD.