You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Acumatica报表设计器中正确使用IN过滤器?添加值被忽略问题

Acumatica报表查询:ReasonCode的IN过滤器值被忽略的修复方案

问题场景

刚接触Acumatica,负责更新报表查询,需要给ReasonCode的筛选条件新增BAJAMERCADERIA值。尝试用IN过滤器时,第二个值始终被忽略或截断,已通过跟踪日志确认该问题。原查询片段如下:

( [INRegister].[TransferType] = '1' 
  AND [INTran].[TranDate] BETWEEN CONVERT(DATETIME, '20220101 0:0:0.000') AND CONVERT(DATETIME, '20230112 0:0:0.000') 
  AND ( [INRegister].[DocType] = 'I' OR [INRegister].[DocType] = 'A') 
  AND ( [INTran].[ReasonCode] = 'Null' OR [INTran].[ReasonCode] = 'BAJACADUCA' OR [INTran].[ReasonCode] = 'INISSUED' OR [INTran].[ReasonCode] = 'Null') 
  AND ( [InventoryItem].[PreferredVendorID] = NULL OR NULL IS NULL ))
ORDER BY [InventoryItem].[ItemClassID], [InventoryItem].[PreferredVendorID], [INTran].[TranDate] OPTION(OPTIMIZE FOR UNKNOWN) 

问题分析&修复步骤

  1. 修正Null判断错误:原查询里[INTran].[ReasonCode] = 'Null'是错误写法——SQL中判断字段为NULL必须用IS NULL,而非等于字符串'Null',这会导致真正的NULL值无法匹配,还可能干扰IN子句的解析。
  2. 清理冗余条件:原查询重复写了两次[INTran].[ReasonCode] = 'Null',属于无效冗余,直接删除。
  3. 改用IN子句的正确写法:把多个ReasonCode值用IN包裹,同时单独处理NULL的情况(IN子句无法直接包含NULL)。

修复后的查询片段

( [INRegister].[TransferType] = '1' 
  AND [INTran].[TranDate] BETWEEN CONVERT(DATETIME, '20220101 0:0:0.000') AND CONVERT(DATETIME, '20230112 0:0:0.000') 
  AND ( [INRegister].[DocType] = 'I' OR [INRegister].[DocType] = 'A') 
  AND ( [INTran].[ReasonCode] IS NULL OR [INTran].[ReasonCode] IN ('BAJACADUCA', 'INISSUED', 'BAJAMERCADERIA')) 
  AND ( [InventoryItem].[PreferredVendorID] IS NULL OR NULL IS NULL ))
ORDER BY [InventoryItem].[ItemClassID], [InventoryItem].[PreferredVendorID], [INTran].[TranDate] OPTION(OPTIMIZE FOR UNKNOWN) 

说明

  • 新增的BAJAMERCADERIA已加入IN列表,不会再被忽略;
  • 修正后的NULL判断能正确匹配字段为NULL的情况;
  • 简化了ReasonCode的筛选逻辑,也避免了Acumatica查询解析时可能出现的截断问题。

内容的提问来源于stack exchange,提问作者George Arce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:35:35