Foxtable(狐表)用户栏目专家坐堂 → 请各大侠帮帮忙!!万分感谢~


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

主题:请各大侠帮帮忙!!万分感谢~

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/25 16:34:00 [显示全部帖子]

1、参考:

http://www.foxtable.com/help/topics/2305.htm

 

2、可以在生成统计表后,对此统计表动态增加列和表达式列,参考:

http://www.foxtable.com/help/topics/0365.htm

 

3、加上货币符号:

http://www.foxtable.com/help/topics/1659.htm

 

4、空值显示0,可以在生成统计代码之后加一段代码:

 

For Each dc As DataCol In DataTables("统计表名").DataCols
    If dc.IsNumeric Then
            For Each dr As DataRow In DataTables("统计表名").DataRows
                If dr.IsNull(dc.name) Then
                    dr(dc.name) = 0
                End If
            Next
    End If
Next


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 8:47:00 [显示全部帖子]

还是用个例子说话吧。
 
另:
1、增加的列可以是个表达式列,你可以设置表达式来汇总。
2、Select语句的函数,参考开发指南中的“SQL相关”,不同的数据源,函数会不同的。ISNULL对于SQL Server有效,但是对于Access和内部数据源无效的,需要用IIF(某列 Is NUll, Null, 某列)
 

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 9:55:00 [显示全部帖子]

呵呵,你似乎在直接提出设计要求,交给我设计了。

你要明白,这是你在设计系统,不是我在设计系统。

问题要一个一个来,解决一个,学习一个,尝试下一个,不行再提问。

 

