目录
需求
MB52非层次表述时:
(1)增加显示批次生产日期; MCH1-HSDAT
(2)增加显示批次过期日期;MCH1-VFDAT
(3)增加显示供应商批次号;MCH1-LICHA
可以在检查库存时查询到相关的批次信息,方便生产仓库的库存批次管理。
分析
显示ALV程序
MB52系统标准程序:RM07MLBS
Debug过程先从,显示开始。
end-of-selection 设断点调试。最终ALV呈现在子例程list_output完成。
list_output子例程进行同样的调试。ALV呈现在下述语句完成。 (非层次表述)
显示使用的内表为: bestand表,显示字段设置表未fieldcat[]表。
显示字段fieldcat定义:
在end-of-selection的断点调试:fiedldcat表在F0300_FIELDCAT_FLAT子例程中完成。
在子例程f0300_fieldcat_flat中通过宏的方式增加fieldcat字段。
新增加的字段可以参照 “批次”charg字段的方式来进行。
字段内容赋值过程
在end-of-selection 之前,bestand表已经赋值。需要在start-of-selection事件中寻找对应的子例程:data_selection_new。
调试后确认data_selection_new为需要增强的子例程。
实现
隐式增强方式如:
网络参考文章:做隐式增强。
SAP软件MM模块项目实施中常用增强之二:MB51报表增加字段-CSDN博客
增加字段
在bestand内表字段定义提供的隐式增强点增加字段。
增加内容如下:
DATA hsdat TYPE mch1-hsdat.
DATA vfdat TYPE mch1-vfdat.
DATA licha TYPE mch1-licha.
DATA zzbatch TYPE mch1-zzbatch.
字段内容赋值
MB52数据量并不会太多,直接通过loop内的select single语句完成更新。
在子例程data_selection_new的尾部增加循环,添加MCH1表中的数据。
增加内容如下:
代码如下:
IF xmchb = 'X'.
LOOP AT bestand ASSIGNING FIELD-SYMBOL(<data_mch1>).
IF NOT bestand-matnr IS INITIAL.
SELECT SINGLE licha vfdat hsdat
INTO CORRESPONDING FIELDS OF <data_mch1>
FROM mch1
WHERE matnr = <data_mch1>-matnr AND charg = <data_mch1>-charg.
ENDIF.
ENDLOOP.
ENDIF.
增加的xmchb判断:如果不对显示批次库存进行选择,则不运行相关的loop语序。
增加显示
子例程f0300_fieldcat_flat尾部进行隐式增强。参照批次charg字段的方式进。
内容如下:
代码如下:
IF xmchb = 'X'.
macro_fill_fieldcat 'HSDAT' 'MCH1' c_out.
macro_fill_fieldcat 'VFDAT' 'MCH1' c_out.
macro_fill_fieldcat 'LICHA' 'MCH1' c_out.
macro_fill_fieldcat 'ZZBATCH' 'MCH1' c_out.
ENDIF.
运行结果: