增强步骤

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)屏幕增强相关推荐

  1. 01屏幕增强 sap_SAP (MM01 MM02 MM03)屏幕增强

    1. SPRO-->后勤-常规-->物料主数据-->配置物料主数据-->创建定制子屏幕的程序 2.定义函数组: 3. SE80查看我们创建的函数组: 4.使用屏幕0001来画出 ...

  2. SAP ABAP 物料主数据的视图维护状态

    SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由. 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录 ...

  3. SAP MM 物料主数据里某字段看不到就是屏幕格式设置导致的?

    SAP MM 物料主数据里某字段看不到就是屏幕格式设置导致的? 如下物料号采购视图里, 'post to inspection stock' 字段看不到了, 难道是物料主数据的屏幕格式设置里,有人因故 ...

  4. SAP QM 物料主数据QM视图里字段MARC-INSMK的更新

    SAP QM 物料主数据QM视图里字段MARC-INSMK的更新 在物料主数据的质量管理视图,有一个字段'Post to Insp.stock'(MARC-INSMK)的.该字段在启用了QM模块之后, ...

  5. SAP MM 物料主数据的Document Data

    SAP MM 物料主数据的Document Data 1,CV01N创建一个document. 输入document type, document part 000, document version ...

  6. SAP MM 物料主数据利润中心字段之修改

    SAP MM 物料主数据利润中心字段之修改 近日,收到业务部门报的一个问题,说是MM02去修改物料的利润中心字段值,系统报错说物料库存存在,不让修改. 笔者查询了该物料的库存,当期库存并不存在.MMB ...

  7. SAP LSMW 物料主数据Basic Data Text数据的导入

    SAP LSMW 物料主数据Basic Data Text数据的导入 笔者所在的D项目上,业务要求每个物料主数据能有一个remark字段,用以在物料描述之外为物料做更多更详细的描述,比如一些备品备件物 ...

  8. SAP QM物料主数据里QM Material Authorization Group字段

    SAP QM物料主数据里QM Material Authorization Group字段 物料主数据的质量管理视图里,有一个字段叫做"QM Material Auth."的.通过 ...

  9. SAP WM 物料主数据里的Palletization Data

    SAP WM 物料主数据里的Palletization Data 物料主数据的WM视图里,可以维护Palletization Data(码垛数据).在这里可以维护该物料,某种类型的托盘里,一个满托盘可 ...

最新文章

  1. 宏基因组报名倒计时!报名线上课还可免费参加线下课
  2. CentOS7.X的系统管理、安全设置及系统优化思路
  3. C++实现connected component连通分量(附完整源码)
  4. ORACLE查询闪回
  5. 荒岛求生游戏显示服务器不行,《荒岛求生》黑屏解决方法
  6. C++类的内联成员函数应放在哪
  7. mysql------explain工具
  8. 记录——《C Primer Plus(第五版)》 第7章编程练习第5题
  9. win7查看硬盘序列号
  10. VMware中让虚拟机支持虚拟化
  11. Ubuntu13.04配置优化(一)转贴
  12. Collectors.toMap()
  13. linux运维工程师做些什么-肤浅篇
  14. 关于使用SpringBoot导出Pdf(itextpdf)
  15. SDWAN-虚拟网卡(最全详解)
  16. OneNET麒麟座应用开发之七:控制采样电机
  17. 计算机设备统计报告,2017年1-12月通信设备、计算机及其他电子设备制造业增加值统计分析...
  18. Python实现投影法分割图像(二)
  19. 动态网站基本上都是有后台的,静态的网站就是纯HTML的网站的,这样的网站是没有后台的
  20. Windows系统快捷键分类说明

热门文章

  1. MongoDB下载安装与测试连接(windows)
  2. C语言 三天打鱼两天晒网
  3. Detours学习之二:常见问题(FAQ)
  4. Android 项目必备(四十三)-->Android 开发者的 new 电脑
  5. 山东大学软件工程复习要点及答案
  6. 用Cloudflare CDN 如何自定义节点(CF自选IP)/撸CloudFlare Pro
  7. 关于HP WebInspect 9.1
  8. 工业相机介绍及其与普通相机的区别
  9. 原创 | 连面拼多多、美团、头条、快手后给大家划下重点
  10. 数据的距离度量 二、余弦距离,汉明距离,测地距离,布雷柯蒂斯距离