SAP 的后台有关库存的表,是一种很有意思的表。库存表分两种,一种是当前库存表,另一种是历史库存表。例如有MARD\MCHB\MSPR\MKOL等表,对应的历史库存表就是MARDH\MCHBH\MSPRH\MKOLH。当前库存表表示的是,某款物料在当前时间的库存,表里的年份月份字段表示的是某款物料从当时到现在的库存,也就是说从当时到现在一直没有发生过物料移动。举个例子,某物料在当前表里的年份月份字段是201006,则表示这款物料从2010年6月到系统当前时间一直都没有做过出入库。数量不变。

而历史库存表表示的是,某款物料在历史上的库存记录。如某款物料在201006是10个,201105是6个,201201是7个,则表示这款物料在上述3个时间发生过物料移动。

那么这就会引发一个问题,如果有一个报表需求,要求按照时间月份来查询物料在当期的库存。这个时候遵循的原则是,先到历史库存表里面去找。最好是从前往后推,即从某物料的最早的记录往屏幕输入时间推。如果推不到,则根据屏幕输入的年份月份查找当前库存表。

以下是核心算法的代码。

LOOP AT gt_mard.
    LOOP AT gt_mardh WHERE matnr = gt_mard-matnr
                      AND     werks = gt_mard-werks
                      AND     lgort = gt_mard-lgort.
      CHECK gt_mardh-lfgja => p_lfgja.
      IF gt_mardh-lfgja = p_lfgja.
        CHECK gt_mardh-lfmon => p_lfmon.
      ENDIF.
      g_lbkum = gt_mardh-labst + gt_mardh-umlme
              + gt_mardh-insme + gt_mardh-einme + gt_mardh-speme
              + gt_mardh-retme .
      mark = ‘X’.
      EXIT.
*        endif.
    ENDLOOP.
    IF mark IS INITIAL.
      g_lbkum = gt_mard-labst + gt_mard-umlme
              + gt_mard-insme + gt_mard-einme + gt_mard-speme
              + gt_mard-retme .
    ENDIF.
    gt_list-matnr = gt_mard-matnr.
    gt_list-werks = gt_mard-werks.
    gt_list-lgort = gt_mard-lgort.
    gt_list-labst = g_lbkum.
    gt_list-dispo = gt_mard-dispo.
    COLLECT gt_list.
    CLEAR mark.
    CLEAR g_lbkum.
  ENDLOOP.

gt_mard 是与mard 同样结构内表,gt_mardh是与mardh同样结构的内表。

核心算法就是通过mardh的年份来推到屏幕输入年份,如果推到了,就继续推月份,两者如果都能推到,则mardh的这条物料记录就是该屏幕输入月的库存;否则,就以当前库存mard中的数据作为该屏幕输入时间的库存。

SAP 库存查询算法的更多相关文章

  1. 算法模板——sap网络最大流 1(非递归+邻接矩阵)

    实现功能:首行输入N,M,S,T,代表这张图N个点,M条边,源点为S,汇点为T:接下来T行输入个边的出发点.终点和权值:输出最大流 原理:sap网络流算法(详见百度百科,个人觉得这个模板已经不错了,虽 ...

  2. UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介

    在上一文中介绍了碰撞查询的配置方法: Jerry:UE4物理模块(三)---碰撞查询(上)​zhuanlan.zhihu.com 本篇介绍下UE4的各种零大小的射线检测,以及非零大小(带体积)的射线检 ...

  3. ISPA

    来自CSDN的Rachel Zhang 4. Improved SAP 算法 本次介绍的重头戏.通常的 SAP 类算法在寻找增广路时总要先进行 BFS,BFS 的最坏情况下复杂度为 O(E),这样使得 ...

  4. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  5. 最大流算法----(SAP 和 EK)

    EK算法的核心 反复寻找源点 s 到汇点 t 之间的增广路径,若有,找出增广路径上每一段的最小值delta,若无,则结束. 寻找增广路径时用BFS来找,并且更新残留网的值. 找到delta后,则使最大 ...

  6. POJ 2455 网络流 基础题 二分+网络流 dicnic 以及 sap算法

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8189   Accepted: ...

  7. 网络流 最大流—最小割 之SAP算法 详解

    首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...

  8. HDU 3657 Game (SAP | Dinic | EK 三种算法的比较)

    Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)

    来看一道最大流模板水题,借这道题来学习一下最大流的几个算法. 分别用Edmond-Karp,Dinic ,SAP来实现最大流算法. 从运行结过来看明显SAP+当前弧优化+gap优化速度最快.   hi ...

随机推荐

  1. 理解ThreadLocal

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...

  2. 浅谈JavaBean,Entity Bean,Enterprise Bean等Bean以及POJO的含义

      一.对于java bean,就是一个java模型组件,他为使用java类提供了一种标准的格式,在用户程序和可视化管理工具中可以自动获得这种具有标准格式的类的信息,并能够创建和管理这些类.  jav ...

  3. 关于SQL中的Update语句

    今天在SQL数据库操作时需要将一张表中的数据Update到另一张表中去, 可是用我以往的写法确怎么也不能成功.代码如下: update table1 a set a.Col1=b.Col2 from ...

  4. 备份 VPS 上得内容到国内

    起源: 最近毕设快开题了,校园网进入了收费测试的阶段,得把车辆的数据库 down 下来.发现国内 down 的速度真心慢呢.于是乎使用了在美国的 VPS 来 down,果不其然,30M 左右的下载速度 ...

  5. HTML5学习之FileReader接口

    http://blog.csdn.net/zk437092645/article/details/8745647 用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API ...

  6. Windows命令行使用FTP

    1.系统环境 FTP客户端:Windows7旗舰版,管理员权限命令行: FTP服务端:CentOS 6.5,VSFTP,端口 21(默认) 2.登陆FTP 在命令行下输入 ftp,出现 ftp> ...

  7. Getty – Java NIO 框架设计与实现

    前言 Getty是我为了学习 Java NIO 所写的一个 NIO 框架,实现过程中参考了 Netty 的设计,同时使用 Groovy 来实现.虽然只是玩具,但是麻雀虽小,五脏俱全,在实现过程中,不仅 ...

  8. python 访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...

  9. hdoj 1008 Elevator

    Elevator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  10. [二]JQueryMobile常用的组件介绍

    1.页头.主要部门.页尾构成一个基本的页面 2.按钮组件(input.a) 3.列表组件(ul) 4.表格组件(table)