根据关键字和范围值来计算结果(自动计算纸箱装箱数量)

JERRY_LIU 2021-01-26 06:00:06
有一个基础资料表a,包含不同的item(货物名),不同的type(纸箱的尺寸),能装货物最大值和最小值分别是多少。
item type maxQty minQty
a1 1 20 16
a1 2 15 10
a1 3 9 6
a1 4 5 3
a2 1 18 15
a2 2 14 12
a2 3 11 8
a2 4 7 5
a3 1 12 10
a3 2 9 7
a3 3 6 4
a3 4 3 2
........

有一个订单表b,包含每个Po,货物名和货物数量
po item qty
a001 a1 44
a002 a1 15
a003 a2 100
a0004 a2 19
.......

默认每个物货,先用type为1的纸箱(尺寸最大的箱子)来装,当所有货物装完后,尾数再用type为2,3,4的箱来装,怎样算出来这些订单要用多少纸箱?

我打算用一个循环来计算type为1的纸箱(尺寸最大的)要用多少个,算出来的modQty是整除后的余数,但是不同item的minQty和maxQty不同,这个余数不能直接相加,有没有什么好办法?

dim poQty as integer , minQty as integer, maxQty as integer, CtnQty as integer, modQty integer
poqty = 0
minQty = 0
maxQty = 0
CtnQty = 0
modQty = 0

for i as integer = 0 to b.rows.count -1
a.defaultview.rowfilter = "item= '" b.rows(i)("item") "' and type = 1"

if a.defaultview.count = 1 then
poQty = b.Rows(i)("Qty")
MinQty = a.DefaultView.Item(0)("MinQty")
MaxQty = a.DefaultView.Item(0)("MaxQty")
If poQty Mod MaxQty = 0 Then
CtnQty = poQty / MaxQty
ElseIf poQty Mod MaxQty > MinQty Then
CtnQty = Math.Floor(poQty / MaxQty) + 1
modQty = poQty Mod MinQty
Else
modQty = poQty Mod MaxQty
End If
End if
next i

...全文
806 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 18 楼 JERRY_LIU 的回复:
不同物货用最大的纸箱能装的数量不同的,比如a1用这个箱能装24个,a2用这个箱只能装20个,a3用这个箱只能装18,a4只能装14,等等,所以多个Po,多种货物混装时,数量不能直接相加。每个货物,用哪个纸箱能装多少个,基础资料表里面有数据的
混装的话也简单啊,a1的系数就是1/24,a2的系数就是1/20,各自的数量与系数相乘不大于1就行了。混装需要考虑是否优先把a装完再装b,或者是a先装固定的数量再装b。假如装1个箱子,先装a,装10个,那么再装系数为1/20的b能装多少个?(1-10/24)/(1/20),这不就是b能装的最大个数了吗?按照这种算法依次计算不就行了
jiajiade01 2021-02-03
  • 打赏
  • 举报
回复
type上面打错了
JERRY_LIU 2021-02-03
  • 打赏
  • 举报
回复
不同物货用最大的纸箱能装的数量不同的,比如a1用这个箱能装24个,a2用这个箱只能装20个,a3用这个箱只能装18,a4只能装14,等等,所以多个Po,多种货物混装时,数量不能直接相加。每个货物,用哪个纸箱能装多少个,基础资料表里面有数据的
gs0038 2021-02-02
  • 打赏
  • 举报
回复
你是按item货物打包装箱吗? 如果按item货物打包,订单表按货物分组统计,你就会得到 item货物及相当的总数qty ,然后再计算 你说了,先拿type为1大纸箱装,如果大于maxQty时 那你就用总数的qty/maxQty每个算装满 得出余数(没有余,更好,正发装完),如果 余数大于type为1大纸箱装的minQty 是不是可以直接用一个大纸箱装就完事了?如果还有没装完的余数 如果小于minQty 再用 type为2 的纸箱装箱, 同样判断,大于 maxQty时 剩余的qty / maxQty(是type 2) 同样的 得出余数 余数大于type为1大纸箱装的 minQty 是不是可以直接用 type为2 纸箱装就完事了? 如果还有没装完的余数……继续同样的装箱,
JERRY_LIU 2021-02-02
  • 打赏
  • 举报
回复
type就是箱子的尺寸,type1是最大的箱子,但是不同的货物,最大的箱子装的数量是不同的。 比如a1用这个箱子装24个,a2就只能装20个,a3只能装15个,不同PO和不同货物可以混装,所以a2和a1装同一箱时,就不能直接按a1+a2的数量除以最大装箱数。 所以我在想用一个系数来转换一下,比如a1能装24个,就用24/24代表系数,a2装20个,就用20/24代表系数,a3能装15个,就用15/24代表系数,当a1和a2装在同一个箱里时,用 (a1数量除以a1系数+ a2数量除以a2系数)/24,这样可以大概算出来要用多少箱,但是系数会有余数,数量上会有一点偏差,数量越大,偏差越大,所以想问一下,有没有更好的方法。
gs0038 2021-02-02
  • 打赏
  • 举报
