Foxtable(狐表)用户栏目专家坐堂 → 分箱功能虽然实现,请专家帮助优化一下,我实现的太繁琐


  共有2240人关注过本帖树形打印复制链接

主题:分箱功能虽然实现,请专家帮助优化一下,我实现的太繁琐

帅哥哟,离线,有人找我吗?
whtb999
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
分箱功能虽然实现,请专家帮助优化一下,我实现的太繁琐  发帖心情 Post By:2017/11/23 16:01:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:分箱.rar


 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/23 16:05:00 [只看该作者]

我是使用窗口1,开始每实现一步用了一个按钮,最后把所有的代码进行了整合,集中到了一键分箱的事件里了,请专家老师帮我优化,而且我还中间用了两个表作为中介。感觉写的太麻烦,但又没有能力修改,是不是可以省去中间的两个表直接实现我的功能。

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/11/23 16:14:00 [只看该作者]

如何进行分箱,拆分的逻辑是什么?原来是怎么做的,具体代码在哪里?

 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/23 16:15:00 [只看该作者]

'第一步将记录拆成一条一条的
Dim Cols1() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
Dim Cols2() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
For Each dr1 As DataRow In DataTables("产品数据").Select("[数量] > 0")
    
    For  j As Integer = 1 To dr1("数量")
        Dim dr2 As DataRow = DataTables("产品数据拆分").AddNew()
        For i As Integer = 0 To Cols1.Length -1
            dr2(Cols2(i)) = dr1(Cols1(i))
            dr2("数量")=1
        Next
    Next
Next

'一条条的累加重量不超过500
Dim Sumzl As Integer
Dim k As Integer=1
Dim Cols11() As String = {"长度","宽度","厚度","编号","单个重量","编号","数量"}
Dim Cols22() As String = {"长度","宽度","厚度","编号","单个重量","编号","数量"}
For Each dr11 As DataRow In DataTables("产品数据拆分").Select("[数量] > 0")
    
    sumzl= sumzl + dr11("单个重量")
    If sumzl>500 Then
        sumzl=0
        k=k+1
        
        
    End If
    
    Dim dr22 As DataRow = DataTables("分箱明细").AddNew()
    For i As Integer = 0 To Cols11.Length -1
        
        dr22(Cols22(i)) = dr11(Cols11(i))
        dr22("箱号")=k
    Next
    
Next
'建立分组查看代码进行复制生成分箱结果
Dim g As New GroupTableBuilder("分箱结果", DataTables("分箱明细"))
g.Groups.AddDef("长度")
g.Groups.AddDef("宽度")
g.Groups.AddDef("厚度")
g.Groups.AddDef("单个重量")
g.Groups.AddDef("编号")
g.Groups.AddDef("箱号")
g.Totals.AddDef("数量")
g.Build()
MainTable = Tables("分箱结果")

 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/23 16:15:00 [只看该作者]

老师整个项目压缩上传了

 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/23 16:30:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:窗口图片.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/23 16:45:00 [只看该作者]

老师我是根据数量的循环进行先拆分存储到产品拆分的表里,然后在根据条件,一条条的累加,如果总重量超过500就算一箱完毕,箱号进行加一操作,并且存储到分箱明细表里,然后对分箱明细进行分组查询,生成分箱结果。

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/11/23 17:29:00 [只看该作者]

看看是不是这种效果

DataTables("分箱明细").DataRows.Clear

Dim Cols1() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
Dim Cols2() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
Dim dr2 As DataRow
Dim zl As Integer = 0
For Each dr1 As DataRow In DataTables("产品数据").Select("[数量] > 0 and 单个重量 > 0")
    Dim gs As Integer = Math.Floor(500 / dr1("单个重量"))
    Dim cnt As Integer = 1
    Dim sl As Integer = dr1("数量")
    For  j As Integer = 1 To sl  Step gs
        dr2 = DataTables("分箱明细").AddNew()
        For i As Integer = 0 To Cols1.Length -1
            dr2(Cols2(i)) = dr1(Cols1(i))
        Next
        dr2("数量")= iif(j+gs > sl,sl - j+1,gs)
        dr2("箱号")=cnt
        cnt += 1
    Next
Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/23 17:47:00 [只看该作者]

Dim Cols1() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
Dim Cols2() As String = {"长度","宽度","厚度","编号","单个重量","编号"}
Dim dt As DataTable = DataTables("分箱明细")
Dim xh As Integer = 1
Dim sy As Double = 500
For Each dr As DataRow In DataTables("产品数据").Select("[数量] > 0")
    Dim count As Integer = dr("数量")
    Do While count > 0
        Dim ndr As DataRow = dt.AddNew
        For i As Integer = 0 To Cols1.length-1
            ndr(Cols2(i)) = dr(Cols1(i))
        Next
        If dr("单个重量") * count > sy Then '满一箱
            ndr("箱号") = xh
            ndr("数量") = Math.Floor(sy / dr("单个重量"))
            count -= ndr("数量")
            sy = 500
            xh += 1
        Else
            ndr("箱号") = xh
            ndr("数量") = count
            sy -= ndr("数量") * dr("单个重量")
            count -= ndr("数量")
        End If
    Loop
Next


 


 回到顶部
帅哥哟,离线,有人找我吗?
whtb999
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1820 威望:0 精华:0 注册:2016/5/10 15:59:00
  发帖心情 Post By:2017/11/24 6:06:00 [只看该作者]

谢谢老师就是这种效果
[此贴子已经被作者于2017/11/24 6:12:45编辑过]

 回到顶部
总数 12 1 2 下一页