Foxtable(狐表)用户栏目专家坐堂 → [求助]模拟信息的时间填充问题(已解决)


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

主题:[求助]模拟信息的时间填充问题(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]模拟信息的时间填充问题(已解决)  发帖心情 Post By:2015/6/17 21:15:00 [只看该作者]

下面这段代码是模拟信息的时间生成并填充,希望达到同工位和同节拍的开始时间或结束时间要相同,如何实现这个效果,请各位老师指教,谢谢!!

If dr.IsNull("开始时间") Then
    dr = DataTables("时间记录").Find("[序号] < " & mr("序号") & " And [工序编号] = '"  & mr("工序编号") & "'And [工位] = '"  & mr("工位") & "' And [批次] = '"  & mr("批次") & "'", "[序号] Desc") '找出上一行
    If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
        mr("开始时间") = zdysj '第一个节拍开始时间
        mr("结束时间") = CDate(mr("开始时间")).AddSeconds(d2.Hour*3600 + d2.Minute*60 + d2.Second) '第一个节拍结束时间
        dr = mr
    End If
    drs = DataTables("时间记录").Select("[序号] >= " & dr("序号") & " And [工序编号] =  '" & dr("工序编号") & "'And [工位] =  '" & dr("工位") & "' And [批次] = '"  & mr("批次") & "'", "[序号]")
    For j As Integer = 1 To drs.Count - 1 '重算余下行的余额
        drs(j)("开始时间") = CDate(drs(j-1)("结束时间")) '其余节拍开始时间为同工序编号上一条结束时间
        drs(j)("结束时间") = CDate(drs(j)("开始时间")).AddSeconds(d2.Hour*3600 + d2.Minute*60 + d2.Second) '其余节拍结束时间
    Next
End If

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



[此贴子已经被作者于2015/6/18 10:47:49编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/18 0:39:00 [只看该作者]

 没看懂你想表达什么意思。

 

 什么情况下,什么相同


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/6/18 7:38:00 [只看该作者]

谢谢大红袍老师的回复,是在工位和批次相同值的情况下,开始时间和结束时间分别相同。还望老师指教,谢谢!!

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/18 9:04:00 [只看该作者]

 不明白你到底想说什么,你的开始时间和结束时间根据什么得到啊,怎么可能相同?

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/6/18 9:38:00 [只看该作者]

这是一个模拟信息发生模块,节拍时间(jpms2)= 产量 * 工位秒时 * xlfd(xlfd为效率浮动,值为±6%), 第一个循环的开始时间(zdysj)是当天的上午8点整,结束时间为开始时间加上节拍时间。从第二个循环(也就是节拍 = 2)开始,开始时间 = 上一个节拍相同工序编号的结束时间;结束时间为本循环开始时间加上节拍时间,以此类推。因为xlfd是随机产生的。所以现在代码生成的时间都是不同的,而我希望得到的效果是:当工位和节拍(上面的表述有误)分别相同的行,其开始时间和结束时间也分别相同,也就是1~4、5~8....  行的结束时间相同,21~24、25~28 ...... 行的开始时间和结束时间分别相同,这样更符合实际的情况。还望大红袍老师指教,谢谢!!

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/18 10:20:00 [只看该作者]

DataTables("时间记录").DataRows.Clear()
Dim jp As Integer = 0
Dim zdysj As Date = Date.Today & " " & "08" & ":" & "00" & ":" & "00" '自定义时间
For i As Integer = 1 To 5
    Dim jp1 As String = DataTables("时间记录").SQLCompute("max(节拍)")
    If jp1 = "" Then
        jp = 1
    Else
        jp = CInt(jp1) + 1
    End If
    MessageBox.Show(jp)
    Dim f As New Filler
    f.SourceTable = DataTables("模板")
    f.SourceCols = "工位,工序编号"
    f.DataTable = DataTables("时间记录")
    f.DataCols = "工位,工序编号"
    f.Filter = "产品款号 = '123'"
    f.Distinct = False
    f.Fill()
    '填充节拍产量等
    For Each dr As DataRow In DataTables("时间记录").DataRows
        If dr.IsNull("批次") Then
            dr("批次") = 1
            dr("节拍") = jp
            DataTables("时间记录").Save()
        End If
    Next
    '填充开始结束时间
    For Each gw As String In DataTables("时间记录").GetValues("工位","节拍 = '" & jp & "'")
        Dim xlfd As Double = Rand.Next(100 - 6,100 + 6) / 100 '效率浮动
        Dim jpms2 As Integer = 10 * 60 * xlfd '浮动节拍秒时
        Dim N2,h2,m2,s2 As Integer
        N2 = jpms2
        h2 = N2 \ 3600
        m2 = (N2 Mod 3600) \ 60
        s2 = N2 Mod 60
        Dim d2 As Date = Format(new Date(1,1,1,h2,m2,s2), "HH:mm:ss")
        Dim fdr = DataTables("时间记录").Find("工位 = '" & gw & "' and 开始时间 is not null", "[序号] Desc") '找出上一行
        Dim kssj As Date
        If fdr Is Nothing Then
            kssj = zdysj
        Else
            kssj = fdr("结束时间")
        End If
       
        Dim drs As List(of DataRow) = DataTables("时间记录").Select("工位 = '" & gw & "' and 节拍 = '" & jp & "'")
        For Each mr As DataRow In drs
            mr("开始时间") = kssj '第一个节拍开始时间
            mr("结束时间") = CDate(mr("开始时间")).AddSeconds(d2.Hour*3600 + d2.Minute*60 + d2.Second) '第一个节拍结束时间
        Next
       
    Next
Next
With Tables("时间记录")
    .Position = .Rows.Count - 1
End With
Tables("时间记录").AutoSizeCols()
DataTables("时间记录").Save()

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/6/18 10:47:00 [只看该作者]

谢谢大红袍老师的热心帮助,问题解决。再次衷心感谢大红袍老师!!

 回到顶部