以文本方式查看主题

-  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=151968)

--  作者:hopestarxia
--  发布时间:2020/7/8 3:33:00
--  金额分摊余额
老师,窗口中有NumericComboBox2插件,以及表Table1;
现在想在NumericComboBox2中输入数值后,实现将输入的数值分摊到Table1表中行明细列,
例如分摊金额列为 r("amount"),求出应该分摊比例的公式取行数据和表汇总数据r("tjs") / t.Compute("Sum(tjs)")

执行按钮代码如下:
Dim t As Table = e.form.Controls("Table1").Table
For Each r As Row In t.Rows
    r("amount") = e.Form.Controls("NumericComboBox2").value * r("tjs") / t.Compute("Sum(tjs)")
Next
执行以上代码后,分摊金额计算完毕,但是结果会产生小数,例分摊金额为1000元,可以最的每行合计起来等于1000.01元或999.99元等,明细加起来和总额正负差几分钱范围内。

增加如下代码,想实现将汇总多余的部份加减到窗口表中第一行里面,达到明细加起来等于录入的总金额,代码如下:
Dim r1 As Row = Tables("分配费用_Table1").Rows(0)
 r1("amount")  = 0
 r1("amount")  = e.Form.Controls("NumericComboBox2").value - t.Compute("Sum(amount)")

请问代码为何无效?没关有实现效果

--  作者:有点蓝
--  发布时间:2020/7/8 8:54:00
--  
tjs、amount列改为高精度类型列

没有实现效果看看是不是有其他代码影响了

--  作者:hopestarxia
--  发布时间:2020/7/13 20:45:00
--  
谢谢老师,前面是我的小数位太多了,我后面调整了一下可以了。
--  作者:lds
--  发布时间:2021/4/20 14:44:00
--  这个怎么取两位小数啊,
Dim t As Table = e.form.Controls("Table1").Table
For Each r As Row In t.Rows
    r("amount") = e.Form.Controls("NumericComboBox2").value * r("tjs") / t.Compute("Sum(tjs)")
Next
根据你的代码我设置了随机分割金额, DataTables("金额").DataRows.Clear() 
Dim hs As Double= e.Form.Controls("NumericComboBox2").value
Tables("金额").AddNew(hs)
DataTables("金额").DataCols("金额").SetFormat("0.00")
Dim t As Table = e.form.Controls("Table5").Table
For Each r As Row In t.Rows
    r("金额") = e.Form.Controls("NumericComboBox1").value * r("序号") / t.Compute("Sum(序号)")
Next

Dim r1 As Row = Tables("金额").Rows(0)

 r1("金额")  = 0
 r1("金额")  = e.Form.Controls("NumericComboBox1").value - t.Compute("Sum(金额)")
Tables("金额").Cols("金额").GrandTotal = True
Tables("金额").GrandTotal = True
 左边是没有格式的实际四位小数金额,右边是保留格式化的金额,希望除完实际最多就是两位小数的金额该怎么设置呢?

--  作者:有点蓝
--  发布时间:2021/4/20 14:52:00
--  
参考:http://www.foxtable.com/webhelp/topics/0361.htm

r1("金额")  = Round2(e.Form.Controls("NumericComboBox1").value - t.Compute("Sum(金额)"),2)

--  作者:lds
--  发布时间:2021/4/20 15:05:00
--  
收到,谢谢了.