Foxtable(狐表)用户栏目专家坐堂 → 跨表统计及判断取值


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

主题:跨表统计及判断取值

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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
跨表统计及判断取值  发帖心情 Post By:2017/9/15 13:04:00 [只看该作者]

 入下图,表c提供抵扣增值税,统计的表A数据,第一期没有问题

前置条件,每个项目都这样计算,用项目编码来区分

1、第二期:提供抵扣增值税怎么在统计的基数上+上一期(第一期)“本期抵扣剩余”

2、第三期:提供抵扣增值税怎么在统计的基数上+上一期(第二期)“本期抵扣剩余”

 

以此类推,可能会出现二十期或更多,这个用代码还是用表达式判断呢?请老师帮忙写一下。附件已上传。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2017/9/15 14:08:44编辑过]

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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2017/9/15 14:18:00 [只看该作者]

知道怎么弄了,代码如下 

Select Case e.DataCol.Name
     Case  "项目编码","本期抵扣剩余","本期应抵扣增值税"
          Dim drs  As  List(of DataRow)
        Dim Filter As String
        Filter =  "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目编码] = '" & e.DataRow("项目编码") & "'"
        drs = e.DataTable.Select(Filter)
        For Each dr As  DataRow  In drs
            Filter =  "[_SortKey] <= " & dr("_SortKey") & " And [项目编码] = '" & dr("项目编码") & "'"
            Dim Val1 As Double = e.DataTable.Compute("Sum(本期抵扣剩余)",Filter)
            Dim Val2 As Double = e.DataTable.Compute("Sum(本期应抵扣增值税)",Filter)
            dr("提供抵扣增值税") = Val1 - Val2
        Next
        If e.DataCol.Name = "项目编码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue  Then
            Filter =  "[_SortKey] > " & e.DataRow("_SortKey") & " And [项目编码] = '" & e.OldValue &  "'"
            drs = e.DataTable.Select(Filter)
            For Each dr As  DataRow  In drs
                Filter =  "[_SortKey] <= " & dr("_SortKey") & " And [项目编码] = '" & dr("项目编码") & "'"
                Dim Val1 As Double = e.DataTable.Compute("Sum(本期抵扣剩余)",Filter)
                Dim Val2 As Double = e.DataTable.Compute("Sum(本期应抵扣增值税)",Filter)
                dr("提供抵扣增值税") = Val1 - Val2
            Next
        End If
 End  Select


