以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  把三个表内容自动统计到一个表内  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103410)

--  作者:binabc2004
--  发布时间:2017/7/7 13:11:00
--  把三个表内容自动统计到一个表内
HI 大家好!
      请问把三个表内容自动安年份和产品统计出每一个月进仓和出仓数量和金额,每月剩余多少数量和金额,当前月份剩余多少数量和金额。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:物品出入记录表.rar




--  作者:有点甜
--  发布时间:2017/7/7 14:20:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/2305.htm

 

http://www.foxtable.com/webhelp/scr/0681.htm

 


--  作者:有点甜
--  发布时间:2017/7/7 14:35:00
--  

参考代码

 

Dim dt As DataTable = DataTables("总表")
Dim dt1 As DataTable = DataTables("进仓表")
Dim dt2 As DataTable = DataTables("出仓表")
Dim dt3 As DataTable = DataTables("材料表")
Dim ys As String() = {"2017"}
For Each y As String In ys
    For Each dr As DataRow In dt3.Select("")
        Dim ndr As DataRow = dt.AddNew
        ndr("年份") = new Date(y, 1, 1)
        ndr("编号") = dr("编号")
        ndr("材料名称") = dr("材料名称")
        ndr("单位") = dr("单位")
        Dim filter As String = "编号 = \'" & dr("编号") & "\'"
        ndr("结存_数量") = dt1.Compute("sum(进仓数量)", filter) - dt2.Compute("sum(出仓数量)", filter)
        ndr("结存_金额") = dt1.Compute("sum(进仓金额)", filter) - dt2.Compute("sum(出仓金额)", filter)
        Dim d As Date = new Date(y, 1, 1)
        Dim filter1 = "编号 = \'" & dr("编号") & "\' and 进仓日期 >= #" & d & "# And 进仓日期 < #" & d.AddMonths(1) & "#"
        Dim filter2 = "编号 = \'" & dr("编号") & "\' and 出仓日期 >= #" & d & "# And 出仓日期 < #" & d.AddMonths(1) & "#"
        ndr("一月_进仓_数量") = dt1.Compute("sum(进仓数量)", filter1)
        ndr("一月_进仓_金额") = dt1.Compute("sum(进仓金额)", filter1)
    Next
Next


--  作者:binabc2004
--  发布时间:2017/7/14 15:25:00
--  
请问如何添加两列剩余多少数量和剩余多少金额计算列?

Dim b As New CrossTableBuilder("统计表1",DataTables("进仓表"))
Dim dt1 As fxDataSource
b.HGroups.AddDef("编号") \'添加客户列用于水平分组
b.VGroups.AddDef("进仓日期",DateGroupEnum.Year,"{0}年") \'添加日期列用于垂直分组,按年分组
b.VGroups.AddDef("进仓日期","{0}月") \'添加日期列用于垂直分组,按月分组
b.Totals.AddDef("进仓数量") \'添加数量列用于统计
b.Totals.AddDef("进仓金额") \'添加数量列用于统计
b.VerticalTotal= True \'垂直汇总
b.HorizontalTotal = True \'水平汇总
dt1 = b.BuildDataSource()
Dim a As New CrossTableBuilder("统计表2",DataTables("出仓表"))
Dim dt2 As fxDataSource
a.HGroups.AddDef("编号") \'添加客户列用于水平分组
a.VGroups.AddDef("出仓日期",DateGroupEnum.Year,"{0}年") \'添加日期列用于垂直分组,按年分组
a.VGroups.AddDef("出仓日期","{0}月") \'添加日期列用于垂直分组,按月分组
a.Totals.AddDef("出仓数量") \'添加数量列用于统计
a.Totals.AddDef("出仓金额") \'添加数量列用于统计
a.VerticalTotal= True \'垂直汇总
a.HorizontalTotal = True \'水平汇总
dt2 = a.BuildDataSource()

dt1.Combine("编号",dt2,"编号") 
Dim t As Table = Forms("统计表").controls("Table1").Table
t.DataSource = dt1 \'将统计结果绑定到Table

--  作者:有点甜
--  发布时间:2017/7/14 16:18:00
--  

 不行,无法动态添加那些列。添加后控制更麻烦。

 

 还不如用你原来的代码,看3楼方法。


--  作者:binabc2004
--  发布时间:2017/7/14 16:51:00
--  
三楼代码只能显视2017年一月份数据,不能显视2017年之后数据,结存数量就可以看到实际数量,每一个月细节就看不到。

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170714165049.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170714165031.jpg
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2017/7/14 17:21:00
--  

看懂代码,改动.

 

红色代码是变动的,复制多段,简单修改,统计和赋值,即可。

 

Dim dt As DataTable = DataTables("总表")
Dim dt1 As DataTable = DataTables("进仓表")
Dim dt2 As DataTable = DataTables("出仓表")
Dim dt3 As DataTable = DataTables("材料表")
Dim ys As String() = {"2017","2018"}
For Each y As String In ys
    For Each dr As DataRow In dt3.Select("")
        Dim ndr As DataRow = dt.AddNew
        ndr("年份") = new Date(y, 1, 1)
        ndr("编号") = dr("编号")
        ndr("材料名称") = dr("材料名称")
        ndr("单位") = dr("单位")
        Dim filter As String = "编号 = \'" & dr("编号") & "\'"
        ndr("结存_数量") = dt1.Compute("sum(进仓数量)", filter) - dt2.Compute("sum(出仓数量)", filter)
        ndr("结存_金额") = dt1.Compute("sum(进仓金额)", filter) - dt2.Compute("sum(出仓金额)", filter)
        Dim d As Date = new Date(y, 1, 1)
        Dim filter1 = "编号 = \'" & dr("编号") & "\' and 进仓日期 >= #" & d & "# And 进仓日期 < #" & d.AddMonths(1) & "#"
        Dim filter2 = "编号 = \'" & dr("编号") & "\' and 出仓日期 >= #" & d & "# And 出仓日期 < #" & d.AddMonths(1) & "#"
        ndr("一月_进仓_数量") = dt1.Compute("sum(进仓数量)", filter1)
        ndr("一月_进仓_金额") = dt1.Compute("sum(进仓金额)", filter1)

    Next
Next