以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  流水账问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=186203)

--  作者:13775189031
--  发布时间:2023/4/12 15:57:00
--  流水账问题
请教老师:下图流水账代码
统计“一次烘焙”的材料没问题,根据代码可实现“烘焙余量”的自动计算
现在增加了“二次烘焙”材料,二次烘焙的材料数量是从“烘焙余量”结转的,但填写烘焙数量后,上一行一次烘焙“烘焙余量”要相应减少,也就是上一行一次烘焙“烘焙余量”是下面一行二次烘焙的库存
代码要怎么修改?

图片点击可在新窗口打开查看

Select Case e.DataCol.Name
    Case "烘焙流水号","烘焙数量_根","领用数量_根","退回数量_根"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [烘焙流水号] = \'" & mr("烘焙流水号") & "\'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("烘焙余量_根") = mr("烘焙数量_根") - mr("领用数量_根") + mr("退回数量_根")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [烘焙流水号] = \'" & dr("烘焙流水号") & "\'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("烘焙余量_根") = drs(i-1)("烘焙余量_根") + drs(i)("烘焙数量_根") - drs(i)("领用数量_根") + drs(i)("退回数量_根")
        Next
        If e.DataCol.Name = "烘焙流水号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [烘焙流水号] = \'" & e.OldValue & "\'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[烘焙流水号] = \'" & e.OldValue & "\'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("烘焙余量_根") = dr("烘焙数量_根") - dr("领用数量_根") + dr("退回数量_根")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [烘焙流水号] = \'" & dr("送检编号") & "\'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("烘焙余量_根") = drs(i-1)("烘焙余量_根") + drs(i)("烘焙数量_根") - drs(i)("领用数量_根") + drs(i)("退回数量_根")
                Next
            End If
        End If
End Select
[此贴子已经被作者于2023/4/12 15:57:52编辑过]

--  作者:有点蓝
--  发布时间:2023/4/12 16:11:00
--  
把次数改为整数型,使用1、2、3、4这种方式记录,不要使用中文,不好处理。

然后把次数加入查询判断条件即可,大概这样

        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [烘焙流水号] = \'" & dr("烘焙流水号") & "\'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
if drs(i)("次数") = drs(i-1)("次数") + 1
drs(i)("烘焙余量_根") = drs(i-1)("烘焙余量_根") 
else
            drs(i)("烘焙余量_根") = drs(i-1)("烘焙余量_根") + drs(i)("烘焙数量_根") - drs(i)("领用数量_根") + drs(i)("退回数量_根")
endif
        Next