以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 向表达式列总额增加金额 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103080) |
-- 作者:Darcylau -- 发布时间:2017/6/30 11:02:00 -- 向表达式列总额增加金额 尊敬的学长、兄台: 我司的淋浴房是定制产品,在订单表中输入产品尺寸后,关联调用产品表的平方单价,订单表的产品的标配总价会自动计算。这个我已经实现了。 订单表中有一个数值列“门头高”,当客户要门头时,要加收100元的定制费,在数值列“门头高”输入门头的高度后,如何实现在已经生产的标配总价中自动加上100元呢? 我在订单表的datacolchanged表事件中写如下代码。 Select Case e.DataCol.name Case "门头高" If e.DataRow("门头高") > 0 Then e.DataRow("标配总价") = e.DataRow("标配总价") + 100 End If End Select 出现运行错误提示“调用的目标发生了异常”,点击显示详细形象后,显示 “列"总额"为只读”。 请问是不是表达列只能是只读的,或者说是我的代码错误,请赐教。 [此贴子已经被作者于2017/6/30 11:25:18编辑过]
|
-- 作者:有点蓝 -- 发布时间:2017/6/30 11:20:00 -- 1、表达列只能是只读 2、不是上面代码的问题,检查其它代码
|
-- 作者:有点甜 -- 发布时间:2017/6/30 11:34:00 -- 为什么不能直接修改表达式?
假如本来的表达式是 Sum(Child(po).金额)
那就改成
iif(门头高>0, Sum(Child(po).金额)+100, Sum(Child(po).金额))
http://www.foxtable.com/webhelp/scr/0102.htm
[此贴子已经被作者于2017/6/30 11:34:16编辑过]
|
-- 作者:Darcylau -- 发布时间:2017/6/30 11:37:00 -- 谢谢您的回复! 标配总价的表达式是: 平方价 *([产品宽度] / 1000 + IsNull([产品深度] / 1000,0)) * ([产品高度] + isnull([门头高],0))/ 1000 * [数量] * (1 - IsNull(价格折扣,0)) 计算都没有问题。 订单表的datacolchanged表事件中全部代码如下: Select Case e.DataCol.name Case "商户号" Dim cu As DataRow = DataTables("客户表").find("商户号 = \'" & e.newvalue & "\'") If cu IsNot Nothing Then \'如果找到了 e.DataRow("价格折扣") = cu("价格折扣") End If If e.DataRow("商户号") = Nothing e.DataRow("价格折扣") = Nothing End If Case "型号" Dim pr As DataRow = DataTables("淋浴房产品表").find("型号 = \'" & e.newvalue & "\'") If pr IsNot Nothing Then \'如果找到了 e.DataRow("平方价") = pr("平方价") e.DataRow("特价") = pr("特价") If e.DataRow("特价") = True e.DataRow("价格折扣") = 0 End If Else e.DataRow("特价") = Nothing e.DataRow("平方价") = Nothing End If Case "门头高" If e.DataRow("门头高") > 0 Then e.DataRow("标配总价") = e.DataRow("标配总价") + 100 End If End Select 前两个Case代码测试过,没有问题。我们要实现是在数值列“门头高”输入门头的高度后,如何实现按上述表达式生产的标配总价中再自动加上100元的门头定制费? 为此加上上述最后一个Case "门头高"的代码后,运行就出错了,没有实现我们想要的。
|
-- 作者:Darcylau -- 发布时间:2017/6/30 12:10:00 -- 醍醐灌顶,初学中,非常感谢您! 表达式如下,分段显示方便阅读: iif(门头高>0, 平方价 *([产品宽度] / 1000 + IsNull([产品深度] / 1000,0)) * ([产品高度] + isnull([门头高],0))/ 1000 * [数量] * (1 - IsNull(价格折扣,0))+100, 平方价 *([产品宽度] / 1000 + IsNull([产品深度] / 1000,0)) * ([产品高度] + isnull([门头高],0))/ 1000 * [数量] * (1 - IsNull(价格折扣,0))) 感觉代码好长 :-), 不过测试通过了。 现在还有两个数据列要影响总额: 1,如果外包装钉木架,勾选逻辑列“是否钉木架”,则标配总价加45元; 2, 如果淋浴房门带锁,填入微整数列“带锁个数”,输入1,则标配总价加加60元,输入2,则加120元; iff函数应该是做不到吧? 请赐教,感谢您!
|
-- 作者:有点蓝 -- 发布时间:2017/6/30 12:13:00 -- 平方价 *([产品宽度] / 1000 + IsNull([产品深度] / 1000,0)) * ([产品高度] + isnull([门头高],0))/ 1000 * [数量] * (1 - IsNull(价格折扣,0)) + IIF(门头高>0,100,0) + IIF(是否钉木架=true,45,0)+ IIF(...... |
-- 作者:有点甜 -- 发布时间:2017/6/30 12:18:00 -- 一样的,可以嵌套iif的。多个iif也可以相加。
iif(条件1, 公式1, 公式2) + iif(条件2, 公式1, 公式2) |
-- 作者:Darcylau -- 发布时间:2017/6/30 12:55:00 -- 谢谢您! 简化了表达式,是否钉木架实现了自动加45元! 可是带锁数量,是个变量,我试了加上如下代码: + IIF(带锁个数 = e.newvalue,e.newvalue*70,0) 实现不了,提示附近所示的错误。 请赐教,谢谢!
|
-- 作者:Darcylau -- 发布时间:2017/6/30 14:01:00 -- 您忙吧? 不好意思这么频繁地打扰您。 加锁一般是1个或者2个,我就直接这样写了,可以了。 + IIF(带锁个数=1,70,0) + IIF(带锁个数=2,140,0) 谢谢您!
|
-- 作者:有点甜 -- 发布时间:2017/6/30 14:12:00 -- 直接写成这样即可
带锁个数 * 70 |