日期:2014-05-17  浏览次数:20380 次

按照出库要求信息匹配入库的批次信息
本帖最后由 lazygc520 于 2013-08-07 09:39:09 编辑
数据库分为3张表,kw,vp,st开头的三张表,前两张表代表入库,st开头的代表出库要求。入库的话前两张表联合查询求得已入库的cust_no和lotno,出库表已知stockno的信息及对应的cust_no,stockno存在排序关系,按照表st中的字段c1_time,c_type,adress来排序,stockno按照顺序排列,lotno按照先入先出的排序规则和stockno的对应数量匹配,对等的话则排除已匹配的lotno,新的lotno和接下来的stockno相匹配直至数量符合要求,依次类推。数量的结果是st表中,mount*snp的结果。能否用遍历入库表的信息来完成此操作?

上传附件地址:http://download.csdn.net/detail/lazygc520/5882535

已知入库的数据、出库的要求,根据出库要求来匹配入库的批次数据。
例如:在ch_result页面,ch_result.php?stockno=SU13061301010,实现出货批次那一栏的数据。

kw,vp表联合查询得到的cust_no和lotno得到的结果:

$sql = "select CONCAT(SUBSTRING_INDEX(a.cust_no,' ',1),
SUBSTRING_INDEX(a.cust_no,' ',-1)) as cust_no,b.lotno as lotno,
count(b.lotno) as lotno_count from `kw_manage` as a,
`vp_barcode_2d_y` as b where a.packageno = b.packageno 
group by lotno order by lotno asc";
$result = mysql_query($sql);
$ars =array();
while($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
$ars[] = $row;
}
var_dump($ars);

得到的结果:
array(1) { [0]=> array(3) { ["cust_no"]=> string(10) "237033AW0A" ["lotno"]=> string(4) "3207" ["lotno_count"]=> string(3) "480" } }





------解决方案--------------------
库存表增加一个出库字段
入库时该字段为0
出库时该字段为已出库数量
入库数量 - 出库数量 = 该批次剩余数量


设 select * from tbl_name

id  num  
1   20    
2   20    
3   30   

SELECT * , (SELECT sum( num ) FROM tbl_name WHERE id<=a.id ) as c FROM tbl_name a

id  num  c  
1   20   20 
2   20   40 
3   30   70
则 c 列可做为出库来源的依据
如果出库包装的规模为 30
那么对应的id为:
包装1 1,2
包装2 2,3
包装3 3,后续id