以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何在本表中根据条件进行数据引用?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192056)

--  作者:hrw68529
--  发布时间:2024/5/27 8:13:00
--  [求助]如何在本表中根据条件进行数据引用?
如下图:本表中的逻辑关系为:本期结余资金=上期结余资金-门诊金额-住院金额
现在想实现的目标是:当新增一行时,根据年度、月份(以月份为一个计算周期)、单位代码,上期结余资金引用本单位上个月的本期结余资金。如果跨年度,下年度的1月份的“上期结余资金”引用上一年度本单位的12月份的“本期结余资金"。如何实现,请专家给指导,谢谢。另外,如果在本月中,一个单位有多笔数据,下个月数据引用时,要以上个月最后一笔的“本期结余资金”进行引用。

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

[此贴子已经被作者于2024/5/27 8:19:48编辑过]

--  作者:有点蓝
--  发布时间:2024/5/27 8:41:00
--  
参考:http://www.foxtable.com/webhelp/topics/2136.htm
--  作者:hrw68529
--  发布时间:2024/5/27 10:14:00
--  
有点蓝,下述代码,当第一行的”上期结余资金“输入数字时,自动变为0,怎么修改,请指导

DataColChanged事件代码:

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("上期结余资金") - 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)("本期结余资金") 
            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("上期结余资金") - 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)("本期结余资金") 
                    drs(i)("本期结余资金") = drs(i-1)("本期结余资金") + drs(i)("上期结余资金") - drs(i)("门诊金额")- drs(i)("住院金额")
                Next
            End If
        End If
End Select

表事件DataRowDeleting的代码:

e.DataRow("本期结余资金") = 0
e.DataRow("门诊金额") = 0
e.DataRow("住院金额") = 0

表事件AfterMoveRow的代码:

Dim Key As Decimal
Dim Index As Integer
Dim Filter As String
Dim r As Row
Index = Math.Min(e.OldIndex, e.NewIndex)
Key = e.Table.Rows(Index)("_SortKey")
r = e.Table.Rows(e.NewIndex)
Filter = "[_SortKey] >= " & Key & " And [单位代码] = \'" & r("单位代码") & "\'"
e.Table.DataTable.DataCols("上期结余资金").RaiseDataColChanged(Filter)
[此贴子已经被作者于2024/5/27 10:15:19编辑过]

--  作者:有点蓝
--  发布时间:2024/5/27 10:42:00
--  
        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("上期结余资金") - mr("门诊金额")- mr("住院金额")
            dr = mr
        End If

--  作者:hrw68529
--  发布时间:2024/5/27 17:56:00
--  
谢谢