1、透明表QALS中的字段增强,不赘述了
2、屏幕增强的效果如下
3、关键是增强点的寻找。
首先是BADI:QPL1_SUBSCREEN_ADDON
添加了自己的屏幕,测试没有任何改变。
然后在QA01中程序SAPLQPL1中200屏幕的程序中的红框部分打断点,跟踪G_SUB_TAB_STRIP的值
追踪到屏幕201,再在如下红框附件打断点,跟踪G_BADI_PROG、G_BADI_DYNNR的值
追踪到程序SAPLSEXM 中的屏幕200,然后修改该屏幕
在逻辑流中添加module,如下
4、在pbo添加module STATUS_0200中实现屏幕的显示和取值。使用ASSIGN ('(SAPLQPL1)QALS') TO <fs>. 取主表中的数据,
限制sy-tcode是因为如果不限制,会影响到F-02 的使用
DATA ls_qals TYPE qals .
FIELD-SYMBOLS: <fs> TYPE any.
IF sy-tcode eq 'QA03' or sy-tcode eq 'QA02' or sy-tcode eq 'QA01'.
ASSIGN ('(SAPLQPL1)QALS') TO <fs>.
MOVE-CORRESPONDING <fs> to ls_qals .
SELECt SINGLE GROES INTO MARA-GROES FROM mara Where matnr = ls_qals-matnr .
IF qals-JSPC is INITIAL.
qals-JSPC = ls_qals-JSPC .
ENDIF.
IF qals-BZ is INITIAL.
qals-BZ = ls_qals-BZ .
ENDIF.
IF qals-SCGD is INITIAL.
qals-SCGD = ls_qals-SCGD .
ENDIF.
IF sy-tcode eq 'QA03'.
LOOP AT SCREEN.
IF SCREEN-name eq 'QALS-JSPC'
or SCREEN-name eq 'QALS-BZ'
or SCREEN-name eq 'QALS-SCGD' .
SCREEN-input = 0 .
ENDIF.
MODIFY SCREEN .
ENDLOOP.
ENDIF.
else.
LOOP AT SCREEN.
IF SCREEN-name eq 'QALS-JSPC'
or SCREEN-name eq 'QALS-BZ'
or SCREEN-name eq 'QALS-SCGD'
or SCREEN-name eq 'MARA-GROES' .
SCREEN-ACTIVE = 0 .
ENDIF.
MODIFY SCREEN .
ENDLOOP.
endif.
5、 在pai添加MODULE USER_COMMAND_0200..实现保存的事件响应,将屏幕上的值写到内存里
FIELD-SYMBOLS: <fvalue> TYPE any.
IF sy-tcode eq 'QA01' or sy-tcode eq 'QA02'.
CASE sy-ucomm.
WHEN 'BU'.
ASSIGN ('(SAPLQPL1)QALS') TO <fs>.
ASSIGN COMPONENT 'JSPC' OF STRUCTURE <fs> TO <fvalue> .
<fvalue> = qals-JSPC .
ASSIGN COMPONENT 'BZ' OF STRUCTURE <fs> TO <fvalue> .
<fvalue> = qals-BZ .
ASSIGN COMPONENT 'SCGD' OF STRUCTURE <fs> TO <fvalue> .
<fvalue> = qals-SCGD .
WHEN OTHERS.
ENDCASE.
ENDIF.
6、需求功能虽然实现,但我不知道这样做是否没有风险,如果有朋友看到这篇文章,知道更好的方法,请给我回复,不胜感激