如何对采购标准报表的输出结果执行相关增强(一)

如何对采购标准报表的输出结果执行相关增强(一)

  • 作者:袁云飞(AlbertYuan)

大家好,2020年新的一年开始了,注册CSDN号已经很长一段时间了,一直保持看贴不回的优良作风,最近项目空档期,想起好友欣以前给我建议,终下定决心,写下几个小心得;特推出几个《心得系列》(经过早上5点在床上躺着,花了10分钟想出来的构思),希望对初学者有一些辅助作用,一下内容均为原创,本人长期从事MM/QM/WM的相关工作,开发只是个人爱好,不专业出请多多指点,码字不易,且行且珍惜,加入粉丝您将能看到更多相关主题文章,转载请引用出处,感激不尽;

很多时候我们都在使用采购标准的报表进行数据查询工作,采购的标准报表还是有很多可圈可点的地方,比如选择参数,可以让我们灵活的进行相关数据配置,来达到不同数据结果的展示;不可否认,大部分企业还是会有这么几个自己开发的采购报表,相对于标准报表来说,这些报表更适合集中的数据展示,数据分析和对比;

但我们在运维的时候常常比较首选的使用标准报表来确认相关的数据,以便能最大限度的预防自开发报表的小bug所产生的连锁问题;

采购标准报表主要包括以ME2*,ME3*,ME1L,ME1M,ME5A, ME5K, ME55, ME28,

ME35,这些均是常用的报表,这里注意ME55,28这些带有下达功能的报表也在此范围内了;这些报表虽然好用,不过结果往往还是有所缺憾的,比如ME2N系列里,我们会发现供应商的代码和描述都放在一个列里,从46C到S4从未改变;比如你使用了MPN功能后发现报表里只能显示MPN物料编码,对应的库存物料编码无法查看;更比如说你的PO屏幕增强字段,无法在报表里显示出来,等等;

从46C到ECC6前几版,这些槽点往往是我们运维人员要求开发自己的采购报表的动因之一(当然不是绝对);

现在我们可以使用增强,对其进行客户化的定制了,以方便每个客户自己的喜好和需求; 下面我们通过要点的方式进行阐述(关键点说明):

  • 增强类型BADI(类接口增强方式)
    使用增强ME_CHANGE_OUTTAB_CUS即可以实现对报表输出结果的改变,甚至完成自己的逻辑过程,推结果数据进行相关的替代,延展,处理;该增强通过接口实例方法FILL_OUTTAB的参数完成数据的传入传出;
    IM_STRUCT_NAME Importing 指定报表输出的结构名,可以通过它的值去判断是PO报表还是PR报表,同时可以判定是ITEM级别结构,还是schedule级别或是account级别的结构展示
    IM_ID Importing 程序名字
    IM_HANDLE Importing 这个了解ALV方法的人都知道意思
    IM_LOGGROUP Importing 同上含义
    CH_OUTTAB Changing 这个就是输出內表了,我们就是修改他来完成数据的自定义处理

  • IM_STRUCT_NAME
    该增强在我上面提到的标准报表里都会被触发,所以我们通过这个值来决定我们需要增强的范围;
    比如,你要对PO的行项目的结果输出进行增强,则我们就可以提前判定这个值是否=MEREP_OUTTAB_PURCHDOC;来决定是否执行我们的增强代码;

CHECK IM_STRUCT_NAME EQ MEREP_OUTTAB_PURCHDOC.
  • CH_OUTTAB內表
    这个內表在增强执行过程中存放的就是即将输出的结果数据,所以我们对它的一切处理都将影响到最终标准报表的展示;
    由于增强是通过接口类实现的,所以懂ABAP的人都知道里面是一些限制,比如不能使用TABLES声明,不能使用带表头內表的处理方式,所以建立大家尽量使用指针(严格意义上也不能这么叫吧,不过SAP里这么说其无伤大雅)完成数据的处理,这样不用建立工作区结构,如下方式:
LOOP AT ch_outtab ASSIGNING <fs_outtab>.
ENDLOOP.
  • 使用前提
    脱离使用前提的讲解都是耍流氓,SAP软件体系过于庞大,很多时候我们都需要在适当的范围里讨论某个问题才有实践意义;
    该增强首先是需要完成业务增强包LOG_MMFI_P2P的激活才能在后台找到的,但要使用这个增强这个不是必要条件;
    系统版本,必须是ECC EHP4以上;
    需要增强的标准报表,必须要配置为ALV显示模式,或者用户参数里设置ME_USE_GRID = X;也就是说这个增强是在ALV输出过程中进行介入的;
    对于该增强来说,其不具备过滤器;但可以被多次实现也就是可重用;这样我个人觉得的好处就是,不必在一个实现里判断很多行为来拆分我们的逻辑了;比如如果我们为PO报表做增强,只需要识别其是PO报表相关层级的数据即可写逻辑;如果为PR做,则再做一个实现出来,判断后写自己的逻辑即可,不用写在一个实现里,所以这里个人推荐判断就不用IF了,直接用CHECK比较简洁一些;
    下面是一个典型应用案例:
    PO报表,比如ME2N里常常只显示短描述,我们通过增强让它只显示物料描述;
    FIELD-SYMBOLS: <fs_outtab>   TYPE any,
                   <fs_material> TYPE ematn,
                   <fs_txz01>    TYPE txz01.

    "如果是PO那一系列的报表就继续寻找数据,由于三个结构ALV里都有物料编码和描述
    "所以都要进行修改
    CHECK im_struct_name EQ 'MEREP_OUTTAB_PURCHDOC' OR
          im_struct_name EQ 'MEREP_OUTTAB_SCHEDLINES' OR
          im_struct_name EQ 'MEREP_OUTTAB_ACCOUNTING'.

    LOOP AT ch_outtab ASSIGNING <fs_outtab>.

      "获取物料编码值
      ASSIGN COMPONENT 'EMATN' OF STRUCTURE <fs_outtab> TO <fs_material>.
      CHECK sy-subrc = 0.

      "获取短文本描述值
      ASSIGN COMPONENT 'TXZ01' OF STRUCTURE <fs_outtab> TO <fs_txz01>.
      CHECK sy-subrc = 0.

      "分配成功,就去找出物料主数据的中文描述并替换输出结构里对应的短文本描述
      SELECT SINGLE maktx
        FROM makt AS a
        WHERE a~matnr = @<fs_material>
        AND   a~spras = '1'
        INTO @<fs_txz01>.

    ENDLOOP.

以上就是按照要点方式介绍了标准采购报表的增强的一些特点和使用要点,如有遗漏,请不吝指出,非常感谢大家的支持,如果喜欢请点赞关注,谢谢!

发布了33 篇原创文章 · 获赞 0 · 访问量 917

猜你喜欢

转载自blog.csdn.net/weixin_44853659/article/details/103868606