假如drs = DataTables("订单明细").Select("[产品] = 'PD01',"数量 DESC")
查询到的订单中,数量按以下排列:
7
6
5
4
3
2
1
一个订单有7个产品,
我们打包时,有两个条件:
1、每个包裹的数量小于等于10;
2、同一个订单的所有包裹的产品数量应该尽可能平均。
我的思路是:
- 计算出产品总数M=27
- 计算出包裹总数N=27/10,向上取整为3
- 计算出每个包裹应该包装的产品平均数m=27/3=9
- 按照select的结果从大到小排序,从第一个(7)开始
- 如果≥m,此产品单独组合成一个包裹;
- 如果<m:
- 查询第二个记录,产品数量相加,如果总数>10,组合失败,继续往下查询;
- 当某两个产品的组合数量<m时,继续往下组合,直到满足≥m且≤10时,这个包裹才算成功。
这样的话,如果订单记录是:
7|6|5|4|3|2|1的话,其包裹组合是7+3|6+4|5+2+1
如果订单记录是:
7|7|7|2|2|1|1的话,其包裹组合是7+2|7+2|7+1+1
如果订单记录是:
4|4|3|3|2|2|1的话,其包裹组合是4+4+2|3+3+2+1
我的困难主要是:组合阶段的代码
这里涉及比较多的嵌套,而且已经成功组合过包裹的产品在下一次计算中又要排除掉。
求帮忙………………
万分感谢~