以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教这种交叉组合统计该怎么做  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=33296)

--  作者:泡泡
--  发布时间:2013/5/15 12:56:00
--  请教这种交叉组合统计该怎么做

建了入库和出库2个表,分别的字段是:日期、出/入库单号、出/入库数量

想将2个表的数据按日期的顺序组合起来,显示哪天出了多少,入了多少,当天结余多少

想了一晚上,不会写代码,请高手相助

 


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

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

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


 


--  作者:泡泡
--  发布时间:2013/5/15 12:57:00
--  

这是文件

 

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


--  作者:y2287958
--  发布时间:2013/5/15 13:06:00
--  
新建一个表
然后把出入库两个表的数据填充进去
按日期排序
再循环求值即可

--  作者:ybil
--  发布时间:2013/5/15 15:06:00
--  
Dim dt1,dt2 As fxDataSource
Dim dts As fxDataSource() ={dt1,dt2}
Dim v1 As String() = {"入库","出库"}
Dim jb As  SQLJoinTableBuilder
Dim s1,s2 As String
Dim n1 As Integer

For Each s1 In v1
    jb =new SQLJoinTableBuilder("查询",s1 & "表")
    jb.AddExp("日期", s1 & "日期")
    jb.AddExp(s1 & "单号", s1 & "单号")
    jb.AddExp(s1 & "数量", "数量")
    if n1= v1.length-1 then jb.AddExp("结余", "0.0")
    dts(n1) = jb.BuildDataSource()
    n1+=1
Next

s2 = "日期"
dts(0).Combine(s2,dts(1),s2)

dts(0).show("查询")
Dim t1 As Table =Tables("查询")

t1.StopRedraw
t1.sort = s2
For Each r As Row In t1.Rows
    If r.Index= 0 Then
        r("结余") = r("入库数量")-r("出库数量")
    Else
        r("结余") =t1(r.Index-1,"结余")+ r("入库数量")-r("出库数量")
    End If
Next
t1.ResumeRedraw

--  作者:泡泡
--  发布时间:2013/5/15 15:37:00
--  
以下是引用ybil在2013-5-15 15:06:00的发言:
Dim dt1,dt2 As fxDataSource
....
 
t1.ResumeRedraw

还真有神人相助

膜拜!!


--  作者:泡泡
--  发布时间:2013/5/15 16:56:00
--  
Dim dt1,dt2 As fxDataSource
Dim dts As fxDataSource() ={dt1,dt2}
Dim v1 As String() = {"入库","出库"}
Dim jb As SQLJoinTableBuilder
Dim s1,s2 As String
Dim n1 As Integer

For Each s1 In v1
jb =new SQLJoinTableBuilder("查询",s1 & "表")
jb.AddExp("日期", s1 & "日期")
jb.AddExp(s1 & "单号", s1 & "单号")
jb.AddExp(s1 & "数量", "数量")
-------------------------------------------------
红色部分怎么理解?
为何不直接写“出库表”,“入库表”
而是写“出库”“入库”,然后下面跟个“表”呢?

--  作者:Bin
--  发布时间:2013/5/15 16:59:00
--  
那么你就代码冗余  要复制两段一样的代码. 没什么意义.  所以就这样写.
--  作者:ybil
--  发布时间:2013/5/15 17:21:00
--  
如考虑一日内有多笔出入库(同日出入单号相同),这样可能更好些:

Dim dt1,dt2 As fxDataSource
Dim dts As fxDataSource() ={dt1,dt2}
Dim v1 As String() = {"入库","出库"}
Dim g As  GroupTableBuilder
Dim s1,s2 As String
Dim n1 As Integer

For Each s1 In v1
    g =new GroupTableBuilder("查询",DataTables(s1 & "表"))
    g.Groups.AddDef(s1 & "日期",DateGroupEnum.None,"日期") \'添加客户列用于分组
    g.Groups.AddDef(s1 & "单号") \'添加产品列用于分组
    g.Totals.AddDef("数量",s1 & "数量") \'添加数量列用于统计
    
    If n1= v1.length-1 Then g.Totals.AddDef("数量","结余")
    dts(n1) = g.BuildDataSource()
    n1+=1
Next


s2 = "日期"
dts(0).Combine(s2,dts(1),s2)

dts(0).show("查询")
Dim t1 As Table =Tables("查询")

t1.StopRedraw
t1.sort = s2
For Each r As Row In t1.Rows
    If r.Index= 0 Then
        r("结余") = r("入库数量")-r("出库数量")
    Else
        r("结余") =t1(r.Index-1,"结余")+ r("入库数量")-r("出库数量")
    End If
Next
t1.ResumeRedraw
MainTable = Tables("查询")

--  作者:泡泡
--  发布时间:2013/5/16 9:53:00
--  

昨晚照着代码做了一遍

这个代码有个地方要注意,在统计前,需将2个来源表保存,才能有正确的数据被统计出来


--  作者:泡泡
--  发布时间:2013/5/19 15:45:00
--  

刚把内部数据源重定向到外部ACCESS数据库,发现该代码不管用了

能教教当是外部数据源时,怎么写代码不?