以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请各大侠帮帮忙!!万分感谢~  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=13039)

--  作者:zerohand
--  发布时间:2011/9/25 15:20:00
--  请各大侠帮帮忙!!万分感谢~

遇到难题了,请各位大侠帮帮忙啊。。。

 

系统说明:

一.基本资料:客户,产品

二.销售录入:销售明细,收款明细 (根据销售单进行收款,收款较复杂,也有可能送货时即收款,可能月结,半月结等)

三.统计查询:主要统计 1.本月销售量及利润 2.本月已收款 3.客户欠款

 

问题:
1. 统计查询-->客户产品统计查询(按客户和产品统计) 在统计结果最右列想加上此客户当月的回款额 (目前单独实现,从“资金报表”--本月回款额可查询,想整合在一起,不知如何处理?)
2. 统计查询-->汇总查询(产品统计查询) 想加上每个产品的成本,利润两列,即手工输入当月产品成本,自动算出利润,不知道如何设计、处理?
3. 统计查询时,统计结果为空的,如何显示为0 ,金额如何加上货币符号?

4.资金管理录入也觉得怪怪的,想不到更好的设计,有什么高见啊,呵呵

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


--  作者:狐狸爸爸
--  发布时间: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


--  作者:zerohand
--  发布时间:2011/9/26 23:25:00
--  

感谢狐老爹的大力帮忙,还是有点小问题,要再请教下:

 

以下是引用狐狸爸爸在2011-9-25 16:34:00的发言:


 

1、参考:

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

    1.1 目前是表A与表B合并,假如表A有3条客户数据,表B有5条客户数据,通过这种方式合并后,显示为5条,能否只显示表A的3条呢?(即两个表共同有数据)

    1.2  假如不显示共有数据,即显示表A与表B的全部5条数据,但想对两个表数据进行“合计”计算,但显示结果顺序为表A的3条数据,然后是表A的合计数据,再是表B多出的两条数据,即“合计”一行显示在中间,能否将合计一行显示在最后?

    1.3 提供的实例为TABLE控件显示,能否不用窗口_Table方式显示,即以普通的数据表方式进行显示?

 

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

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

     2.1 动态增加的列产生后,需手工在此列输入数据,在列的最后一行,想加上合计值,即根据输入的值自动求和?

     2.2 select a,sum(ISNULL([b],0) )from 123 group by a --想通过SQL语名求和,为空值则显示为0,可提示错误,不知道是哪里不对?

 

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


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

--  作者:zerohand
--  发布时间:2011/9/27 9:42:00
--  
以下是引用狐狸爸爸在2011-9-27 8:47:00的发言:
还是用个例子说话吧。
 
另:
1、增加的列可以是个表达式列,你可以设置表达式来汇总。
2、Select语句的函数,参考开发指南中的“SQL相关”,不同的数据源,函数会不同的。ISNULL对于SQL Server有效,但是对于Access和内部数据源无效的,需要用IIF(某列 Is NUll, Null, 某列)

 

1. 统计查询-->客户产品统计查询(按客户和产品统计)

   1.1 显示的结果中,合计一行在中间,如何将合计一行移至最后

   1.2 如果合计一行后面的不显示,即只显示出两个表共同有的客户数据,应如何处理?

   1.3 提供的实例为TABLE控件显示,能否不用窗口_Table方式显示,即以普通的数据表方式进行显示?主要想实现EXCEL导出时,能手动选择保存至什么地方,如果直接点系统自带的EXCEL,保存的数据非 窗口_Table 的数据。

2. 统计查询-->汇总查询(产品统计查询)

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

   2.2 【产品名称】一列相同的进行合并,但排序后,合计一行可能就不是显示在最后了,应如何处理

3.统计查询-->资金报表

  3.1 想用一个表显示,即显示本月销售额、本月回款、客户欠款三列,但本月销售额、本月回款只显示当月的,而客户欠款是最新的欠款状况

       目前是做成了两个表,想合在一起,而第二个表只需要客户欠款一列

4. 销售录入--销售录入

  4.1 如何实现增加条目后,动态显示‘合计金额’,已尝试在行值变更后进行处理,能动态显示了,但一点击‘已收款’文本框及‘未收款’文本框后,合计金额’的值就消失了

 

感觉问题多多,呵呵,不好意思,拜托了~

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

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

--  作者:狐狸爸爸
--  发布时间:2011/9/27 9:55:00
--  

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

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

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

 

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

--  作者:狐狸爸爸
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间: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编辑过]

--  作者:zerohand
--  发布时间:2011/9/27 11:34:00
--  
以下是引用狐狸爸爸在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编辑过]
 
已经通过上面的例子,按这样的方式做好了,非常感谢!!!~


--  作者:狐狸爸爸
--  发布时间:2011/9/27 11:43:00
--  
7楼呢?