一个查当前月库存的算法及详解

原创 2007年09月20日 16:58:00
 
一个查当前月库存的算法及详解
       现在做一个关于库存方面的系统,涉及到查每个月的库存。看来这是一个很简单的问题,但是这里涉及到我要查前面任何一个月的最后库存,我并不一定要查当前月的库存,如果是查当前月的库存,就把现在所有有效的库存记录显示出来就可以了(注:我的库存表是如果有入库数量,对应的原来的记录就设为无效,插入一条总和的记录并设为有效)。
如现在的时间是九月,我要看八月或者是七月甚至是更前面每一种东西的在那个时候的库存,这里就假设为要看八月的吧,但是八月有一种编号为A的物品在七月没有进出库,也就是这个A在八月的库存,其实是七月的库存,有的甚至有几个月都没有进出库的,那就要一直取到与要查看月最接近的那个月的库存作为需要的库存。
我的算法是如下:
如果当前月存在,就直接显示,如果不存在就一直往前面推,直到一直推到数据库第一条记录的日期为止,如果都还同有找到,那就说明不存在该货物的记录,如下图:
相关算法,JAVA源程序如下:
  /******************定义变量**********************/
    privateint smallestBeginYear;
    privateint smalleatBeginMonth;
    privateint currentYear_;
    privateint currentMonth_;
  private DBMS_Conn conn=new DBMS_Conn();
    /**
     *取得指定月结存
     *@parammonthType0表示查看上一个月,1表示这个月
     *@paramcurrentMonth当前月
     *@paramcomponentID元件号
     *@return
     */
    publicint getNumInWareHouseBySpecialMonth(int monthType,int currentYear,int currentMonth,int componentID) {
        if(monthType==0) {
            currentMonth--;
        }
        currentYear_=currentYear;
        currentMonth_=currentMonth;       
        int num=0;
        boolean doOK=false;
        boolean again=false;
        while(!doOK)//循环,直到条件不满足为止
        {
            String sql="SELECT top 1 nowLeft from ku_in_out where ";
            sql+=" deletedOrNot=0 and month(cdate(InOrOutTime))="+currentMonth_;
            sql+=" and year(cdate(InOrOutTime))="+currentYear_;
            sql+=" and componentID="+componentID+" order by InOrOutTime desc,ID DESC";
            ResultSet rs;           
            try {
                rs=conn.executeSQLReturnResult(sql);
                if(rs.next()) {
                    num=rs.getInt(1);
                    doOK=true;
                }else {//如果当前月没有记录,就查看前面几个月的是否有该记录
                    if(!getAProperMonthAndYear(currentYear_,currentMonth_,smallestBeginYear,smalleatBeginMonth)) {
                        doOK=true;
                    }else {
                        again=true;
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return num;
    }
    /**
     *用该方法取得一个合适的年、月,因为有的记录可能上个月没有操作(如八月,现在九月,
     *但七月就记录),相当于现在的库存记录就是七月的
     *@paramcurrentYear
     *@paramcurrentMonth
     *@paramsamllestYear
     *@paramsmallestMonth
     *@return
     */
    privateboolean getAProperMonthAndYear(int currentYear,int currentMonth,int samllestYear,int smallestMonth) {
        boolean ok=false;//用以确认是否取前面一个月操作OK
        int testI=0;
        if(currentMonth>1) {
            if(currentYear>samllestYear)
            {
                    currentMonth--;
                    ok=true;
            }
            elseif(currentYear==samllestYear && currentMonth>smallestMonth) {
                currentMonth--;
                ok=true;
            }
        }
        else{
            if(currentYear>samllestYear)
            {
                currentYear--;
                currentMonth=12;
                ok=true;
            }
        }
        if(ok) {
            currentYear_=currentYear;
            currentMonth_=currentMonth;
        }
        return ok;
    }

库存查询算法

SAP 库存查询算法 SAP 的后台有关库存的表,是一种很有意思的表。库存表分两种,一种是当前库存表,另一种是历史库存表。例如有MARD\MCHB\MSPR\MKOL等表,对应的历史库存表就是MARD...
  • zhongguomao
  • zhongguomao
  • 2015年12月28日 11:15
  • 1035

算法导论 思考题 15-11(库存规划)

1
  • niewei1986
  • niewei1986
  • 2017年06月03日 13:40
  • 499

SAP呆滞库存的计算

SAP呆滞库存的计算 一、什么物料是呆滞物料   呆滞就是不流动,物料呆滞多久才是呆滞?可谓标准不同,说法各异,有的认为物料的最后异动日至盘查时,其时间间隔超过180天者,称为呆滞物料。有的说超...
  • zhongguomao
  • zhongguomao
  • 2016年03月05日 09:06
  • 1460

SAP业务测评之库存预留

在库存管理中,预留业务是十分常见的。如临近五一或者国庆等节假日,出于促销的需要,一般都要求库存预先满足这方面的需求。即要求保证系统在需求日那天有足够的库存。为了满足这个目标,可能会对库存的某些物料做一...
  • zhongguomao
  • zhongguomao
  • 2015年06月01日 11:02
  • 1343

初始库存不为0 时的 Wager Whitin 算法 Matlab 代码

最近读几篇老论文, 发现 Wager-Whitin 算法 在初始库存不为 0 时仍然成立。自己没有想到如何证明。原 wagner whitin的论文上又看了看,似乎证明时没有考虑到初始库存不我0时定理...
  • robert_chen1988
  • robert_chen1988
  • 2016年11月09日 19:38
  • 514

SAP取历史库存(可查询期初期末库存和指定日期之库存)

MARD里记载的是当前库存的数量,是实时变化的,但是期间并不一定是当月。比如:当前是2015年11月,料号A在2015年10月初至今都没有库存异动,那么现在看到MARD里料号A的期间数还是2015年0...
  • xuwj2006
  • xuwj2006
  • 2015年11月19日 11:52
  • 3191

特定数量的商品如何在高并发下进行库存锁定 ?

特定数量的商品如何在高并发下进行库存锁定 ? PMCAFF产品经理 12-22 对于特定数量的商品,如何在高并发下进行库存锁定呢 ? 促销的商品数量有限,用户加入购物车后,实际库...
  • hl_java
  • hl_java
  • 2017年08月08日 17:18
  • 883

关于库存 &库存BAPI

mard里记载的是当前库存的数量,但是期间并不一定是当月。比如你物料4月一整月都没有库存数量变化(没收没发),那么5月初你看mard里的条目期间数还是4月而非5月。 当某个期间发生货物移动的时候,系...
  • hugh_Lee
  • hugh_Lee
  • 2016年10月29日 16:30
  • 743

Oracle EBS 常用查询 - 库存组织

--查询Operation Unit select * from hr_operating_units where name like '%OU_NAME%'--查询指定Operation Unit下...
  • chris_mao
  • chris_mao
  • 2016年07月31日 20:35
  • 2051

SAP MM模块库存结存报表

库存管理是MM模块应用中的重点,SAP中的收货、销售、盘点、调拨等操作都要直接影响到当前的库存。SAP提供了标准功能MB52用于对库存数量的查询,不过MB52的查询和数据展示功能有限,很多企业会开发额...
  • hugh_Lee
  • hugh_Lee
  • 2016年10月29日 16:34
  • 1484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个查当前月库存的算法及详解
举报原因:
原因补充:

(最多只允许输入30个字)