Foxtable(狐表)用户栏目专家坐堂 → 【求助】 自动分配算法


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

主题:【求助】 自动分配算法

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 10:00:00 [显示全部帖子]

不是很明白。以数据为例,详细说明一下M20-07-076这个单,比如分配人数3,整单分配的结果是怎么样的?使用文字描述一下过程,并手工计算给出最后的结果做参考。同样如果是拆单分配,又是怎么样的结果?

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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 10:33:00 [显示全部帖子]

没看懂。请举例具体单号说明,使用文字描述一下计算过程,并手工计算给出最后的结果做参考

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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 14:37:00 [显示全部帖子]

别急,比较麻烦的东西。其它工程师在处理

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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 17:01:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动派工.zip


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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 21:40:00 [显示全部帖子]

只能做到差不多,要想做到那个地步,恕我也无能为力

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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 8:48:00 [显示全部帖子]

网上搜过,基本没有什么好办法。这种除了穷举,我想不出其它办法。就是把所有行的金额进行全排列组合。比如有3行,2个金额值:a、b、c,全排列组合就是a+b+c、a+b、a+c、b+c、a、b、c,6种排列,然后不重叠的组合是5种:a+b+c、a+b和c、a+c和b、b+c和a、a和b和c,再取5种其中最接近平均值的组合。

这个算法复杂度是N行的阶乘,然后如果有10行记录,穷举下来可能需要30分钟,20行记录可能就要半天......

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


加好友 发短信
等级:超级版主 帖子:106798 积分:543191 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 9:24:00 [显示全部帖子]

如果"派工明细"对添加的行顺序没有要求可以这样

With Tables("待派工清单")
    If .TopPosition > -1 Then '如果选定区域包括数据行
        Dim r As Row = .rows(.TopPosition)
        For i As Integer = .BottomPosition To .TopPosition Step -1
                Dim dr As Row =  .rows(i)             
                Dim r2 As Row = Tables("派工明细").AddNew()
                For Each c As Col In r2.Table.Cols
                    If dr.Table.Cols.contains(c.name) Then
                        r2(c.name)=dr(c.name)
                        r2.save
                    End If
            Next
dr.delete
        Next
    End If      
End With

 回到顶部