以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 满足条件统计 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175097) |
-- 作者:nuoyan89 -- 发布时间:2022/2/19 17:30:00 -- 满足条件统计 老师,我在窗口表中需要设置状态,如下:我有两个表(分别为:A表和B表),根据生产批次,加工工序、使用设备、成品编码等条件,在B表中统计“加工状态” 列中如果有空值,并且表A的“待加工数”列小于或等于0,表A中的刀具状态为“待还刀”;如果加工状态列中没有空值,刀具状态为“已还刀”,如果表B中的统计根本没有这个相关的明细可统计,并且表A的“可排产数”列不等于表A中的“计划数量”,表A中的刀具状态为“待配刀”,如果表B中根本没有这个相关的明细可统计,并且表A的“合格品”列大于0,表A中的刀具状态为“无需刀具”。我想在窗口表中表事件中,请帮忙看看,谢谢! 以下这个刀码也帮忙看看,谢谢 If e.DataRow("刀具状态") <> "已还刀" AndAlso e.DataRow("使用设备") Like "*ZK*" Then Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [加工工序] = \'" & e.DataRow("加工工序") & "\'and [使用设备] = \'" & e.DataRow("使用设备") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\'"\' If DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) > 0 Then e.DataRow("刀具状态") = "已还刀" ElseIf DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) < 0 Then e.DataRow("刀具状态") = "待还刀" ElseIf e.DataRow("合格品") > 0 AndAlso e.DataRow("待加工数") > 0 AndAlso DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) = Nothing Then e.DataRow("刀具状态") = "进行中" ElseIf e.DataRow("待加工数") = e.DataRow("计划数量") AndAlso DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) = Nothing Then e.DataRow("刀具状态") = "未加工" End If End If |
-- 作者:有点蓝 -- 发布时间:2022/2/19 17:42:00 -- 既然代码里都有具体的表名列名,描述问题记录使用代码里的表名列名,不要使用什么A表,B表,A列B列来表示,无法对号入座,看半天都不知道哪个是A表哪个是B表。 |
-- 作者:nuoyan89 -- 发布时间:2022/2/19 20:01:00 -- 老师,我把代码改了下,红色标注的是需要达到的结果,目前就是计划领用刀具这个表统计时有点分不清表达,被搅晕了(1、根据以下条件(蓝色),先在计划领用刀具表中查找是否有对应的刀具清单,如果有,再统计加工状态这一列是否有空值,没有空值,刀具状态则为已还刀,如果有空值,并且工序状态为进行中时,刀具状态则为进行中?2、另外一个就是根据蓝色字体的条件,先查找计划领用刀具表中查找是否有对应的清单,如果没有,则按刀具状态按要求显示;3、另外一个就是根据蓝色字体的条件,先查找计划领用刀具表中查找是否有对应的清单,如果有,按照加工状态统计中没有空值,则按刀具状态按要求显示;)。请帮忙看看,谢谢 If e.DataRow("刀具状态") <> "已还刀" AndAlso e.DataRow("使用设备") Like "*ZK*" Then Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [加工工序] = \'" & e.DataRow("加工工序") & "\'and [使用设备] = \'" & e.DataRow("使用设备") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\'"\' 1、If DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) > 0 Then (解释:如果《计划领用刀具》的加工状态这列没有空值,那当前窗口表中的“刀具状态” = “已还刀” e.DataRow("刀具状态") = "已还刀" ElseIf DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) < 0 AndAlso e.DataRow("工序状态") = "进行中" Then(解释:如果《计划领用刀具》的加工状态这列有空值,并且当前窗口表中的工序状态列为”进行中“,那当前窗口表中的“刀具状态” = “进行中” e.DataRow("刀具状态") = "进行中" ElseIf e.DataRow("已排产数") <> 0 AndAlso e.DataRow("合格品") = 0 AndAlso DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) = Nothing Then(解释:如果《计划领用刀具》的没有对应的刀具明细,并且当前窗口表中的已排产数列不等于于零和合格品列等于0,那当前窗口表中的“刀具状态” = “待配刀” e.DataRow("刀具状态") = "待配刀" ElseIf e.DataRow("待加工数") = e.DataRow("计划数量") AndAlso DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) = Nothing Then e.DataRow("刀具状态") = "未加工" (解释:如果《计划领用刀具》的没有这个批次的的相关刀具信息,并且当前窗口表中的待加工数等于计划数量,那当前窗口表中的“刀具状态” = “未加工” ElseIf DataTables("计划领用刀具").SQLCompute("count(加工状态)", Filter12) < 0 AndAlso e.DataRow(" 工序状态") = "已完工" Then(解释:如果《计划领用刀具》的加工状态这列有空值,并且当前窗口表中的工序状态列为”已完工“,那当前窗口表中的“刀具状态” = “待还刀” e.DataRow("刀具状态") = "待还刀" End If End If |
-- 作者:有点蓝 -- 发布时间:2022/2/20 20:56:00 -- If e.DataRow("刀具状态") <> "已还刀" AndAlso e.DataRow("使用设备") Like "*ZK*" Then Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [加工工序] = \'" & e.DataRow("加工工序") & "\'and [使用设备] = \'" & e.DataRow("使用设备") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\'"\' dim dr as datarow = DataTables("计划领用刀具").SQLFind(Filter12) if dr is nothing then 《计划领用刀具》没有对应的刀具明细 如果没有,则按刀具状态按要求显示 if e.DataRow("已排产数") <> 0 AndAlso e.DataRow("合格品") = 0 then 《计划领用刀具》的没有对应的刀具明细,并且当前窗口表中的已排产数列不等于于零和合格品列等于0,那当前窗口表中的“刀具状态” = “待配刀” elseif e.DataRow("待加工数") = e.DataRow("计划数量") 待加工数等于计划数量,那当前窗口表中的“刀具状态” = “未加工” endif else 《计划领用刀具》有对应的刀具明细 if dr.isnull("加工状态") then 加工状态这一列是空值 if e.DataRow("工序状态") = "进行中" then 如果有空值,并且工序状态为进行中时,刀具状态则为进行中 elseif e.DataRow("工序状态") = "已完工" then 加工状态这列有空值,并且当前窗口表中的工序状态列为”已完工“,那当前窗口表中的“刀具状态” = “待还刀” end if else 加工状态这一列不是空值 加工状态这列没有空值,那当前窗口表中的“刀具状态” = “已还刀” end if end if End If
|
-- 作者:nuoyan89 -- 发布时间:2022/2/23 20:31:00 -- 老师,再请教下,计划领用刀具这个表中的刀具状态有很多行,我想让当刀具状态这一列的多行全部为已完工时,订单状态=已完工,只要有一个不是已完工的,订单状态=进行中 |
-- 作者:有点蓝 -- 发布时间:2022/2/24 8:46:00 -- 使用compute计算 if e.datatable.compute("count(刀具状态)","刀具状态 <> \'已完工\' or 刀具状态 is null") > 0 then 订单状态=进行中 else 订单状态=已完工 end if
|
-- 作者:nuoyan89 -- 发布时间:2022/2/24 9:33:00 -- 老师,我把写成了下面这样的,但是不变,如图2 Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\'" If DataTables("生产排产表").SQLcompute("count(订单状态)","订单状态 <> \'已完成\' or 订单状态 is null") > 0 AndAlso e.DataRow("申请关闭") = Nothing Then e.DataRow("排产状态") = "进行中" Else e.DataRow("排产状态") = "已完工" End If [此贴子已经被作者于2022/2/24 9:34:29编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/2/24 9:56:00 -- Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\' and (订单状态 <> \'已完成\' or 订单状态 is null)" If DataTables("生产排产表").SQLcompute("count(订单状态)",Filter12 ) > 0 AndAlso e.DataRow("申请关闭") = Nothing Then
|
-- 作者:nuoyan89 -- 发布时间:2022/3/2 9:13:00 -- 老师,以下代码帮忙看看,查询时出现闪退或者以下如图异常,这个代码注释掉就不会出现 Dim Filter12 As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\' and (订单状态 <> \'已完成\' or 订单状态 is null)" If DataTables("生产排产表").SQLcompute("count(订单状态)",Filter12 ) > 0 AndAlso e.DataRow("申请关闭") = Nothing Then e.DataRow("排产状态") = "进行中" Else e.DataRow("排产状态") = "已完工" End If 此主题相关图片如下:1.png |
-- 作者:有点蓝 -- 发布时间:2022/3/2 9:23:00 -- 应该是事件代码之间互相触发形成了死循环。 检查代码逻辑,或者加上这个试试:http://www.foxtable.com/webhelp/topics/2218.htm
|