有这样一个情况:
假设:
1、所有物料均有批次。
2、物料收发货均要求带有批次。
3、销售数据包内批次不一定准确,正确的优先发出(最好)。
4、业务流程:销售(带有批次)->仓库发货(基于销售数据包,包内包含超过500条销售数据).
5、仓库发货只能按仓库的批次发货。
6、销售数据包内的批次如果在仓库中不存在,即,批次不正确,仓库可以按先进先出或其他逻辑从仓库内选一个有库存的批次发货。
7、500条销售数据要求在同一个发货单上,即,数据同时提交,在一个事务内。
8、如,批次出现负数,500条数据均提交失败。
9、假设一条销售数据格式: 物料 A0001,价格:10.00,数量:10,批次:20080808 
关键点:
在为500条销售数据赋批次的时候,如何保证某个批次已经被占用完。求一个获取批次的最优算法。

解决方案 »

  1.   

    好像你需要的不是纯算法啊
    你还是画个UML的图进行分析下吧
      

  2.   

    哈哈。
    已经分析过了,实际业务就是这样,条件和需求也就是上面说的。就是需要一个函数,来得到一个批次。
    数据包
    <?xml version="1.0" encoding="utf-8" ?>
    <SalesData TotalSale="2000" POS="2" SaleDate="2008-07-26" >
      <Order VIPID="3" OrderID="2005" Saler="100" Casher="100"  Item="A00001" Quantity="1" Batch="200806"  Total="19.8" Price="19.8" Class=""  Point="20"  POS="2" OrderTime="2008-07-26" ></Order>
      <Order VIPID="3" OrderID="2005" Saler="100" Casher="100"  Item="A00001" Quantity="1" Batch="200806"  Total="19.8" Price="19.8" Class=""  Point="20"  POS="2" OrderTime="2008-07-26" ></Order>
      <Order VIPID="3" OrderID="2005" Saler="100" Casher="100"  Item="A00001" Quantity="1" Batch="200806"  Total="19.8" Price="19.8" Class=""  Point="20"   POS="2" OrderTime="2008-07-26" ></Order>
    </SalesData>
    上面的批次,可能会因为销售员录入错误,所以不能保证正确。这个数据包导入到后台,关键是批次。
    所以在生成交货单的时候,需要判断此批次的物料是否仓库中存在,存在的话,是否已经被此销售订单其他物料占用完毕,是否需要占用一个其他批次,最终如果找不到任何批次,从此交货单中踢出。
    那么怎么得到这样的一个批次?
      

  3.   

    lz是做 SAP Business One开发?
      

  4.   

    已经有一个思路,还没有来的及写,也不知道对不对,顺便想找一个更优的。 Dictionary ItemDictionary=new Dictionary(); //把物料编码 做Key,Value=BatchDictionary(Key=Batch+"仓库",Value=Quantity同时Key=Batch+"占用",Value=Quantity)for each ()
    {
        IF 判断物料是否存在与ItemDictionary里面
         {
             IF 判断此批次是否存在BatchDictionary里面
              {
              如存在:判断仓库数量》占用数量+销售数量  是:BatchDictionary(Batch+"占用")的数量+销售数量; 否:差值记入占用,剩余的看其他批次是否有空余,如果没有,查询数据库(拼Sql把现有Batch排除),得到一个批次,同时维护ItemDictionary 及BatchDictionary
              }
             else 
             {
              判断仓库是否有此批次数量。。
             }
            
         }
        Else
        {
           数据库查找此批次的物料及数量
            维护ItemDictionary 及BatchDictionary
           。
         }
    }
      

  5.   


    ----------------------你是SAP的员工还是partner的员工? 
      

  6.   


    ----------------------你是SAP的员工还是partner的员工? 
      

  7.   

    partner 
    估计SAP不会招我这样水平的人吧。呵呵