以文本方式查看主题 - 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个表的数据按日期的顺序组合起来,显示哪天出了多少,入了多少,当天结余多少 想了一晚上,不会写代码,请高手相助
|
||||
-- 作者:泡泡 -- 发布时间:2013/5/15 12:57:00 -- 这是文件
|
||||
-- 作者: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数据库,发现该代码不管用了 能教教当是外部数据源时,怎么写代码不? |