以文本方式查看主题

-  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=184141)

--  作者:nuoyan89
--  发布时间:2022/11/25 10:28:00
--  分组条件设置
老师,红色部分中两边的条件必须要一样吗?像返修结果里需要统计包含料废或者工废的能行吗?提示返修结果异常

Dim sql1 As String = "Sel ect * from 过程异常明细 as a1 where exists(sel ect * from 生产排产表 as b1 where " & e.Form.controls("生产排产表").Table.DataTable.LoadFilter & " and a1.成品编码 = b1.成品编码 And a1.生产批次 = b1.生产批次 And a1.使用设备 = b1.使用设备 And a1.加工工序 = b1.加工工序)"
Dim b1 As New GroupTableBuilder("统计表2", sql1, "条码扫描系统数据库")
b1.Groups.AddDef("成品编码") \'根据产品分组
b1.Groups.AddDef("生产批次") \'根据产品分组
b1.Groups.AddDef("使用设备") \'根据产品分组
b1.Groups.AddDef("加工工序") \'根据产品分组
b1.Totals.AddDef("异常数量") \'对数量进行统计
Dim dt1 As DataTable = b1.Build(True)
Dim dr1 As DataRow
For Each dr4 As Row In Tables("生产总排产_生产排产表").Rows
    dr1 = dt1.find("成品编码 = \'" & dr4("成品编码") & "\' and 生产批次 = \'" & dr4("生产批次") & "\' and 使用设备 = \'" & dr4("使用设备") & "\' and 加工工序 = \'" & dr4("加工工序") & "\' And (返修结果  Like \'%料废%\' Or 返修结果 like \'%工废%\')")
    If dr1 IsNot Nothing Then
        dr4("报废品") = dr1("异常数量")
    End If
Next

--  作者:有点蓝
--  发布时间:2022/11/25 10:36:00
--  
返修结果是哪个表的列?
--  作者:nuoyan89
--  发布时间:2022/11/25 10:41:00
--  
是过程异常明细的 
--  作者:有点蓝
--  发布时间:2022/11/25 10:59:00
--  
Dim sql1 As String = "Sel ect * from 过程异常明细 as a1 where exists(sel ect * from 生产排产表 as b1 where " & e.Form.controls("生产排产表").Table.DataTable.LoadFilter & " and a1.成品编码 = b1.成品编码 And a1.生产批次 = b1.生产批次 And a1.使用设备 = b1.使用设备 And a1.加工工序 = b1.加工工序) And (返修结果  Like \'%料废%\' Or 返修结果 like \'%工废%\')"

    dr1 = dt1.find("成品编码 = \'" & dr4("成品编码") & "\' and 生产批次 = \'" & dr4("生产批次") & "\' and 使用设备 = \'" & dr4("使用设备") & "\' and 加工工序 = \'" & dr4("加工工序") & "\'")

--  作者:nuoyan89
--  发布时间:2022/11/25 14:58:00
--  
老师,楼上的代码是针对求和的,那如果我想变更成求最大值和最小值,可以怎么改呢?

    If e.DataCol.Name = "成品编码" OrElse e.DataCol.Name = "生产批次" Then
        Dim Filter4 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\' and [操作类型] = \'产成入库\'"
        e.DataRow("实际产出_开始日期") = DataTables("出入库明细").SQLCompute("min(单据日期)", Filter4)
        e.DataRow("实际产出_结束日期") = DataTables("出入库明细").SQLCompute("max(单据日期)", Filter4)
    End If

--  作者:有点蓝
--  发布时间:2022/11/25 15:03:00
--  
http://www.foxtable.com/webhelp/topics/0677.htm
--  作者:nuoyan89
--  发布时间:2022/11/25 22:08:00
--  
老师,已改好,下面这样的能用1楼的方式优化吗?谢谢
    Select Case e.DataCol.Name
        Case "成品编码", "加工工序", "生产批次", "使用设备"
            Dim dr As DataRow = e.DataRow
            Dim pr As DataRow
            If dr.IsNull("成品编码") OrElse dr.IsNull("加工工序") OrElse dr.IsNull("生产批次") OrElse dr.IsNull("使用设备") Then
                dr("加工单价") = Nothing
            Else
                Dim filter As String
                filter = "成品编码= \'" & dr("成品编码") & "\' And 加工工序 = \'" & dr("加工工序") & "\' and 生产批次 = \'" & dr("生产批次") & "\' and 使用设备 = \'" & dr("使用设备") & "\'"
                pr = DataTables("生产排产表").SQLFind(filter)
                If pr IsNot Nothing Then
                    dr("加工单价") = pr("工序单价")
                End If
            End If
    End Select

--  作者:有点蓝
--  发布时间:2022/11/26 9:06:00
--  
如果是平时录入一行查一行,没有必要。如果是要一次性处理一张表的数据,最好一次性把"生产排产表"需要的数据查处理,然后使用find,或者使用sql更新
[此贴子已经被作者于2022/11/26 9:06:07编辑过]

--  作者:nuoyan89
--  发布时间:2022/11/26 11:39:00
--  
老师,我这个是一次性处理一张,预计有万把条,如果用SQL的话有参考的吗?
--  作者:有点蓝
--  发布时间:2022/11/26 11:48:00
--  
update 表A as a set a.加工单价=b.工序单价 from 生产排产表 as b where a.成品编码= b.成品编码 and a. 加工工序=b. 加工工序 ...............