以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  型号批次 组合统计问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=38554)

--  作者:嘉华
--  发布时间:2013/7/31 22:24:00
--  型号批次 组合统计问题
各位高手,请教下我想在出货开单的时候想知道这个型号的地板的各个批次的地板实时库存多少, 我利用 出库明细 ,入库明细,退货明细,参考狐表组合统计结合我的项目写了如下代码:
Dim bd1 As New GroupTableBuilder("统计表1",DataTables("成品入库明细表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd1.Totals.AddDef("计算件数","入库件数") \'对数量进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("成品出库明细表"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd2.Totals.AddDef("计算件数","出库件数") \'对数量进行统计
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货明细表"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd3.Totals.AddDef("退货件数","退货件数") \'对数量进行统计
dt3 = bd3.BuildDataSource()

dt1.Combine("地板型号",dt2,"地板型号") \'将销售统计数据组合到进货统计数据
dt1.Combine("地板型号",dt3,"地板型号") \'将退货统计数据组合到进货统计数据
Tables("批次库存_Table1").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("批次库存_Table1").DataCols  \'用表达式列计算库存数据
    .Add("库存件数",Gettype(Integer), "IsNull([入库件数],0) + ISNULL([退货件数],0) - ISNULL([出库件数],0)")
End With
Tables("批次库存_Table1").Filter =" 地板型号 =\'" & Tables("成品出库明细表").Current("地板型号") & "\'"
Tables("批次库存_Table1").Sort = "批次"


结果:型号和批次 分组没问题了 入库统计也是按照型号对应的批次累计的,  可出库和退货却 只是不分批次的累计到第一行的入库上,其他批次显示空值,这是为什么,求解  

--  作者:有点甜
--  发布时间:2013/7/31 22:29:00
--  
这里怎么是个bd1? 应该bd2:
 
Dim bd2 As New GroupTableBuilder("统计表2",DataTables("成品出库明细表"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd2.Totals.AddDef("计算件数","出库件数") \'对数量进行统计
dt2 = bd2.BuildDataSource()
 
还有这里应该是bd3:
 
Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货明细表"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd3.Totals.AddDef("退货件数","退货件数") \'对数量进行统计
dt3 = bd3.BuildDataSource()

--  作者:嘉华
--  发布时间:2013/7/31 22:49:00
--  
可是我也这样  改过了  这个会出现警告对话框
--  作者:嘉华
--  发布时间:2013/7/31 22:51:00
--  
图片点击可在新窗口打开查看
--  作者:狐狸爸爸
--  发布时间:2013/8/1 10:10:00
--  
你看清楚有点甜说的原因了吗?
正确的代码应该是:
 
Dim bd1 As New GroupTableBuilder("统计表1",DataTables("成品入库明细表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("地板型号") \'根据型号分组
bd1.Groups.AddDef("批次")
bd1.Totals.AddDef("计算件数","入库件数") \'对数量进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("成品出库明细表"))
Dim dt2  As fxDataSource
bd2.Groups.AddDef("地板型号") \'根据型号分组
bd2.Groups.AddDef("批次")
bd2.Totals.AddDef("计算件数","出库件数") \'对数量进行统计
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货明细表"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("地板型号") \'根据型号分组
bd2.Groups.AddDef("批次")
bd3.Totals.AddDef("退货件数","退货件数") \'对数量进行统计
dt3 = bd3.BuildDataSource()

dt1.Combine("地板型号",dt2,"地板型号") \'将销售统计数据组合到进货统计数据
dt1.Combine("地板型号",dt3,"地板型号") \'将退货统计数据组合到进货统计数据
Tables("批次库存_Table1").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("批次库存_Table1").DataCols  \'用表达式列计算库存数据
    .Add("库存件数",Gettype(Integer), "IsNull([入库件数],0) + ISNULL([退货件数],0) - ISNULL([出库件数],0)")
End With
Tables("批次库存_Table1").Filter =" 地板型号 =\'" & Tables("成品出库明细表").Current("地板型号") & "\'"
Tables("批次库存_Table1").Sort = "批次"

--  作者:嘉华
--  发布时间:2013/8/1 14:14:00
--  
O(∩_∩)O谢谢回复:”有点甜“代码和”狐爸“的指示的修改代码貌似  不一样
不管我是按照狐爸的回复代码全复制 还是按照“有点甜”大师的修改均出现上述警告框,特上传附件,请赐教指点一二,
  我的流程是在成品出库主表的关联明细表上,新增地板明细----输入型号--点击查看单元格 --跳出批次库存窗口  ,显示该型号的各批次库存情况,(这个是之前我做的但问题所在),另还希望能跳出的统计表上,我点击想要的出货型号的批次列和库存数量列,能赋值给关联明细表 的 批次列和计算件数列(默认全部)上,我再把库存数字修改成我要出库的计算件数列。  后面红色部分看看能不能实现?不胜感激涕零!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:地板生产进销存管理系统.table


--  作者:狐狸爸爸
--  发布时间:2013/8/1 15:43:00
--  

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:地板生产进销存管理系统.table

愿意:

 

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

 


--  作者:lsy
--  发布时间:2013/8/1 15:46:00
--  

统计表已经弄好了,但我实在看不出,在各明细表上,设置实时库存列的必要性,也搞不清,你要赋值到明细表的哪一行上。

我再把库存数字修改成我要出库的计算件数列   这句话,我也是不能理解。


--  作者:嘉华
--  发布时间:2013/8/1 16:55:00
--  
回复lsy老师:再次感谢老师指点!
1.  实时库存是最初想做的,后来要求批次管理,按照批次出货,开发版的时候会删除。
2,打个比方:客户要201的150件+10片,明细表开单时候输入201型号,统计表查出201这个型号的地板有:A批次库存件数地板200件 ,B批次地板50件  ,(怕地板色差等原因)我就把统计表出现201的A批次的地板200件“行”点击鼠标后,把批次(A)赋值给明细表”批次“列,把200赋值给明细表”计算件数“列, 我再把他修改成150.5件我用表达式算出件数片数(150件+10片),出库单给客户看的要的是这个单位(型号,件数,片数,计算面积)
3.以后某个型号的每个批次的很多行,再求个    不显示库存件数小于0.5大于0的库存件数代码来(就是这个批次都发完了后,剩余一点点就不显示了,免得统计表老长)

--  作者:lsy
--  发布时间:2013/8/1 17:18:00
--  

我给你个建议:

像我们数据库里的药品,现在卫生部统一要求,精确到最小单位。

你的库房单位不妨也按最小单位(片)来计算出入库、库存数量。

另有包装规格列,换算,一件 = 多少片。

片作为基本计算单位。

件,或者其他包装单位,作为参照。

这样计算就很简单、精确,也不会出现0.5之类的库存。