Foxtable(狐表)用户栏目专家坐堂 → [求助]流水账


  共有4957人关注过本帖树形打印复制链接

主题:[求助]流水账

帅哥哟,离线,有人找我吗?
lgj716330
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
[求助]流水账  发帖心情 Post By:2022/4/15 20:40: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("理财账户名称") & "' And [理财产品名称] = '" & mr("理财产品名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("当前持有金额") = mr("买入本金") - mr("赎回本金")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [理财账户名称] = '" & mr("理财账户名称") & "' And [理财产品名称] = '" & mr("理财产品名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("当前持有金额") = drs(i-1)("当前持有金额") + drs(i)("买入本金") - drs(i)("赎回本金")
        Next
        If (e.DataCol.Name = "理财账户名称" OrElse e.DataCol.Name = "理财产品名称") AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [理财账户名称] = '" & e.OldValue & "' And [理财产品名称] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[理财账户名称] = '" & e.OldValue & "' And [理财产品名称] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("当前持有金额") = dr("买入本金") - dr("赎回本金")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [理财账户名称] = '" & dr("理财账户名称") & "' And [理财产品名称] = '" & dr("理财产品名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("当前持有金额") = drs(i-1)("当前持有金额") + drs(i)("买入本金") - drs(i)("赎回本金")
                Next
            End If
        End If
End Select

上面标黄处是不是写得有问题

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 9:50:00 [显示全部帖子]

下面标黄处提示“无法在 System.DateTime 和 System.String 上执行“=”操作。”

Dim bjs As List(Of String()) = DataTables("公司理财项目明细账").GetValues("理财账户名称|理财产品名称|日期")
    For Each bj As String() In bjs
        Dim drs As List(Of DataRow) = DataTables("公司理财项目明细账").Select("[理财账户名称] = '" & bj(0) & "' and [理财产品名称] = '" & bj(1) & "' and [日期] = '" & bj(2) & "'", "理财账户名称,理财产品名称,日期")
        For n As Integer = 0 To drs.Count - 1
            Dim dn As Date = drs(n)("日期")
            Dim tp1 As TimeSpan = Date.Today - dn
            If n > 0 Then
                Dim dn1 As Date = drs(n-1)("日期")
                Dim tp As TimeSpan = dn - dn1
                If drs(n)("日期") > drs(n-1)("日期") And drs(n)("当前持有金额")<>0 Then
                    drs(n-1)("当前金额持有天数") = tp
                    drs(n)("当前金额持有天数") = tp1
                ElseIf drs(n)("日期") > drs(n-1)("日期") And drs(n)("当前持有金额")=0 Then
                    drs(n-1)("当前金额持有天数") = tp
                    drs(n)("当前金额持有天数") = Nothing
                End If
            ElseIf n=0 Then
                drs(n)("当前金额持有天数") = tp1
            End If
        Next
    Next

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 10:34:00 [显示全部帖子]

这样会提示
表达式包含无效的日期常量“##”
[此贴子已经被作者于2022/4/16 10:34:09编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 10:39:00 [显示全部帖子]

哦,大概知道怎么回事了,发现日期列有空值

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 11:44:00 [显示全部帖子]

Select Case e.DataCol.Name 
    Case "买入日期","赎回日期"
    If e.DataRow.IsNull("买入日期")=False Then
        e.DataRow("日期") =  e.DataRow("买入日期") 
    ElseIf e.DataRow.IsNull("赎回日期")=False Then
        e.DataRow("日期") =  e.DataRow("赎回日期") 
    End If
End Select

Select Case e.DataCol.Name
    Case "理财账户名称","理财产品名称","日期"
    If e.DataRow.Isnull("日期") =False Then
        Dim bjs As List(Of String()) = DataTables("公司理财项目明细账").GetValues("理财账户名称|理财产品名称|日期")
        For Each bj As String() In bjs
            Dim drs As List(Of DataRow) = DataTables("公司理财项目明细账").Select("[理财账户名称] = '" & bj(0) & "' and [理财产品名称] = '" & bj(1) & "' and [日期] = '" & bj(2) & "'", "理财账户名称,理财产品名称,日期")
            For n As Integer = 0 To drs.Count - 1
                Dim dn As Date = drs(n)("日期")
                Dim da As Date = Date.Today
                Dim tp1 As TimeSpan = da - dn
                If n > 0 Then
                    Dim dn1 As Date = drs(n-1)("日期")
                    Dim tp As TimeSpan = dn - dn1
                    If drs(n)("日期") > drs(n-1)("日期") And drs(n)("当前持有金额")<>0 Then
                        drs(n-1)("当前金额持有天数") = tp
                        drs(n)("当前金额持有天数") = tp1
                    ElseIf drs(n)("日期") > drs(n-1)("日期") And drs(n)("当前持有金额")=0 Then
                        drs(n-1)("当前金额持有天数") = tp
                        drs(n)("当前金额持有天数") = Nothing
                    End If
                ElseIf n=0 Then
                    drs(n)("当前金额持有天数") = tp1
                End If
            Next
        Next
    End If
End Select

提示:参数“Expression”无法转换为类型“TimeSpan”。

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 14:40:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "理财账户产品名称","日期"
    If e.DataRow.Isnull("日期") =False Then
        Dim bjs As List(Of String()) = DataTables("公司理财项目明细账").GetValues("理财账户产品名称|日期")
        For Each bj As String() In bjs
            Dim drs As List(Of DataRow) = DataTables("公司理财项目明细账").Select("[理财账户产品名称] = '" & bj(0) & "' and [日期] = '" & bj(1) & "'", "理财账户产品名称,日期")
            For n As Integer = 0 To drs.Count - 1
                If n > 0 Then
                    Dim dn As Date = drs(n)("日期")
                    Dim dn1 As Date = drs(n-1)("日期")
                    Dim da As Date = Date.Today
                    Dim tp As TimeSpan = dn - dn1
                    Dim tp1 As TimeSpan = da - dn
                    If drs(n)("当前持有金额")<>0 Then 
                        drs(n-1)("当前金额持有天数") = tp.TotalDays
                        drs(n)("当前金额持有天数") = tp1.TotalDays
                    ElseIf drs(n)("当前持有金额")=0 Then 
                        drs(n)("当前金额持有天数") = tp.TotalDays
                        drs(n)("当前金额持有天数") = Nothing
                    End If
                ElseIf n=0 Then
                    Dim dn As Date = drs(n)("日期")
                    Dim da As Date = Date.Today
                    Dim tp1 As TimeSpan = da - dn
                    drs(n)("当前金额持有天数") = tp1.TotalDays
                End If
            Next
        Next
    End If
End Select

上述出来的是"当前金额持有天数"的结果,想实现“正确”列中这样的结果,要怎么调整

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


[此贴子已经被作者于2022/4/16 15:29:38编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lgj716330
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/4/16 16:25:00 [显示全部帖子]

针对同一个理财产品,
1、如果只有一条记录,当前记录的当前金额持有天数=今天的日期-当前记录日期
2、如果有多条记录,
    A、如果不是最后一条记录,当前记录的当前金额持有天数=后一条记录日期-当前记录日期
    B、如果是最后一条记录
        如果最后一条记录的”当前持有金额“不是0,则最后一条记录的当前金额持有天数=今天的日期-最后一条记录的日期
        如果最后一条记录的”当前持有金额“是0,则最后一条记录的当前金额持有天数=空


 回到顶部