以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何根据物料库存和bom表,计算每种物料分别可以生产多少产品  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105336)

--  作者:gryy
--  发布时间:2017/8/17 10:40:00
--  如何根据物料库存和bom表,计算每种物料分别可以生产多少产品
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


--  作者:有点甜
--  发布时间:2017/8/17 10:47:00
--  

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

 

 请请理清自己的逻辑。


--  作者:gryy
--  发布时间:2017/8/17 10:55:00
--  
领导的要这样的表,就是每种物料按bom里的用量,可以生产多少,单独算,比如3样产品,同时用到3个物料,要求生成一个表a物料分3行,分别可以生产多少产品,b物料分3行,分别可以生产多少产品,一共9行,这些物料是近效期的,把这个生成的表发给销售选择,要求什么,就生产什么,大概就是这个意思
--  作者:有点甜
--  发布时间:2017/8/17 10:56:00
--  

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

 

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

 

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

 


--  作者:有点甜
--  发布时间: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
--  发布时间:2017/8/17 13:44:00
--  
图片点击可在新窗口打开查看,没得这么复杂,有点思路了,谢谢