1.通过debug或者百度找到屏幕增强点:MEREQ001
2.SMOD组件中查看增强点提供我们增强的部分:
这里有一个预留屏幕可供我们增强,函数组XM02,屏幕编号0111
3.以上说明在采购申请中增加屏幕是可以实现的,此时我们就需要开始完成以下功能:增加一个屏幕实现业务需求
3.1采购申请标准表:EBAN
其中可以看到配额优先级就是我们要加的一个字段,其中对于该表所有的增强字段都需要存放在CI_EBANDB结构中
3.2查看函数组SE80:
创建屏幕0111:
此时我们在ME57或者其它事务代码中就可以查看到该页签客户数据存放的就是增强字段:
3.3CMOD中创建项目,将增强点:MEREQ001增加进去,如果之前已经被添加进去了,那就可以用之前的,这里只要存在就可以了
3.4此时还需要在出口做一些增强:
首先PBO中代码如下:ZXM02TOP中定义一些全局变量
*&---------------------------------------------------------------------*
*& 包含 ZXM02TOP
*&---------------------------------------------------------------------*
DATA:gv_aktvt TYPE aktvt,
gv_input TYPE flag.
DATA:gv_werks TYPE ewerk,
gv_matnr TYPE matnr.
*INCLUDE zxm02o01.
ZXM02U01中就是一些数据处理展示:
*&---------------------------------------------------------------------*
*& 包含 ZXM02U01
*&---------------------------------------------------------------------*
TABLES:equk,ci_ebandb.
DATA:i_mereq_item TYPE mereq_item.
DATA:lv_quote TYPE equp-quote.
DATA:lv_qunum TYPE equk-qunum.
DATA:BEGIN OF lt_equp OCCURS 0,
lifnr TYPE equp-lifnr,
qumng TYPE equp-qumng,
qubmg TYPE equp-qubmg,
quote TYPE equp-quote,
qupos TYPE equp-qupos,
zpbl TYPE qubas,
END OF lt_equp.
CALL METHOD im_req_item->get_activity
RECEIVING
re_aktvt = gv_aktvt.
CASE gv_aktvt.
WHEN 'A'.
gv_input = space. "Output only
WHEN 'V'.
gv_input = 'X'. "Input/Output
ENDCASE.
IF im_req_item IS INITIAL.
CLEAR ci_ebandb.
ELSE.
CLEAR:gv_werks,gv_matnr.
i_mereq_item = im_req_item->get_data( ).
* MOVE-CORRESPONDING i_mereq_item TO ci_ebandb.
gv_werks = i_mereq_item-werks.
gv_matnr = i_mereq_item-matnr.
CLEAR lv_quote.
SELECT SINGLE qunum INTO lv_qunum
FROM equk WHERE werks = gv_werks AND matnr = gv_matnr
AND vdatu <= sy-datum AND bdatu <= sy-datum.
IF sy-subrc = 0.
SELECT lifnr qumng qubmg quote qupos
INTO CORRESPONDING FIELDS OF TABLE lt_equp
FROM equp WHERE qunum = lv_qunum AND quote > 0.
LOOP AT lt_equp ASSIGNING FIELD-SYMBOL(<fs_equp>).
<fs_equp>-zpbl = ( <fs_equp>-qumng + <fs_equp>-qubmg ) / <fs_equp>-quote.
ENDLOOP.
SORT lt_equp BY zpbl qupos . "降序排列
LOOP AT lt_equp INTO DATA(ls_equp).
ci_ebandb-zzlifnr = ci_ebandb-zzlifnr && '/' && ls_equp-lifnr.
CLEAR ls_equp.
ENDLOOP.
ELSE.
ci_ebandb-zzlifnr = ''.
ENDIF.
ENDIF.
*IF gv_werks IS NOT INITIAL AND gv_werks IS NOT INITIAL.
*
*ENDIF.
ZXM02U03中调用方法将数据存入EBAN表中
*&---------------------------------------------------------------------*
*& 包含 ZXM02U03
*&---------------------------------------------------------------------*
DATA:ls_mereq_item TYPE mereq_item.
IF im_req_item IS NOT INITIAL.
ls_mereq_item = im_req_item->get_data( ).
MOVE-CORRESPONDING ci_ebandb TO ls_mereq_item.
CALL METHOD im_req_item->set_data( ls_mereq_item ).
ex_changed = abap_true.
ENDIF.
屏幕0111中PBO做一些屏幕控制:
*----------------------------------------------------------------------*
***INCLUDE ZXM02ZZZ.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0111 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0111 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0111 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
CHECK gv_input IS INITIAL.
LOOP AT SCREEN.
screen-input = 0.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
ZXM02U12:这里面可写一些屏幕校验逻辑