Foxtable(狐表)用户栏目专家坐堂 → 关于月结表的小数计算问题


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

主题:关于月结表的小数计算问题

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
关于月结表的小数计算问题  发帖心情 Post By:2015/9/19 19:23:00 [显示全部帖子]

如何使""上月结存_金额"" = 上月的月末结存_金额

图片点击可在新窗口打开查看此主题相关图片如下:月结表.jpg
图片点击可在新窗口打开查看

以下是生成月结表的代码
DataTables("材料月结").DataRows.Clear
Dim Arys As List(Of String())
Arys = DataTables("材料明细").GetValues("月|材料分类|材料名称|型号规格","月 >= '" & e.Form.Controls("起始月").Text & "' And 月 <= '" & e.Form.Controls("截止月").Text & "' ")
For Each Ary As String() In Arys
    Dim r As Row = Tables("材料月结").AddNew
    r("月") = Ary(0)
    r("材料分类") = Ary(1)
    r("材料名称") = Ary(2)
    r("型号规格") = Ary(3)
Next
Dim dt As DataTable = DataTables("材料明细")
For Each dr As DataRow In DataTables("材料月结").DataRows
    Dim Filter As String = "材料分类 = '" & dr("材料分类") & "' and 材料名称 = '" & dr("材料名称") & "' and 型号规格 = '" & dr("型号规格") & "'"
    Dim Sum,Sum1 As Double
    
    dr("本月入仓_数量") = dt.Compute("Sum(入仓数量)",Filter & " And 月 = '" & dr("月") & "'")
    dr("本月入仓_金额") = dt.Compute("Sum(入仓金额)",Filter & " And 月 = '" & dr("月") & "'")
    dr("本月出仓_数量") = dt.Compute("Sum(出仓数量)",Filter & " And 月 = '" & dr("月") & "'")
    dr("上月结存_数量") = dt.Compute("Sum(入仓数量)",Filter & " And 月 < '" & dr("月") & "'") - dt.Compute("Sum(出仓数量)",Filter & " And 月 < '" & dr("月") & "'")
    Sum = DataTables("材料明细").Compute("Sum(入仓金额)",Filter & " And 月 < '" & dr("月") & "'")
    Sum1 = DataTables("材料明细").Compute("Sum(入仓数量)",Filter & " And 月 < '" & dr("月") & "'")
    dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")
    dr("本月结存_数量") = dr("上月结存_数量") + dr("本月入仓_数量") - dr("本月出仓_数量")
    dr("本月加权平均单价") = (dr("上月结存_金额") + dr("本月入仓_金额"))/(dr("上月结存_数量") + dr("本月入仓_数量"))
    dr("本月出仓_金额") = dr("本月加权平均单价") * dr("本月出仓_数量")
    dr("本月结存_金额") = dr("本月加权平均单价") * dr("本月结存_数量")
    'dr("本月结存_金额") = dr("上月结存_金额") + dr("本月入仓_金额") - dr("本月出仓_金额") 
Next

