以文本方式查看主题

-  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

运行效果如下:【折扣方式没有选,积分折现不应该有值,结果却有了,积分折现后,可用积分没有对应减掉历史积分,正常时,折现后,可用积分应该=本次积分】

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20211027091007.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/10/27 9:42:00
--  
正确的结果是怎么样的?手工填一个截图看看
--  作者:cnsjroom
--  发布时间:2021/10/27 11:07:00
--  回复:(有点蓝)正确的结果是怎么样的?手工填一个截...
麻烦老师指导下
第一条:选择了积分折现之后   积分折现才计算当前所有可用积分并算出数字  清空折现之前的历史可用积分,然后可用积分就等于当前消费金额*10积分为当前新的可用积分,在没有折现之前,继续第二条规则
第二条:没有选择积分折现时,积分折现不计算,当前可用积分等于历史可用积分加上本次积分

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20211027110332.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间: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、第五行数据的可用积分等于第四行数据的本次积分,因为第四行已经进行了所有积分兑换,所以第五行数据可用积分等于第四行的本次积分
【每次积分折扣都是将以往所有的积分全部折现,然后清除本次数据行可用积分,本次数据行的积分显示在本次积分中,并计算为下一行数据的可用积分。】
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:huiyuan.table




--  作者:有点蓝
--  发布时间:2021/10/28 9:49:00
--  
正确的结果是怎么样的?手工填写截图看看
--  作者:cnsjroom
--  发布时间:2021/10/28 12:03:00
--  回复:(有点蓝)正确的结果是怎么样的?手工填写截图...
正确数据应该如图:【麻烦老师看看  谢谢!】

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20211028114648.png
图片点击可在新窗口打开查看
第一条数据  可用积分开始为0  根据消费金额得到本次积分
第二条数据  可用积分等于第一条本次积分  因为第一次选择vip666 所以优惠金额等于1000    本次积分等于收款计算
第三条数据  选择积分折扣   可用积分等于第一条 本次积分  +第二条本次积分  =6000  然后直接折扣所有可用积分   扣减后 按照收款计算第三条本次积分
第四条数据   选择会员折扣  无优惠   可用积分 等于第三条本次积分
第五条数据 可用积分等于第四条的可用积分+本次积分 第二次选择vip666  优惠金额等于100【目前这个没有实现】不兑换积分  直接收款 计算本次积分
第六条数据 可用积分等于第五条可用积分+第五条本次积分  第三次选择vip666 优惠金额等于100 然后按收款计算本次积分
第七条数据  选择积分折扣  将本次可用积分全部兑换  然后计算本次积分
第八条数据  可用积分=第七条数据的本次积分


--  作者:有点蓝
--  发布时间:2021/10/28 14:19:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:huiyuan.zip


--  作者:cnsjroom
--  发布时间:2021/10/28 15:11:00
--  回复:(有点蓝)[upload=zip,huiyuan.zip]viewFile.a...
谢谢老师的耐心指导  当前已经可以达到预期目标

但是在会员折扣选择积分折扣的时候  出现一个问题  第一次选择只有可用积分计算了
非要换成其它折扣方式 然后再选择积分折扣的时候  才计算积分兑换值    有没有办法解决呢?

图片点击可在新窗口打开查看此主题相关图片如下:gif 2021-10-28 15-06-23.gif
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/10/28 15:22:00
--  
我花了2天时间才大概理解了一下您的逻辑,现在一说我又迷糊了。不用噼里啪啦搞一大推录入,看不懂的。请仔细说明哪一行录入什么数据计算有什么问题。正确的结果应该是怎么样的。

自己的业务自己最清楚,尽量先自己琢磨一下代码,尝试改,并不是别人改的功能也只能等着别人来改...