Foxtable(狐表)用户栏目专家坐堂 → 查询账


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

主题:查询账

帅哥,在线噢!
有点蓝
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 10:03:00 [只看该作者]

t这个变量名称定义重复了,换个名称使用

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/13 14:41:00 [只看该作者]

我想模仿篡改汇总模式的结果这样做,可它应该同时满足年、月两个条件进行分组统计本年累计数,红色标注的月应怎么加进去?另dr("余额") = current("借方金额")报错,可如果符合条件它的值就应取当前行的借方金额,请教该如何改。
With Tables("三栏式账_Table1")
    For i As Integer = .Rows.count - 1 To 0 Step -1
        .Rows(i).Delete
    Next
End With
Dim t As String
Dim Parts() As String = e.Form.Controls("DropBox1").Value.Split("-")
If Parts.length > 0 Then
    t = Parts(0)
End If
Dim Filter As String
With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        Filter = "会计科目辅助列 = '" & .Value & "'"
    End If
End With
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select 日期,字号,凭证号,摘要,借方金额,贷方金额 fro m {财务数据源} Where Filter"
dt = cmd.ExecuteReader()
'对临时进行分组统计
Dim b As New GroupTableBuilder("统计表",dt)
b.Groups.AddDef("日期",DateGroupEnum.Year,"年")
b.Groups.AddDef("日期",DateGroupEnum.Month,"月")
b.Groups.AddDef("字号")
b.Groups.AddDef("凭证号")
b.Groups.AddDef("摘要")
b.Totals.AddDef("借方金额")
b.Totals.AddDef("贷方金额")
b.Build
Tables("三栏式账_Table1").DataSource = b.BuildDataSource
Dim a As Table = Tables("三栏式账_Table1")
Dim g As Subtotalgroup
a.SubtotalGroups.Clear()

g = New Subtotalgroup
g.GroupOn = "月"
g.TotalOn = "借方金额,贷方金额"
g.Caption = "本月发生额"
a.SubtotalGroups.Add(g)

'g = New Subtotalgroup
'g.GroupOn = "年"
'g.TotalOn = "借方金额,贷方金额"
'g.Caption = "本年累计"
'a.SubtotalGroups.Add(g)
'a.Subtotal()

Dim groups As List(of String) = DataTables("三栏式账_Table1").GetValues("年")
For Each grp As String In groups
    g = New Subtotalgroup
    g.GroupOn = "*"
    g.Caption = "本年累计"
    a.SubtotalGroups.Add(g)
Next
a.Subtotal()

Dim cnt As Integer = Tables("三栏式账_Table1").Rows.Count(True) - groups.count
For Each group As String In groups
    Tables("三栏式账_Table1").Rows(cnt,True)("年") = group
    Tables("三栏式账_Table1").Rows(cnt,True)("借方金额") = DataTables("财务数据源").Compute("Sum(借方金额)","年 = #" & group & "#")
    Tables("三栏式账_Table1").Rows(cnt,True)("贷方金额") = DataTables("财务数据源").Compute("Sum(借方金额)","年 = #" & group & "#")
    cnt = cnt + 1
Next

Tables("三栏式账_Table1").SetColVisibleWidth("日期|60|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60")
Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable
If ckb.DataCols.Contains("借或贷") = False And ckb.DataCols.Contains("余额") = False Then
    ckb.DataCols.add("借或贷", Gettype(String))
    ckb.DataCols.add("余额", Gettype(Double))