[此贴子已经被作者于2017/9/15 14:22:14编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/15 14:25:00 [只看该作者]


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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2017/9/25 14:34:00 [只看该作者]

老师,我补录数据,先录入第3期,在录入第2第,累计出现问题,如下图,(我要得效果是:第2期:累计计量金额:500000,第3期累计计量金额:2358151.5,累计扣款和累计支付也要这个效果,代码怎么修改了:

 


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

 

'累计计量?扣款?支付
Select Case  e.DataCol.Name
    Case  "项目编码","申请金额","本期_累计扣款","实际支付金额",    "企业所得税率","个人所得税基数","个人所得税率","管理费费率" , "手续费","安全保证金","质量保证金","应急保证金","资料保证金","fa piao金额","到账金额","成本fa piao","人工工资","其他费用","抵扣增值税","现金补税","预交增值税","应补增值税","管理费","应扣费用明细_小计","实际支付金额","本期_累计扣款","成本差额税率","成本差额税","扣税明细_小计","成本差额"
        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("实际支付金额")  '("申请金额") - 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-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
            drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + 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("实际支付金额")    ' 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-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
                    drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + drs(i)("实际支付金额")
                Next
            End If
        End If
End Select


[此贴子已经被作者于2017/9/25 14:34:49编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 15:16:00 [只看该作者]

 上传对应实例测试。

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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2017/9/25 15:48:00 [只看该作者]

以下是引用有点甜在2017/9/25 15:16:00的发言:
 上传对应实例测试。

老师,示例已上传,工程款管理是根据工程款申请,提交申请后,引用过去的。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.table


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 15:53:00 [只看该作者]

默认是根据_Sortkey列排序的,你现在想根据期数列排序?

 

'累计计量?扣款?支付
Select Case  e.DataCol.Name
    Case  "项目编码","申请金额","本期_累计扣款","实际支付金额",    "企业所得税率","个人所得税基数","个人所得税率","管理费费率" , "手续费","安全保证金","质量保证金","应急保证金","资料保证金","fa piao金额","到账金额","成本fa piao","人工工资","其他费用","抵扣增值税","现金补税","预交增值税","应补增值税","管理费","应扣费用明细_小计","实际支付金额","本期_累计扣款","成本差额税率","成本差额税","扣税明细_小计","成本差额"
        Dim  dr As  DataRow
        Dim  mr As  DataRow = e.DataRow
        Dim  drs As  List(of DataRow)
        dr = e.DataTable.Find("[计量期数] < " & mr("计量期数") &  " And [项目编码] = '" &  mr("项目编码") &  "'", "[计量期数] Desc")
        If dr Is Nothing Then
            mr("累计_计量金额") = mr("申请金额")
            mr("累计_扣款金额") = mr("本期_累计扣款")
            mr("累计_支付金额") = mr("实际支付金额")  '("申请金额") - mr("本期_累计扣款")
            dr = mr
        End If
        drs = e.DataTable.Select("[计量期数] >= " & dr("计量期数") &  " And [项目编码] = '" &  dr("项目编码") &  "'", "[计量期数]")
        For  i As  Integer = 1 To drs.Count - 1
            drs(i)("累计_计量金额") = drs(i-1)("累计_计量金额") + drs(i)("申请金额")
            drs(i)("累计_扣款金额") = drs(i-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
            drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + drs(i)("实际支付金额")
        Next
        If  e.DataCol.Name = "项目编码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[计量期数] < " & mr("计量期数") &  " And [项目编码] = '" &  e.OldValue &  "'", "[计量期数] Desc")
            If  dr Is Nothing Then
                dr = e.DataTable.Find("[项目编码] = '" & e.OldValue &  "'", "[计量期数]")
                If dr IsNot Nothing Then
                    dr("累计_计量金额") = dr("申请金额")
                    dr("累计_扣款金额") = dr("本期_累计扣款")
                    dr("累计_支付金额") = dr("实际支付金额")    ' dr("申请金额") - dr("本期_累计扣款")
                End If
            End If
            If  dr IsNot Nothing Then
                drs = e.DataTable.Select("[计量期数] >= " & dr("计量期数") &  " And [项目编码] = '" &  dr("项目编码") &  "'", "[计量期数]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计_计量金额") = drs(i-1)("累计_计量金额") + drs(i)("申请金额")
                    drs(i)("累计_扣款金额") = drs(i-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
                    drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + drs(i)("实际支付金额")
                Next
            End If
        End If
End Select


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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2017/9/25 15:56:00 [只看该作者]

对的,我是根据项目编码的期数列排序。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 16:03:00 [只看该作者]

参考7楼代码修改。把_sortkey替换成你的排序列。

[此贴子已经被作者于2017/9/25 16:03:36编辑过]

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


加好友 发短信
等级:狐精 帖子:3205 积分:21299 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2017/9/28 15:09:00 [只看该作者]

以下是引用有点甜在2017/9/25 15:53:00的发言:

默认是根据_Sortkey列排序的,你现在想根据期数列排序?

 

'累计计量?扣款?支付
Select Case  e.DataCol.Name
    Case  "项目编码","申请金额","本期_累计扣款","实际支付金额",    "企业所得税率","个人所得税基数","个人所得税率","管理费费率" , "手续费","安全保证金","质量保证金","应急保证金","资料保证金","fa piao金额","到账金额","成本fa piao","人工工资","其他费用","抵扣增值税","现金补税","预交增值税","应补增值税","管理费","应扣费用明细_小计","实际支付金额","本期_累计扣款","成本差额税率","成本差额税","扣税明细_小计","成本差额"
        Dim  dr As  DataRow
        Dim  mr As  DataRow = e.DataRow
        Dim  drs As  List(of DataRow)
        dr = e.DataTable.Find("[计量期数] < " & mr("计量期数") &  " And [项目编码] = '" &  mr("项目编码") &  "'", "[计量期数] Desc")
        If dr Is Nothing Then
            mr("累计_计量金额") = mr("申请金额")
            mr("累计_扣款金额") = mr("本期_累计扣款")
            mr("累计_支付金额") = mr("实际支付金额")  '("申请金额") - mr("本期_累计扣款")
            dr = mr
        End If
        drs = e.DataTable.Select("[计量期数] >= " & dr("计量期数") &  " And [项目编码] = '" &  dr("项目编码") &  "'", "[计量期数]")
        For  i As  Integer = 1 To drs.Count - 1
            drs(i)("累计_计量金额") = drs(i-1)("累计_计量金额") + drs(i)("申请金额")
            drs(i)("累计_扣款金额") = drs(i-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
            drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + drs(i)("实际支付金额")
        Next
        If  e.DataCol.Name = "项目编码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[计量期数] < " & mr("计量期数") &  " And [项目编码] = '" &  e.OldValue &  "'", "[计量期数] Desc")
            If  dr Is Nothing Then
                dr = e.DataTable.Find("[项目编码] = '" & e.OldValue &  "'", "[计量期数]")
                If dr IsNot Nothing Then
                    dr("累计_计量金额") = dr("申请金额")
                    dr("累计_扣款金额") = dr("本期_累计扣款")
                    dr("累计_支付金额") = dr("实际支付金额")    ' dr("申请金额") - dr("本期_累计扣款")
                End If
            End If
            If  dr IsNot Nothing Then
                drs = e.DataTable.Select("[计量期数] >= " & dr("计量期数") &  " And [项目编码] = '" &  dr("项目编码") &  "'", "[计量期数]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计_计量金额") = drs(i-1)("累计_计量金额") + drs(i)("申请金额")
                    drs(i)("累计_扣款金额") = drs(i-1)("累计_扣款金额") + drs(i)("本期_累计扣款")         '+ drs(i)("申请金额") - drs(i)("本期_累计扣款")
                    drs(i)("累计_支付金额") = drs(i-1)("累计_支付金额") + drs(i)("实际支付金额")
                Next
            End If
        End If
End Select

老师,之前都是对的,现在报错



图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170928150606.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/9/28 15:09:29编辑过]

 回到顶部
总数 14 1 2 下一页