Foxtable(狐表)用户栏目专家坐堂 → 分页加载与流水账余额计算问题


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

主题:分页加载与流水账余额计算问题

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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
分页加载与流水账余额计算问题  发帖心情 Post By:2019/10/21 23:44:00 [只看该作者]

设计了分页加载树,计算应收、应付、承兑的余额,代码如下,下载的问题是点击不同的年份都会重新开始计算,没法累加之前年份的数据。
以下内容为程序代码:

1 Select Case e.DataCol.Name
2 Case "单位","日期","应收增加","应收减少","应付增加","应付减少","承兑增加","承兑减少","应收结清","应付结清"
3 Dim dr As DataRow
4 Dim mr As DataRow = e.DataRow
5 Dim drs As List(of DataRow)
6 Dim y As Integer = Date.Today.Year
7 Dim m As Integer = Date.Today.Month
8 Dim dt1 As New Date(y, m, 1)
9 Dim dt2 As New Date(y, m, Date.DaysInMonth(y, m)) '获取本月的最后一天
10 Dim jk As Integer
11 Dim ck As Integer
12 Dim jk1 As Integer
13 Dim ck1 As Integer
14 Dim jk2 As Integer
15 Dim ck2 As Integer
16 dr = DataTables("应收应付").Find("[日期] < '" & mr("日期") & "' And [单位] = '" & mr("单位") & "' and 冲红 = 0", "日期 Desc")
17 If dr Is Nothing Then '如果是第一行,计算结存
18 jk = DataTables("应收应付").SQLCompute("Sum(承兑增加)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
19 ck = DataTables("应收应付").SQLCompute("Sum(承兑减少)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
20 mr("cdlj") = e.DataRow("承兑增加") - e.DataRow("承兑减少") + jk - ck
21 jk1 = DataTables("应收应付").SQLCompute("Sum(应收增加)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
22 ck1 = DataTables("应收应付").SQLCompute("Sum(应收减少)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
23 mr("yslj") = e.DataRow("应收增加") - e.DataRow("应收减少") + jk1 - ck1
24 jk2 = DataTables("应收应付").SQLCompute("Sum(应付增加)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
25 ck2 = DataTables("应收应付").SQLCompute("Sum(应付减少)","日期 < " & mr("日期") & " And 单位 = '" & mr("单位") & "'and 冲红 = 0")
26 mr("yflj") = e.DataRow("应付增加") - e.DataRow("应付减少") + jk2 - ck2
27 dr = mr
28 End If
29 drs = e.DataTable.Select("[日期] >= '" & dr("日期") & "' And [单位] = '" & dr("单位") & "'and 冲红 = 0", "日期")
30 For i As Integer = 1 To drs.Count - 1
31 drs(i)("cdlj") = drs(i-1)("cdlj") + drs(i)("承兑增加") - drs(i)("承兑减少")
32 drs(i)("yslj") = drs(i-1)("yslj") + drs(i)("应收增加") - drs(i)("应收减少")
33 drs(i)("yflj") = drs(i-1)("yflj") + drs(i)("应付增加") - drs(i)("应付减少")
34 Next
35 If e.DataCol.Name = "单位" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then '如果修改的是单位列
36 dr = e.DataTable.Find("[日期] < '" & mr("日期") & "' And [单位] = '" & e.OldValue & "' and 冲红 = 0", "日期 Desc") '找出旧单位的上一行
37 If dr Is Nothing Then '如果不存在上一行,那么本行就是旧单位的第一行,由于已经被修改为新单位,需要找出旧单位现在的第一行
38 dr = e.DataTable.Find("[单位] = '" & e.OldValue & "' and 冲红 = 0", "日期") '找出旧单位现在的第一行
39 If dr IsNot Nothing Then '如果找到,计算yslj
40 jk = DataTables("应收应付").SQLCompute("Sum(承兑增加)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
41 ck = DataTables("应收应付").SQLCompute("Sum(承兑减少)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
42 jk1 = DataTables("应收应付").SQLCompute("Sum(应收增加)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
43 ck1 = DataTables("应收应付").SQLCompute("Sum(应收减少)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
44 jk2 = DataTables("应收应付").SQLCompute("Sum(应付增加)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
45 ck2 = DataTables("应收应付").SQLCompute("Sum(应付减少)","日期 < " & mr("日期") & " And 单位 = '" & e.OldValue & "' and 冲红 = 0")
46 dr("cdlj") = dr("承兑增加") - dr("承兑减少") + jk - ck
47 dr("yslj") = dr("应收增加") - dr("应收减少") + jk1 - ck1
48 dr("yflj") = dr("应付增加") - dr("应付减少") + jk1 - ck1
49 End If
50 End If
51 If dr IsNot Nothing Then
52 drs = e.DataTable.Select("[日期] >= '" & dr("日期") & "' And [单位] = '" & dr("单位") & "' and 冲红 = 0", "日期")
53 For i As Integer = 1 To drs.Count - 1
54 drs(i)("cdlj") = drs(i-1)("cdlj") + drs(i)("承兑增加") - drs(i)("承兑减少")
55 drs(i)("yslj") = drs(i-1)("yslj") + drs(i)("应收增加") - drs(i)("应收减少")
56 drs(i)("yflj") = drs(i-1)("yflj") + drs(i)("应付增加") - drs(i)("应付减少")
57 Next
58 End If
59 End If

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


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
  发帖心情 Post By:2019/10/22 0:17:00 [只看该作者]

Aftelload 事件的代码如下
以下内容为程序代码:

1 Dim drs As New List(of DataRow)
2 For Each nm As String In e.DataTable.GetValues("单位") '找出每个产品的第一行数据, 添加到集合drs中
3 drs.Add(e.DataTable.Find("单位 = '" & nm & "' and 冲红 = 0", "[日期]"))
4 Next
5 For Each r As DataRow In drs
6 e.DataTable.DataCols("应收增加").RaiseDataColChanged(r)
7 Next


 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111409 积分:567115 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/22 9:48:00 [只看该作者]

请上传实例测试。

 回到顶部