Foxtable(狐表)用户栏目专家坐堂 → 制造类库存


  共有4415人关注过本帖树形打印复制链接

主题:制造类库存

帅哥哟,离线,有人找我吗?
石四
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
制造类库存  发帖心情 Post By:2014/7/12 15:22:00 [只看该作者]

两个表:入库 耗用

入库表   入库数量     入库金额

耗用表   耗用数量

统计表结构   单价=(期初金额+入库金额)/(期初数量+入库数量)

                  期初_数量     期初_金额

                  入库_数量     入库_金额

                  耗用_数量     

                  库存_数量     库存_金额

 

不会写“单价”的表达式,Fiter来Fiter去,晕菜了,帮帮忙。

 

With e.Form.Controls("日期")

    If .Value Is Nothing Then

        Return

    End If

End With

Tables("统计_Table1").StopRedraw

Dim Filter As String

Dim curD As Date=e.Form.Controls("日期").Value '当前日期

Dim lastD As Date = curD.AddMonths(-1) '上一个月的日期

Dim lastD2 As New Date(lastD.Year, lastD.Month, Date.DaysInMonth(lastD.Year,lastD.Month)) '上个月的最后一天

Filter = Filter &  "日期 > #" & lastD2 & "#" & " And 日期  <= #" & curD & "#"

 

Dim bd1 As New SQLGroupTableBuilder("统计表1","进货")

Dim dt1 As fxDataSource

bd1.Groups.AddDef("型号") '根据型号分组

bd1.Totals.AddDef("进货_数量","进货_数量") '对数量进行统计

bd1.Totals.AddDef("进货_金额","进货_金额") '对金额进行统计

bd1.Filter = Filter

dt1 = bd1.BuildDataSource()

 

Dim bd2 As New SQLGroupTableBuilder("统计表2","销售")

Dim dt2  As fxDataSource

bd2.Groups.AddDef("型号") '根据型号分组

bd2.Totals.AddDef("销售_数量","销售_数量") '对数量进行统计

bd2.Filter = Filter

dt2 = bd2.BuildDataSource()

 

dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据

Tables("统计_Table1").DataSource = dt1 '将统计结果绑定到Table

 

With DataTables("统计_Table1").DataCols  '用表达式列计算单价数据

.Add("单价")

End With

?????????????????????

 

With DataTables("统计_Table1").DataCols  '用表达式列期初数据

    .Add("期初_数量",Gettype(Double),"","期初_数量")

    .Add("期初_金额",Gettype(Double),"","期初_金额")

End With

 

Filter = "日期 <=  #" & lastD2 & "#"

Dim dt_jh As DataTable

Dim dt_xs As DataTable

Dim cmd As new SQLCommand

cmd.CommandText = "select * from {进货} where " & Filter

dt_jh = cmd.ExecuteReader

cmd.CommandText = "select * from {销售} where " & Filter

dt_xs = cmd.ExecuteReader

 

For Each r As Row In Tables("统计_Table1").Rows   

    Filter = "型号 = '" & r("型号") & "'"

r("期初_数量") = dt_jh.Compute("sum(进货_数量)", filter) - dt_xs.Compute("sum(销售_数量)", filter)

r("期初_金额") = dt_jh.Compute("sum(进货_金额)", filter)

Next

 

With DataTables("统计_Table1").DataCols  '用表达式列计算库存数据

