Foxtable(狐表)用户栏目专家坐堂 → 如何根据物料库存和bom表,计算每种物料分别可以生产多少产品


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

主题:如何根据物料库存和bom表,计算每种物料分别可以生产多少产品

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


加好友 发短信
等级:童狐 帖子:294 积分:3478 威望:0 精华:0 注册:2013/4/9 19:12:00
如何根据物料库存和bom表,计算每种物料分别可以生产多少产品  发帖心情 Post By:2017/8/17 10:40:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


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


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

 你的问题本身就有问题,你要计算的是哪一种产品的数量?假如有3样产品,同时用到3个物料,那按照什么样的规则分配物料?

 

 请请理清自己的逻辑。


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


加好友 发短信
等级:童狐 帖子:294 积分:3478 威望:0 精华:0 注册:2013/4/9 19:12:00
  发帖心情 Post By:2017/8/17 10:55:00 [只看该作者]

领导的要这样的表,就是每种物料按bom里的用量,可以生产多少,单独算,比如3样产品,同时用到3个物料,要求生成一个表a物料分3行,分别可以生产多少产品,b物料分3行,分别可以生产多少产品,一共9行,这些物料是近效期的,把这个生成的表发给销售选择,要求什么,就生产什么,大概就是这个意思

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


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

 逻辑一:先做完产品1、剩下的做产品2、再剩下做产品3;

 

 逻辑二:做一个产品1、做一个产品2、做一个产品3,如此循环;

 

 逻辑三:按比例做,做两个产品1、做五个产品2、做1个产品3,如此循环。

 


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


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

下面代码是逻辑3,根据你产品数量表的产品,平均生成

 

Dim dt1 As DataTable = DataTables("产品数量")
Dim dt2 As DataTable = DataTables("BOM")
Dim dt3 As DataTable = DataTables("物料库存")
Dim dic_wl As new Dictionary(Of String, Double)
For Each dr As DataRow In dt3.Select("")
    dic_wl.add(dr("材料分类") & dr("材料名称") & dr("型号规格"), dr("库存"))
Next
Dim dic_bom As new Dictionary(Of String, List(of DataRow))

Dim canloop As Boolean = False
dt1.ReplaceFor("生产数量", 0)
Do While canloop = False
    canloop = True
    For Each dr As DataRow In dt1.DataRows
        Dim str As String = dr("产品分类") & dr("型号") & dr("规格")
        If dic_bom.ContainsKey(str) = False Then
            Dim drs As List(Of DataRow) = dt2.Select("产品分类 + 型号 + 规格 = '" & str & "'")
            dic_bom.add(str, drs)
        End If
        Dim cando As Boolean = True
        For Each cdr As DataRow In dic_bom(str)
            Dim sstr As String = cdr("材料分类") & cdr("材料名称") & cdr("型号规格")
            If dic_wl.ContainsKey(sstr) = False Then
                cando = False
                Exit For
            End If
            If dic_wl(sstr) < cdr("结构用料") Then
                cando = False
                Exit For
            End If
        Next
        If cando Then
            For Each cdr As DataRow In dic_bom(str)
                Dim sstr As String = cdr("材料分类") & cdr("材料名称") & cdr("型号规格")
                dic_wl(sstr) -= cdr("结构用料")
            Next
            dr("生产数量") += 1
            canloop = False
        End If
    Next
Loop


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


加好友 发短信
等级:童狐 帖子:294 积分:3478 威望:0 精华:0 注册:2013/4/9 19:12:00
  发帖心情 Post By:2017/8/17 13:44:00 [只看该作者]

图片点击可在新窗口打开查看,没得这么复杂,有点思路了,谢谢

 回到顶部