性能:MM/WM自开发

症状:

自开发程序和增强程序性能很差。当访问SAP MM/WM 表:MSEG,LTAP,EBAN,RSEG时,测量到效能很差。

理由和需求

然而,需要注意下面的警告:
在高效使用建议的替代方法之前,一定要检查程序的正确性。
注意下面的注释:
在下面的例子中,经常访问几个表
例如:
SELECT * FROM LEIN WHERE  = ...
SELECT * FROM LTAP WHERE LGNUM = LEIN-LGNUM and TANUM = LEIN-BTANR
...
考虑到效能方面,这些方法可能会更受欢迎。为相应的表定义一个选择视图,在一次访问中同时访问两个表。

方案

1.访问传输请求
  a)经由存储单元号
       错误:SELECT FROM LTAP WHERE VLENR = ....  oder
            SELECT FROM LTAP WHERE NLENR = ...
       正确:SELECT FROM LEIN WHERE LENUM = ...
            SELECT FROM LTAP WHERE LGNUM = LEIN-LGNUM and
                  AND TANUM = LEIN-BTANR
                  AND TAPOS = LEIN-BTAPS.
  b)经由SD发货记录
       错误: SELECT FROM LTAP WHERE NLPLA = LIPS-VBELN
                 AND POSNR = LIPS-POSNR.
       正确:SELECT FROM VBFA WHERE VBELV = LIPS-VBELN
                   AND POSNV = LIPS- POSNR
                   AND VBTYP_N = 'Q'.
            SELECT FROM LTAP WHERE LGNUM = LIPS-LGNUM
                    AND TANUM = VBFA-VBELN
                    AND TAPOS = VBFA-POSNN.
  
  备注:如果为了销售中的发货而建立的运输订单,那么这种访问模式才存在。
  在这种情况中经由VBFA表的文档流,运输订单才能被检测到。LTAP-NLPLA字段
  经由动态存储箱赋值,由发货号填充此字段。在WM自定义(参看WMS中的移动类型)
  中自动赋值被取消激活。当NLPLA字段用作数据选择时,这个副作用必须考虑到
2.访问物料文档
  a)经由采购订单号
     错误: SELECT FROM MSEG WHERE EBELN = ... and EBELP = ...
     正确: SELECT FROM EKBE WHERE EBELN = ..
                AND EBELP = ...
                AND VGABE IN (1,6,7,8,9).
           SELECT FROM MSEG WHERE MBLNR = EKBE-BELNR
                    AND MJAHR = EKBE-GJAHR
                    AND ZEILE = EKBE-BUZEI.
     备注:会计年度必须被声明,所以系统能尽可能高效的经由基本的索引访问。
     如果会计年度丢失,数据库不再高效的使用条目数搜索(这是个问题,
     特别对于多条目的物料文档。)如果操作类型VGABE被声明,这些值又
     限制相关的货物移动。
   b)经由运输订单号
   错误: SELECT FROM MSEG WHERE TANUM = ...
   正确: SELECT FROM LTAP WHERE TANUM = ...
         SELECT FROM MSEG WHERE MBELN = LTAP-WENUM
                  AND MJAHR = 
                  AND ZEILE = LTAP-WEPOS.
    c)经由转移需求
    错误:  SELECT MSEG WHERE TBNUM = ...
    正确:  SELECT LTBK WHERE TBNUM = ....
           SELECT MSEG WHERE MBLNR = LTBK-MBLNR
              AND MJAHR = LTBK-MJAHR.
     备注:物料文档所有条目被返回。通过物料编码来限制一条物料文档条目。
    d)经由供应商号码
    错误:SELECT FROM MSEG WHERE LIFNR = ...
    正确:SELECT EKKO WHERE LIFNR = ....
         SELECT EKBE WHERE EBELN = EKKO-EBELN
                AND VGABE = '1'.
         SELECT MSEG WHERE  MBLNR = EKBE-BELNR
                  AND MJAHR = EKBE-GJAHR
                  AND ZEILE = EKBE-BUZEI.
      备注:在特定的环境中访问EKKO和EKBE返回多个数据集。在程序中必须考虑到。用操作类型VGABE=1,
      只有采购订单的货物移动被选出。作为一个选择,可以用匹配代码对象M_MEKKL替代表EKKO(例如 
      SELECT FROM M_EKKL WHERE LIFNR = ...).访问可以通过声明附加限制加以改进。
      对于采购组织EKORG,采购组EKGRP,文档日期BEDAT,采购文档目录BSTYP,
      订单类型BSART能提供更多访问选择。
      
 3.访问采购需求
   a)经由预留数
   错误:SELECT FROM EBAN WHERE EBELN = ....AND EBELP = ....
   正确:SELECT FROM EKET WHERE EBELN = .... AND EBELP = ....
        SELECT FROM EBAN WHERE BANFN  = EKET-BANFN
                   AND BANFPO = EKET-BANFPO.
 4.经由购货发票
   a)经由采购订单数
   错误:SELECT FROM RSEG WHERE EBELN = ...and EBELP = ...
   正确:SELECT FROM EKBE WHERE EBELN = ...
                AND EBELP = ...
                AND VGABE IN (2,3,P).
        SELECT FROM RSEG WHERE BELNR = EKBE-BELNR
                   AND GJAHR = EKBE-GJAHR
                   AND BUZEI = EKBE-BUZEI.
    备注:通过声明事物类型VGABE,值限制到相关的移动类型。用GJAHR和BUZEI,基本索引被RSEG完全使用。               

你可能感兴趣的:(性能:MM/WM自开发)