mb51增加MSEG&MKPF表外的字段

目录

业务需求

背景分析:

程序基本逻辑

任务拆分

增加显示字段

SAP采用的方法

隐式增强

定义字段

给字段赋值

分析源程序



业务需求

增加显示成本中心短文本;CSKT-KTEXT
增加显示供应商批次号;MCH1-LICHA
增加显示公司批次号;MCH1-ZZBATCH

背景分析:

如下面链接对于MSEG和MKPF表的字段可以通过SIMG的配置完成。

MB51增加字段-CSDN博客文章浏览阅读333次,点赞8次,收藏6次。(4)增加显示物料凭证对应的料号最近一次(以物料的过账日期为基准)入库的单据对应的采购订单的的不含税单价和含税单价;----物料凭证的过账日期MSEG-BUDAT_MKPF;如果选择屏幕采用层次结构的清单,MB51输出采用 Reuse_ALV_hierseq_list_display的function ALV 的方式来显示。基于此需要对list表进行调整增加相关字段,并且对fc_flat表进行调整增加需要显示的字段。采用的数据来自 list[] 表, 显示选择的字段定义在 fc_flat[] 表中。https://blog.csdn.net/weixin_44741835/article/details/135332341?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135332341%22%2C%22source%22%3A%22weixin_44741835%22%7D

本次增加的字段并不在MSEG和MKPF表中,因此需要重新分析MB51的程序,并进行相关增强。

程序基本逻辑

上篇文章对MB51对应程序RM07ROCS的Debug过程中,MB51通过function ALV的层次显示的方式来实现。

相关详细字段存储在list[]表中,需要显示的字段在fc_flat[]表中。

MB51的显示中本来就存在MSEG/MKPF 之外的字段,充分debug源程序,参照执行就可以的。

任务拆分

1,增加list表中的字段,

2,参照MB51程序的方式填充相关字段内容

3,将相关字段通过fieldcat方式显示出来。

为了调试的方便,先增加FC_flat[]表中的字段,显示出来。

增加显示字段

SAP采用的方法

重新debug上篇文章中的build_fieldcatalg子例程。以list表中的物料描述为线索来分析。

物料描述使用的是Makt表中的MAKTX字段。

如下图,程序在第一个循环后,fc_flat[]表增加两条记录。第二条记录即为我们用来分析的MAKTX字段。

如此,可以参照maktx字段增加的逻辑通过隐式增强的方式增加成本中心描述,和相关批次号的两个字段。

隐式增强

做隐式增强时,在上面的程序出并没有增强点。增强点只在子例程的头部和尾部有效。

尾部恰好有SAP做的后补充fieldcat的程序:

框出来的程序正好可以参考。

增强如下:

激活运行,调整布局,相关字段显示成功。

定义字段

参照MB51源程序的maktx物料描述字段定义方式来进行。采用隐式增强方式。

给字段赋值

分析源程序

还是参照maktx字段的方式进行。原始程序list表在子例程process_list里完成。process_list之前,list为空,之后list表有正确数值。 debug 子例程 process_list.

1,子例程。 2, 调用create_entry_for_list. 3, 调用之后list表头增加相关信息。

4,将表头信息写入表格。 5, 对应list[]表增加一条信息。

maktx增加的程序需要继续分析 create_entry_for_list子例程。该子例程处理单条list数据。

对于list中零件号不为空的记录,检查零件号是否和ls_makt中的零件号相同。

如果不同,从内表imakt中读出相关信息写到ls_makt中。如果imakt中没有相关零件号,则清除ls_imakt中的maktx零件描述信息。

调整ls_imakt相关信息后,将ls_imakt中的零件描述字段maktx内容写入list-maktx。

下一步需要检查imakt表是如何创建的。

根据下图的定义imakt表和imakt_key表时为了增加物料描述而创建的中间表。

在itab的循环中收集imakt_key的表数据

根据imakt_key表信息,select语句生成imakt表。

1, 语句功能描述。 2 select语句生成imakt中间表, 3, 培训为了后续的binarysearch,为了效率。 4, 在2中有关于decon的语句,不明白。但是在读取移动类型文本是并没有相关信息,后续忽略dbcon的事情。

源程序的分析,基本结束。 SAP采用中间工作表的方式,会对效率有帮助。(在loop语句中尽量不使用select语句。)

下一步看如何增强。

增加成本中心名称

需要做的事情:

子例程:Process_list.

1, icskt_key表 2, icskt表 3, 填充icskt_key表, 4, select语句填充icskt表。

子例程: create_entry_for_list

填充 list-ktext字段内容。

隐式增强只在子例程的开始和结束出才有,计划在process_list子例程的结尾完成MB51源程序的所有功能。

增强开始的状态。

itab表已经清除,list表已经增加相关字段,并且按照零件号排序。

需要做的事情:

1, 对list复制出一个中间表lt_list_cskt。按照kostl字段进行排序,并去除重复项。

2,循环中间表对中间表的一条数据添加成本中心名称ktext。在loop语句中使用select语句效率不会太高,由于已经去重,不在构建源程序的另个中间表。应该对效率没有太大的影响。

3,在循环内根据此条数据更新所有list表中的成本中心名称字段。

4,循环结束list表就更新完毕了。

增加供应商批次号

参照相同逻辑。

程序如下

运行结果如下

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值