一、普通行业-物料主数据 - MM01/MM02/MM03
零售行业-retail 商品主数据 - MM41/MM42/MM43
二、扩展表:
- 自定义表
- 扩展标准表
本文以扩展标准表的方式介绍,标准表相比自定义表,在更新上更加一致,存在标准变更记录功能。
三、步骤
1、append 结构
注:Data Element的 changed log一定要打上,这样字段变更的内容才会到变更日志中。
2、零售行业的商品主数据和工业分别复制标准函数组 MGD2和MGD1,屏幕只需要复制 0001 / 0002,其他屏幕无需复制,绘制的屏幕中需要保留下图的 module,下面的逻辑在零售和工业中都适用,用来执行一些通用逻辑,遗留会导致数据无法传递。
也可以通过IMG 路径:
SPRO->后勤 - 常规->物料主数据->配置物料主记录-创建定制子屏幕的程序 创建函数组 ZMM006
自动创建
PBO部分:
process before output.
* MODULE STATUS_9001.
module init_sub.
module get_daten_sub.
module feldauswahl.
module sonderfaus.
module sonfausw_in_fgruppen.
module fausw_bezeichnungen.
module feldhistorie. "Aenderungsdienst
module bildstatus.
module zusref_vorschlagen_b.
module refdaten_vorschlagen.
module zusref_vorschlagen_a.
module bezeichnungen_lesen.
module anzeigen_taxim. "Einkaufs-Steuerindikator
module set_daten_sub.
PAI部分,增强字段需要添加 field chain,
process after input.
* MODULE USER_COMMAND_9001.
module get_daten_sub.
***** 自定义代码 begin
chain.
field : mara-zzswbm.
module zmod_field_check.
endchain.
**** end
module set_daten_sub.
3、配置屏幕:如下以工业物料( MM01 )为例, MM41类似
一般增强字段不多的情况,增强字段可以添加到基础数据屏幕,但是当增强字段过多的时候,基础数据屏幕可能在定义的时候添加了,在前台MM01显示不了。这时候可以通过定义新的标签 解决
或者使用事务 : OMT3E。
根据上图复制 01 到 Z1 使用事务: OMT3B
定义屏幕:Tcode:OMT3R,分配新的标签的显示顺序。
(测试发现,这个配置内容有可能无法正常传输,需要到目标系统中手工配置一下).
效果图如下
4、字段状态组配置:
字段状态组控制了增强字段的复制/操作行为.必须配置, 如果不配置,会导致以下问题
-
批量修改 MASS 无法修改增强字段
-
BAPI 无法传递增强字段内容
-
一般商品特定字段的修改无法传递到对应的变式商品
-
等等.
事务代码 OMSR
上面的复制必须勾上
5、BAPI函数传递增强字段
MM01 BAPI 增强
SMOD增强 : MGA00001
MARA 增强
*&---------------------------------------------------------------------*
*& Include ZXMG0U02
*&---------------------------------------------------------------------*
DATA: ls_zsmm_nfc_mara TYPE zsmm_nfc_data.
CHECK wmara IS NOT INITIAL.
MOVE-CORRESPONDING wmara TO ls_zsmm_nfc_mara.
MOVE-CORRESPONDING ls_zsmm_nfc_mara TO cmara.
增强结构 : BAPI_TE_MARA
如果是增强MARC的话上面的SMOD的出口就无法使用了,需要找一个隐式增强
BAPI_TE_MARC
BAPI_TE_MARCX
我这里测试好像MARC不需要再做增强,他和MARA在赋值的时候逻辑不一样。
CLEAR: ls_bapi_te_mara,lt_extensionin.
ls_bapi_te_mara-material = wa_header-material_external. "物料号
ls_bapi_te_mara-zzbcplx = ls_mara_extend-zzbcplx.
ls_bapi_te_mara-zzblxdm = ls_mara_extend-zzblxdm.
ls_bapi_te_mara-zzblxms = ls_mara_extend-zzblxms.
ls_bapi_te_mara-zzblxz = ls_mara_extend-zzblxz.
ls_bapi_te_mara-zzbfstbm = ls_mara_extend-zzbfstbm.
CLEAR: ls_extensionin.
ls_extensionin-structure = 'BAPI_TE_MARA'.
ls_extensionin-valuepart1 = ls_bapi_te_mara.
APPEND ls_extensionin TO lt_extensionin.
CLEAR: ls_bapi_te_marax.
ls_bapi_te_marax-material = wa_header-material_external. "物料号
ls_bapi_te_marax-zzbcplx = 'X'.
ls_bapi_te_marax-zzblxdm = 'X'.
ls_bapi_te_marax-zzblxms = 'X'.
ls_bapi_te_marax-zzblxz = 'X'.
ls_bapi_te_marax-zzbfstbm = 'X'.
CLEAR: ls_extensioninx,lt_extensioninx.
ls_extensioninx-structure = 'BAPI_TE_MARAX'.
ls_extensioninx-valuepart1 = ls_bapi_te_marax.
APPEND ls_extensioninx TO lt_extensioninx.
"marc
CLEAR: ls_bapi_te_marc.
ls_bapi_te_marc-plant = wa_marc-plant.
ls_bapi_te_marc-zzpfstwlz = ls_marc_extend-zzpfstwlz.
ls_bapi_te_marc-zzpclph = ls_marc_extend-zzpclph.
ls_bapi_te_marc-zzpjcm = ls_marc_extend-zzpjcm.
ls_bapi_te_marc-zzpmqs = ls_marc_extend-zzpmqs.
ls_bapi_te_marc-zzpgg = ls_marc_extend-zzpgg.
ls_bapi_te_marc-zzpmj = ls_marc_extend-zzpmj.
ls_bapi_te_marc-zzpmjyj = ls_marc_extend-zzpmjyj.
ls_bapi_te_marc-zzpmjsl = ls_marc_extend-zzpmjsl.
ls_bapi_te_marc-zzphpxm = ls_marc_extend-zzphpxm.
ls_bapi_te_marc-zzpsop = ls_marc_extend-zzpsop.
ls_bapi_te_marc-zzpmpj = ls_marc_extend-zzpmpj.
ls_bapi_te_marc-zzppjsl = ls_marc_extend-zzppjsl.
ls_bapi_te_marc-zzpkc = ls_marc_extend-zzpkc.
ls_bapi_te_marc-zzhydy = ls_marc_extend-zzhydy.
CLEAR: ls_extensionin,lv_marc_value.
lv_marc_value = ls_bapi_te_marc.
ls_extensionin-structure = 'BAPI_TE_MARC'.
ls_extensionin-valuepart1 = lv_marc_value(240).
ls_extensionin-valuepart2 = lv_marc_value+240(240).
ls_extensionin-valuepart3 = lv_marc_value+480(240).
ls_extensionin-valuepart4 = lv_marc_value+720(240).
APPEND ls_extensionin TO lt_extensionin.
CLEAR: ls_bapi_te_marcx.
ls_bapi_te_marcx-plant = wa_marc-plant.
ls_bapi_te_marcx-zzpfstwlz = 'X'.
ls_bapi_te_marcx-zzpclph = 'X'.
ls_bapi_te_marcx-zzpjcm = 'X'.
ls_bapi_te_marcx-zzpmqs = 'X'.
ls_bapi_te_marcx-zzpgg = 'X'.
ls_bapi_te_marcx-zzpmj = 'X'.
ls_bapi_te_marcx-zzpmjyj = 'X'.
ls_bapi_te_marcx-zzpmjsl = 'X'.
ls_bapi_te_marcx-zzphpxm = 'X'.
ls_bapi_te_marcx-zzpsop = 'X'.
ls_bapi_te_marcx-zzpmpj = 'X'.
ls_bapi_te_marcx-zzppjsl = 'X'.
ls_bapi_te_marcx-zzpkc = 'X'.
ls_bapi_te_marcx-zzhydy = 'X'.
CLEAR: ls_extensioninx.
ls_extensioninx-structure = 'BAPI_TE_MARCX'.
ls_extensioninx-valuepart1 = ls_bapi_te_marcx.
APPEND ls_extensioninx TO lt_extensioninx.
****operate bapi
DATA:returnmessages LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = wa_header
clientdata = wa_mara
clientdatax = wa_marax
plantdata = wa_marc
plantdatax = wa_marcx
* FORECASTPARAMETERS =
* FORECASTPARAMETERSX =
* PLANNINGDATA =
* PLANNINGDATAX =
storagelocationdata = wa_mard
storagelocationdatax = wa_mardx
valuationdata = wa_mbew
valuationdatax = wa_mbewx
warehousenumberdata = wa_mlgn
warehousenumberdatax = wa_mlgnx
salesdata = wa_mvke
salesdatax = wa_mvkex
storagetypedata = wa_mlgt
storagetypedatax = wa_mlgtx
* FLAG_ONLINE = ' '
* FLAG_CAD_CALL = ' '
* NO_DEQUEUE = ' '
* NO_ROLLBACK_WORK = ' '
marc_aps_extdata = marc_aps_extdata
marc_aps_extdatax = marc_aps_extdatax
IMPORTING
return = wa_return
TABLES
materialdescription = it_makt
unitsofmeasure = it_marm
unitsofmeasurex = it_marmx
* INTERNATIONALARTNOS =
materiallongtext = it_mltx
taxclassifications = it_mlan
returnmessages = returnmessages
prtdata = lt_mfhm
prtdatax = lt_mfhm_x
extensionin = lt_extensionin
extensioninx = lt_extensioninx
* EXTENSIONIN =
* EXTENSIONINX =
.
ALE增强
-
MGV00003 零售商品
-
MGV00001 工业物料
这里需要读取相应增强段中的增强字段内容赋值到 函数的返回参数中
比如 MARA-ZZSWBM
从 传入参数 F_CLIENTEXT F_CLIENTEXTX 中解析出增强字段内容
复制到 F_MARA_UEB-ZZSWBM 即可.
6、屏幕按钮功能
商品主数据中增强屏幕中添加了按钮功能后
执行按钮系统会报错:
记录 Z1 ZCORT 不存在于表T133E中
消息号 M3748
或者类似的错误: T133D
可以在子屏幕的PAI中添加如下逻辑,给系统重置一个OKCODE.
重置的OKCODE= 'SP02'.是因为增强屏幕的标签按钮功能: SP02
这样可以避免自定义按钮的报错.
BAPI函数增强
零售行业例子:微信:SAP操作手册之 商品/物料主数据增强
总结: