以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]模拟信息的时间填充问题(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=70254)

--  作者:yyzlxc
--  发布时间: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编辑过]

--  作者:大红袍
--  发布时间:2015/6/18 0:39:00
--  

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

 

 什么情况下,什么相同


--  作者:yyzlxc
--  发布时间:2015/6/18 7:38:00
--  
谢谢大红袍老师的回复,是在工位和批次相同值的情况下,开始时间和结束时间分别相同。还望老师指教,谢谢!!
--  作者:大红袍
--  发布时间:2015/6/18 9:04:00
--  
 不明白你到底想说什么,你的开始时间和结束时间根据什么得到啊,怎么可能相同?
--  作者:yyzlxc
--  发布时间:2015/6/18 9:38:00
--  
这是一个模拟信息发生模块,节拍时间(jpms2)= 产量 * 工位秒时 * xlfd(xlfd为效率浮动,值为±6%), 第一个循环的开始时间(zdysj)是当天的上午8点整,结束时间为开始时间加上节拍时间。从第二个循环(也就是节拍 = 2)开始,开始时间 = 上一个节拍相同工序编号的结束时间;结束时间为本循环开始时间加上节拍时间,以此类推。因为xlfd是随机产生的。所以现在代码生成的时间都是不同的,而我希望得到的效果是:当工位和节拍(上面的表述有误)分别相同的行,其开始时间和结束时间也分别相同,也就是1~4、5~8....  行的结束时间相同,21~24、25~28 ...... 行的开始时间和结束时间分别相同,这样更符合实际的情况。还望大红袍老师指教,谢谢!!
--  作者:大红袍
--  发布时间: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
--  发布时间:2015/6/18 10:47:00
--  
谢谢大红袍老师的热心帮助,问题解决。再次衷心感谢大红袍老师!!