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


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

主题:查询账

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


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


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210512085440.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 '截取DropBox1控件中的一级科目
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 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
Tables("三栏式账_Table1").SetColVisibleWidth("日期|60|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60|余额|60")
''对临时进行分组统计
Dim b As New CrossTableBuilder("三栏式账_Table1",dt)
b.HGroups.AddDef("产品名称")
b.VGroups.AddDef("日期","{0}月")
b.Totals.AddDef("借方金额","本月发生额")
b.Totals.AddDef("借方金额","本月止累计",True)
b.Totals.AddDef("贷方金额","本月发生额")
b.Totals.AddDef("贷方金额","本月止累计",True)
b.Build()
MainTable = Tables("三栏式账_Table1")
Select Case DataTables("窗口1_Table1").DataCol.Name
    Case "借方金额","贷方金额"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing And t = DataTables("资产").SQLFind("[科目名称] = '" & t & "'") Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("余额") = e.DataRow("借方金额") - e.DataRow("贷方金额")
            dr = e.DataRow
            dr("借或贷") = "借"
        ElseIf dr Is Nothing And (t = DataTables("负债").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("损益").SQLFind("[科目名称] = '" & t & "'")) Then
            e.DataRow("余额") = e.DataRow("贷方金额") - e.DataRow("借方金额")
            dr = e.DataRow
            dr("借或贷") = "贷"
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
            If t = DataTables("资产").SQLFind("[科目名称] = '" & t & "'") Then
                drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
                drs(i)("借或贷") = "借"
            ElseIf t = DataTables("负债").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("损益").SQLFind("[科目名称] = '" & t & "'") Then
                drs(i)("余额") = drs(i-1)("余额") + drs(i)("贷方金额") - drs(i)("借方金额")
                drs(i)("借或贷") = "贷"
            End If
        Next
If .Rows.Count < 15 Then
    .AddNew(15 - .Rows.Count)
End If
End Select

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


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

表事件才有这行用法,去掉红色代码,没有必要做这种判断

e.DataTable改为具体表格比如:DataTables("表A")

e.DataRow改为当前行,比如current,或者查询出来的行

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


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

红色代码报错
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 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
Tables("三栏式账_Table1").SetColVisibleWidth("日期|60|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60|余额|60")
''对临时进行分组统计
Dim b As New CrossTableBuilder("三栏式账_Table1",dt)
b.HGroups.AddDef("产品名称")
b.VGroups.AddDef("日期","{0}月")
b.Totals.AddDef("借方金额","本月发生额")
b.Totals.AddDef("借方金额","本月止累计",True)
b.Totals.AddDef("贷方金额","本月发生额")
b.Totals.AddDef("贷方金额","本月止累计",True)
b.Build()
MainTable = Tables("三栏式账_Table1")
With DataTables("三栏式账_Table1")
    Dim dr As DataRow
    Dim drs As List(of DataRow)
    dr = .Find("[_SortKey] < " & .DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
    If dr Is Nothing And t = DataTables("资产").SQLFind("[科目名称] = '" & t & "'") Then '如果没有找到上一行,说明本行就是第一行
        .DataRow("余额") = .DataRow("借方金额") - .DataRow("贷方金额")
        dr = .DataRow
        dr("借或贷") = "借"
    ElseIf dr Is Nothing And (t = DataTables("负债").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("损益").SQLFind("[科目名称] = '" & t & "'")) Then
        .DataRow("余额") = .DataRow("贷方金额") - .DataRow("借方金额")
        dr = .DataRow
        dr("借或贷") = "贷"
    End If
    drs = .Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
    For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
        If t = DataTables("资产").SQLFind("[科目名称] = '" & t & "'") Then
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
            drs(i)("借或贷") = "借"
        ElseIf t = DataTables("负债").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("所有者权益").SQLFind("[科目名称] = '" & t & "'") OrElse t = DataTables("损益").SQLFind("[科目名称] = '" & t & "'") Then
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("贷方金额") - drs(i)("借方金额")
            drs(i)("借或贷") = "贷"
        End If
    Next
    If .Rows.Count < 15 Then
        .AddNew(15 - .Rows.Count)
    End If
End With


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


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

按钮只能针对当前行取值

dr = .Find("[_SortKey] < " & 
Tables("三栏式账_Table1").current("_SortKey"), "[_SortKey] Desc") 

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


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


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


图片点击可在新窗口打开查看此主题相关图片如下:051202.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 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
Tables("三栏式账_Table1").SetColVisibleWidth("日期|60|字号|40|凭证号|50|摘要|300|借方金额|60|贷方金额|60|借或贷|50|余额|60")
''对临时进行分组统计
Dim b As New CrossTableBuilder("三栏式账_Table1",dt)
b.HGroups.AddDef("产品名称")
b.VGroups.AddDef("日期","{0}月")
b.Totals.AddDef("借方金额","本月发生额")
b.Totals.AddDef("借方金额","本月止累计",True)
b.Totals.AddDef("贷方金额","本月发生额")
b.Totals.AddDef("贷方金额","本月止累计",True)
b.Build()
MainTable = Tables("三栏式账_Table1")
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 = .DataRow
        dr("借或贷") = "借"
    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 = .DataRow
        dr("借或贷") = "贷"
    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-1)("余额") + drs(i)("借方金额") - 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-1)("余额") + drs(i)("贷方金额") - 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
[此贴子已经被作者于2021/5/12 12:59:14编辑过]

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


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

直接说需要做什么功能吧,代码用的乱七八糟的

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


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


图片点击可在新窗口打开查看此主题相关图片如下:051203.png
图片点击可在新窗口打开查看
  根据开始、终止日期和控件上的会计科目生成三栏式账,控件上的会计科目是用"_"合成的有一级科目的明细科目的字符,控件上的一级科目如果属于资产表的一级科目,借或贷=借,控件上的一级科目如果属于负债表、所有者权益、损益表,借或贷 = 贷;安月统计借方金额、贷方金额的本月发生额,同时安月累计借方金额、贷方金额,名字叫本月止累计,但只统计当年数,第二年又从新开始统计当年累计发生额;逐行计算余额,本月发生额、本月止累计行不显示借、贷及计算余额。

[此贴子已经被作者于2021/5/12 13:01:23编辑过]

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


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

不用说业务规则,看不懂。请截图控件和表格数据,说明哪一行数据从哪些表哪些行引用和统计

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


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

不是截了图吗?数据都从财务数据源中获取,借或贷不是获取财务数据源表中的借或贷,而是根据DropBox1控件变量的一级科目属于科目表中(资产、负债、所有者权益、损益)的哪类科目决定其余额属借或贷,属资产类的,借或贷列为借,余额=上行余额 + 本行借方金额 - 本行贷方金额,减出来为负值的用红字表示,属负债、所有者权益、损益类,借或贷列属贷,余额=上行余额 + 本行贷方金额 - 本行借方金额,减出来为负值的用红字表示。

[此贴子已经被作者于2021/5/12 14:28:20编辑过]

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


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

这个按钮代码是要处理选中的行,还是要处理表格所有行?

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