以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  到期日期问题  (http://foxtable.net/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"
Dim d2 As Date = d.AddMonths(3).AddDays(-1)
Dim d3 As Date = d.AddMonths(3*1).AddDays(-1)
Dim d4 As Date = d.AddMonths(3*12).AddDays(-1)
msgbox(d4)

 

具体问题,请上传实例说明。


--  作者:温堡主
--  发布时间:2017/7/31 7:23:00
--  

好的,,,做了一个很小白的上传,想做但没学习够的地方想请老师指导指导先:

1、主表上的次数要能自动计算出来

2、明细表上期数根据每份合同的次数、开始日期、到期日期都自动生成

 

谢谢

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


--  作者:有点甜
--  发布时间:2017/7/31 9:26:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:到期日实例.table


--  作者:温堡主
--  发布时间: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编辑过]