问题描述
我有两个字段(“开始日期”,“结束日期”)均为日期类型。
我还想掩盖两种情况-没有成功:
A: “开始日期” 未定义,但是“结束日期” 为e。 G。开始日期= 0D ,结束日期= 2020年12月31日。现在,这意味着从0D到2020年12月31日之间的所有内容都应视为重叠。
定义“开始日期” 和未定义“结束日期” 的情况相同。 G。开始日期= 2020年2月2日,结束日期= ''。那将被视为02.02.2020..∞
注意:“开始日期” = “Gültigvon” 和“结束日期” = “Gültigbis” )。
由于2020年2月2日一直持续到“无限” e,所以这种情况将是重叠的。 G。 “结束日期” 的第一行在第二行的范围内。
B:在这种情况下,范围不会以自己的方式出现(不重叠)e。 G。开始日期= 0D ,结束日期= 2020年1月31日,开始日期= 2020年2月2日,结束日期= ” 作为第二行。
重新获得可视化效果:
在这里,我们看到两行都有自己的范围(不重叠),因为第一行在第二行的下一个范围开始的两天前结束。
我的方法无效:
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;
结果比预期更长。至少它是可重现的:)
解决方法
据我了解,您需要这样的东西。我是在没有编译器的情况下完成的,可能缺少一些调整。
尝试一下
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",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",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;