以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 到期日期问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=104482) |
||||
-- 作者:温堡主 -- 发布时间:2017/7/30 10:51:00 -- 到期日期问题 求助: 一份合同有周期性的付款,付款的到期日期是每间隔几个月之后的前1天:如开始日期2015-12-01,间隔3个月,那么到期日期应为2016-02-29、2016-05-31、2016-08-31,,,如何建模写代码?
谢谢! |
||||
-- 作者:有点甜 -- 发布时间:2017/7/30 11:01:00 -- addMonths(3).AddDays(-1)
http://www.foxtable.com/webhelp/scr/1337.htm
http://www.foxtable.com/webhelp/scr/2471.htm
|
||||
-- 作者:温堡主 -- 发布时间:2017/7/30 11:32:00 -- 回复:(有点甜)addMonths(3).AddDays(-1)?... 谢谢,,,可能我没有描述清楚问题,我开始也是写了这样的代码,但似乎不全对,不能根本解决连续计算的问题,,,比如单纯从2015-11-30开始算头不算尾的写addMonths(3).AddDays(-1),,,到期日依次变成:2016-2-29,2016-5-28,2016-8-27,,,所以再次请教求助是否可以这样做,思路如下: 1、根据3年的合同中的开始日期(如2015-11-30)与最终到期日期(如2018-11-29)),计算出每季度(3个月)的间隔次数N=11 2、对日期型建立数组(是否可以),得出StartDate(1)~StartDate(11),依次计算addMonths(3*N) 3、有了StartDate(N),对应的EndDate(0)~EndDate(10)依次为addMonths(3*N)-1 前面我试着试但做不出来,,,没有明白2018-11-29和2015-11-30怎么计算才能得出次数N=11 谢谢
[此贴子已经被作者于2017/7/30 11:42:53编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2017/7/30 11:53:00 -- 代码没问题啊
Dim d As Date = "2015-11-30"
具体问题,请上传实例说明。 |
||||
-- 作者:温堡主 -- 发布时间:2017/7/31 7:23:00 -- 好的,,,做了一个很小白的上传,想做但没学习够的地方想请老师指导指导先: 1、主表上的次数要能自动计算出来 2、明细表上期数根据每份合同的次数、开始日期、到期日期都自动生成
谢谢
|
||||
-- 作者:有点甜 -- 发布时间:2017/7/31 9:26:00 --
|
||||
-- 作者:温堡主 -- 发布时间:2017/9/11 21:34:00 -- 回复:(有点甜)[upload=table,到期日实例.table]vie... 这个例子还有一处需要改进下的,可是我没找到修改的地方,是在哪里修改的? 如果开始日期为2011-12-23,到期日期为2014-12-22的间隔周期为1的话,次数应为36次,结果系统自动计算出来为35次,,
|
||||
-- 作者:有点蓝 -- 发布时间:2017/9/11 21:50:00 -- 主表_DataColChanged事件 不足一个月的算一次么
|
||||
-- 作者:温堡主 -- 发布时间:2017/9/11 22:12:00 -- 回复:(有点蓝)主表_DataColChanged事件不足一个月的... 对,不足1个月的也是要算 |
||||
-- 作者:有点蓝 -- 发布时间:2017/9/11 22:47:00 -- Dim cs() As String = {"开始日期","结束日期","间隔周期", "合同号"} If array.IndexOf(cs, e.DataCol.name) > -1 Then Dim flag As Boolean = True For Each c As String In cs If e.DataRow.Isnull(c) Then DataTables("明细表").DeleteFor("合同号 = \'" & e.DataRow("合同号") & "\'") flag = False Exit For End If Next If flag Then DataTables("明细表").DeleteFor("合同号 = \'" & e.DataRow("合同号") & "\'") Dim n As Integer = e.DataRow("间隔周期") Dim sd As Date = e.DataRow("开始日期") Dim ed As Date = e.DataRow("结束日期") Dim y,m,d As Integer DateYMD(sd, ed,y,m,d) Dim ms As Integer = (y*12+m)/n Dim d2 As Date Dim i As Integer For i = 1 To ms Dim ndr = DataTables("明细表").addnew ndr("合同号") = e.DataRow("合同号") ndr("期数") = i ndr("开始日期") = sd.AddMonths((i-1)*n) d2 = sd.AddMonths(i*n).AddDays(-1) ndr("到期日期") = d2 Next If d2 < ed And d > 0 Then Dim ndr = DataTables("明细表").addnew ndr("合同号") = e.DataRow("合同号") ndr("期数") = i ndr("开始日期") = d2.AddDays(1) ndr("到期日期") = ed End If End If End If
[此贴子已经被作者于2017/9/11 22:46:57编辑过]
|