如何用MD_SALES_ORDER_STATUS_REPORT函数从MD04事务码获取概览树(overview tree)数据

来源:互联网 发布:mac软件下载的网站 编辑:程序博客网 时间:2024/05/22 06:33

原文链接:https://blogs.sap.com/2013/08/21/how-to-get-overview-tree-from-md04-with-mdsalesorderstatusreport-fm/


最近我在二次开发中需要从事务码CO46中获取一些信息,更具体的说,我需要从MD04事务码获取概览树报表数据,即MRP元素的订单进度报表(overview tree)。注:以下图片中的内容为我自己实现的该需求的图片,未引用原作者图片。

 

获取以上数据的函数是MD_SALES_ORDER_STATUS_REPORT,但是此函数将打开事务码CO46界面,此处特别注意,后文将以隐式增强解决该问题。

该函数存在NODISP参数,可以控制界面的显示与否,其返回内表IIOELX,表中数据不是概览树所含数据。

所以需要很多其他工作来获取概览树的信息,详细表述如下:

首先声明两个参数,用于保存控制值和返回值的结构数据。

DATA:lc_md_memory, “参数用于判断为本程序获取数据后不继续展示界面

           gt_ord_outtab  TYPE ty_io_struc_tab.

ty_io_struc_tab内表即为函数返回的概览树数据的结构表,此表可以从SAP内建模块LM61TTOP获取。

在程序中,调用MD_SALES_ORDER_STATUS_REPORT之前,需要设置一些内存值,注意NODISP参数是默认被设置为空的。

EXPORTlc_md_memory TO MEMORY ID 'MDREPORT'.

    " Call FM with below parameters

    CALL FUNCTION'MD_SALES_ORDER_STATUS_REPORT'

      EXPORTING

        edelet         = i_mdpsx-delet

        edelkz         = i_mdpsx-delkz

        edelnr         = i_mdpsx-del12

        edelps         = i_mdpsx-delps

        ewerks         = werks

        i_ignore_mtold = 'X'

        i_profid       = 'SAP000000002'

      EXCEPTIONS

        error          = 1

        OTHERS         = 2.

    " Import result table from memory

IMPORT gt_ord_outtab FROM MEMORY ID 'MDREPORT'.

以上程序执行后,应该已经在GT_ORD_OUTTAB表中获取到了概览树的数据,但是为了不要显示后续的界面,还需要对LM61TF27做一个隐式增强(参考链接:http://blog.sina.com.cn/s/blog_6fd0fd4b0101adln.html)。

最终,在LM61TF27所在的代码中,判断LC_MD_MEMORY是否被设置为X,以确认此次请求该模块展示数据来自于当前自已开发的程序。

如果以上参数已被设置,将从memory中读取数据到内表GT_ORD_OUTTAB并且通过上述隐式增强,成功避免打开CO46事务码的界面。

LM61TF27隐式增强代码截图如下:


最后返回GT_ORD_OUTTAB的结果如下:



=========================自己实现该函数的代码片段=======================

https://code.csdn.net/snippets/2472103

原创粉丝点击