以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于某日期与不同时段日期对比的判断  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120433)

--  作者:polo_luo
--  发布时间:2018/6/15 11:43:00
--  [求助]关于某日期与不同时段日期对比的判断
求助用代码计算出利息计算明细

从利率表的“利率更改日期”列取得日期
用个人借款表的当前行存款日期 对比 利率表的“利率更改日期”列的日期,逐行以年为间隔列出每行,
如果利息计算的“结束时间”列的相应行日期大于 利率表的“利率更改日期”列的相应期间日期,即等于利率表的“利率更改日期”列的相应期间日期
如EXCEL图的第5行,因为2004-2-10加1年后是2005-2-9,但因为利息表的变更日期为2004-5-1,所以不能是2005-2-9而改为2004-4-30.       同理第18行也是要少于利率表变更日期2017-4-1,所以该行改为2017-3-31

--  作者:polo_luo
--  发布时间:2018/6/15 11:46:00
--  
相关表截图
--  作者:polo_luo
--  发布时间:2018/6/15 11:48:00
--  

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

--  作者:polo_luo
--  发布时间:2018/6/15 11:50:00
--  

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

EXCEL图

--  作者:有点甜
--  发布时间:2018/6/15 11:55:00
--  

思路:从开始日期一年一年累加生成每一行数据。累加一年之后,查找当年是否有利率修改(有多少次修改就增加多少行),然后开始日期、结束日期改变一下即可。

 

不会做请上传具体foxtable项目。


--  作者:polo_luo
--  发布时间:2018/6/15 11:55:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3_201806151151.zip


--  作者:有点甜
--  发布时间:2018/6/15 12:46:00
--  

Dim dt1 As DataTable = DataTables("个人借款")
Dim dt2 As DataTable = DataTables("利率表")
Dim dt3 As DataTable = DataTables("利息计算")
For Each dr As DataRow In dt1.Select("")
    dt3.DeleteFor("单据编号=\'" & dr("单据编号") & "\'")
    Dim d1 As Date = dr("存款日期")
    Dim d2 As Date = dr("归还日期")
    Dim d = d1
    Dim bj As Double= dr("借入金额")
    Dim kssj As Date = dr("存款日期")
    Dim jssj As Date = kssj.AddYears(1).AddDays(-1)
    Dim dr_nll As DataRow = dt2.Find("利率更改日期<#" & d & "#", "利率更改日期 desc")
    Do While d <= d2
        Dim nd = new Date(d.year, 1, 1)
        Dim drs = dt2.Select("利率更改日期>=#" & d & "# and 利率更改日期<#" & d.addyears(1) & "#")
        Dim nll As Double = dr_nll("年利率")
        Dim ndr As DataRow
        For Each cdr As DataRow In drs
            ndr = dt3.addnew
            ndr("单据编号") = dr("单据编号")
            ndr("本金") = bj
            ndr("开始时间") = kssj
            jssj = cdate(cdr("利率更改日期")).adddays(-1)
            ndr("结束时间") = jssj
            ndr("天数") = (jssj-kssj).TotalDays+1
            ndr("年利率") = nll
            ndr("利息金额") = bj*nll/100*ndr("天数")/365
            kssj=jssj.adddays(1)
            jssj=jssj.addyears(1)
            bj = bj+ndr("利息金额")
            dr_nll = cdr
            nll = cdr("年利率")
        Next
        ndr = dt3.addnew
        ndr("单据编号") = dr("单据编号")
        ndr("本金") = bj
        ndr("开始时间") = kssj
        ndr("结束时间") = jssj
        ndr("天数") = (jssj-kssj).TotalDays+1
        ndr("年利率") = nll
        ndr("利息金额") = bj*nll/100
        kssj=kssj.addyears(1)
        jssj=jssj.addyears(1)
        bj = bj+bj*nll/100
        d = kssj
    Loop
Next

 

 

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


--  作者:polo_luo
--  发布时间:2018/6/15 17:37:00
--  
非常非常感谢版主

这好些复杂,需要消化

用按钮测试上面代码,出现:

NET Framework 版本:2.0.50727.8784
Foxtable 版本:2018.3.9.1
错误所在事件:窗口,筛选树,Button4,Click
详细错误信息:
未将对象引用设置到对象的实例。

但利息计算明细还是出来了。


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180615172938.png
图片点击可在新窗口打开查看
但最后一行的日期去到2019年了,应该不能超过今天或归还日期列的日期
第二笔的利息明细没有出来



--  作者:有点甜
--  发布时间:2018/6/15 17:51:00
--  

Dim dt1 As DataTable = DataTables("个人借款")
Dim dt2 As DataTable = DataTables("利率表")
Dim dt3 As DataTable = DataTables("利息计算")
For Each dr As DataRow In dt1.Select("")
    dt3.DeleteFor("单据编号=\'" & dr("单据编号") & "\'")
    Dim d1 As Date = dr("存款日期")
    Dim d2 As Date = dr("归还日期")
    Dim d = d1
    Dim bj As Double= dr("借入金额")
    Dim kssj As Date = dr("存款日期")
    Dim jssj As Date = kssj.AddYears(1).AddDays(-1)
    Dim dr_nll As DataRow = dt2.Find("利率更改日期<#" & d & "#", "利率更改日期 desc")
    Do While d <= d2
        Dim nd = new Date(d.year, 1, 1)
        Dim drs = dt2.Select("利率更改日期>=#" & d & "# and 利率更改日期<#" & d.addyears(1) & "#")
        Dim nll As Double = 0
        If dr_nll IsNot Nothing Then nll=dr_nll("年利率")
        Dim ndr As DataRow
        For Each cdr As DataRow In drs
            ndr = dt3.addnew
            ndr("单据编号") = dr("单据编号")
            ndr("本金") = bj
            ndr("开始时间") = kssj
            jssj = cdate(cdr("利率更改日期")).adddays(-1)
            jssj = iif(jssj > dr("归还日期"), dr("归还日期"), jssj)
            ndr("结束时间") = jssj
            ndr("天数") = (jssj-kssj).TotalDays+1
            ndr("年利率") = nll
            ndr("利息金额") = bj*nll/100*ndr("天数")/365
            kssj=jssj.adddays(1)
            jssj=jssj.addyears(1)
            jssj = iif(jssj > dr("归还日期"), dr("归还日期"), jssj)
            bj = bj+ndr("利息金额")
            dr_nll = cdr
            nll = cdr("年利率")
        Next
        ndr = dt3.addnew
        ndr("单据编号") = dr("单据编号")
        ndr("本金") = bj
        ndr("开始时间") = kssj
        ndr("结束时间") = jssj
        ndr("天数") = (jssj-kssj).TotalDays+1
        ndr("年利率") = nll
        ndr("利息金额") = bj*nll/100
        kssj=kssj.addyears(1)
        jssj=jssj.addyears(1)
        jssj = iif(jssj > dr("归还日期"), dr("归还日期"), jssj)
        bj = bj+bj*nll/100
        d = kssj
    Loop
Next


 


--  作者:polo_luo
--  发布时间:2018/6/19 10:10:00
--  
给我感觉是炉火纯青,行云流水
三个循还嵚套,干净利落,很经典
for each
do while
find
select
等的运用熟练
主要是帮助文件没有用foxtable对上述几个语句的专项使用教程,这个直接可以做教程用了图片点击可在新窗口打开查看