End If
With DataTables("三栏式账_Table1")
    Dim dr As DataRow
    Dim drs As List(of DataRow)
    dr = .Find("[_SortKey] < " & Tables("三栏式账_Table1").current("_SortKey"), "[_SortKey] Desc") '找出上一行
    If dr Is Nothing And DataTables("资产").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then '如果没有找到上一行,说明本行就是第一行
        Tables("三栏式账_Table1").current("余额") = Tables("三栏式账_Table1").current("借方金额") - Tables("三栏式账_Table1").current("贷方金额")
        dr("借或贷") = "借"
        dr("余额") = current("借方金额")
    ElseIf dr Is Nothing And (DataTables("负债").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("损益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing) Then
        Tables("三栏式账_Table1").current("余额") = Tables("三栏式账_Table1").current("贷方金额") - Tables("三栏式账_Table1").current("借方金额")
        dr("借或贷") = "贷"
        dr("余额") = current("贷方金额")
    End If
    drs = .Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
    For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
        If DataTables("资产").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then
            drs(i)("借或贷") = "借"
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
        ElseIf DataTables("负债").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("损益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then
            drs(i)("借或贷") = "贷"
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("贷方金额") - drs(i)("借方金额")
        End If
    Next
    If Tables("三栏式账_Table1").Rows.Count < 15 Then
        Tables("三栏式账_Table1").AddNew(15 - Tables("三栏式账_Table1").Rows.Count)
    End If
End With

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


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:10:00 [只看该作者]

current的用法:http://www.foxtable.com/webhelp/topics/0445.htm,不要闭着眼睛用

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/13 17:05:00 [只看该作者]

还是提示它错误,另会计有用红字表示负数,我用红色标注代码就是让负数文本显示红色,问题来了,会计上用红色就已经表示负数,不用再带负号,但软件上用红色只是显示,与计算无关,如不要负号就表示正数,如何使账面上的红色数量或金额就表示负数,不带负号。

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

With Tables("三栏式账_Table1")
    For i As Integer = .Rows.count - 1 To 0 Step -1
        .Rows(i).Delete
    Next
End With
Dim t As String
Dim Parts() As String = e.Form.Controls("DropBox1").Value.Split("-")
If Parts.length > 0 Then
    t = Parts(0)
End If
Dim Filter As String
With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        Filter = "会计科目辅助列 = '" & .Value & "'"
    End If
End With
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select 日期,字号,凭证号,摘要,借方金额,贷方金额 fro m {财务数据源} Where Filter"
dt = cmd.ExecuteReader()
'对临时进行分组统计
Dim b As New GroupTableBuilder("统计表",dt)
b.Groups.AddDef("日期",DateGroupEnum.Year,"年")
b.Groups.AddDef("日期",DateGroupEnum.Month,"月")
b.Groups.AddDef("字号")
b.Groups.AddDef("凭证号")
b.Groups.AddDef("摘要")
b.Totals.AddDef("借方金额")
b.Totals.AddDef("贷方金额")
b.Build
Tables("三栏式账_Table1").DataSource = b.BuildDataSource
Dim a As Table = Tables("三栏式账_Table1")
Dim g As Subtotalgroup
a.SubtotalGroups.Clear()

g = New Subtotalgroup
g.GroupOn = "月"
g.TotalOn = "借方金额,贷方金额"
g.Caption = "本月发生额"
a.SubtotalGroups.Add(g)

'g = New Subtotalgroup
'g.GroupOn = "年"
'g.TotalOn = "借方金额,贷方金额"
'g.Caption = "本年累计"
'a.SubtotalGroups.Add(g)
'a.Subtotal()

Dim groups As List(of String) = DataTables("三栏式账_Table1").GetValues("年")
For Each grp As String In groups
    g = New Subtotalgroup
    g.GroupOn = "*"
    g.Caption = "本年累计"
    a.SubtotalGroups.Add(g)
Next
a.Subtotal()

Dim cnt As Integer = Tables("三栏式账_Table1").Rows.Count(True) - groups.count
For Each group As String In groups
    Tables("三栏式账_Table1").Rows(cnt,True)("年") = group
    Tables("三栏式账_Table1").Rows(cnt,True)("借方金额") = DataTables("财务数据源").Compute("Sum(借方金额)","年 = #" & group & "#")
    Tables("三栏式账_Table1").Rows(cnt,True)("贷方金额") = DataTables("财务数据源").Compute("Sum(借方金额)","年 = #" & group & "#")
    cnt = cnt + 1
Next

Tables("三栏式账_Table1").SetColVisibleWidth("日期|60|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60")
Dim ckb As DataTable = e.Form.Controls("Table1").Table.DataTable
If ckb.DataCols.Contains("借或贷") = False And ckb.DataCols.Contains("余额") = False Then
    ckb.DataCols.add("借或贷", Gettype(String))
    ckb.DataCols.add("余额", Gettype(Double))
End If
With DataTables("三栏式账_Table1")
    Dim dr As DataRow
    Dim drs As List(of DataRow)
    dr = .Find("[_SortKey] < " & Tables("三栏式账_Table1").current("_SortKey"), "[_SortKey] Desc") '找出上一行
    If dr Is Nothing And DataTables("资产").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then '如果没有找到上一行,说明本行就是第一行
        dr("借或贷") = "借"
        If Tables("三栏式账_Table1").Current IsNot Nothing Then
            dr("余额") = current("借方金额")
            If dr("余额") = current("贷方金额") Then
                dr("余额").Style.TextColor = Color.Red
            End If
        End If
    ElseIf dr Is Nothing And (DataTables("负债").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("损益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing) Then
        dr("借或贷") = "贷"
        If Tables("三栏式账_Table1").Current IsNot Nothing Then
            dr("余额") = current("贷方金额")
            If dr("余额") = current("借方金额") Then
                dr("余额").Style.TextColor = Color.Red
            End If
        End If
    End If
    drs = .Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
    For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
        If DataTables("资产").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then
            drs(i)("借或贷") = "借"
            If Tables("三栏式账_Table1").Current IsNot Nothing Then
                drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
                If drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额") < 0 Then
                    drs(i)("余额").Style.TextColor = Color.Red
                End If
            End If
        ElseIf DataTables("负债").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing OrElse DataTables("损益").SQLFind("[科目名称] = '" & t & "'") IsNot Nothing Then
            drs(i)("借或贷") = "贷"
            If Tables("三栏式账_Table1").Current IsNot Nothing Then
                drs(i)("余额") = drs(i-1)("余额") + drs(i)("贷方金额") - drs(i)("借方金额")
                If drs(i-1)("余额") + drs(i)("贷方金额") - drs(i)("借方金额") < 0 Then
                    drs(i)("余额").Style.TextColor = Color.Red
                End If
            End If
        End If
    Next
    If Tables("三栏式账_Table1").Rows.Count < 15 Then
        Tables("三栏式账_Table1").AddNew(15 - Tables("三栏式账_Table1").Rows.Count)
    End If
End With

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


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 17:20:00 [只看该作者]

        If Tables("三栏式账_Table1").Current IsNot Nothing Then
            dr("余额") = current("借方金额")
            If dr("余额") = current("贷方金额") Then

蓝色按照红色的改

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/14 17:22:00 [只看该作者]

我看了很久,一点点理解,把原来的写法改为这样:
Dim a As Table = Tables("三栏式账_Table1")
Dim g As Subtotalgroup
a.SubtotalGroups.Clear()
Dim t As String
Dim Parts() As String = e.Form.Controls("DropBox1").Value.Split("-")
If Parts.length > 0 Then
    t = Parts(0)
End If
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select 日期,字号,凭证号,摘要,借方金额,贷方金额 fro m {财务数据源} Where [日期] >= #" & e.Form.Controls("StartDate").Value & "# And [日期] <= #" & e.Form.Controls("EndDate").Value & "# And [会计科目辅助列] ='" & e.Form.Controls("DropBox1").Value & "'"
dt = cmd.ExecuteReader()
'对临时进行分组统计
Dim b As New GroupTableBuilder("统计表1",dt)
b.Groups.AddDef("日期",DateGroupEnum.Year,"年","年")
b.Groups.AddDef("日期","月","月")
b.Groups.AddDef("字号")
b.Groups.AddDef("凭证号")
b.Groups.AddDef("摘要")
b.Totals.AddDef("借方金额")
b.Totals.AddDef("贷方金额")
Tables("三栏式账_Table1").DataSource = b.BuildDataSource
g = New Subtotalgroup
g.GroupOn = "月"
g.TotalOn = "借方金额,贷方金额"
g.Caption = "本月发生额"
a.SubtotalGroups.Add(g)

后面的年月是数组,这样写有点接近,但如何把它融进统计表中呢?感觉下面的代码在条件里再加上字号、凭证号、摘要,前面红色的代码不用要了,具体怎么写有点乱,先定义Tables("三栏式账_Table1")的行,再加字号、凭证号、摘要吧?
For Each nm() As Date In dt.GetValues("年|月")
    Dim dr As DataRow = DataTables("三栏式账_Table1").AddNew()
    dr("年") = nm(0)
    dr("月") = nm(1)
    dr("借方金额") = dt.Compute("Sum(借方金额)","[年] = #" & nm(0) & "# And [月] = #" & nm(1) & "#")
    dr("贷方金额") = dt.Compute("Sum(贷方金额)","[年] = #" & nm(0) & "# And [月] = #" & nm(1) & "#")
Next

[此贴子已经被作者于2021/5/14 22:24:00编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/14 17:26:00 [只看该作者]

先把统计表搞出来,再想余额。

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


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/14 17:46:00 [只看该作者]

差不多了.年月是字符或者整数型,不可能是日期型
dr("借方金额") = DataTables("订单").Compute("Sum(借方金额)","[年] = '" & nm(0) & "' And [月] = '" & nm(1) & "'")

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  39楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/15 9:05:00 [只看该作者]

本月发生额显示了,本年累计,无法弄成这样的效果

图片点击可在新窗口打开查看此主题相关图片如下:051203.png
图片点击可在新窗口打开查看
Dim a As Table = Tables("三栏式账_Table1")
Dim g As Subtotalgroup
a.SubtotalGroups.Clear()
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select Year([日期]) AS 年,Month([日期]) AS 月,字号,凭证号,摘要,借方金额,贷方金额 fro m {财务数据源} Where [日期] >= #" & e.Form.Controls("StartDate").Value & "# And [日期] <= #" & e.Form.Controls("EndDate").Value & "# And [会计科目辅助列] ='" & e.Form.Controls("DropBox1").Value & "'"
dt = cmd.ExecuteReader()
'对临时进行分组统计
Dim b As New GroupTableBuilder("统计表1",dt)
b.Groups.AddDef("年")
b.Groups.AddDef("月")
b.Groups.AddDef("字号")
b.Groups.AddDef("凭证号")
b.Groups.AddDef("摘要")
b.Totals.AddDef("借方金额")
b.Totals.AddDef("贷方金额")
b.Build()
Tables("三栏式账_Table1").DataSource = b.BuildDataSource
g = New Subtotalgroup
g.GroupOn = "月"
g.TotalOn = "借方金额,贷方金额"
g.Caption = "本月发生额"
a.SubtotalGroups.Add(g)
a.Subtotal()
Dim groups As List(of String) = dt.GetValues("年|月")
For Each grp As String In groups
    g = New Subtotalgroup
    g.GroupOn = "*"
    g.Caption = "本年累计"
    a.SubtotalGroups.Add(g)
Next
a.Subtotal()
Dim cnt As Integer = Tables("三栏式账_Table1").Rows.Count(True) - groups.count
For Each nm() As String In dt.GetValues("年|月")
Dim dr As DataRow = Tables("三栏式账_Table1").Rows(cnt,True)("年|月")
    dr("年") = nm(0)
    dr("月") = nm(1)
    Tables("三栏式账_Table1").Rows(cnt,True)("借方金额") = dt.Compute("Sum(借方金额)","[年] = '" & nm(0) & "' And [月] = '" & nm(1) & "'")
    Tables("三栏式账_Table1").Rows(cnt,True)("借方金额") = dt.Compute("Sum(贷方金额)","[年] = '" & nm(0) & "' And [月] = '" & nm(1) & "'")
    cnt = cnt +1
Next
Tables("三栏式账_Table1").SetColVisibleWidth("年|40|月|30|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60")

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/15 9:10:00 [只看该作者]

图中的本月止累计应改为本年累计

 回到顶部
总数 69 上一页 1 2 3 4 5 6 7 下一页