This is a follow-up post of the previous post about user-based filters and Flowfields. Check it down here:
User-wise filtering in any Master Tables on Dynamics NAV.
What is really interesting is the Text Management (41) Codeunit, you can pass pretty much human readable text on the filtration box of any screen of Dynamics NAV.
The text filters supported are: ‘ME’,’USER’,’COMPANY’, ‘MYCUSTOMERS’,’MYITEMS’, ‘MYVENDORS’.
*****
MakeTextFilter(VAR TextFilterText : Text) : Integer
*****
Position := 1;
Length := STRLEN(TextFilterText);
ReadCharacter(' ',TextFilterText,Position,Length);
IF FindText(PartOfText,TextFilterText,Position,Length) THEN
CASE PartOfText OF
COPYSTR('ME',1,STRLEN(PartOfText)),COPYSTR(MeText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
TextFilterText := USERID;
END;
COPYSTR('USER',1,STRLEN(PartOfText)),COPYSTR(UserText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
TextFilterText := USERID;
END;
COPYSTR('COMPANY',1,STRLEN(PartOfText)),COPYSTR(CompanyText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
TextFilterText := COMPANYNAME;
END;
COPYSTR('MYCUSTOMERS',1,STRLEN(PartOfText)),COPYSTR(MyCustomersText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
GetMyFilterText(TextFilterText,DATABASE::"My Customer");
END;
COPYSTR('MYITEMS',1,STRLEN(PartOfText)),COPYSTR(MyItemsText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
GetMyFilterText(TextFilterText,DATABASE::"My Item");
END;
COPYSTR('MYVENDORS',1,STRLEN(PartOfText)),COPYSTR(MyVendorsText,1,STRLEN(PartOfText)):
BEGIN
Position := Position + STRLEN(PartOfText);
GetMyFilterText(TextFilterText,DATABASE::"My Vendor");
END;
ELSE
EXIT(Position);
END;
EXIT(0);
Also, the same concept can be applied to the date filters.
*****
LOCAL MakeDateFilter2(VAR OK : Boolean;VAR Date1 : Date;VAR Date2 : Date;DateFilterText : Text[1024]) : Integer
*****
IF EVALUATE(DateFormula,DateFilterText) THEN BEGIN
RemainderOfText := DateFilterText;
DateFilterText := '';
END ELSE BEGIN
Position := STRPOS(DateFilterText,'+');
IF Position = 0 THEN
Position := STRPOS(DateFilterText,'-');
IF Position > 0 THEN BEGIN
RemainderOfText := DELCHR(COPYSTR(DateFilterText,Position));
IF EVALUATE(DateFormula,RemainderOfText) THEN
DateFilterText := DELCHR(COPYSTR(DateFilterText,1,Position - 1))
ELSE
RemainderOfText := '';
END;
END;
Position := 1;
Length := STRLEN(DateFilterText);
FindText(PartOfText,DateFilterText,Position,Length);
IF PartOfText <> '' THEN
CASE PartOfText OF
COPYSTR('PERIOD',1,STRLEN(PartOfText)),COPYSTR(PeriodText,1,STRLEN(PartOfText)):
OK := FindPeriod(Date1,Date2,FALSE,DateFilterText,PartOfText,Position,Length);
COPYSTR('YEAR',1,STRLEN(PartOfText)),COPYSTR(YearText,1,STRLEN(PartOfText)):
OK := FindPeriod(Date1,Date2,TRUE,DateFilterText,PartOfText,Position,Length);
COPYSTR('TODAY',1,STRLEN(PartOfText)),COPYSTR(TodayText,1,STRLEN(PartOfText)):
OK := FindDate(TODAY,Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('WORKDATE',1,STRLEN(PartOfText)),COPYSTR(WorkdateText,1,STRLEN(PartOfText)):
OK := FindDate(WORKDATE,Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('NOW',1,STRLEN(PartOfText)),COPYSTR(NowText,1,STRLEN(PartOfText)):
OK := FindDate(DT2DATE(CURRENTDATETIME),Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('YESTERDAY',1,STRLEN(PartOfText)),COPYSTR(YesterdayText,1,STRLEN(PartOfText)):
OK := FindDate(CALCDATE('<-1D>'),Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('TOMORROW',1,STRLEN(PartOfText)),COPYSTR(TomorrowText,1,STRLEN(PartOfText)):
OK := FindDate(CALCDATE('<1D>'),Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('WEEK',1,STRLEN(PartOfText)),COPYSTR(WeekText,1,STRLEN(PartOfText)):
OK := FindDates('<-CW>','<CW>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('MONTH',1,STRLEN(PartOfText)),COPYSTR(MonthText,1,STRLEN(PartOfText)):
OK := FindDates('<-CM>','<CM>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
COPYSTR('QUARTER',1,STRLEN(PartOfText)),COPYSTR(QuarterText,1,STRLEN(PartOfText)):
OK := FindDates('<-CQ>','<CQ>',Date1,Date2,DateFilterText,PartOfText,Position,Length);
END
ELSE
IF (DateFilterText <> '') AND EVALUATE(Date1,DateFilterText) THEN BEGIN
Date2 := Date1;
OK := TRUE;
Position := 0;
END ELSE
IF RemainderOfText <> '' THEN BEGIN
Date1 := TODAY;
Date2 := Date1;
OK := TRUE;
Position := 0;
END ELSE
OK := FALSE;
IF OK AND (RemainderOfText <> '') THEN BEGIN
Date1 := CALCDATE(DateFormula,Date1);
Date2 := CALCDATE(DateFormula,Date2);
END;
EXIT(Position);
The date filters supported are: ‘PERIOD’, ‘YEAR’, ‘TODAY’, ‘WORKDATE’, ‘NOW’, ‘YESTERDAY’, ‘TOMORROW’, ‘WEEK’, ‘MONTH’, ‘QUARTER’.

Like
Report
*This post is locked for comments