以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]SQLGroupTableBuilder中关于用时的统计-9-14更新问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=90455)

--  作者:huangfanzi
--  发布时间:2016/9/13 11:08:00
--  [求助]SQLGroupTableBuilder中关于用时的统计-9-14更新问题
老师,在SQLGroupTableBuilder生成的表中,我要加个应作业分钟与作业率字段
应作业分钟的值应该为:窗口中二个日期相减的分钟数
作业率为 实际作业分钟 / 应作业分钟
请老师帮忙做下,谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.foxdb


[此贴子已经被作者于2016/9/14 10:58:37编辑过]

--  作者:有点蓝
--  发布时间:2016/9/13 11:35:00
--  
Dim d1 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim d2 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
Dim m As Integer
If d1.Value IsNot Nothing AndAlso d2.Value IsNot Nothing Then
    m = (d2.Value - d1.Value).TotalMinutes
End If

Dim t As Table = e.Form.Controls("Table1").Table

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")

b.AddTable("工序合并表","牌号","密度表","牌号") \'添加统计表
b.Groups.AddDef("工序") \'根据订单表产品ID分组
b.Totals.AddExp("长度","重量 / 厚度 / 宽度 / 密度 * 1000")
b.Totals.AddDef("作业分钟","实际作业分钟")
t.datasource = b.BuildDataSource

t.DataTable.DataCols.Add("应作业分钟",Gettype(Integer))
t.DataTable.ReplaceFor("应作业分钟",m)
t.DataTable.DataCols.Add("作业率",Gettype(Double),"实际作业分钟/应作业分钟")
t.DataTable.DataCols("作业率").SetFormat("00%")

--  作者:huangfanzi
--  发布时间:2016/9/14 10:58:00
--  
老师,现在遇到二个问题:
1、项目文件中存在这个情况,工序合并表中有个牌号,但密度表中没有录入这个牌号对应的密度,造成统计错误,如何提示用户这种情况以便更新密度表
2、作业米数是根据牌号的物理数据公式算出来的,但存在一种情况,这个牌号的物料在机组上由于某种原因上机后没有生产,直接又下机了,但要记录在案,在工序合并表中的记录体现为这条生产记录的作业分钟数为零,如何加入判断,判断条件为当作业分钟数为0时,作业米数也为0,否则作业米数就用公式求得。

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")
b.C
b.AddTable("工序合并表","牌号","密度表","牌号") \'添加统计表
b.Groups.AddDef("工序","机组") \'根据订单表产品ID分组
b.Filter = ft
b.Totals.AddExp("作业米数","重量 / 厚度 / 宽度 / 密度 * 1000")
b.Totals.AddDef("作业分钟数","实际作业分钟")
t.datasource = b.BuildDataSource

--  作者:有点蓝
--  发布时间:2016/9/14 11:23:00
--  
Dim count As Integer = DataTables("工序合并表").SQLCompute("count(牌号)","牌号 not in (se lect 牌号 from {密度表})") \'se lect的空格去掉
If count  > 0 Then
    msgbox("密度表的牌号不完整")
End If

Dim d1 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim d2 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
Dim m As Integer
If d1.Value IsNot Nothing AndAlso d2.Value IsNot Nothing Then
    m = (d2.Value - d1.Value).TotalMinutes
End If

Dim t As Table = e.Form.Controls("Table1").Table

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")

b.AddTable("工序合并表","牌号","密度表","牌号") \'添加统计表
b.Groups.AddDef("工序") \'根据订单表产品ID分组
b.Totals.AddExp("长度","iif(作业分钟=0,0,重量 / 厚度 / 宽度 / 密度 * 1000)")
b.Totals.AddDef("作业分钟","实际作业分钟")
t.datasource = b.BuildDataSource

t.DataTable.DataCols.Add("应作业分钟",Gettype(Integer))
t.DataTable.ReplaceFor("应作业分钟",m)
t.DataTable.DataCols.Add("作业率",Gettype(Double),"实际作业分钟/应作业分钟")
t.DataTable.DataCols("作业率").SetFormat("00%")

--  作者:huangfanzi
--  发布时间:2016/9/14 11:41:00
--  
b.Totals.AddExp("长度","iif(作业分钟=0,0,重量 / 厚度 / 宽度 / 密度 * 1000)")  这句提示 “=” 附近有语法错误,
--  作者:有点蓝
--  发布时间:2016/9/14 14:33:00
--  
测试没有问题,sql数据库改为

b.Totals.AddExp("长度","(Case  when 作业分钟 = 0 then 0 else 重量 / 厚度 / 宽度 / 密度 * 1000 end)")