代码没有问题,自己的业务逻辑搞错了,先理清自己的业务,符合什么条件,怎么计算才会等于196
这个02020687 优先顺序中总共有6条记录(分别为1-6)未发数量合计:2757,这条欠料明细中汇总的在途数量:2100,按照优先顺序先后中1-4的挂标数量可以等于未发数量,但是到第5的时候,在途数量 -1到4的挂标数量汇总后,只剩下196(计算公式:2100-(280-224-630-770) = 196),因此第5条的挂标数量只能是196,第6条挂标数量则为0,因为这2100已被1至5全部分配完成。
[此贴子已经被作者于2024/5/27 14:16:32编辑过]
自己1楼说的不清不楚,所以代码只是减去4的挂标数量。如果还要减去1、2、3的挂标数量。就找到这些行的数据减去就行了
是的,但是这个优先顺序行数不是固定的,有可能只有1条,或者2条,甚至多的时候会有20来条。这种怎么修改呢?
Dim dr2 As DataRow = DataTables("配件需求明细_明细查询").find("材料编码='" & r("材料编码") & "' and 优先顺序='" & Val(r("优先顺序") - 1) & "'") '查找上一个优先顺序
优先顺序改为整数列,然后使用compute统计所有小于当前优先顺序的行的数量
老师,能帮忙看下12楼代码咋 改吗?研究了下,还是没怎么明白
dim 小于当前顺序的挂标数量之和 as double = DataTables("配件需求明细_明细查询").compute("sum(挂标数量)","材料编码='" & r("材料编码") & "' and 优先顺序<" & r("优先顺序"))
老师,我咋改得不对
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 Double = DataTables("配件需求明细_明细查询").sqlcompute("sum(挂标数量)", "材料编码 ='" & r("材料编码") & "' and 优先顺序 < '" & r("优先顺序") & "'")
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
Next
End If
此主题相关图片如下:1.png
![dvubb 图片点击可在新窗口打开查看](UploadFile/2024-5/202452721234234326.jpg)