以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求助:信用卡可用额度计算问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92247) |
-- 作者:李孝春 -- 发布时间:2016/10/29 22:52:00 -- 求助:信用卡可用额度计算问题 信用卡可用额度计算 当前一行的时候是: 收入—支出=余额 可用额度=额度+余额 不知道这样的设计是否符合逻辑啊? 但是怎么计算多行数据呢?多行数据的时候 额度是不是要累加呢?然后再加余额呢? 上述有一个不合理的地方 支出不应该大于当前可用余额,但是结果却出现了多次大于的情况,求解! 当前表事件代码如下: Select Case e.DataCol.Name Case "余额" If e.DataRow("银行卡类别")="信用卡" Then e.DataRow("可用额度")=e.DataRow("额度")+e.DataRow("余额") If e.DataRow("可用额度")<0 Then MessageBox.Show("当前透支" & e.DataRow("可用额度") & "元") End If End If \'(e.DataRow("收入")+e.DataRow("支出"))) Case "收入","支出","银行卡卡号" Dim drs As List(of DataRow) Dim Filter As String Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & "And [银行卡卡号] = \'" & e.DataRow("银行卡卡号") & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [银行卡卡号] = \'" & e.DataRow("银行卡卡号") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(收入)",Filter) Dim Val2 As Double = e.DataTable.Compute("Sum(支出)",Filter) dr("余额") = Val1 - Val2 Next If e.DataCol.Name = "银行卡卡号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [银行卡卡号] = \'" & e.OldValue & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [银行卡卡号]= \'" & e.DataRow("银行卡卡号") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(收入)",Filter) Dim Val2 As Double = e.DataTable.Compute("Sum(支出)",Filter) dr("余额") = Val1 - Val2 Next End If End Select 烦请各位老师多多指导啊 谢谢先!
[此贴子已经被作者于2016/10/31 16:49:43编辑过]
|
-- 作者:李孝春 -- 发布时间:2016/10/31 16:51:00 -- 回复:(李孝春)求助:信用卡可用额度计算问题 各位老师多多指导啊 谢谢! |
-- 作者:有点蓝 -- 发布时间:2016/10/31 17:39:00 -- 没看懂你的意思 |
-- 作者:李孝春 -- 发布时间:2016/11/1 9:12:00 -- 回复:(有点蓝)没看懂你的意思 支出不应该大于当前可用余额,但是结果却出现了多次大于的情况,求解! 信用卡可用余额是最后的刷卡额度 支出就不应该大于这个刷卡额度 收入(信用卡进账金额) 支出(刷卡金额) 额度(信用卡下卡额度) 可用额度(信用卡还可以刷卡的剩余额度)
|
-- 作者:有点蓝 -- 发布时间:2016/11/1 9:53:00 -- DataColChanging事件 Select Case e.DataCol.Name Case "支出" If e.DataRow.IsNull("支出") = False Then Dim Filter As String = "[_SortKey] < " & e.DataRow("_SortKey") & " And [银行卡卡号] = \'" & e.DataRow("银行卡卡号") & "\'" Dim dr As DataRow = e.DataTable.Find(Filter ,"[_SortKey] desc") If dr Is Nothing Then If e.NewValue > 25000 Then msgbox("额度已超") e.Cancel = True End If Else If e.NewValue > dr("可用额") Then msgbox("额度已超") e.Cancel = True End If End If End If End Select |
-- 作者:李孝春 -- 发布时间:2016/11/1 10:01:00 -- 回复:(有点蓝)DataColChanging事件Select Case e.D... 有点蓝老师 楼上代码是实现如果支出>25000 或者支出大于可用额度时候就提示已超出额度。 现在问题的关键是 为什么刚开始的时候都是正确的 后续会断断续续计算的值不等了,是不是在计算方法上有误呢? 我的计算是如下: 收入-支出=余额 可用额度=额度+余额 表中的数据都是按照银行账单对应一一录下来的,但是计算起来却不平衡 不知道有点蓝老师是否有更加合理的解决办法呢? 或者说是不是我的计算有误?
|
-- 作者:有点青 -- 发布时间:2016/11/1 10:40:00 -- 删除掉,重置列,重新计算一次。如果重置列计算正确,算法就应该是没错的。
有可能是你在录入的过程中反复修改后导致的错误。 |
-- 作者:李孝春 -- 发布时间:2016/11/1 16:35:00 -- 回复:(有点青) 删除掉,重置列,重新计算一次... 支出这个是账单上的数据 所以是没有问题的 可用额度一般怎么理解呢? 信用卡额度-(支出+收入)=可用额度? 信用卡额度-余额=可用额度? 貌似这两个理解没有不一样吧 不知道有点青老师 有没有办法噶!请多多指教
|
-- 作者:有点蓝 -- 发布时间:2016/11/1 17:42:00 -- 确定账单录入的顺序是对的,或者中间没有缺少数据。如果数据确实是这样的,要问银行才行了,明显支出是远远超过额度了 |