ABAP 交货单屏幕增强
Posted 狗尾巴草_lan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP 交货单屏幕增强相关的知识,希望对你有一定的参考价值。
需求描述:
在内向交货单(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'
EXPORTING
IS_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'
IMPORTING
ES_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'
EXPORTING
IS_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'
IMPORTING
ES_LIPS = CS_LIPS.
ENDMETHOD.
以上是关于ABAP 交货单屏幕增强的主要内容,如果未能解决你的问题,请参考以下文章