回复
引用 14 楼 JERRY_LIU 的回复:
对,你说的就是我的算法,不过还有不同货物混装的情况,所以我有一个系数帮忙做一下转换。 难道你们都是用这个办法?应该有更好的方法吧。
如果你混合装不更加简单吗,直接计算总总数qty,哪里需要什么系数? po item qty a001 a1 44 a002 a1 15 a003 a2 100 a0004 a2 19 求和会吧 44+15+100+19=178; item type maxQty minQty a1 1 20 16 a1 2 15 10 a1 3 9 6 a1 4 5 3 a2 1 18 15 a2 2 14 12 a2 3 11 8 a2 4 7 5 a3 1 12 10 a3 2 9 7 a3 3 6 4 a3 4 3 2 type1最大纸箱 是不是maxQty最大的就是了,那按type排一下序, 反正你是混合装的,根本不需要考虑箱纸对哪个货物,只需要考虑装箱 把所有type升排,然后再maxQty 降序排,然后for 一个一个装不就完了吗 178/20=8 还余18 显示 还能用type1的大纸箱来装 ,直接就用9个a1 type1就装完了
  • 打赏
  • 举报
回复
这么简单的事,完全不需要编程。画出各货物、纸箱的尺寸,再笔算就行。用编程是把事情搞复杂了
JERRY_LIU 2021-02-02
  • 打赏
  • 举报
回复
对,你说的就是我的算法,不过还有不同货物混装的情况,所以我有一个系数帮忙做一下转换。 难道你们都是用这个办法?应该有更好的方法吧。
xuzuning 2021-02-01
  • 打赏
  • 举报
回复
这与 CSDN 有没有人有何关系? 你连yitem type maxQty minQty 和 po item qty 之间有什么关系都不愿说清楚,! 还能增氧呢?
JERRY_LIU 2021-02-01
  • 打赏
  • 举报
回复
感谢谢回复,不过外贸工厂的装箱,应该是多年以来的成熟功能,用不到微软这么高大上的功能吧,可能现在上CSDN的人少了,没办法。
白菜成才 2021-02-01
  • 打赏
  • 举报
回复
没有大小,就直接按数量。 数量上装箱,取完全整数符合type 为1的装,剩余的用 type 2,3,4来装。 装的时候po 可以混合装吗?或者是同类物品可以装吗。 如果不可以,直接循环得到的type 1的装箱数相加,再加上使用到的type 2,3,4来装的箱数相加,得到总共不就好了? 不知道是不是我理解的意思
JERRY_LIU 2021-02-01
  • 打赏
  • 举报
回复
版主,我写的蛮清楚吧 目前有两个表: 基础资料表a,包含不同的item(货物名),不同的type(纸箱的尺寸),能装货物最大数和最小数分别是多少。 订单表b,包含每个Po,货物名和货物数量 比如这次有10个PO要装箱,每个PO有哪些货物,有多少数量就在订单表中,而这些货物用什么尺寸的箱子装,每箱最多装多少个货物 ,就在基础资料表中。 默认每个物货,先用type为1的纸箱(尺寸最大的箱子)来装,当所有货物装完后,尾数再用type为2,3,4的箱来装,怎样算出来这些订单要用多少纸箱?
  • 打赏
  • 举报
回复
引用 1 楼 JERRY_LIU 的回复:
有没有大神帮忙看看,我原本打算给每一个item的第一个type(不同尺寸的纸箱)计算一个系数,但是会有不能整除的情况,有没有更好的方法来处理?
Solver 框架可以针对整数规划、各类非线性规划等等问题进行建模。
  • 打赏
  • 举报
回复
对于规划问题,请使用 Microsoft Foundation Solver 库来解决。甚至可以给予它开发各类专利算法。
ManBOyyy 2021-01-28
  • 打赏
  • 举报
回复
我們都是這樣的,基礎資料表只有一個產品,比如列名為1/2箱,1/3,2/3箱等等,你這樣子很麻煩的。
JERRY_LIU 2021-01-28
  • 打赏
  • 举报
回复
有人做过这个没有?
JERRY_LIU 2021-01-28
  • 打赏
  • 举报
回复
能不能详细说一下,基础资料表只有一个产品是指什么?
JERRY_LIU 2021-01-27
  • 打赏
  • 举报
回复
每一个type,上面打错了。
JERRY_LIU 2021-01-27
  • 打赏
  • 举报
回复
有没有大神帮忙看看,我原本打算给每一个item的第一个type(不同尺寸的纸箱)计算一个系数,但是会有不能整除的情况,有没有更好的方法来处理?
相信一部分同学应该知道这个项目,项目的灵感主要来自于线下。在某个人流量较大的街道地段,摆一张桌子,两个纸箱,一个装男生微信与留言,另一个装女生微信与留言,拿一个、放一个都是1元钱。主要是这样的一个盈利模式。我们本次教程的主要内容就是制作这样一款线上的 盲盒脱单 应用。项目主要依托于微信公众号,在微信公众号底部菜单进入到线上摊位,静默登录绑定微信用户身份,同样也是两个纸箱,一个装男生微信与留言,另一个装女生微信与留言,拿一个、放一个都是1元钱,当然这个价格我们在后台可以通过配置文件去修改。本教程主要以实战开发为主,主要讲解的知识点是整个项目的开发流程、开发思维。我们不会对某一项知识点如:Laravel、html布局等进行入门级深度讲解,对于涉及到的一些理论知识点,我们会进行简单介绍,会告诉你这个东西是干什么用的,如何快速使用。系统化学习了解需要同学们在课下通过搜索引擎去查询学习。当然,我们会在教程资料中留下每个知识点的相关学习资料。比如:前端相关知识 Flex 弹性布局在教程开发中会用到,我们会对 Flex 所能实现的效果做大致的讲解,以及教程中使用或常用的一些属性进行说明,但是整个 Flex 的系统性学习,需要你在课下通过教程资料中所留学习资料或搜索解读学习。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