Foxtable(狐表)用户栏目专家坐堂 → 【问题】积分折现计算没有按照预期规则,麻烦老师帮忙看看


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

主题:【问题】积分折现计算没有按照预期规则,麻烦老师帮忙看看

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
【问题】积分折现计算没有按照预期规则,麻烦老师帮忙看看  发帖心情 Post By: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
图片点击可在新窗口打开查看


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)正确的结果是怎么样的?手工填一个截...  发帖心情 Post By:2021/10/27 11:07:00 [显示全部帖子]

麻烦老师指导下
第一条:选择了积分折现之后   积分折现才计算当前所有可用积分并算出数字  清空折现之前的历史可用积分,然后可用积分就等于当前消费金额*10积分为当前新的可用积分,在没有折现之前,继续第二条规则
第二条:没有选择积分折现时,积分折现不计算,当前可用积分等于历史可用积分加上本次积分

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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)和Case "折扣方式_镜架","折扣方式_...  发帖心情 Post By:2021/10/27 17:13:00 [显示全部帖子]

老师你好  还是没有能够成功达到预期   麻烦老师指导下   谢谢!

现在我从新架构了表
预期实现如下:
收款=消费金额-(积分折现+优惠金额)
1、当消费金额输入数字后,在进行会员折扣的选择,如果选择vip666,如果是第一次使用vip666,就将优惠金额写成1000.如果不是第一次,那就将优惠金额写成100。如果选择第一次积分折扣,本次可用积分=本次积分,可用积分为零,如果第二次选择积分折扣,可用积分等于上行本次积分之和,积分兑换就等于可用积分,全部进行兑换,然后计算积分折现=积分/100.
2、当收款为零时,本次积分为零。也就是说本次积分的换算=收款*10
3、第一行数据的可用积分为0,本次积分参照第2来计算。
4、第二行数据的可用积分等于第一行数据的本次积分,第二行数据本次积分参照第2来计算
5、第三行数据的可用积分等于第二行数据的可用积分+第三行数据的本次积分
6、假设第四行消费金额输入数字后,进行会员折扣的选择,如果选择积分折扣,就自动将第三行的可用积分列值进行全部兑换积分,积分折现换算=积分/100.本次金额大于零时,计算本次积分。
7、第五行数据的可用积分等于第四行数据的本次积分,因为第四行已经进行了所有积分兑换,所以第五行数据可用积分等于第四行的本次积分
【每次积分折扣都是将以往所有的积分全部折现,然后清除本次数据行可用积分,本次数据行的积分显示在本次积分中,并计算为下一行数据的可用积分。】
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:huiyuan.table




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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)正确的结果是怎么样的?手工填写截图...  发帖心情 Post By:2021/10/28 12:03:00 [显示全部帖子]

正确数据应该如图:【麻烦老师看看  谢谢!】

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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)[upload=zip,huiyuan.zip]viewFile.a...  发帖心情 Post By:2021/10/28 15:11:00 [显示全部帖子]

谢谢老师的耐心指导  当前已经可以达到预期目标

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

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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)我花了2天时间才大概理解了一下您的逻...  发帖心情 Post By:2021/10/28 15:40:00 [显示全部帖子]

不好意思哈  给老师添加麻烦了
是楼上的第四条数据    在第一次选择积分折扣的时候  没有进行积分兑换 积分折现 和收款计算
然后选择了其它折扣值之后  再次返回积分折扣 才正确计算了积分兑换  积分折现  和收款计算

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)截图静态图说明,不要使用动图,看着...  发帖心情 Post By:2021/10/28 16:04:00 [显示全部帖子]

新增数据第一次选择积分折扣   画框数据没有变化【理想状态是第一次选择积分折扣 就对应完成第三图的操作  不需要第二图操作再完成第三图操作】

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
新增数据后,选择会员折扣  

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看
选择会员折扣后   在选择积分折扣【数据正常,已经兑换积分 并进行了积分折现】

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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:huiyuan.table



[此贴子已经被作者于2021/10/28 16:05:00编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
[原创]带审核流程控制、企业微信和钉钉开发、项目甘特图管理的开发框架,隆重推出,适合初学者的框架  发帖心情 Post By:2021/10/28 18:27:00 [显示全部帖子]

根据老师的提醒  当前代码修整如下:【基本实现可以预期效果】  代码看似有些繁琐,想麻烦老师继续指导下 看看代码怎么优化  谢谢

当前代码:
Select Case e.DataCol.Name
    Case "会员折扣"
        
        If e.DataRow("会员折扣") = "vip666" Then
            If e.DataTable.Find("会员折扣='vip666' and _SortKey < " & e.DataRow("_SortKey") ) Is Nothing Then
                e.DataRow("优惠金额")=1000
            Else
                e.DataRow("优惠金额")=100
            End If
            Dim je As Integer = e.DataRow("消费金额")- e.DataRow("优惠金额")
            If je < 0 Then je = 0
            e.DataRow("收款")= je
        Else If e.DataRow("会员折扣") = "积分折扣" Then
            
        Else If e.DataRow("会员折扣") = "会员折扣" Then
            e.DataRow("优惠金额")=0
            e.DataRow("收款")= e.DataRow("消费金额")
        End If
        
        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("会员折扣") = "积分折扣"   Then
                e.DataRow("可用积分") = 0 'e.DataRow("本次积分") - e.DataRow("兑换积分")
            Else
                e.DataRow("可用积分") = e.DataRow("本次积分")   
            End If
            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("会员折扣") = "积分折扣"  Then
                drs(i)("可用积分") = drs(i-1)("可用积分") + drs(i-1)("本次积分") - drs(i)("兑换积分")
                e.DataRow("积分折现")=e.DataRow("可用积分")/100
                e.DataRow("兑换积分")=e.DataRow("可用积分")
                e.DataRow("可用积分")=0
                e.DataRow("优惠金额")=0
                e.DataRow("收款")= e.DataRow("消费金额")- e.DataRow("积分折现")
            Else
                drs(i)("可用积分") = drs(i-1)("可用积分") + drs(i-1)("本次积分")  
            End If
        Next
        
    Case "收款"
        
        If e.DataRow("收款") > 0 Then
            e.DataRow("本次积分")=e.DataRow("收款")*10
        Else
            e.DataRow("收款")=0
            e.DataRow("本次积分")=0
        End If

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)    Case "会员折扣" ...  发帖心情 Post By:2021/10/31 15:44:00 [显示全部帖子]

谢谢老师的耐心指导,
在上述中,运行时会出现消费金额较小  但是可用积分值较大   有可能收款为负值。
想实现:如果消费金额*10得到的积分  小于可用积分   那兑换积分就只能等于消费金额*10的结果  且积分折现就只能最大折现到80  收款最小只能 消费金额-积分折现=0  剩余未可用积分未兑换完毕的  继续累积到下一条数据的可用积分

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


 回到顶部