以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  看我看看这个问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=11193)

--  作者:blackzhu
--  发布时间:2011/7/12 15:40:00
--  看我看看这个问题
合同里面的窗口上面有一个分周期的按钮,我第一次随便执行一个合同,在利息表里面的周期起始日和周期结束日都能执行,但是再执行一个合同就不对.大家可以先执行一个合同看效果,再执行看第二次合同的结果.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:融资管理系统 周期版2.table


我要球的结果是:

合同表

合同编号                开始计息日       结束结息日                       付息方式
001                      2011-01-01     2011-03-01                  一月一次
002                      2011-01-01     2011-05-01                  二月一次     正确执行结果

利息表

合同编号              周期开始日         周期结束日                      付息方式
001                    2011-01-01     2011-02-01                   一月一次
001                    2011-02-01     2011-03-01                   一月一次
002                    2011-01-01     2011-03-01                   二月一次
002                                                                              二月一次
002                    2011-03-01     2011-05-01                   二月一次
002                                                                              二月一次

--  作者:狐狸爸爸
--  发布时间:2011/7/12 16:45:00
--  
Dim d1 As Date = Tables("合同").Current("计息开始时间")
Dim d2 As Date = Tables("合同").Current("计息结束时间")
Dim d As Date = d1
Dim ld As Date = d1
Dim m As Integer
Dim cnt As Integer
Select Case Tables("合同").Current("付息方式")
    Case "一月一付"
        m = 1
    Case "二月一付"
        m =2
    Case "三月一付"
        m =3
    Case "四月一付"
        m = 4
    Case "半年一付"
        m =6
    Case "一年一付"
        m =12
End Select
Do While d <  d2
    Dim r As Row = Tables("利息").AddNew()
    r("客户编号")=Tables("合同").Current("客户编号")
    r("客户名称")=Tables("合同").current("客户名称")
    r("合同编号")=Tables("合同").current("合同编号")
    r("本金")=Tables("合同").current("本金")
    r("付息时点")=Tables("合同").current("付息时点")
    r("付息方式")=Tables("合同").current("付息方式")
    r("方式")=Tables("合同").current("方式")
    r("利率")=Tables("合同").current("利率")
    r("合同现状")=Tables("合同").current("合同现状")
    r("本期起息日") = d
    d = d.AddMonths(1)
    If d > d2 Then
        d = d2
    End If
    r("本期结息日") = d
    If cnt Mod m = 0 Then
        r("周期起始日") = ld
        ld = d.addmonths(m)
        If ld > d2  Then
            ld = d2
        End If
        r("周期结束日") = ld
    End If
    cnt = cnt +1
Loop

--  作者:狐狸爸爸
--  发布时间:2011/7/12 17:02:00
--  

你原来的代码:

 

If Tables("合同").Current("付息方式") ="二月一付" Then
    Dim A1 As Date = Tables("合同").Current("计息开始时间")
    Dim A2 As Date = Tables("合同").Current("计息结束时间")
    Dim A As Date = A1
    Do While A < A2
        For i1 As Integer = 0 To Tables("利息").Count-1 Step 2
            Tables("利息").Rows(i1)("周期起始日") = A
            A = A.AddMonths(2)
            If A > A2 Then
                A = A2
            End If
            Tables("利息").Rows(i1)("周期结束日") = A
        Next
    Loop
End If

第一次执行和第二次执行,都是从第一行开始赋值,也就是第二次执行的时候,你赋值的还是第一次生成的那些行。


--  作者:blackzhu
--  发布时间:2011/7/12 17:48:00
--  
哦,我试试
--  作者:blackzhu
--  发布时间:2011/7/12 17:51:00
--  
努力学习中,每一次的询问以及答复都是我进步的源泉.