以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [求助]关于某日期与不同时段日期对比的判断 (http://foxtable.com/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
--
|
-- 作者:有点甜
-- 发布时间: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
|
-- 作者: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对上述几个语句的专项使用教程,这个直接可以做教程用了 
|