Foxtable(狐表)用户栏目专家坐堂 → [求助]新人诚心求教问题


  共有9693人关注过本帖树形打印复制链接

主题:[求助]新人诚心求教问题

帅哥哟,离线,有人找我吗?
aubber
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:947 威望:0 精华:0 注册:2012/10/18 7:20:00
  发帖心情 Post By:2012/10/22 14:28:00 [只看该作者]

图片点击可在新窗口打开查看   谢谢 pyh6918 ,,我先下载学习一下,不懂的地方再请教你。

 回到顶部
帅哥哟,离线,有人找我吗?
aubber
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:947 威望:0 精华:0 注册:2012/10/18 7:20:00
  发帖心情 Post By:2012/10/24 11:25:00 [只看该作者]

     上次你帮我做的附件,我试了一下,出现一个错误,我不明白为什么,求教。

     比如,我把租息调整表的调整起日和调整止日分别设置为2001-1-1和2001-2-1,日租金为1,再设置下一行为2001-2-1和2001-3-1,日租金为2。

     然后再设置业务表,用户的起止日期是2001-1-1至2001-2-1 金额为1,点击计算租息后 租息为31,可要是把用户到期日期改为2001-2-2,点击计算租息后 租息变为 64了,,,,我实在不明白什么地方出错了,望指教。谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
pyh6918
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1128 积分:11029 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2012/10/24 12:49:00 [只看该作者]

Dim c As Double
Dim s As  TimeSpan
For Each h As DataRow In DataTables("业务").DataRows
    For Each dr As DataRow In DataTables("租息调整表").DataRows
        If h("起始日期")>=dr("调整起日") And h("起始日期")<dr("调整止日") And h("到期日期")>dr("调整止日") Then
            s=dr("调整止日")-h("起始日期")
            c=s.TotalDays*dr("日租金")
        End If
        If h("起始日期")<dr("调整起日") And h("到期日期")>dr("调整止日") Then
            s=dr("调整止日")-dr("调整起日")
            c=c+s.TotalDays*dr("日租金")
        End If
        If h("起始日期")<=dr("调整起日") And h("到期日期")<dr("调整止日") And h("到期日期")>dr("调整起日") Then
            s=h("到期日期")-dr("调整起日")
            c=c+s.TotalDays*dr("日租金")
        End If
        If h("起始日期")>=dr("调整起日") And h("到期日期")<=dr("调整止日") Then
            s=h("到期日期")-h("起始日期")
            c=c+s.TotalDays*dr("日租金")
        End If
    Next
    h("租息")=c*h("金额")
Next

去掉这行的“=”号,你再看看对不对。

 回到顶部
帅哥哟,离线,有人找我吗?
pyh6918
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1128 积分:11029 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2012/10/24 12:56:00 [只看该作者]

还是有毛病,2001-1-1至2001-3-1又不对了

 回到顶部
帅哥哟,离线,有人找我吗?
aubber
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:947 威望:0 精华:0 注册:2012/10/18 7:20:00
  发帖心情 Post By:2012/10/24 13:02:00 [只看该作者]

晕,看来这个问题还是有点复杂,我先消化你的代码吧...........

 回到顶部
帅哥哟,离线,有人找我吗?
pyh6918
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1128 积分:11029 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2012/10/24 13:06:00 [只看该作者]

If h("起始日期")<=dr("调整起日") And h("到期日期")<=dr("调整止日") And h("到期日期")>dr("调整起日") Then

这再加个“=”号。图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
aubber
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:947 威望:0 精华:0 注册:2012/10/18 7:20:00
  发帖心情 Post By:2012/10/24 13:20:00 [只看该作者]

没错没错,这样就正确了,我再好好测试一下,我觉得这段代码很经典,日常应用中非常常见。再次感谢!

 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/10/24 14:00:00 [只看该作者]

 其实,更符合逻辑的代码应该这样写。

Dim c As Double = 0
Dim s As  TimeSpan
For Each h As DataRow In DataTables("业务").DataRows
    Dim drs As List(Of DataRow) = DataTables("租息调整表").Select("调整止日 > #" & h("起始日期") & "# And 调整起日 <= #" & h("到期日期") & "#")
    Select Case drs.Count
        Case 0   '没有匹配
            msgbox("请设置租息")
        Case 1   '在一个区间里
            s = h("到期日期") - h("起始日期")
            c = c + s.TotalDays * drs(0)("日租金")
        Case Else   '在多个区间里
            s = drs(0)("调整止日") - h("起始日期")   '租期的第一个区间
            c = c + s.TotalDays * drs(0)("日租金")

            For i As Integer = 1 To drs.Count - 2    '正常按区间满收
                s = drs(i)("调整止日") - drs(i)("调整起日")
                c = c + s.TotalDays * drs(i)("日租金")
            Next

            s = h("到期日期") - drs(drs.Count-1)("调整起日")   '租期的最后一个区间
            c = c + s.TotalDays * drs(drs.Count-1)("日租金")
    End Select

    h("金额") = c
Next
[此贴子已经被作者于2012-10-24 14:00:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
aubber
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:137 积分:947 威望:0 精华:0 注册:2012/10/18 7:20:00
  发帖心情 Post By:2012/10/24 14:44:00 [只看该作者]

     你写的这段代码,我基本看明白了,确实还有一种完全在时间段之外的情况,呵呵,不过,我回家后要好好研究测试一下,接触foxtable的时间太短了,看来要恶补一下才成。先谢谢你,不懂的地方我还要上来请教的。。。。。
[此贴子已经被作者于2012-10-24 14:47:15编辑过]

 回到顶部
总数 19 上一页 1 2