SAP ABAP 物料主数据(MM01/MM02/MM03)屏幕增强
增强步骤
1.为主表添加一个附加结构
根据业务需求新建一个结构,结构中放入需要增强的屏幕字段并激活。
打开事务代码SE11,在需要保存的主表中添加这个附加结构并激活。
注:根据业务需求及屏幕增强的视图判断需要保存的主表是哪张,如基本数据在MARA,工厂级数据在MARC
2.创建定制子屏幕的程序
打开事务代码SPRO,选择"创建定制子屏幕的程序"。
保存后会生成一个函数组。
在生成的屏幕或自建一个屏幕进行屏幕绘制。
主要DIALOG代码:
PROCESS BEFORE OUTPUT."MM03时限制输入状态MODULE disable_fields."MM02/MM03时把数据从表里取出来,赋值给屏幕相应的字段MODULE get_data.PROCESS AFTER INPUT."把数据导出到MEMORYMODULE assign_data.
*----------------------------------------------------------------------*
***INCLUDE LZFGMM_003O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module DISABLE_FIELDS OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE disable_fields OUTPUT.IF sy-tcode = 'MM03'.LOOP AT SCREEN.screen-input = '0'.MODIFY SCREEN .ENDLOOP.ENDIF.
ENDMODULE. " DISABLE_FIELDS OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE get_data OUTPUT.TABLES:zsmm_mara.DATA:w_matnr TYPE matnr,c_matnr TYPE matnr,lv_flg TYPE c.IF sy-tcode = 'MM01' AND lv_flg IS INITIAL.GET PARAMETER ID 'RMA' FIELD c_matnr.IF c_matnr IS NOT INITIAL.SELECT SINGLE * FROM maraINTO CORRESPONDING FIELDS OF zsmm_maraWHERE matnr = c_matnr.ENDIF.ELSEIF ( sy-tcode = 'MM02' OR sy-tcode = 'MM03' ) AND lv_flg IS INITIAL.GET PARAMETER ID 'MAT' FIELD w_matnr.SELECT SINGLE * FROM maraINTO CORRESPONDING FIELDS OF zsmm_maraWHERE matnr = w_matnr.ENDIF.IF sy-subrc = 0 AND zsmm_mara IS NOT INITIAL.mara-zzcgyq = zsmm_mara-zzcgyq.mara-zzmyfs = zsmm_mara-zzmyfs.mara-zzrdstatus = zsmm_mara-zzrdstatus.mara-zzkunnr = zsmm_mara-zzkunnr.mara-zzggxh = zsmm_mara-zzggxh.mara-zzwsize = zsmm_mara-zzwsize.mara-zzmpw = zsmm_mara-zzmpw.mara-zztester = zsmm_mara-zztester.mara-zzcssj = zsmm_mara-zzcssj.mara-zzcscx = zsmm_mara-zzcscx.mara-zzeqccx = zsmm_mara-zzeqccx.mara-zzdena = zsmm_mara-zzdena.mara-zzhksj = zsmm_mara-zzhksj.mara-zzhkwd = zsmm_mara-zzhkwd.mara-zzuvsj = zsmm_mara-zzuvsj.mara-zzchll = zsmm_mara-zzchll.mara-zzbjll = zsmm_mara-zzbjll.mara-zznkllks = zsmm_mara-zznkllks.mara-zzpacktype = zsmm_mara-zzpacktype.mara-zzhxth = zsmm_mara-zzhxth.mara-zzfzdjs = zsmm_mara-zzfzdjs.mara-zzjbhd = zsmm_mara-zzjbhd.mara-zzbjhd = zsmm_mara-zzbjhd.mara-zzhpj = zsmm_mara-zzhpj.mara-zzhpgy = zsmm_mara-zzhpgy.mara-zzfjfs = zsmm_mara-zzfjfs.mara-zzjjfs = zsmm_mara-zzjjfs.mara-zzfps = zsmm_mara-zzfps.mara-zzjygd = zsmm_mara-zzjygd.mara-zzfthjyp = zsmm_mara-zzfthjyp.mara-zzaoibs = zsmm_mara-zzaoibs.mara-zzbqfs = zsmm_mara-zzbqfs.mara-zzbzfs = zsmm_mara-zzbzfs.mara-zzfzjyxh = zsmm_mara-zzfzjyxh.mara-zzfzhyjbhd = zsmm_mara-zzfzhyjbhd.mara-zzfzjytmzl = zsmm_mara-zzfzjytmzl.ENDIF.lv_flg = abap_true.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module ASSIGN_DATA INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE assign_data INPUT.zsmm_mara_add-zzxh01 = mara-zzxh01.zsmm_mara_add-zzkd01 = mara-zzkd01.zsmm_mara_add-zzhd01 = mara-zzhd01.zsmm_mara_add-zzwx01 = mara-zzwx01.zsmm_mara_add-zzpp01 = mara-zzpp01.zsmm_mara_add-zzgg01 = mara-zzgg01.zsmm_mara_add-zzsx01 = mara-zzsx01.zsmm_mara_add-zzlb01 = mara-zzlb01.EXPORT zsmm_mara_add TO MEMORY ID 'ZMARA'.
ENDMODULE.
3.在实例化出口中增加数据保存功能增强点
打开事务代码CMOD,在增强点实例中写数据保存的逻辑代码;只需要将数据分配到CMARA内表中即可,SAP会将CMARA中的数据保存至MARA表中
4.配置子屏幕
打开事务代码SPRO,选择"定义每个屏幕序列的数据屏幕的结构"。
选择需要增强的视图后双击子屏幕。
在相应的子屏幕位置新建条目并选择自定义的屏幕。其中程序名为SPAL+自己定义的函数组名,屏幕号为自定义的屏幕号。
注:视图中的子屏幕项与顺序有关,请根据需求新增在相应的位置
可以点击视图数据屏幕模拟查看效果。
新增视图
如果需要增强一个视图,则需要多配置两个步骤
一个是需要配置数据屏幕,也就是新增的视图
然后配置这个视图所在的位置顺序
效果如下
5.配置字段组
打开事务代码SPRO,选择"给字段选择组分配字段"。
点击"新条目"并添加增强的字段。
其中维护状态为:EDVKALBQPSZXCFG,字段组为:GR_GLOB
所有字段新增后保存即可。
注:所有增强字段必须分配选择组,否则无法更新成功
效果如下:
拓展
其他视图底表的增强
对MARC做增强,屏幕字段操作可以参考MARA;但是赋值就无法在二代增强MGA00001中进行赋值了,因为EXIT_SAPLMGMU_001中CHANGING参数只有CMARA MARA的参考结构。若想实现赋值,在这个函数调用点后创建隐式增强,通过内存传值修改MARC-XXX/CMARC-XXX自定义字段的值实现。
物料编号搜索帮助增强
首先根据增强字段创建一个搜索帮助
然后在搜索帮助出口中编写取值逻辑。
可拷贝系统标准的搜索帮助出口DEMO:F4IF_SHLP_EXIT_EXAMPLE 然后进行修改
FUNCTION zmm_sh_shlp_f4_exit.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------DATA:BEGIN OF str_help,maktx TYPE makt-maktx,matnr TYPE mara-matnr,zzggxh TYPE mara-zzggxh,zztester TYPE mara-zztester,zzcscx TYPE mara-zzcscx,zzeqccx TYPE mara-zzeqccx,zzpacktype TYPE mara-zzpacktype,zzhxth TYPE mara-zzhxth,END OF str_help.DATA:l_it_show LIKE TABLE OF str_help WITH HEADER LINE.DATA: lw_selopt TYPE ddshselopt,lv_sql TYPE string,lv_maktx TYPE string,lv_matnr TYPE string,lv_zzggxh TYPE string,lv_zztester TYPE string,lv_zzcscx TYPE string,lv_zzeqccx TYPE string,lv_zzpacktype TYPE string,lv_zzhxth TYPE string.* EXIT immediately, if you do not want to handle this stepIF callcontrol-step <> 'SELONE' ANDcallcontrol-step <> 'SELECT' AND" AND SO ONcallcontrol-step <> 'DISP'.EXIT.ENDIF.*"----------------------------------------------------------------------
* STEP SELONE (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
* This step is only called for collective searchhelps. It may be used
* to reduce the amount of elementary searchhelps given in SHLP_TAB.
* The compound searchhelp is given in SHLP.
* If you do not change CALLCONTROL-STEP, the next step is the
* dialog, to select one of the elementary searchhelps.
* If you want to skip this dialog, you have to return the selected
* elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
* either to 'PRESEL' or to 'SELECT'.IF callcontrol-step = 'SELONE'.
* PERFORM SELONE .........EXIT.ENDIF.*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.IF callcontrol-step = 'PRESEL'.
* PERFORM PRESEL ..........EXIT.ENDIF.
*"----------------------------------------------------------------------
* STEP SELECT (Select values)
*"----------------------------------------------------------------------
* This step may be used to overtake the data selection completely.
* To skip the standard seletion, you should return 'DISP' as following
* step in CALLCONTROL-STEP.
* Normally RECORD_TAB should be filled after this step.
* Standard function module F4UT_RESULTS_MAP may be very helpfull in this
* step.IF callcontrol-step = 'SELECT'.LOOP AT shlp-selopt INTO lw_selopt.CASE lw_selopt-shlpfield.WHEN 'MAKTX'.lv_maktx = lw_selopt-low.REPLACE ALL OCCURRENCES OF '*' IN lv_maktx WITH '%'.IF lv_sql IS INITIAL.lv_sql = | MAKTX LIKE @LV_MAKTX |.ELSE.lv_sql = lv_sql && | AND MAKTX LIKE @LV_MAKTX |.ENDIF.WHEN 'MATNR'.lv_matnr = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_matnr WITH '%'.IF lv_sql IS INITIAL.lv_sql = | A~MATNR LIKE @LV_MATNR |.ELSE.lv_sql = lv_sql && |'AND A~MATNR LIKE @LV_MATNR |.ENDIF.WHEN 'ZZGGXH'.lv_zzggxh = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zzggxh WITH '%'.IF lv_sql IS INITIAL.lv_sql = | ZZGGXH LIKE @LV_ZZGGXH |.ELSE.lv_sql = lv_sql && | AND ZZGGXH LIKE @LV_ZZGGXH |.ENDIF.WHEN 'ZZTESTER'.lv_zztester = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zztester WITH '%'.IF lv_sql IS INITIAL.lv_sql = | ZZTESTER LIKE @LV_ZZTESTER |.ELSE.lv_sql = lv_sql && | AND ZZTESTER LIKE @LV_ZZTESTER |.ENDIF.WHEN 'ZZCSCX'.lv_zzcscx = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zzcscx WITH '%'.IF lv_sql IS INITIAL.lv_sql = |ZZCSCX LIKE @LV_ZZCSCX|.ELSE.lv_sql = lv_sql && | AND ZZCSCX LIKE @LV_ZZCSCX |.ENDIF.WHEN 'ZZEQCCX'.lv_zzeqccx = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zzeqccx WITH '%'.IF lv_sql IS INITIAL.lv_sql = | ZZEQCCX LIKE @LV_ZZEQCCX |.ELSE.lv_sql = lv_sql && | AND ZZEQCCX LIKE @LV_ZZEQCCX |.ENDIF.WHEN 'ZZPACKTYPE'.lv_zzpacktype = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zzpacktype WITH '%'.IF lv_sql IS INITIAL.lv_sql = | ZZPACKTYPE LIKE @LV_ZZPACKTYPE |.ELSE.lv_sql = lv_sql && | AND ZZPACKTYPE LIKE @LV_ZZPACKTYPE |.ENDIF.WHEN 'ZZHXTH'.lv_zzhxth = '%' && lw_selopt-low && '%'.REPLACE ALL OCCURRENCES OF '*' IN lv_zzhxth WITH '%'.IF lv_sql IS INITIAL.lv_sql = | ZZHXTH LIKE @LV_ZZHXTH |.ELSE.lv_sql = lv_sql && | AND ZZHXTH LIKE @LV_ZZHXTH |.ENDIF.WHEN OTHERS.ENDCASE.ENDLOOP.SELECT b~maktx,a~matnr,a~zzggxh,a~zztester,a~zzcscx,a~zzeqccx,a~zzpacktype,a~zzhxthFROM mara AS aINNER JOIN makt AS bON b~matnr = a~matnrUP TO @callcontrol-maxrecords ROWSINTO TABLE @l_it_showWHERE (lv_sql).CALL FUNCTION 'F4UT_RESULTS_MAP'TABLESshlp_tab = shlp_tab[]record_tab = record_tab[]source_tab = l_it_showCHANGINGshlp = shlpcallcontrol = callcontrolEXCEPTIONSillegal_structure = 1OTHERS = 2.IF l_it_show[] IS NOT INITIAL.callcontrol-step = 'DISP'.ELSE.callcontrol-step = 'SELECT'.ENDIF.EXIT. "Don't process STEP DISP additionally in this call.ENDIF.
*"----------------------------------------------------------------------
* STEP DISP (Display values)
*"----------------------------------------------------------------------
* This step is called, before the selected data is displayed.
* You can e.g. modify or reduce the data in RECORD_TAB
* according to the users authority.
* If you want to get the standard display dialog afterwards, you
* should not change CALLCONTROL-STEP.
* If you want to overtake the dialog on you own, you must return
* the following values in CALLCONTROL-STEP:
* - "RETURN" if one line was selected. The selected line must be
* the only record left in RECORD_TAB. The corresponding fields of
* this line are entered into the screen.
* - "EXIT" if the values request should be aborted
* - "PRESEL" if you want to return to the selection dialog
* Standard function modules F4UT_PARAMETER_VALUE_GET and
* F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.IF callcontrol-step = 'DISP'.
* PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
* CHANGING SHLP CALLCONTROL.EXIT.ENDIF.
ENDFUNCTION.
最后在系统标准的搜索帮助集合中添加自定义的搜索帮助即可
效果如下
SAP ABAP 物料主数据(MM01/MM02/MM03)屏幕增强相关推荐
- 01屏幕增强 sap_SAP (MM01 MM02 MM03)屏幕增强
1. SPRO-->后勤-常规-->物料主数据-->配置物料主数据-->创建定制子屏幕的程序 2.定义函数组: 3. SE80查看我们创建的函数组: 4.使用屏幕0001来画出 ...
- SAP ABAP 物料主数据的视图维护状态
SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由. 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录 ...
- SAP MM 物料主数据里某字段看不到就是屏幕格式设置导致的?
SAP MM 物料主数据里某字段看不到就是屏幕格式设置导致的? 如下物料号采购视图里, 'post to inspection stock' 字段看不到了, 难道是物料主数据的屏幕格式设置里,有人因故 ...
- SAP QM 物料主数据QM视图里字段MARC-INSMK的更新
SAP QM 物料主数据QM视图里字段MARC-INSMK的更新 在物料主数据的质量管理视图,有一个字段'Post to Insp.stock'(MARC-INSMK)的.该字段在启用了QM模块之后, ...
- SAP MM 物料主数据的Document Data
SAP MM 物料主数据的Document Data 1,CV01N创建一个document. 输入document type, document part 000, document version ...
- SAP MM 物料主数据利润中心字段之修改
SAP MM 物料主数据利润中心字段之修改 近日,收到业务部门报的一个问题,说是MM02去修改物料的利润中心字段值,系统报错说物料库存存在,不让修改. 笔者查询了该物料的库存,当期库存并不存在.MMB ...
- SAP LSMW 物料主数据Basic Data Text数据的导入
SAP LSMW 物料主数据Basic Data Text数据的导入 笔者所在的D项目上,业务要求每个物料主数据能有一个remark字段,用以在物料描述之外为物料做更多更详细的描述,比如一些备品备件物 ...
- SAP QM物料主数据里QM Material Authorization Group字段
SAP QM物料主数据里QM Material Authorization Group字段 物料主数据的质量管理视图里,有一个字段叫做"QM Material Auth."的.通过 ...
- SAP WM 物料主数据里的Palletization Data
SAP WM 物料主数据里的Palletization Data 物料主数据的WM视图里,可以维护Palletization Data(码垛数据).在这里可以维护该物料,某种类型的托盘里,一个满托盘可 ...
最新文章
- 宏基因组报名倒计时!报名线上课还可免费参加线下课
- CentOS7.X的系统管理、安全设置及系统优化思路
- C++实现connected component连通分量(附完整源码)
- ORACLE查询闪回
- 荒岛求生游戏显示服务器不行,《荒岛求生》黑屏解决方法
- C++类的内联成员函数应放在哪
- mysql------explain工具
- 记录——《C Primer Plus(第五版)》 第7章编程练习第5题
- win7查看硬盘序列号
- VMware中让虚拟机支持虚拟化
- Ubuntu13.04配置优化(一)转贴
- Collectors.toMap()
- linux运维工程师做些什么-肤浅篇
- 关于使用SpringBoot导出Pdf(itextpdf)
- SDWAN-虚拟网卡(最全详解)
- OneNET麒麟座应用开发之七:控制采样电机
- 计算机设备统计报告,2017年1-12月通信设备、计算机及其他电子设备制造业增加值统计分析...
- Python实现投影法分割图像(二)
- 动态网站基本上都是有后台的,静态的网站就是纯HTML的网站的,这样的网站是没有后台的
- Windows系统快捷键分类说明