以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  用料按照顺序分配  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192049)

--  作者:nuoyan89
--  发布时间:2024/5/26 11:47:00
--  用料按照顺序分配
老师,我有两个表,一个库存表窗口表如图库存表(表名:用料分配_表A,独立)这个窗口表中的所有列名全部是新增的临时列,一个是配件需求明细如图配件需求明细(这个也是窗口表),我在库存表这个窗口的控件设置了代码,我点击这个控件时,分配条件:把选中的材料,根据优先顺序进行分配,分配过程中,1、优先顺序为1时,如库存表中的可用数量大于配件需求明细中的未发数量,挂标数量为未发数量,如可用数量小于不等于0,挂标数量等于可用数量,2、优先顺序为2时,如可用数量-优先顺序为1里的挂标数量大于优先顺序2中的未发数量,该挂标数量为可用数量-优先顺序为1里的挂标数量,如结果小于不等于0,挂标数量等于该相减的结果;以此类推如附件表格。

图片点击可在新窗口打开查看此主题相关图片如下:配件需求明细.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:库存表.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:物资分配表.xlsx



--  作者:nuoyan89
--  发布时间:2024/5/26 11:51:00
--  
系统中窗口表中的图片

图片点击可在新窗口打开查看此主题相关图片如下:分配.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2024/5/26 20:25:00
--  
请上传实例测试
--  作者:nuoyan89
--  发布时间:2024/5/26 21:53:00
--  
操作步骤:打开《配件需求明细》窗口,在需要操作的行前面打勾,点击控件”欠料明细“。会打开“欠料需求表”窗口表,点击控件“用料分配”,然后把可用数量按照材料编码、优先顺序在配件《需求明细_明细查询》窗口表中分配给选中的行,数量指定到《需求明细_明细查询》的挂标数量列
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar


--  作者:有点蓝
--  发布时间:2024/5/26 22:55:00
--  
1、哪个是库存表?
2、如下图,材料编码02025920有14行,如果只勾选第一行,然后点击”欠料明细“,最后分配的时候,是只处理勾选的第一行,还是这14行全部都要处理?

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


--  作者:nuoyan89
--  发布时间:2024/5/26 23:27:00
--  
老师,只处理勾选的那一行!库存表就是配件需求明细窗口中点击控件欠料明细后计算出来的可用数量就是需要做分配的库存,其实这个帖子里就是算库存的http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=192048
[此贴子已经被作者于2024/5/26 23:29:50编辑过]

--  作者:有点蓝
--  发布时间:2024/5/27 9:45:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.zip


--  作者:nuoyan89
--  发布时间:2024/5/27 11:32:00
--  
老师,我把代码改了下,汇总的结果如图2,编码02020687 在途数量:2100,分配到配件需求明细_明细查询窗口表中,这个编码优先顺序5的挂标数量应该为:196,但是实际分配出来的数据确为469了,优先顺序6的挂标数量应该为:0,但是实际分配出来的数据确为384了.请帮忙看看,谢谢
If Forms("配件需求明细").Opened Then
    For Each r As Row In Tables("配件需求明细_明细查询").GetCheckedRows
        Dim dr As DataRow = DataTables("欠料需求表_需求表").Find("材料编码=\'" & r("材料编码") & "\'")
        If dr IsNot Nothing Then
            If r("优先顺序") = "1" Then \'优先顺序为1时
                If dr("在途数量") >= r("未发数量") Then
                    r("挂标数量") = r("未发数量") \'如库存表中的可用数量大于配件需求明细中的未发数量,挂标数量为未发数量
                ElseIf dr("在途数量") <= 0 Then
                    r("挂标数量") = 0 \'如可用数量小于不等于0,挂标数量等于可用数量
                End If
            Else
                Dim dr2 As DataRow = DataTables("配件需求明细_明细查询").find("材料编码=\'" & r("材料编码") & "\' and 优先顺序=\'" & Val(r("优先顺序") - 1) & "\'") \'查找上一个优先顺序
                If dr2 IsNot Nothing Then
                    If (dr("在途数量") - dr2("挂标数量")) > 0 And (dr("在途数量") - dr2("挂标数量")) >= r("未发数量") Then \'如可用数量-优先顺序为1里的挂标数量大于优先顺序2中的未发数量
                        r("挂标数量") = r("未发数量") \'该挂标数量为可用数量-优先顺序为1里的挂标数量
                    ElseIf (dr("在途数量") - dr2("挂标数量")) > 0 And (dr("在途数量") - dr2("挂标数量")) < r("未发数量")  Then \'如结果小于不等于0
                        r("挂标数量") = dr("在途数量") - dr2("挂标数量") \'挂标数量等于该相减的结果
                    ElseIf (dr("在途数量") - dr2("挂标数量")) <= 0  And  r("未发数量") > 0  Then \'如结果小于不等于0
                        r("挂标数量") = 0 \'挂标数量等于该相减的结果
                    End If
                End If 
            End If 
        End If 
    Next 
End If

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


--  作者:有点蓝
--  发布时间:2024/5/27 11:47:00
--  
按1楼说的额分配方式,是没有问题的,因为计算符合下面条件

                    If (dr("在途数量") - dr2("挂标数量")) > 0 And (dr("在途数量") - dr2("挂标数量")) >= r("未发数量") Then \'如可用数量-优先顺序为1里的挂标数量大于优先顺序2中的未发数量
                        r("挂标数量") = r("未发数量") \'该挂标数量为可用数量-优先顺序为1里的挂标数量
                    ElseIf (dr("在途数量") - dr2("挂标数量")) > 0 And (dr("在途数量") - dr2("挂标数量")) < r("未发数量")  Then \'如结果小于不等于0
                        r("挂标数量") = dr("在途数量") - dr2("挂标数量") \'挂标数量等于该相减的结果
                    ElseIf (dr("在途数量") - dr2("挂标数量")) <= 0  And  r("未发数量") > 0  Then \'如结果小于不等于0
                        r("挂标数量") = 0 \'挂标数量等于该相减的结果
                    End If

有问题也是您自己的业务逻辑搞错了
[此贴子已经被作者于2024/5/27 11:48:49编辑过]

--  作者:nuoyan89
--  发布时间:2024/5/27 13:24:00
--  
那请老师再帮忙看看,问题描述如8楼,谢谢

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