以文本方式查看主题 - 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 [此贴子已经被作者于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 -- 谢谢大红袍老师的热心帮助,问题解决。再次衷心感谢大红袍老师!! |