Foxtable(狐表)用户栏目专家坐堂 → 时段计算与显示


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

主题:时段计算与显示

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
时段计算与显示  发帖心情 Post By:2020/12/27 21:25:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理.foxdb

密码:888888
  我想在缴费情况表实现:
1、如果录入缴费_月租_起计日期、缴费_月租_止计日期,自动计出缴费_月租_缴费月数;
2、如果录入缴费_月租_起计日期、缴费_月租_缴费月数,自动计出缴费_月租_止计日期;
3、缴费_临时停放_缴费时间以时分显示。
  现1、自动计出缴费_月租_缴费月数已实现,但2、自动计出缴费_月租_止计日期,没反应,3、缴费_临时停放_缴费时间未能以时分显示。程序如下:

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        ElseIf dr.IsNull("缴费_月租_起计日期") = False And dr.IsNull("缴费_月租_缴费月数") = False Then
            dr("缴费_月租_止计日期") = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数"))
            dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
            dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
        End If
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
            Dim tp As TimeSpan
            tp = dr("缴费_临时停放_止计时间") - dr("缴费_临时停放_起计时间")
            dr("缴费_临时停放_缴费时间") = tp.TotalHours
        ElseIf dr("缴费_临时停放_缴费时间") * 3 <= 20 Then '每小时3元停车费,超过20元的按最高20元计。
            dr("缴费_临时停放_缴费金额") = dr("缴费_临时停放_缴费时间") * 3
        Else
            dr("缴费_临时停放_缴费金额") = 20
        End If
End Select
[此贴子已经被作者于2020/12/27 21:26:07编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/27 22:42:00 [显示全部帖子]

时段一般是这样显示的:
2020-10-01到2020-12-31为3个月,一般不跨到第二个月月初的,因此我算出的月份与公式算出的月份相差1,我加了1
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select
同样倒求的缴费_月租_止计日期也应算到月底,我参考帮助里的代码其实不符合要求的,取月份的最后一天代码怎成? 
[此贴子已经被作者于2020/12/28 10:10:31编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/28 9:55:00 [显示全部帖子]

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month)) '
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) '每小时3元停车费,超过20元的按最高20元计.
End Select

最后一天的截止日期问题解决了,还有,临时收费的时间是从30分钟起计的,即30分钟内不收费,超过30分钟后安每小时3元计,超过20元的按最高20元,我把最后的代码改为:
        If dr("缴费_临时停放_缴费时间") = tp.TotalSeconds > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) '每小时3元停车费,超过20元的按最高20元计
        End If.
报错!请教应怎么写?
[此贴子已经被作者于2020/12/28 9:58:23编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/28 10:04:00 [显示全部帖子]

不行49分钟还是算钱
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month)) 
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) '每小时3元停车费,超过20元的按最高20元计
        End If
End Select
[此贴子已经被作者于2020/12/28 10:04:25编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/28 10:19:00 [显示全部帖子]

我打错字了,是停29分钟还是收钱,它应不收钱的。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/28 10:22:00 [显示全部帖子]

可以了:
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month))
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) '每小时3元停车费,超过20元的按最高20元计
        Else
            dr("缴费_临时停放_缴费金额") = 0
        End If
End Select

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/12/28 10:34:00 [显示全部帖子]

改为这样没问题了:不超过30分钟的不收费,大过30分钟小于1小时按3元收,大于1小时的按每小时3元停车费,超过20元的按最高20元计。
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month))
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 1800 And dr("缴费_临时停放_缴费时间") <= 3600 Then
            dr("缴费_临时停放_缴费金额") = 3
        ElseIf dr("缴费_临时停放_缴费时间") > 3600 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) '每小时3元停车费,超过20元的按最高20元计
        Else
            dr("缴费_临时停放_缴费金额") = 0
        End If
End Select

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/1/26 19:09:00 [显示全部帖子]

红色标注的代码报错,临时收费如果不超过3小时不收费,超过3小时后安每小时3元计算,最高收20元。
Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        Dim tp As TimeSpan
        tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") OrElse tp.TotalSeconds <= 10800 Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds - 10800  '10800为3小时化为秒
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 0 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,math.Ceiling((dr("缴费_临时停放_缴费时间")/3600)) * 3 '每小时3元停车费,超过20元的按最高20元计
        Else
            dr("缴费_临时停放_缴费金额") = 0
        End If
End Select
[此贴子已经被作者于2021/1/26 20:38:05编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/1/26 20:16:00 [显示全部帖子]

改为这样不报错了
Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        Dim tp As TimeSpan
        tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") OrElse tp.TotalHours  <= 3 Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            dr("缴费_临时停放_缴费时间") = tp.TotalHours - 3  '转化为小时
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 0 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,math.Ceiling(dr("缴费_临时停放_缴费时间")))* 3 '每小时3元停车费,超过20元的按最高20元计
        Else
            dr("缴费_临时停放_缴费金额") = 0
        End If
End Select
[此贴子已经被作者于2021/1/26 20:34:58编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/1/26 20:51:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:0126.png
图片点击可在新窗口打开查看
为什么临时停放起计时间、止计时间显示格式自动把时、分、秒归0,缴费时间变为空值了!我在临时收费录入窗口的AfterLoad事件明明设置了时间格式,
e.Form.Controls("Table1").Table.Cols("缴费_临时停放_起计时间").SetDateTimeFormat(DateTimeFormatEnum.DateLongTime)
e.Form.Controls("Table1").Table.Cols("缴费_临时停放_止计时间").SetDateTimeFormat(DateTimeFormatEnum.DateLongTime)
窗口中就是无法实现!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理2021012601.foxdb

密码:888888

[此贴子已经被作者于2021/1/26 21:23:57编辑过]

 回到顶部
总数 12 1 2 下一页