.Add("库存_数量",Gettype(Double), "IsNull([期初_数量],0) + IsNull([进货_数量],0) - ISNULL([销售_数量],0)

.Add("库存_金额",Gettype(Double), "[期初_金额] * [单价]","库存_金额")

End With

 

Tables("统计_Table1").SetColVisibleWidth("型号|80|单价|80|期初_数量|80|期初_金额|80|进货_数量|80|进货_金额|80|销售_数量|80|库存_数量|80|库存_金额|80")

 

Tables("统计_Table1").DefaultRowHeight = 35

DataTables("统计_Table1").DataCols("单价").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("期初_数量").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("期初_金额").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("进货_数量").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("进货_金额").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("销售_数量").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("库存_数量").SetFormat("#,###.00")

DataTables("统计_Table1").DataCols("库存_金额").SetFormat("#,###.00")

Tables("统计_Table1").ResumeRedraw

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

[此贴子已经被作者于2014-7-12 15:23:32编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/7/12 15:49:00 [只看该作者]

你希望怎么计算?

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/7/12 15:55:00 [只看该作者]

添加一个“单价”列,单价=(期初金额+入库金额)/(期初数量+入库数量)

库存金额 = 库存数量*单价

 

[此贴子已经被作者于2014-7-12 15:55:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/7/13 9:44:00 [只看该作者]

之前月进货数据用dt_jh 引用,当前月统计数据在dt1(统计表1),那么当前月的数量和金额应该怎样引用?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/13 10:01:00 [只看该作者]

 代码

 

'If DataTables.Contains("进货") = False Then
   ' DataTables.Load("进货|销售|退货")
'End If

With e.Form.Controls("日期")
    If .Value Is Nothing Then
        Return
    End If
End With
Tables("统计_Table1").StopRedraw
Dim Filter As String
Dim curD As Date=e.Form.Controls("日期").Value '当前日期
Dim lastD As Date = curD.AddMonths(-1) '上一个月的日期
Dim lastD2 As New Date(lastD.Year, lastD.Month, Date.DaysInMonth(lastD.Year,lastD.Month)) '上个月的最后一天
Filter = Filter &  "日期 > #" & lastD2 & "#" & " And 日期  <= #" & curD & "#"

Dim bd1 As New SQLGroupTableBuilder("统计表1","进货")
Dim dt1 As fxDataSource
bd1.Groups.AddDef("型号") '根据型号分组
bd1.Totals.AddDef("进货_数量","进货_数量") '对数量进行统计
bd1.Totals.AddDef("进货_金额","进货_金额") '对金额进行统计
bd1.Filter = Filter
dt1 = bd1.BuildDataSource()

Dim bd2 As New SQLGroupTableBuilder("统计表2","销售")
Dim dt2  As fxDataSource
bd2.Groups.AddDef("型号") '根据型号分组
bd2.Totals.AddDef("销售_数量","销售_数量") '对数量进行统计
bd2.Totals.AddDef("销售_金额","销售_金额") '对金额进行统计
bd2.Filter = Filter
dt2 = bd2.BuildDataSource()

Dim bd3 As New SQLGroupTableBuilder("统计表3","退货")
Dim dt3 As fxDataSource
bd3.Groups.AddDef("型号") '根据型号分组
bd3.Totals.AddDef("退货_数量","退货_数量") '对数量进行统计
bd3.Totals.AddDef("退货_金额","退货_金额") '对金额进行统计
bd3.Filter = Filter
dt3 = bd3.BuildDataSource()

dt1.Combine("型号",dt2,"型号") '将销售统计数据组合到进货统计数据
dt1.Combine("型号",dt3,"型号") '将退货统计数据组合到进货统计数据
Tables("统计_Table1").DataSource = dt1 '将统计结果绑定到Table

With DataTables("统计_Table1").DataCols  '用表达式列计算库存数据
    .Add("期初_数量",Gettype(Double),"","期初_数量")
    .Add("期初_金额",Gettype(Double),"","期初_金额")
End With

Filter = "日期 <=  #" & lastD2 & "#"
Dim dt_jh As DataTable
Dim dt_xs As DataTable
Dim dt_th As DataTable
Dim cmd As new SQLCommand
cmd.CommandText = "select * from {进货} where " & Filter
dt_jh = cmd.ExecuteReader
cmd.CommandText = "select * from {销售} where " & Filter
dt_xs = cmd.ExecuteReader
cmd.CommandText = "select * from {退货} where " & Filter
dt_th = cmd.ExecuteReader

For Each r As Row In Tables("统计_Table1").Rows   
    Filter = "型号 = '" & r("型号") & "'"
    r("期初_数量") = dt_jh.Compute("sum(进货_数量)", filter) - dt_xs.Compute("sum(销售_数量)", filter) - dt_th.Compute("sum(退货_数量)", filter)
    r("期初_金额") = dt_jh.Compute("sum(进货_金额)", filter) - dt_xs.Compute("sum(销售_金额)", filter) - dt_th.Compute("sum(退货_金额)", filter)
Next
With DataTables("统计_Table1").DataCols  '用表达式列计算库存数据
    .Add("库存_数量",Gettype(Double), "IsNull([期初_数量],0) + IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)","库存_数量")
    .Add("库存_金额",Gettype(Double), "IsNull([期初_金额],0) + IsNull([进货_金额],0) - ISNULL([销售_金额],0) - ISNULL([退货_金额],0)","库存_金额")
End With

DataTables("统计_Table1").DataCols.Add("进货_单价", Gettype(Double), "(期初_金额+进货_金额)/(期初_数量+进货_数量)")

Tables("统计_Table1").SetColVisibleWidth("型号|80|期初_数量|80|期初_金额|80|进货_单价|80|进货_数量|80|进货_金额|80|销售_数量|80|销售_金额|80|退货_数量|80|退货_金额|80|库存_数量|80|库存_金额|80")

Tables("统计_Table1").DefaultRowHeight = 35
DataTables("统计_Table1").DataCols("期初_数量").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("期初_金额").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("进货_数量").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("进货_金额").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("销售_数量").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("销售_金额").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("退货_数量").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("退货_金额").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("库存_数量").SetFormat("#,###.00")
DataTables("统计_Table1").DataCols("库存_金额").SetFormat("#,###.00")
Tables("统计_Table1").ResumeRedraw


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/7/13 10:09:00 [只看该作者]

慢慢消化先,类似的以后会常用。

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/7/15 21:19:00 [只看该作者]

With e.Form.Controls("日期")
    If .Value Is Nothing Then
        Return
    End If
End With
Tables("材料月报2_Table1").StopRedraw
Dim Filter As String
Dim curD As Date=e.Form.Controls("日期").Value '当前日期
Dim lastD As Date = curD.AddMonths(-1) '上一个月的日期
Dim lastD2 As New Date(lastD.Year, lastD.Month, Date.DaysInMonth(lastD.Year,lastD.Month)) '上个月的最后一天
Filter = Filter &  "日期 > #" & lastD2 & "#" & " And 日期  <= #" & curD & "#"

Dim jb As new SQLJoinTableBuilder("查询表2","计划排产")
jb.C
jb.Filter = Filter
jb.AddTable("计划排产","板料编码","材料","板料编码")
jb.AddCols("日期","实剪","{材料}.板料编码","{材料}.板料规格","宽","厚","长")
jb.AddExp("实重", "[实剪] * 7.85 * 0.9 * [厚] * [宽] * [长] / 1000000000")
jb.Build()

Dim bd1 As New GroupTableBuilder("统计表5", jb.BuildSQL,"服务器")
Dim dt1 As fxDataSource
Bd1.Groups.AddDef("日期",DateGroupEnum.Year,"年") '添加日期列用于分组,并用"年"代替原名称
bd1.Groups.AddDef("日期","月") '添加日期列用于分组,并用"月"代替原名称
bd1.Groups.AddDef("板料编码") '根据型号分组
bd1.Groups.AddDef("板料规格") '根据型号分组
bd1.Totals.AddDef("实剪","耗用_数量") '对数量进行统计
bd1.Totals.AddDef("实重","耗用_重量") '对金额进行统计
bd1.Filter = Filter
dt1 = bd1.BuildDataSource()

Dim bd2 As New SQLGroupTableBuilder("统计表6","材料入库")
Bd2.C
Dim dt2  As fxDataSource
Bd2.Groups.AddDef("日期",DateGroupEnum.Year,"年") '添加日期列用于分组,并用"年"代替原名称
bd2.Groups.AddDef("日期","月") '添加日期列用于分组,并用"月"代替原名称
bd2.Groups.AddDef("板料编码") '根据型号分组
Bd2.Groups.AddDef("板料规格") '根据型号分组
Bd2.Totals.AddDef("张数","入库_数量") '对数量进行统计
bd2.Totals.AddDef("重量","入库_重量") '对重量进行统计
bd2.Totals.AddDef("金额","入库_金额") '对重量进行统计
bd2.Filter = Filter
dt2 = bd2.BuildDataSource()
Dim nms As String() = {"年","月","板料编码","板料规格"} '指定连接列
dt2.Combine(nms,dt1,nms)
Tables("材料月报2_Table1").DataSource = dt2 '将统计结果绑定到Table

With DataTables("材料月报2_Table1").DataCols  '用表达式列计算库存数据  
    .Add("期初_数量",Gettype(Double),"","期初_数量")
    .Add("期初_重量",Gettype(Double),"","期初_重量")
    .Add("期初_金额",Gettype(Double),"","期初_金额")
End With
Filter = "日期 <=  #" & lastD2 & "#"
Dim dt_rk As DataTable
Dim dt_hy As DataTable
Dim cmd As new SQLCommand
Cmd. C
cmd.CommandText = "select * from {材料入库} where " & Filter
dt_rk = cmd.ExecuteReader
cmd.CommandText = "select {计划排产}.板料编码,{计划排产}.板料规格,日期,实剪 as 数量, 实剪 * 长 * 宽 * 厚 * 7.85 * 0.9 / 1000000000 AS 重量 FROM {计划排产} INNER JOIN {材料} ON {计划排产}.板料编码 = {材料}.板料编码  & Filter"
dt_hy = cmd.ExecuteReader

For Each r As Row In Tables("材料月报2_Table1").Rows
    Filter = "板料编码 = '" & r("板料编码") & "'"
    r("期初_数量") = dt_rk.Compute("sum(入库_数量)", filter) - dt_hy.Compute("sum(耗用_数量)", filter)
    r("期初_重量") = dt_rk.Compute("sum(入库_重量)", filter) - dt_hy.Compute("sum(耗用_重量)", filter)
   DataTables("材料月报2_Table1").DataCols.Add("加权平均单价", Gettype(Double), "(期初_金额+入库_金额)/(期初_重量+入库_重量)")
Next
With DataTables("材料月报2_Table1").DataCols  '用表达式列计算库存数据
    .Add("库存_数量",Gettype(Double), "IsNull([期初_数量],0) + IsNull([入库_数量,0) - ISNULL([耗用_数量],0)", "库存_数量")
    .Add("库存_重量",Gettype(Double), "IsNull([期初_重量],0) + IsNull([入库_重量],0) - ISNULL([耗用_重量],0) ", "库存_重量")
   
    .Add("库存_金额",Gettype(Double), "加权平均单价 * 库存_重量", "库存_金额")
   
End With
Tables("材料月报2_Table1").SetColVisibleWidth("年|30|月|30|板料编码|120|板料规格|120|加权平均单价|80|期初_数量|80|期初_重量|80|期初_金额|80|入库_数量|80|入库_重量|80|入库_金额|80|耗用_数量|80|耗用_重量|80|库存_数量|80|库存_重量|80|库存_金额|80")
Tables("材料月报2_Table1").DefaultRowHeight = 35
DataTables("材料月报2_Table1").DataCols("加权平均单价").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("期初_数量").SetFormat("#,###.")
DataTables("材料月报2_Table1").DataCols("期初_重量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("期初_金额").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("入库_数量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("入库_重量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("入库_金额").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("耗用_数量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("耗用_重量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("库存_数量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("库存_重量").SetFormat("#,###.00")
DataTables("材料月报2_Table1").DataCols("库存_金额").SetFormat("#,###.00")
Tables("材料月报2_Table1").ResumeRedraw


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/15 21:21:00 [只看该作者]

 什么 意思?

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2014/7/15 21:38:00 [只看该作者]

另外开了贴

 回到顶部