以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请教一个关于未编写日志的预警思路  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=58707)

--  作者:audience68
--  发布时间:2014/10/22 14:36:00
--  请教一个关于未编写日志的预警思路
有一个日志的表,用来记录对每个任务(监造流水号)每天的日志,希望系统自动检查每个任务是否编写了日志,如果前一天没有编写日志,系统在开机前自动将没有编写日志的任务(监造流水号)和相关的人员通过一个信息窗口显示出来(但是对于已经标记为全部完成的任务,不再进行检查),不知该如何考虑实现这个功能?望高手指导。
表的格式如下:

监造流水号 合同编号 填报日期 主要物资名称 监理人员 合同交货时间 监造是否完成
CI201410001 8100012345 2014-10-17 反应器 李四 2014-11-30 全部完成
CI201410002 8100012346 2014-10-17 换热器 王五 2014-11-30 正在监造








--  作者:有点甜
--  发布时间:2014/10/22 14:52:00
--  
 例子发上来。
--  作者:audience68
--  发布时间:2014/10/22 15:09:00
--  
甜版,例子放上来了,主要目的是系统自动查出没有按时每天编写日志的人员和对应的任务(监造流水号)。先谢谢了。

我考虑了一段时间,但是没有思路,不知该如何实现这个功能。

--  作者:有点甜
--  发布时间:2014/10/22 15:10:00
--  

 例子上传上来

 

http://foxtable.com/bbs/dispbbs.asp?boardid=2&Id=78

 


--  作者:audience68
--  发布时间:2014/10/22 15:10:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


--  作者:有点甜
--  发布时间:2014/10/22 15:33:00
--  

不太理解你的逻辑

 

Dim d_start As Date = new Date(2014, 10, 17)
Dim d_end As Date = Date.Today

Dim ls1 As List(Of String) = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 <> \'全部完成\'")
d_start = d_start.AddDays(1)

Do While d_start < d_end       
    Dim ls2 As List(Of String) = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "#")
    For Each s As String In ls1
        If ls2.Contains(s) = False Then
            output.show(s & "  " & d_start)
        End If
    Next
    ls2 = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 = \'全部完成\'")
    For Each s As String In ls2
        If ls1.Contains(s) Then
            ls1.Remove(s)
        End If
    Next
    ls2 = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 <> \'全部完成\'")
    For Each s As String In ls2
        If ls1.Contains(s) = False Then
            ls1.Add(s)
        End If
    Next
    d_start = d_start.AddDays(1)
Loop


 


--  作者:audience68
--  发布时间:2014/10/22 16:53:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb

甜版,我的意思就是:对于“监造是否完成”列中没有完全完成的监造任务(每一个监造流水号代表一个监造任务),要求每天都要维护一行日志(即填报日期应该是连续的,每天都要生成一行),如果超过24:00而没有维护,则在打开项目后将前面没有及时维护日志的进行预警。

重新做了一个例子,如例子中:
对于CI201410001监造任务,虽然2014/10/16没有填报日志,但是该任务在2014/10/17日日志行中的“监造是否完成”栏已经显示全部完成,所以就不再对该CI201410001监造任务没有填报2014/10/16日志进行预警。
但对于CI201410002监造任务,由于还没有完成,所以系统检测后发现2014/10/20日没有填写日志,所以系统应在21日后自动对此进行预警,通过信息窗口显示“王五,2014/10/20日没有及时维护CI201410002监造任务的日志




--  作者:audience68
--  发布时间:2014/10/22 16:56:00
--  
补充:每个监造任务(即监造流水号)的初始填报并不固定,系统已自己查找每个监造流水号的最早填报日期作为起始检查日期。
--  作者:audience68
--  发布时间:2014/10/22 16:56:00
--  
系统应自己查找每个监造流水号的最早填报日期作为起始检查日期
--  作者:有点甜
--  发布时间:2014/10/22 17:11:00
--  

 代码

 

Dim d_start As Date = DataTables("监造日志").Compute("min(填报日期)", "填报日期 is not null")
Dim d_end As Date = Date.Today

Dim ls1 As List(Of String) = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 <> \'全部完成\'")
d_start = d_start.AddDays(1)

Do While d_start < d_end       
    Dim ls2 As List(Of String) = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "#")
    For Each s As String In ls1
        If ls2.Contains(s) = False Then
            If DataTables("监造日志").Find("监造流水号 = \'" & s & "\' and 监造是否完成 = \'全部完成\'") Is Nothing Then
                msgbox(s & "  " & d_start)
            End If
        End If
    Next
    ls2 = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 = \'全部完成\'")
    For Each s As String In ls2
        If ls1.Contains(s) Then
            ls1.Remove(s)
        End If
    Next
    ls2 = DataTables("监造日志").GetValues("监造流水号","填报日期 = #" & d_start & "# and 监造是否完成 <> \'全部完成\'")
    For Each s As String In ls2
        If ls1.Contains(s) = False Then
            ls1.Add(s)
        End If
    Next
    d_start = d_start.AddDays(1)
Loop