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


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

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

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


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

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

 

 请请理清自己的逻辑。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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,如此循环。

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部