0

我有两个字段(“开始日期”、“结束日期”)都是日期类型。

而且我还有两个我试图掩盖的情况 - 没有成功:

答: “开始日期”未定义,但“结束日期”例如 Start Date= 0D ,End Date= 31.12.2020。这意味着从 0D 到 2020 年 12 月 31 日之间的一切都应该被视为重叠。

定义“开始日期”和未定义“结束日期”也是如此,例如 Start Date= 02.02.2020 , End Date= ''。那将被视为 02.02.2020..∞</p>

为了可视化它,我添加了一个屏幕截图。

重叠

注意: “开始日期” = “Gültig von”“结束日期” = “Gültig bis”)。

这种情况会重叠,因为 02.02.2020 一直到“无穷大”,例如“结束日期”的第一行在第二行的范围内。

B:在这种情况下,范围不碍事(不重叠),例如,第一行的开始日期= 0D,结束日期= 31.01.2020,第二行的开始日期= 02.02.2020,结束日期= ''

再次可视化:

不重叠

在这里,我们看到两行都有自己的范围(不重叠),因为第一行在第二行的下一个范围开始前两天结束。

我的方法不起作用:

local procedure ValidateRandomRec()
var
    _random: Record Random;
begin
    if (Rec."Gueltig bis" = 0D) and (Rec."Gueltig von" <> 0D) then begin
        if _random.FindSet() then
            _random.SetFilter("Gueltig von", '=''''|%1..', Rec."Gueltig von")
        else begin
            _random.SetFilter("Gueltig bis", '');
            _random.SetFilter("Gueltig von", '%1..', Rec."Gueltig von");
        end;
    end;
end;

if (_random.FindSet()) and (_random.Count >= 1) then begin
       if GuiAllowed then
           Message('Date overlapping');
end;

像这样被称为我的页面:

trigger OnInsert()
begin
    ValidateRandomRec();
end;

trigger OnModify()
begin
    ValidateRandomRec();
end;

trigger OnRename()
begin
    ValidateRandomRec();
end;

结果比预期的要长。至少它是可重现的:)

4

1 回答 1

1

据我了解,您需要这样的东西。我在没有编译器的情况下完成了它,也许缺少一些调整。

尝试这个

local procedure ValidateRandomRec()
var
    _random: Record Random;
    _totalReg: Integer;
begin
    _random.Reset();
    _totalReg := 0;
   
    //Scenario A
    if (Rec."Gueltig von" <> 0D) and (Rec."Gueltig bis" = 0D) then begin
        _random.SetFilter("Gueltig von", '%1..', Rec."Gueltig von");
        _random.SetRange("Gueltig bis", 0D);
        _totalReg := _random.Count;
        if(_totalReg = 1)then begin
            _random.Reset();
            _random.SetRange("Gueltig von", 0D);
            _random.SetFilter("Gueltig bis", '%1..', Rec."Gueltig von");
            _totalReg += _random.Count;     

            _random.Reset();
            _random.SetFilter("Gueltig von", '..%1', Rec."Gueltig von");
            _random.SetRange("Gueltig bis", 0D);
            _totalReg += _random.Count;
        end;
    end;

    Scenario B
    if (Rec."Gueltig von" = 0D) and (Rec."Gueltig bis" <> 0D) then begin
        _random.SetRange("Gueltig von", 0D); 
        _random.SetFilter("Gueltig bis", '..%1', Rec."Gueltig bis");
        _totalReg := _random.Count;
    end;           

    if (_totalReg > 1) then //More than one record in table with this filters
       if GuiAllowed then
           Message('Date overlapping');
    
end;
于 2020-08-18T12:28:21.703 回答