以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 【问题】积分折现计算没有按照预期规则,麻烦老师帮忙看看 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=172704) |
||||
-- 作者:cnsjroom -- 发布时间:2021/10/27 9:20:00 -- 【问题】积分折现计算没有按照预期规则,麻烦老师帮忙看看 想实现: 1、根据消费金额,按照消费金额*10得到本次积分,然后累计计算可用积分。 2、如果折扣方式_镜架或镜片,没有选择积分折现的话,那积分折现为零。可用积分等于本次积分加上历史所有本次积分之和。如果有选择积分折现的话,积分折现这将本次积分之前的上一次本次积分,也就是可用积分全部按照可用积分/100的方式换算成积分折现值,然后将本次积分计算为可用积分。今后的消费,按照这个规则进行累加循环往复。 当前代码如下: Select Case e.DataCol.Name Case "本次积分" Dim dr As DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") \'找出上一行 If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行 e.DataRow("可用积分") = e.DataRow("本次积分") - e.DataRow("积分折现") dr = e.DataRow End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("可用积分") = drs(i-1)("可用积分") + drs(i)("本次积分") - drs(i)("积分折现") Next Case "折扣方式_镜架","折扣方式_镜片" If e.DataRow("折扣方式_镜架") = "积分折现" orelse e.DataRow("折扣方式_镜片") = "积分折现" Then e.DataRow("积分折现")=e.DataRow("可用积分")/100 End If End Select 运行效果如下:【折扣方式没有选,积分折现不应该有值,结果却有了,积分折现后,可用积分没有对应减掉历史积分,正常时,折现后,可用积分应该=本次积分】 |
||||
-- 作者:有点蓝 -- 发布时间:2021/10/27 9:42:00 -- 正确的结果是怎么样的?手工填一个截图看看 |
||||
-- 作者:cnsjroom -- 发布时间:2021/10/27 11:07:00 -- 回复:(有点蓝)正确的结果是怎么样的?手工填一个截... 麻烦老师指导下 第一条:选择了积分折现之后 积分折现才计算当前所有可用积分并算出数字 清空折现之前的历史可用积分,然后可用积分就等于当前消费金额*10积分为当前新的可用积分,在没有折现之前,继续第二条规则 第二条:没有选择积分折现时,积分折现不计算,当前可用积分等于历史可用积分加上本次积分
|
||||
-- 作者:有点蓝 -- 发布时间:2021/10/27 12:05:00 -- 和Case "折扣方式_镜架","折扣方式_镜片" 的方法一样加个判断就行了 Select Case e.DataCol.Name Case "本次积分" Dim dr As DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") \'找出上一行 If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行 If e.DataRow("折扣方式_镜架") = "积分折现" orelse e.DataRow("折扣方式_镜片") = "积分折现" Then e.DataRow("可用积分") = e.DataRow("本次积分") - e.DataRow("积分折现") else 按计算无积分折现的方式计算 endif dr = e.DataRow End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 If e.DataRow("折扣方式_镜架") = "积分折现" orelse e.DataRow("折扣方式_镜片") = "积分折现" Then drs(i)("可用积分") = drs(i-1)("可用积分") + drs(i)("本次积分") - drs(i)("积分折现") else 按计算无积分折现的方式计算 endif Next |
||||
-- 作者:cnsjroom -- 发布时间:2021/10/27 17:13:00 -- 回复:(有点蓝)和Case "折扣方式_镜架","折扣方式_... 老师你好 还是没有能够成功达到预期 麻烦老师指导下 谢谢! 现在我从新架构了表 预期实现如下: 收款=消费金额-(积分折现+优惠金额) 1、当消费金额输入数字后,在进行会员折扣的选择,如果选择vip666,如果是第一次使用vip666,就将优惠金额写成1000.如果不是第一次,那就将优惠金额写成100。如果选择第一次积分折扣,本次可用积分=本次积分,可用积分为零,如果第二次选择积分折扣,可用积分等于上行本次积分之和,积分兑换就等于可用积分,全部进行兑换,然后计算积分折现=积分/100. 2、当收款为零时,本次积分为零。也就是说本次积分的换算=收款*10 3、第一行数据的可用积分为0,本次积分参照第2来计算。 4、第二行数据的可用积分等于第一行数据的本次积分,第二行数据本次积分参照第2来计算 5、第三行数据的可用积分等于第二行数据的可用积分+第三行数据的本次积分 6、假设第四行消费金额输入数字后,进行会员折扣的选择,如果选择积分折扣,就自动将第三行的可用积分列值进行全部兑换积分,积分折现换算=积分/100.本次金额大于零时,计算本次积分。 7、第五行数据的可用积分等于第四行数据的本次积分,因为第四行已经进行了所有积分兑换,所以第五行数据可用积分等于第四行的本次积分 【每次积分折扣都是将以往所有的积分全部折现,然后清除本次数据行可用积分,本次数据行的积分显示在本次积分中,并计算为下一行数据的可用积分。】
|
||||
-- 作者:有点蓝 -- 发布时间:2021/10/28 9:49:00 -- 正确的结果是怎么样的?手工填写截图看看 |
||||
-- 作者:cnsjroom -- 发布时间:2021/10/28 12:03:00 -- 回复:(有点蓝)正确的结果是怎么样的?手工填写截图... 正确数据应该如图:【麻烦老师看看 谢谢!】 第二条数据 可用积分等于第一条本次积分 因为第一次选择vip666 所以优惠金额等于1000 本次积分等于收款计算 第三条数据 选择积分折扣 可用积分等于第一条 本次积分 +第二条本次积分 =6000 然后直接折扣所有可用积分 扣减后 按照收款计算第三条本次积分 第四条数据 选择会员折扣 无优惠 可用积分 等于第三条本次积分 第五条数据 可用积分等于第四条的可用积分+本次积分 第二次选择vip666 优惠金额等于100【目前这个没有实现】不兑换积分 直接收款 计算本次积分 第六条数据 可用积分等于第五条可用积分+第五条本次积分 第三次选择vip666 优惠金额等于100 然后按收款计算本次积分 第七条数据 选择积分折扣 将本次可用积分全部兑换 然后计算本次积分 第八条数据 可用积分=第七条数据的本次积分 |
||||
-- 作者:有点蓝 -- 发布时间:2021/10/28 14:19:00 --
|
||||
-- 作者:cnsjroom -- 发布时间:2021/10/28 15:11:00 -- 回复:(有点蓝)[upload=zip,huiyuan.zip]viewFile.a... 谢谢老师的耐心指导 当前已经可以达到预期目标 但是在会员折扣选择积分折扣的时候 出现一个问题 第一次选择只有可用积分计算了 非要换成其它折扣方式 然后再选择积分折扣的时候 才计算积分兑换值 有没有办法解决呢?
|
||||
-- 作者:有点蓝 -- 发布时间:2021/10/28 15:22:00 -- 我花了2天时间才大概理解了一下您的逻辑,现在一说我又迷糊了。不用噼里啪啦搞一大推录入,看不懂的。请仔细说明哪一行录入什么数据计算有什么问题。正确的结果应该是怎么样的。 自己的业务自己最清楚,尽量先自己琢磨一下代码,尝试改,并不是别人改的功能也只能等着别人来改...
|