[此贴子已经被作者于2011-9-27 9:55:08编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 10:10:00 [显示全部帖子]

查询按钮的代码,这样设计,汇总行就在最后面了:

 

Dim Filter As String '设置过滤条件查询
Filter="1=1"
With e.Form.Controls("开始日期")
    If .Value IsNot Nothing Then
        Filter =  Filter & "and 送货日期>= '" & .Value & "'"
    End If
End With
With e.Form.Controls("结束日期")
    If .Value IsNot Nothing Then
        Filter = Filter &  "and 送货日期<= '" & .Value & "'"
        ' Else
       
    End If
End With

Dim g As New CrossTableBuilder("统计表1", DataTables("销售明细"))
Dim dt1 As fxDataSource

g.HGroups.AddDef("客户名称")
g.VGroups.AddDef("产品名称")
g.VGroups.AddDef("产品简称")
g.Totals.AddDef("重量")
g.Totals.AddDef("金额")
'g.Totals.AddDef("已收款")
'g.Totals.AddDef("未收款")

g.HorizontalTotal = True
g.OrderByTotal = e.Form.Controls("CheckBox1").Checked


If Filter>"" Then
    g.filter=Filter '进行数据过滤
End If
dt1 = g.BuildDataSource()
'g.Build() '生成统计报表
'Tables("统计表1").AutoSizeCols(10)
'MainTable = Tables("统计表1")

Dim b As New GroupTableBuilder("统计表2",DataTables("收款明细"))
Dim dt2  As fxDataSource
b.Groups.AddDef("客户名称") '根据客户分组
'b.Totals.AddDef("期初欠款") '对数量进行统计
'b.Totals.AddDef("销售总金额","本月销售额") '对销售额进行统计
b.Totals.AddDef("已收款","本月回款额") '对已收款进行统计
If Filter>"" Then
    b.filter=Filter '进行数据过滤
End If

dt2 = b.BuildDataSource()

'b.Build '生成统计表
dt1.Combine("客户名称",dt2,"客户名称") '将收款数据组合到销售统计数据
Tables("客户产品统计查询_Table1").DataSource = dt1 '将统计结果绑定到Table
For Each dc As DataCol In DataTables("客户产品统计查询_Table1").DataCols
    If dc.IsNumeric Then
        For Each dr As DataRow In DataTables("客户产品统计查询_Table1").DataRows
            If dr.IsNull(dc.name) Then
                dr(dc.name) = 0
            End If
        Next
    End If
Next

With Tables("客户产品统计查询_Table1")
    Dim gp As New Subtotalgroup
    gp.Aggregate = AggregateEnum.Sum
    gp.GroupOn = "*" '注意总计分组用符号*表示.
    For Each c As col In .cols
        If c.DataCol.IsNumeric Then
            If gp.TotalOn > "" Then
                gp.TotalOn = gp.TotalOn & ","
            End If
            gp.TotalOn = gp.TotalOn & c.name
        End If
    Next
    gp.Caption = "总计"
    .SubtotalGroups.Add(gp)
    .Subtotal() '生成汇总模式
End With

Forms("返回").OpenTo("统计表1")
'Forms("返回").Controls("TextBox1").Value = "提示: 不同客户订购各种产品的数量和金额."
MainTable.Focus()

 

直接用普通形式显示这种统计结果,目前还没有办法,下次更新会考虑。

[此贴子已经被作者于2011-9-27 10:21:35编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 11:28:00 [显示全部帖子]

关于这个问题:

新增的列“单位成本”“生产销售费用”需手工输入数据,然后自动计算出利润,这三列最后一行想实现自动汇总。

 

foxtable可以设置汇总模式,但是由于汇总模式下无法输入数据,所以我建议你在返回窗口加两个按钮,分别是:

 

汇总按钮:

 

With Tables("统计表1")
    Dim gp As New Subtotalgroup
    gp.Aggregate = AggregateEnum.Sum
    gp.GroupOn = "*" '注意总计分组用符号*表示.
    gp.TotalOn = "生产销售费用,利润,单位成本"
    gp.Caption = "总计"
    .SubtotalGroups.Add(gp)
    .Subtotal() '生成汇总模式
End With

 

取消汇总按钮:

Tables("统计表1").ClearSubtotal()


这样,排序后合计不在最后一行的问题也解决了。

[此贴子已经被作者于2011-9-27 11:30:16编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 11:43:00 [显示全部帖子]

7楼呢?

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/9/27 14:58:00 [显示全部帖子]

第三个问题,合并欠款金额:

 

 

Dim Filter As String '设置过滤条件查询
Filter="1=1"
With e.Form.Controls("开始日期")
    If .Value IsNot Nothing Then
        Filter =  Filter & "and 送货日期>= '" & .Value & "'"
    End If
End With
With e.Form.Controls("结束日期")
    If .Value IsNot Nothing Then
        Filter = Filter &  "and 送货日期<= '" & .Value & "'"
        ' Else
       
    End If
End With
Dim b As New GroupTableBuilder("统计表1",DataTables("收款明细"))
b.Groups.AddDef("客户名称") '根据产品分组
'b.Totals.AddDef("期初欠款") '对数量进行统计
b.Totals.AddDef("销售总金额","本月销售额") '对数量进行统计
b.Totals.AddDef("已收款","本月回款额") '对数量进行统计
If Filter>"" Then
    b.filter=Filter '进行数据过滤
End If
b.Build
DataTables("统计表1").DataCols.Add("欠款金额",Gettype(Double))
For Each dr As DataRow In DataTables("统计表1").DataRows
    Dim flt As String  = "客户名称 = '" & dr("客户名称") & "'"
    Dim v1 As Double = DataTables("收款明细").Compute("Sum(期初欠款)",flt)
    Dim v2 As Double = DataTables("收款明细").Compute("Sum(销售总金额)",flt)
    Dim v3 As Double = DataTables("收款明细").Compute("Sum(已收款)",flt)
    dr("欠款金额") = v1 + v2 - v3
Next
MainTable = Tables("统计表1")
Forms("返回2").OpenTo("统计表1")
MainTable.Focus()

 

[此贴子已经被作者于2011-9-27 15:07:46编辑过]

 回到顶部