【问题标题】:Why is Filtergroup (-1) in Navision Page OR filtering on page level not working为什么 Navision 页面中的过滤器组 (-1) 或页面级别的过滤不起作用
【发布时间】:2021-07-16 12:16:35
【问题描述】:

是否有可能使用 OR 条件进行过滤(使用 FILTERGROUP(-1))在页面级别不起作用? 如果是这样,为什么它不起作用?

我是 MS-Navision 的新手,我试图了解它的下划线编程。 在 MS-Navision Cronus-AG DB 中,我基于客户表创建了一个页面。在客户表中,我添加了两个字段(Datefield DateCodeField 整数)。创建的页面应仅显示 Datefieldcodefield 为空的客户。我使用了两个名为

的空变量
date Date 
codefield Code

我尝试在OnOpenPage-Trigger 中使用以下代码:

 CLEAR(date);
 CLEAR(c20);
 
 FILTERGROUP(-1);
 SETFILTER(DateField, '%1', date);
 SETFILTER(CodeField20Old, '%1', c20);
 FILTERGROUP(0); // tried to remove this line, still not working

但是没有设置过滤器,尤其是在 OR-Filter 条件下。但是,如果我使用在 Codeunit 中剪切的相同代码,它的工作方式是正确的。如果我将FILTERGROUP(-1) 更改为FILTERGROUP(2),则会设置一个过滤器(带有 AND 条件)。

谁能解释一下这种行为?

【问题讨论】:

  • 那个过滤器组总是有点“hacky”,我认为不应该用于过滤页面。
  • @MakSim 过滤器组是向标准用户隐藏页面上过滤器的好方法。
  • @samga 嗯,是的。一般来说,这就是过滤器组的用途。但不是-1 之一。我的评论只是指这个。

标签: microsoft-dynamics navision dynamics-al


【解决方案1】:

虽然这可能不是您问题的直接答案,但要让您的过滤记录显示在您的页面中,您需要标记每一行,然后只显示标记的行:

FILTERGROUP(-1);
SETFILTER(DateField, '%1', date);
SETFILTER(CodeField20Old, '%1', c20);

IF FindSet() then
  repeat
    Mark(true);
  until Next() = 0;

FILTERGROUP(0);
MarkedOnly(true);

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2019-12-06
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多