以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于高效的流水帐设计,如果计算时考虑到到有未加载的数据时,应该如何处理?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=85694)

--  作者:yankunhao
--  发布时间:2016/6/1 9:48:00
--  关于高效的流水帐设计,如果计算时考虑到到有未加载的数据时,应该如何处理?

         关于高效的流水帐设计,如果计算时考虑到到有未加载的数据时,应该如何处理?

         我用如下这样的代码,发现不行,请问应该要如何做才可以呢?求大家帮忙看看。

  

            Dim dr1 As DataRow
            Dim mr As DataRow = e.DataRow
            Dim drs As List(of DataRow)
           
            If mr.IsNull("盘点数") = False Then
                mr("物料需求结存数量") = mr("盘点数")+ mr("物料进货数量") - mr("物料需求数量")
                dr1 = mr
            Else
                dr1 = e.DataTable.SQLFind("[_SortKey] < " & mr("_SortKey") & " And [材料编码] = \'" & mr("材料编码") & "\'", "[_SortKey] Desc")
               
                If dr1 Is Nothing Then
                    mr("物料需求结存数量") = mr("物料进货数量") - mr("物料需求数量")
                    dr1 = mr
                   
                End If
            End If
            drs = e.DataTable.SQLSelect("[_SortKey] >= " & dr1("_SortKey") & " And [材料编码] = \'" & dr1("材料编码") & "\'", "[_SortKey]")
            For i As Integer = 1 To drs.Count - 1
                drs(i)("物料需求结存数量") = drs(i-1)("物料需求结存数量") + drs(i)("物料进货数量") - drs(i)("物料需求数量")
            Next
            e.DataTable.SQLUpdate(drs)
            e.DataTable.Load
           
            If e.DataCol.Name = "材料编码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
                dr1 = e.DataTable.SQLFind("[_SortKey] < " & mr("_SortKey") & " And [材料编码] = \'" & e.OldValue & "\'", "[_SortKey] Desc")
                If dr1 Is Nothing Then
                    dr1 = e.DataTable.SQLFind("[材料编码] = \'" & e.OldValue & "\'", "[_SortKey]")
                    If dr1 IsNot Nothing And dr1.IsNull("盘点数") = False Then
                        dr1("物料需求结存数量") = dr1("盘点数") + dr1("物料进货数量") - dr1("物料需求数量")
                    ElseIf dr1 IsNot Nothing And dr1.IsNull("盘点数") = True Then
                        dr1("物料需求结存数量") = dr1("物料进货数量") - dr1("物料需求数量")
                    End If
                End If
               
                If dr1 IsNot Nothing Then
                    drs = e.DataTable.SQLSelect("[_SortKey] >= " & dr1("_SortKey") & " And [材料编码] = \'" & dr1("材料编码") & "\'", "[_SortKey]")
                    For i As Integer = 1 To drs.Count - 1
                        drs(i)("物料需求结存数量") = drs(i-1)("物料需求结存数量") + drs(i)("物料进货数量") - drs(i)("物料需求数量")
                    Next
                    e.DataTable.SQLUpdate(drs)
                    e.DataTable.Load
                   
                End If
            End If


--  作者:大红袍
--  发布时间:2016/6/1 9:49:00
--  

参考

 

http://www.foxtable.com/help/topics/2926.htm

 

 


--  作者:yankunhao
--  发布时间:2016/6/1 9:52:00
--  

在重置“材料编码”时出现下列提示: 


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

--  作者:大红袍
--  发布时间:2016/6/1 10:02:00
--  

不是你那样写代码的啊。

 

看2楼,不会做,上传具体实例。


--  作者:yankunhao
--  发布时间:2016/6/1 10:16:00
--  
以下是引用大红袍在2016/6/1 10:02:00的发言:

不是你那样写代码的啊。

 

看2楼,不会做,上传具体实例。

我的数据关系一时之间做不出完整的例子,能帮我远程看下吗?

 

且我没有考虑到到分页加载,我需要的是明细表里可以多人同时增加数据,他们在增加数据时,可能这个产品在明细表里之前就有保存了一些历史数据。

 

[此贴子已经被作者于2016/6/1 10:19:52编辑过]

--  作者:大红袍
--  发布时间:2016/6/1 10:18:00
--  
 看2楼的代码去做。