Foxtable(狐表)用户栏目专家坐堂 → [求助求


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

主题:[求助求

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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/23 21:58:00 [只看该作者]

老师,我增加了个层次在这个表中,如图:

 

当它的父层中的MissingQty列不是0,是负数时,说明缺料。

那么它下面的第1层物料的stock和QC 列就从库存表和待检产品表中去找库存数量进行分配。如果有库存就获得但不能大于 MissingQty乘以BOM用量的值。

如 1.1.AB_000064_AC 库存表中有 6,它的上层MissingQty 是-2 乘以BOM用量 1 等于 -2,转换成正数量 乘以 -1 ,得2,所以列stock就分配 2。

如 2.AB_000065_AC  库存表中有 5,它的上层MissingQty 是-2 乘以BOM用量 2 等于 -4,转换成正数量 乘以 -1 ,得4,所以列stock就分配 4。

如 2.AB_000099_AR  库存表中有 3,待检产品表中有库存 6, 它的上层MissingQty 是-4 乘以BOM用量 1 等于 -4,转换成正数量 乘以 -1 ,得4,所以列stock就分配 3,库存用完,不够。再从待检产品表中取出1,所以列QC 值是1

 

谢谢。

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


图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2019/7/23 21:58:40编辑过]

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


加好友 发短信
等级:超级版主 帖子:106152 积分:539877 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/24 10:15:00 [只看该作者]


[此贴子已经被作者于2019/7/24 10:15:19编辑过]

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


加好友 发短信
等级:超级版主 帖子:106152 积分:539877 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/24 12:17:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:tempd(1).zip


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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/24 14:03:00 [只看该作者]

蓝老师,真心感谢您的帮助。

 

实在不好意思。这个红色的圈出来的结果应是 空白的,因为它的上层是第一层 2.AR_0000065_AC, 是根据它的MissingQty的值乘以BOM用量,然后查库存表和待检产品表后进行库存分配。请老师再优化一下。

 

这儿,再次谢谢蓝老师。给我们的工作带来了方便!


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

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


加好友 发短信
等级:超级版主 帖子:106152 积分:539877 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/24 15:16:00 [只看该作者]

Dim pn As String = args(0)
Dim qty As String = args(1)
Dim idx As Integer = args(8)
Dim dic1 = vars("dic1")
Dim dic2 = vars("dic2")
Dim dic3 = vars("dic3")
Dim dic4 = vars("dic4")
Dim m1 As Integer = args(9)
For Each dr As DataRow In  DataTables("BOM").Select("FNumber='" & pn & "'")
    Dim ndr As DataRow = DataTables("物料需求").AddNew
    ndr("PartNo") = dr("PN")
    ndr("Date") = args(3)
    ndr("批号") = args(4)
    ndr("Demand") = dr("FQty") * qty
    ndr("层次") = "第" & idx & "层"
    Dim mq As Integer = m1 * dr("FQty")
    Dim m2 As Integer = args(6)+  args(7) - qty
    Dim flag = args(5) And m1 < 0
    If flag AndAlso m2 < 0 Then
        If dic1.ContainsKey(ndr("PartNo")) Then
            If m1 < 0 Then
                Dim aa As Integer = mq*-1
                If dic1(ndr("PartNo")) >= aa Then
                    ndr("Stock") = aa
                Else
                    ndr("Stock") = dic1(ndr("PartNo"))
                    If dic2.ContainsKey(ndr("PartNo")) Then
                        If dic2(ndr("PartNo")) > aa - dic1(ndr("PartNo"))
                            ndr("QC") = aa - dic1(ndr("PartNo"))
                        Else
                            ndr("QC") = dic2(ndr("PartNo"))
                        End If
                        dic2(ndr("PartNo")) -= ndr("QC")
                    End If
                End If
                flag = False
            ElseIf dic1(ndr("PartNo")) > 0 Then
                ndr("Stock") = dic1(ndr("PartNo"))
            End If
            dic1(ndr("PartNo")) -= ndr("Stock")
        End If
    End If
    If flag = True Then
        If dic2.ContainsKey(ndr("PartNo")) Then
            Dim qty1 = ndr("Demand") - ndr("stock")
            If qty1 > 0 Then
                If dic2(ndr("PartNo")) >= qty1 Then
                    ndr("QC") = qty1
                    dic2(ndr("PartNo")) -= ndr("QC")
                ElseIf dic2(ndr("PartNo")) > 0 Then
                    ndr("QC") = dic2(ndr("PartNo"))
                    dic2(ndr("PartNo")) -= ndr("QC")
                End If
            End If
        End If
    End If
    
    
    
    If flag = True Then
        
        If dic3.ContainsKey(ndr("PartNo")) Then
            Dim qty2 = ndr("Demand") - ndr("stock") - ndr("QC")
            If qty2 > 0 Then
                If dic3(ndr("PartNo")) >= qty2 Then
                    ndr("purchasingorder") = qty2
                    
                    
                    dic3(ndr("PartNo")) -= ndr("purchasingorder")
                ElseIf dic3(ndr("PartNo")) > 0 Then
                    ndr("purchasingorder") = dic3(ndr("PartNo"))
                    dic3(ndr("PartNo")) -= ndr("purchasingorder")
                End If
            End If
            
        End If
    End If
    
    If args(5) = True AndAlso m1 >= 0 Then
        ndr("MissingQty") =  ndr("Stock")+ndr("QC") -ndr("Demand")+args(6)*dr("FQty")
    Else
        If m1 < 0 AndAlso mq*-1 > ndr("Stock")+ndr("QC")
            ndr("MissingQty") = mq + (ndr("Stock")+ndr("QC"))
        Else
            ndr("MissingQty") = 0
        End If
        
    End If
    If dic4.ContainsKey(ndr("PartNo")) = False Then
        dic4.add(ndr("PartNo"), ndr("MissingQty"))
    Else
        dic4(ndr("PartNo")) += ndr("MissingQty")
    End If
    ndr("SumMissing") = dic4(ndr("partno"))
    Functions.Execute("sumChild",dr("PN"),ndr("Demand"), args(2), args(3), args(4), flag, ndr("Stock"),ndr("QC"),idx+1,ndr("MissingQty"))
Next

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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/24 18:42:00 [只看该作者]

蓝老师,好!

 

刚刚测试了下,如图,还有几处地方不对。再麻烦老师出手一下了。附上实例。

 

错误1 , 第1层 QC列 没有像stock列一样,圈出的5 ,这分配的数量不能大于 missingqty 乘以BOM的用量

错误2, 第2层的缺料数量不对,它的上层missingqty 是-2, 下层有库存的话,就可以分配到数量。

 

谢谢蓝老师。

 


图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:tempd(1).foxdb


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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/25 12:38:00 [只看该作者]

麻烦老师再指导一下。谢谢。

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


加好友 发短信
等级:超级版主 帖子:106152 积分:539877 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/7/25 14:59:00 [只看该作者]

Dim pn As String = args(0)
Dim qty As String = args(1)
Dim idx As Integer = args(8)
Dim dic1 = vars("dic1")
Dim dic2 = vars("dic2")
Dim dic3 = vars("dic3")
Dim dic4 = vars("dic4")
Dim m1 As Integer = args(9)
For Each dr As DataRow In  DataTables("BOM").Select("FNumber='" & pn & "'")
    Dim ndr As DataRow = DataTables("物料需求").AddNew
    ndr("PartNo") = dr("PN")
    ndr("Date") = args(3)
    ndr("批号") = args(4)
    ndr("Demand") = dr("FQty") * qty
    ndr("层次") = "第" & idx & "层"
    Dim mq As Integer = m1 * dr("FQty")
    Dim m2 As Integer = args(6)+  args(7) - qty
    Dim flag = args(5) ' And m1 < 0
    
    'If flag AndAlso m2 < 0 Then
    If dic1.ContainsKey(ndr("PartNo")) Then
        If m1 < 0 Then
            Dim aa As Integer = mq*-1
            If dic1(ndr("PartNo")) >= aa Then
                ndr("Stock") = aa
            Else
                ndr("Stock") = dic1(ndr("PartNo"))
            End If
            flag = False
        ElseIf dic1(ndr("PartNo")) > 0 Then
            ndr("Stock") = dic1(ndr("PartNo"))
        End If
        dic1(ndr("PartNo")) -= ndr("Stock")
        If dic1(ndr("PartNo"))<0 Then dic1(ndr("PartNo")) = 0
    End If
    'End If
    If dic2.ContainsKey(ndr("PartNo")) Then
        If flag = True And m1 >= 0 Then
            Dim qty1 = ndr("Demand") - ndr("stock")
            If qty1 > 0 Then
                If dic2(ndr("PartNo")) >= qty1 Then
                    ndr("QC") = qty1
                    dic2(ndr("PartNo")) -= ndr("QC")
                ElseIf dic2(ndr("PartNo")) > 0 Then
                    ndr("QC") = dic2(ndr("PartNo"))
                    dic2(ndr("PartNo")) -= ndr("QC")
                End If
            End If
        ElseIf m1 < 0 Then
                Dim aa As Integer = mq*-1
                If dic2(ndr("PartNo")) > aa - ndr("Stock")
                    ndr("QC") = aa - ndr("Stock")
                Else
                    ndr("QC") = dic2(ndr("PartNo"))
                End If
                dic2(ndr("PartNo")) -= ndr("QC")
        End If
    End If
    
    
    
    If flag = True And m1 >= 0 Then
        
        If dic3.ContainsKey(ndr("PartNo")) Then
            Dim qty2 = ndr("Demand") - ndr("stock") - ndr("QC")
            If qty2 > 0 Then
                If dic3(ndr("PartNo")) >= qty2 Then
                    ndr("purchasingorder") = qty2
                    
                    
                    dic3(ndr("PartNo")) -= ndr("purchasingorder")
                ElseIf dic3(ndr("PartNo")) > 0 Then
                    ndr("purchasingorder") = dic3(ndr("PartNo"))
                    dic3(ndr("PartNo")) -= ndr("purchasingorder")
                End If
            End If
            
        End If
    End If
    
    If flag  = True AndAlso m1 >= 0 Then
        ndr("MissingQty") =  ndr("Stock")+ndr("QC") -ndr("Demand")+args(6)*dr("FQty")
    Else
        If m1 < 0 AndAlso mq*-1 > ndr("Stock")+ndr("QC")
            ndr("MissingQty") = mq + (ndr("Stock")+ndr("QC"))
        Else
            ndr("MissingQty") = 0
        End If
        
    End If
    If dic4.ContainsKey(ndr("PartNo")) = False Then
        dic4.add(ndr("PartNo"), ndr("MissingQty"))
    Else
        dic4(ndr("PartNo")) += ndr("MissingQty")
    End If
    ndr("SumMissing") = dic4(ndr("partno"))
    Functions.Execute("sumChild",dr("PN"),ndr("Demand"), args(2), args(3), args(4), flag, ndr("Stock"),ndr("QC"),idx+1,ndr("MissingQty"))
Next

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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/26 0:07:00 [只看该作者]

蓝老师,那圈出来的又错回来了,它的上层MisssingQty是0的话,第1层圈出来的都应是0,又不对了。还是要麻烦老师了。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:tempd(1).foxdb


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

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


加好友 发短信
等级:三尾狐 帖子:795 积分:5880 威望:0 精华:0 注册:2018/11/3 8:24:00
  发帖心情 Post By:2019/7/26 12:23:00 [只看该作者]

蓝老师,还能帮忙指正这个错误吗?麻烦了。

 回到顶部
总数 37 上一页 1 2 3 4 下一页