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

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

作者:袁云飞(AlbertYuan)
以下内容均为原创,希望对初学者有一些辅助作用,本人主要从事MM/QM/WM的相关工作,开发只是个人爱好,不专业出请多多指点,码字不易,且行且珍惜,加入粉丝您将能看到更多相关主题文章,转载请引用出处,感激不尽;

从上一章讲解中我们了解到了如何使用增强ME_CHANGE_OUTTAB_CUS来实现对采购标准报表的ALV结果数据的增强数据处理,也简单讲解了该增强的特点及使用前提条件;
这一章我们继续剖析该增强在一个典型事件上的应用:

还是拿PO报表ME2N来讲解,PR报表可以参考此进行拓展,方法思路均一样,不用再累述;

需求:我们针对PO进行了一系列的ITEM级屏幕字段增强,我们需要将这些增强字段在ME2N报表中进行展示;同时我们发现标准ME2N报表中关于供应商的信息显示是将供应商编码和描述何在一起为一列的,用户使用过程中在统计方面非常不便,需要将其拆分后分列展示; 其实这两个需求其实归纳起来就是一个典型的事件,即,在增强中如何往ALV输出里增加自己的列;

要实现这一目的,我们就要知道CH_OUTTAB內表的结构是如何来的;由于该增强在PR,PO报表里都会被触发,不同触发逻辑会是的CH_OUTTAB表的结构不同,那么这个结构就一定是和我们的IM_STRUCT_NAME有关联的,所以找到这个的值,我们就能找到最终其输出的结构对象;ME2N的结构名为MEREP_OUTTAB_PURCHDOC;

则如何要自己添加新字段,就需要对MEREP_OUTTAB_PURCHDOC进行字段增强,使用SE11能轻松完成此工作,这里不再累述,至于使用INCLUDE还是APPEND方法增强字段,及他们的优缺点,以后我们会详细论述;

在这里插入图片描述

完成这个工作后,我们的输出结构上就能存放PO的屏幕增强字段,以及我们拆分出来的供应商和描述字段了;

对于增强代码逻辑,本质和前一章的方法差别不大,只是这里要注意一下,对于标准结构中供应商和描述存放的字段其实有两个,SUPERFIELD和VENDOR_NAME;这里各位要小心,VENDOR_NAME只有35个字符,而我们知道供应商的名称1也只有35个,所以使用这个字段来进行拆分是有潜在缺陷的;我们需要使用的是SUPERFIELD,其有51个字符;而我们知道供应商编码10个字符,名称1=35个字符,小于51个字符,我们拆分的时候注意供应商编码和描述之间有1个字符的空格,所以拆分描述的时候需要从第11个字符开始,即+11(35);

    FIELD-SYMBOLS: <fs_outtab>     TYPE any,
                   <fs_ebeln>      TYPE ebeln,      "PO号
                   <fs_ebelp>      TYPE ebelp,      "项目号
                   <fs_zebeln>     TYPE ze_ebeln,   "增强字段单据号
                   <fs_zmenge>     TYPE char17,     "增强字段数量
                   <fs_zmeins>     TYPE meins,      "增强字段单位
                   <fs_superfield> TYPE merep_super, "供应商/供货工厂
                   <fs_zlifnr>     TYPE lifnr,      "供应商编号
                   <fs_zname1>     TYPE name1_gp.   "供应商名称1

    "如果是PO的行项目结果ALV才执行取数过程,自定义字段是在行项目级别的
    CHECK: im_struct_name EQ 'MEREP_OUTTAB_PURCHDOC'.

    LOOP AT ch_outtab ASSIGNING <fs_outtab>.

      "获取PO号及行项目号及增强字段
      ASSIGN COMPONENT 'EBELN' OF STRUCTURE <fs_outtab> TO <fs_ebeln>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'EBELP' OF STRUCTURE <fs_outtab> TO <fs_ebelp>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'ZEBELN' OF STRUCTURE <fs_outtab> TO <fs_zebeln>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'ZMENGE' OF STRUCTURE <fs_outtab> TO <fs_zmenge>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'ZMEINS' OF STRUCTURE <fs_outtab> TO <fs_zmeins>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'SUPERFIELD' OF STRUCTURE <fs_outtab> TO <fs_superfield>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'ZLIFNR' OF STRUCTURE <fs_outtab> TO <fs_zlifnr>.
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT 'ZNAME1' OF STRUCTURE <fs_outtab> TO <fs_zname1>.
      CHECK sy-subrc = 0.

      "获取行项目屏幕增强字段的值
      SELECT SINGLE zebeln,zmenge,zmeins
        FROM ekpo AS a
        WHERE a~ebeln EQ @<fs_ebeln>
        AND   a~ebelp EQ @<fs_ebelp>
        INTO ( @<fs_zebeln>,@<fs_zmenge>,@<fs_zmeins> ).

      "拆分供应商描述列为两个独立列
      "注意SUPERFIELD字段有51个字符,但供应商+描述总共字符只有10+35=45所以拆分的时候
      "注意中间的那一个空格
      <fs_zlifnr> = <fs_superfield>+0(10).
      <fs_zname1> = <fs_superfield>+11(35).

    ENDLOOP.

在这里插入图片描述

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

猜你喜欢

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