Foxtable(狐表)用户栏目专家坐堂 → 夜深人静 向高手请教个问题


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

主题:夜深人静 向高手请教个问题

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
夜深人静 向高手请教个问题  发帖心情 Post By:2015/5/23 0:13:00 [只看该作者]

表A  中  结束日期 根据  开始日期 - 工作日
比如说  开始日期  5-22   工作 10  ;根据上面算法  结束日期 应该是5-31


但是 有个日历表,日历表中  有全年的工作日安排

怎样在日历表中 找出 从 5-22 到未来 10个连续日期中,包含多少个 非工作日??并把这非工作日补充到  结束日期里面

如 开始日期 5-22  周期 10 ,未来10天中有2个非工作日,所以 周期应该是,结束日期应该是 6-2

另外,如果  6-1 或 6-2 中,又有非工作日,那么又要补充!!

各位大师们,有何办法呢!!!
实在是思考不到方法,请教一下!非常感谢



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


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


加好友 发短信
等级:九尾狐 帖子:2193 积分:13908 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2015/5/23 1:12:00 [只看该作者]

不难呀,1 先算正常开始日期到工作日 结束日期1
2 算从开始日期到 结束日期1 包含多少个非工作日,加上非工作日天数得到结束日期2
3 算结束日期1到结束日期2包含多少个非工作日,加上非工作日天数得到结束日期3
算结束日期2到结束日期3包含多少个非工作日,加上非工作日天数得到结束日期4
5....
6....

2-N  采用循环  直到没有非工作日才跳出来
最后的结束日期就是你要的结果


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/23 8:56:00 [只看该作者]

看了一下你日历,似乎都是固定星期日为非工作日啊.

如果是这样的话.可以不要日期表. 这样不用查询日期表直接计算,效率会高很多

代码为


Select Case e.DataCol.Name
    Case "开始日期","工作日"    
      Dim d As Date = e.DataRow("开始日期")
      For i As Integer=1 To e.DataRow("工作日")
         d=d.AddDays(1)
         If d.DayOfWeek=0 Then
            i=i-1
         End If
      Next
     e.DataRow("结束日期")=d
End Select

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2015/5/23 12:08:00 [只看该作者]

不一定是星期日——日历表,是有人去管理的,有可能其它原因(国家放假日或公司重要纪念日放假),某个日期,也是非工作日

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2015/5/23 12:49:00 [只看该作者]

给你一个馊主意:

 

工作日历维护是少发事件,而工作日历查询是多发事件,所以遍历工作应该放在工作日历维护中去。

 

 

1、建立一个基准工作日起点(比如建厂时间后系统开始运行的时间)

 

2、工作日历中建一列(工作日编号——以基准工作日为起点)

 

3、维护工作日历时,遍历工作日并编号

 

实际运用时,

计划开始和计划结束可以运用工作日历,起始工作日编号+计划工期 = 计划结束工作日号(工作日历变化时,计划时间也会跟着变化)

 

实际开始和实际结束时间,用当时的日期(工作日历变化时,不会有影响)


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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2015/5/23 13:17:00 [只看该作者]

Select Case e.DataCol.Name
    
    Case "开始日期","工作日"
        
        Dim d1 As Date = e.DataRow("开始日期")
        Dim dr1,dr2 As DataRow
        dr1 = DataTables("日历").Find("[日期] = '" & d1 & "'")    
        If dr1("是否是工作日") = False Then
            Dim d2 As Date = e.DataRow("开始日期")
            For i As Integer=1 To e.DataRow("工作日")
                d2=d2.AddDays(1)
                dr2 = DataTables("日历").Find("[日期] = '" & d2 & "'")
                If dr2 IsNot Nothing Then
                    If dr2("是否是工作日") = False Then
                        i=i-1
                    End If
                End If
            Next
            e.DataRow("结束日期") = d2
        Else
            Dim d As Date = e.DataRow("开始日期")
            For i As Integer=1 To e.DataRow("工作日")
                d=d.AddDays(1)
                If dr1 IsNot Nothing Then
                    If dr1("是否是工作日") = False Then
                        i=i-1
                    End If
                End If
            Next
            e.DataRow("结束日期") = d
        End If
        
End Select


谢谢大家,谢谢B版。

这样就可以了

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2015/5/23 13:54:00 [只看该作者]

Select Case e.DataCol.Name
    Case "开始日期","工作日"
        Dim dr1  As DataRow
        Dim flt As String
        If e.DataRow.IsNull("开始日期") =False Then
            flt ="日期 >= #" &  e.DataRow("开始日期") & "# and 是否是工作日 = 1"
            dr1=DataTables("日历").Find(flt,"日期", e.DataRow("工作日")-1)
            If dr1 IsNot Nothing Then
                e.DataRow("结束日期") =dr1("日期")
            End If
        End If
End Select

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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2015/5/23 17:07:00 [只看该作者]

don 版主精简!



 回到顶部