TA --ShelfNO是唯一的
id ShelfNO AItem Aqty Adate Atype TotalQty
1 s11 i951 200 2007-8-23 1 200
2 s12 i951 200 2007-8-24 0 200
3 s13 i951 200 2007-8-21 1 200
4 s15 i951 400 2007-8-28 0 400
5 s14 i951 320 2007-8-28 1 320
6 s91 i999 300 2007-8-20 0 300
7 s92 i999 600 2007-7-21 1 600
8 s93 i999 490 2007-7-22 1 490
9 s96 i999 1180 2007-7-19 1 1180
10 s97 i999 900 2007-7-18 1 900
11 s71 i977 200 2007-7-18 0 200
12 s72 i977 300 2007-7-19 1 300
TB
id OutItem OutQty Bdate ShelfNO Quqty Adate Atype unit
1 i951 300 2007-8-25 0
2 i951 900 2007-8-2 b19 900 2007-06-09 0 0
3 i951 700 2007-8-26 100
4 i999 800 2007-8-19 0
5 i999 1800 2007-8-19 300
6 i977 900 2007-8-17 0 ---
概述:
TA 是库存产品表 item是产品编号,ShelfNO是货架编号,Aqty是现库存数量, TotalQty 原库存总数量,
TB 是要发货的货单表。####### > > > >现在新增加了一列 unit(单位数量) < < < < <######
现在要实现的是 为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物
##### > > > > >现在新增加了以下两个要求。
(a),如果unti < >0的时候(当unti < >0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货,
如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。
(b) 这里的首要条件是OutQty - Aqty) >0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。
if 1000 = < TotalQty and (OutQty - Aqty)/ TotalQty <0.03 then suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列
if 500= <TotalQty <1000 and (OutQty - Aqty)/ TotalQty <0.02 then suggestAddQty= (OutQty - Aqty);
if 500 >=TotalQty and (OutQty - Aqty)/ TotalQty <0.01 then suggestAddQty= (OutQty - Aqty);
如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty)
< < < < < <###### 找货架的原则如下:
(1) -14 = < TA.ADate - TB.BDate = <0 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 ------(情况(1)是最近2周内到架的)
(2) 0 <TA.ADate-TB.BDate <5 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 ------(情况(2)是比出货日期晚5天到架的)
(3) TA.ADate - TB.BDate < -14 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 -----(情况(3)是早于2周到架的)
以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。 ----
按照以上原则 TA表中被取货的记录,对应的Aqty要减去被取的数量;
同时要生成一个临时表#tResult --
生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO < > " "的就记录直接复制到#tResult中, TB.ShelfNO= " "的记录 就将查询出得到的货架信息及数量补上再insert到#tResult中,
当TB.ShelfNO= " " 的要到多个货架上取货的时候,就生成多条记录。 TA表的库存不够就按以下方法处理:
在#Result再加上一列, BuGouQty 来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录,
这条新的记录 shelfNo ,Adate 和Atype都为空, BuGouQty就记录不够的数量。
---
请问如何得到这个#tResult表。
上面的测试数据最后得到的#tResult表应该如下:
#Result
id TBid OutItem OutQty unit Bdate ShelfNO Quqty BuGouQty Adate Atype suggestAddQty
1 1 i951 300 0 2007-8-25 s11 200 2007-8-23 1
2 1 i951 300 0 2007-8-25 s13 100 2007-8-21 1
3 2 i951 900 0 2007-8-2 b19 900 2007-06-09 0
4 3 i951 700 100 2007-8-26 s13 100 2007-8-21 1
5 3 i951 700 100 2007-8-26 s12 200 2007-8-24 0
6 3 i951 700 100 2007-8-26 s14 300 2007-8-28 1
7 3 i951 700 100 2007-8-26 s15 100 2007-8-28 0
8 4 i999 800 0 2007-8-19 s91 300 2007-8-20 0
9 4 i999 800 0 2007-8-19 s93 500 2007-7-22 1 10
10 5 i999 1800 300 2007-8-19 s92 600 2007-7-21 1
11 5 i999 1800 300 2007-8-19 s96 1200 2007-7-19 1 20
12 6 i977 900 0 2007-8-17 s72 300 2007-7-19 1
13 6 i977 900 0 2007-8-17 s71 200 2007-7-18 0
14 6 i977 900 0 2007-8-17 400
---记录 11 就是新生成的 库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以)
id ShelfNO AItem Aqty Adate Atype TotalQty
1 s11 i951 200 2007-8-23 1 200
2 s12 i951 200 2007-8-24 0 200
3 s13 i951 200 2007-8-21 1 200
4 s15 i951 400 2007-8-28 0 400
5 s14 i951 320 2007-8-28 1 320
6 s91 i999 300 2007-8-20 0 300
7 s92 i999 600 2007-7-21 1 600
8 s93 i999 490 2007-7-22 1 490
9 s96 i999 1180 2007-7-19 1 1180
10 s97 i999 900 2007-7-18 1 900
11 s71 i977 200 2007-7-18 0 200
12 s72 i977 300 2007-7-19 1 300
TB
id OutItem OutQty Bdate ShelfNO Quqty Adate Atype unit
1 i951 300 2007-8-25 0
2 i951 900 2007-8-2 b19 900 2007-06-09 0 0
3 i951 700 2007-8-26 100
4 i999 800 2007-8-19 0
5 i999 1800 2007-8-19 300
6 i977 900 2007-8-17 0 ---
概述:
TA 是库存产品表 item是产品编号,ShelfNO是货架编号,Aqty是现库存数量, TotalQty 原库存总数量,
TB 是要发货的货单表。####### > > > >现在新增加了一列 unit(单位数量) < < < < <######
现在要实现的是 为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物
##### > > > > >现在新增加了以下两个要求。
(a),如果unti < >0的时候(当unti < >0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货,
如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。
(b) 这里的首要条件是OutQty - Aqty) >0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。
if 1000 = < TotalQty and (OutQty - Aqty)/ TotalQty <0.03 then suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列
if 500= <TotalQty <1000 and (OutQty - Aqty)/ TotalQty <0.02 then suggestAddQty= (OutQty - Aqty);
if 500 >=TotalQty and (OutQty - Aqty)/ TotalQty <0.01 then suggestAddQty= (OutQty - Aqty);
如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty)
< < < < < <###### 找货架的原则如下:
(1) -14 = < TA.ADate - TB.BDate = <0 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 ------(情况(1)是最近2周内到架的)
(2) 0 <TA.ADate-TB.BDate <5 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 ------(情况(2)是比出货日期晚5天到架的)
(3) TA.ADate - TB.BDate < -14 如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录 -----(情况(3)是早于2周到架的)
以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。 ----
按照以上原则 TA表中被取货的记录,对应的Aqty要减去被取的数量;
同时要生成一个临时表#tResult --
生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO < > " "的就记录直接复制到#tResult中, TB.ShelfNO= " "的记录 就将查询出得到的货架信息及数量补上再insert到#tResult中,
当TB.ShelfNO= " " 的要到多个货架上取货的时候,就生成多条记录。 TA表的库存不够就按以下方法处理:
在#Result再加上一列, BuGouQty 来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录,
这条新的记录 shelfNo ,Adate 和Atype都为空, BuGouQty就记录不够的数量。
---
请问如何得到这个#tResult表。
上面的测试数据最后得到的#tResult表应该如下:
#Result
id TBid OutItem OutQty unit Bdate ShelfNO Quqty BuGouQty Adate Atype suggestAddQty
1 1 i951 300 0 2007-8-25 s11 200 2007-8-23 1
2 1 i951 300 0 2007-8-25 s13 100 2007-8-21 1
3 2 i951 900 0 2007-8-2 b19 900 2007-06-09 0
4 3 i951 700 100 2007-8-26 s13 100 2007-8-21 1
5 3 i951 700 100 2007-8-26 s12 200 2007-8-24 0
6 3 i951 700 100 2007-8-26 s14 300 2007-8-28 1
7 3 i951 700 100 2007-8-26 s15 100 2007-8-28 0
8 4 i999 800 0 2007-8-19 s91 300 2007-8-20 0
9 4 i999 800 0 2007-8-19 s93 500 2007-7-22 1 10
10 5 i999 1800 300 2007-8-19 s92 600 2007-7-21 1
11 5 i999 1800 300 2007-8-19 s96 1200 2007-7-19 1 20
12 6 i977 900 0 2007-8-17 s72 300 2007-7-19 1
13 6 i977 900 0 2007-8-17 s71 200 2007-7-18 0
14 6 i977 900 0 2007-8-17 400
---记录 11 就是新生成的 库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以)
解决方案 »
- 关于ASP调用Delphi写的ActiveX的问题
- 三层clientdataset append没问题edit保存不行???
- 一个WINSOCK连接的难题,查了好多资料,没解决,求高手指点
- 求助用ServerSocket如何对大于8k的数据包分组发送?
- WebBrowser 访问内嵌子页面Frame在XP下出错的问题。
- 在用DCOM做三层,客户端连接服务器时出现"拒绝访问"现象!
- 请为哪有Install Shield Express for Delphi 5 下载?
- 存储数据库时字符串包含单引号问题
- 编译别人的程序,出现TDoubleBufferedPannel not found?
- 如何获得一个HTML文件中的所有链接?(最好有例子)
- 杀毒软件为什么不能像病毒一样自我复制自我传播,然后自动搜寻病毒 ~~~哈哈 突然冒出来的念头
- 刚完成了一个进销存软件散分
在国庆前 我问过这个问题,而且已经有朋友帮忙解决了,现在又有新的要求,这里称其为高级版。
这是原贴:http://topic.csdn.net/u/20070921/15/ebdcc24d-9418-4dfe-af65-cec4de28f3fa.html高级版 找货架的先后顺序原则跟原来的一样,现在就是新增加了 unit和suggestAddQty这两个要求,在面的#####>>>>> <<<<<<######
之间的就是新增的详细说明。
在国庆前 我问过这个问题,而且已经有朋友帮忙解决了,现在又有新的要求,这里称其为高级版。
这是原贴:http://topic.csdn.net/u/20070921/15/ebdcc24d-9418-4dfe-af65-cec4de28f3fa.html高级版 找货架的先后顺序原则跟原来的一样,现在就是新增加了 unit和suggestAddQty这两个要求,在面的#####>>>>> <<<<<<######
之间的就是新增的详细说明。