以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何把后台未加载数据填充到当前表?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=50811)

--  作者:shixia
--  发布时间:2014/5/14 9:02:00
--  如何把后台未加载数据填充到当前表?
有一进销存项目,出库和入库数据都在后台未加载,想建立一个出入库明细表,把后台的出库入库数据直接填充到该表中,以前数据都加载到前台时,我是用DataTableBuilder建立一个临时表,再用Filler填充,现在所有数据都在后台,想在不将数据加载到前台的情况下实现相同功能,我看了几遍帮助,大部分后台统计工具都是对数据进行求和等统计加工,我只想简单的罗列,有那几种解决方案,那种方案最优,请大家帮助我
--  作者:Bin
--  发布时间:2014/5/14 9:05:00
--  
用SQL语句实现, 看下你具体想生成怎么样的统计表,上个例子.我帮你完成.
--  作者:shixia
--  发布时间:2014/5/14 9:19:00
--  
例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar

[此贴子已经被作者于2014-5-14 9:20:33编辑过]

--  作者:Bin
--  发布时间:2014/5/14 9:41:00
--  
能否描述一下你想怎么统计,看着有点费劲.
--  作者:shixia
--  发布时间:2014/5/14 14:40:00
--  
1、建立临时表:
Dim dtb As New DataTableBuilder("仓库明细")
dtb.AddDef("商品类别", Gettype(String), 32)
dtb.AddDef("商品名称", Gettype(String), 32)
dtb.AddDef("商品代码", Gettype(String), 32)
dtb.AddDef("规格", Gettype(String), 32)
dtb.AddDef("年度", Gettype(Integer))
dtb.AddDef("月份", Gettype(Integer))
dtb.AddDef("日期", Gettype(Date))
dtb.AddDef("类别", Gettype(String), 32)
dtb.AddDef("编号", Gettype(String), 32)
dtb.AddDef("摘要", Gettype(String), 32)
dtb.AddDef("领货人", Gettype(String), 32)
dtb.AddDef("客户供应商", Gettype(String), 32)
dtb.AddDef("入库", Gettype(Double))
dtb.AddDef("出库", Gettype(Double))
dtb.AddDef("结存", Gettype(Double))  (这列在表中都没有,是新增加的一列)
dtb.Build()
2、设立加载条件FILTER(忽略)
3、把表CKMX(出库)中“出库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,出库数量,销售员,年,月”字段数据填充到临时表,
把RKMX(入库)中"入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量,客户,销售员,年,月"字段数据填充到临时表,
4、因为有加载条件,例如只统计2014年5月以后数据,那么对5月以前结存数据需要增加一行对前期结存求和(可忽略)
    Dim Products As List(Of String)
    Products = DataTables("商品信息").GetValues("商品代码",Filter2)
    Dim s1 As Double
    Dim s2 As Double
    For Each Product As String In Products
        s1 = DataTables("RKMX").Compute("SUM(入库数量)","商品代码=\'" & Product & "\' And 日期<" & Filter1)
        s2 = DataTables("CKMX").Compute("SUM(出库数量)","商品代码=\'" & Product & "\' And 日期<" & Filter1)
        If s1-s2 <> 0 Then
            Tables("仓库明细").AddNew()
            Dim dr As DataRow = DataTables("商品信息").Find("商品代码=\'" & Product & "\'")
            If dr IsNot Nothing Then
                Tables("仓库明细").Current("商品代码") = dr("商品代码")
                Tables("仓库明细").Current("商品类别") = dr("商品类别")
                Tables("仓库明细").Current("商品名称") = dr("商品名称")
                Tables("仓库明细").Current("规格") = dr("规格")
                Tables("仓库明细").Current("编号") = "JZ"
                Tables("仓库明细").Current("摘要") = "前期结存"
                Tables("仓库明细").Current("入库") = s1-s2
            End If
        End If
    Next
5、对“结存”列,以日期为序号反序,按“上行结存+入库-出库”公式计算出数据,实质上是一个仓库账簿
drs(0)("结存") = drs(0)("入库") - drs(0)("出库") \'设置第一行的累计支出
   If drs(i)("商品代码") = drs(i - 1)("商品代码") Then
        drs(i)("结存") = drs(i-1)("结存") + drs(i)("入库") - drs(i)("出库")
    Else
        drs(i)("结存") = drs(i)("入库") - drs(i)("出库")
    End If

6、MainTable = Tables("仓库明细") ,显示该表
需要:第三步我以前是用Filler,但现在表的数据全部在后台,就不能用Filler,必须用其它方法解决。整个统计中对所有数据没有进行求和之类统计,只是把数据简单地填充罗列出来,然后增加一“结存”列对余额进行计算而已

--  作者:有点甜
--  发布时间:2014/5/14 15:27:00
--  

 回复5楼,关于fill填出数据,你可以直接用查询表得到数据,代码如下

 

Dim q As new QueryBuilder
q.ConnectionName = "Data"
q.TableName = "统计表"
q.SelectString = "Select 出库编号明细 As 编号,日期,摘要,商品代码,商品类别,商品名称,规格,\'\' As 入库, 出库数量 As 出库,\'\' As 客户供应商,销售员,年,月 from {CKMX}" _
& " union " _
& " Select 入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量, \'\', 客户,销售员,年,月 from {RKMX}"
q.Build
MainTable = Tables("统计表")

[此贴子已经被作者于2014-5-14 15:29:07编辑过]

--  作者:有点甜
--  发布时间:2014/5/14 15:33:00
--  
 其余的,比如 find,compute 等等,可以用 sqlFind 和 sqlCompute 去代替。
--  作者:shixia
--  发布时间:2014/5/15 10:21:00
--  
q.SelectString = "Select 出库编号明细 As 编号,日期,摘要,商品代码,商品类别,商品名称,规格,\'\' As 入库, 出库数量 As 出库,\'\' As 客户供应商,销售员,年,月 from {CKMX}" _ 
& " union " _
& " Select 入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量, \'\', 客户,销售员,年,月 from {RKMX}"

以上代码确实可以达到要求,但是一点请教:以上代码生成的列全部都是字符型,其中入库,出库等如果是数字型就方便后面计算,用SQL语言能不能实现

--  作者:有点甜
--  发布时间:2014/5/15 11:01:00
--  

 回复8楼,你改一下即可

 

Dim q As new QueryBuilder
q.ConnectionName = "Data"
q.TableName = "统计表"
q.SelectString = "Select 出库编号明细 As 编号,日期,摘要,商品代码,商品类别,商品名称,规格,0 As 入库, 出库数量 As 出库,\'\' As 客户供应商,销售员,年,月 from {CKMX}" _
& " union " _
& " Select 入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量, 0, 客户,销售员,年,月 from {RKMX}"
q.Build
MainTable = Tables("统计表")


--  作者:有点甜
--  发布时间:2014/5/15 11:02:00
--  

 或者这样改

 

Dim q As new QueryBuilder
q.ConnectionName = "Data"
q.TableName = "统计表"
q.SelectString = "Select 出库编号明细 As 编号,日期,摘要,商品代码,商品类别,商品名称,规格,null As 入库, 出库数量 As 出库,\'\' As 客户供应商,销售员,年,月 from {CKMX}" _
& " union " _
& " Select 入库编号明细,日期,摘要,商品代码,商品类别,商品名称,规格,入库数量, null, 客户,销售员,年,月 from {RKMX}"
q.Build
MainTable = Tables("统计表")