Foxtable(狐表)用户栏目专家坐堂 → 满足条件统计


  共有4407人关注过本帖树形打印复制链接

主题:满足条件统计

美女呀,离线,留言给我吧!
nuoyan89
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
满足条件统计  发帖心情 Post By: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

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111422 积分:567186 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/19 17:42:00 [只看该作者]

既然代码里都有具体的表名列名,描述问题记录使用代码里的表名列名,不要使用什么A表,B表,A列B列来表示,无法对号入座,看半天都不知道哪个是A表哪个是B表。

根本没有这个相关的明细可统计指什么?有空值,没有空值又表示什么?

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By: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

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111422 积分:567186 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/2/23 20:31:00 [只看该作者]

老师,再请教下,计划领用刀具这个表中的刀具状态有很多行,我想让当刀具状态这一列的多行全部为已完工时,订单状态=已完工,只要有一个不是已完工的,订单状态=进行中

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111422 积分:567186 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/24 8:46:00 [只看该作者]

使用compute计算

if e.datatable.compute("count(刀具状态)","刀具状态 <> '已完工' or 刀具状态 is null") > 0 then
订单状态=进行中
else
订单状态=已完工
end if

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By: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

图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2022/2/24 9:34:29编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111422 积分:567186 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By: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
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111422 积分:567186 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/2 9:23:00 [只看该作者]

应该是事件代码之间互相触发形成了死循环。

检查代码逻辑,或者加上这个试试:http://www.foxtable.com/webhelp/topics/2218.htm

 回到顶部