[此贴子已经被作者于2015/9/19 19:23:51编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 11:55:00 [显示全部帖子]

有老师指点一下吗?
例: 第2行的"上月结存_金额" = 第1行的"本月结存_金额"

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 12:50:00 [显示全部帖子]

大红袍老师,我的问题不是这样的

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 13:26:00 [显示全部帖子]

to 5楼:我已经改过"本月结存_金额",得不到我要的结果
不知道我1楼和2楼的描述是否明确
[此贴子已经被作者于2015/9/20 13:27:21编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 13:47:00 [显示全部帖子]

大红袍老师,这是企业财务需要的仓库材料月结表,该表是通过"材料明细"统计计算得来的,1楼的代码就是计算过程和结果。正确的结果是:“上月结存_金额”应等于上一行的 "本月结存-金额",由于有小数,所以计算结果产生了误差,数据越多,误差越大。(数量列没有误差)现在我想直接用代码设置第2行的"上月结存_金额" = 第1行的"本月结存_金额"

"材料月结“实际上是一个统计表
[此贴子已经被作者于2015/9/20 13:47:51编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 13:59:00 [显示全部帖子]

有个问题:1楼图例是数据是经过筛选的,5楼代码得不到想要的结果

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 14:15:00 [显示全部帖子]

希望类似以下代码
Tables("材料月结").Cols("上月结存_金额").position = Tables("材料月结").Cols("本月结存_金额").Position - 1

to 11楼:以下是运算结果(错误) (你给的代码放在Button5按钮中)

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

[此贴子已经被作者于2015/9/20 14:16:43编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 14:19:00 [显示全部帖子]

以下是"生成报表1"的按钮代码,红色的部分修改了一下,还是不行.(先运行生成报表1按钮,再运行Button 按钮)
DataTables("材料月结").DataRows.Clear
Dim Arys As List(Of String())
Arys = DataTables("材料明细").GetValues("月|材料分类|材料名称|型号规格","月 >= '" & e.Form.Controls("起始月").Text & "' And 月 <= '" & e.Form.Controls("截止月").Text & "' ")
For Each Ary As String() In Arys
    Dim r As Row = Tables("材料月结").AddNew
    r("月") = Ary(0)
    r("材料分类") = Ary(1)
    r("材料名称") = Ary(2)
    r("型号规格") = Ary(3)
Next
Dim dt As DataTable = DataTables("材料明细")
For Each dr As DataRow In DataTables("材料月结").DataRows
    Dim Filter As String = "材料分类 = '" & dr("材料分类") & "' and 材料名称 = '" & dr("材料名称") & "' and 型号规格 = '" & dr("型号规格") & "'"
    Dim Sum,Sum1,P As Double
    
    dr("本月入仓_数量") = dt.Compute("Sum(入仓数量)",Filter & " And 月 = '" & dr("月") & "'")
    dr("本月入仓_金额") = dt.Compute("Sum(入仓金额)",Filter & " And 月 = '" & dr("月") & "'")
    dr("本月出仓_数量") = dt.Compute("Sum(出仓数量)",Filter & " And 月 = '" & dr("月") & "'")
    dr("上月结存_数量") = dt.Compute("Sum(入仓数量)",Filter & " And 月 < '" & dr("月") & "'") - dt.Compute("Sum(出仓数量)",Filter & " And 月 < '" & dr("月") & "'")
    Sum = DataTables("材料明细").Compute("Sum(入仓金额)",Filter & " And 月 < '" & dr("月") & "'")
    Sum1 = DataTables("材料明细").Compute("Sum(入仓数量)",Filter & " And 月 < '" & dr("月") & "'")
    'dr("上月结存_金额") = Sum / Sum1 * dr("上月结存_数量")
    P = Sum / Sum1 * dr("上月结存_数量")
    dr("本月结存_数量") = dr("上月结存_数量") + dr("本月入仓_数量") - dr("本月出仓_数量")
    dr("本月加权平均单价") = (P + dr("本月入仓_金额"))/(dr("上月结存_数量") + dr("本月入仓_数量"))
    dr("本月出仓_金额") = dr("本月加权平均单价") * dr("本月出仓_数量")
    dr("本月结存_金额") = dr("本月加权平均单价") * dr("本月结存_数量")
    'dr("本月结存_金额") = dr("上月结存_金额") + dr("本月入仓_金额") - dr("本月出仓_金额") 
    

Next

[此贴子已经被作者于2015/9/20 14:20:04编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 14:49:00 [显示全部帖子]

计算结果还是不对

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2015/9/20 14:59:00 [显示全部帖子]

14楼的代码,我修改了两处:
1 加了   P = Sum / Sum1 * dr("上月结存_数量")
2 修改   dr("上月结存_金额") = pdr("月结存_金额")
计算结果如图 (接近要求,只是"上月结存_金额"第一行应该有数据,就像1楼图例)

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

[此贴子已经被作者于2015/9/20 14:59:33编辑过]

 回到顶部
总数 12 1 2 下一页