Crystal Reports - Conditional Formatting based on Results
I have three fields in my crystal report that I need to conditionally format.
Field #1 - LastDental (field type is String).
Per my clients request, please bold and increase font by 2 points (currently set to Arial 8 regular) when the LastDental < Today - 365 days or equals "Never".
Field #2 - HGBA1CValue (field type is String).
Per my clients request, please bold and increase font by 2 points (currently set to Arial 8 regular) when HGBA1CValue > 9 or equals "Never".
Field #3 - SMGDate (field type is String).
Per my clients request, please bold and increase font by 2 points (currently set to Arial 8 regular) when the SMGDate < Today - 365 days or equals "Never".
Crystal Reports
Last Comment
Jeff S
8/22/2022 - Mon
Mike McCracken
Basic method for font size
Behind the formula button for font size
If {YourField} > 9 then
10
Else
8
To bold - behind the formula button for style
If {YourField} > 9 then
crBold
Else
crRegular
Are the dates strings or is that the field you are displaying?
If strings what format do they have?
mlmcc
GJParker
You can do this by right clicking on the respective fields -> go to the Font tab and add conditional formulas against each of the properties you want to change.
Local NumberVar Y := Val(Split({@LastDental}, '/')[3]);
Local NumberVar M := Val(Split({@LastDental}, '/')[1]);
Local NumberVar D := Val(Split({@LastDental}, '/')[2]);
If Date(Y,M,D) < Today - 365 Or {@date} = 'Never' Then
10
Else
8
and swithc to crBold and crRegular for the other change
HTH
gavsmith
So like mlmcc said but use:
If CDate({LastDental}) < DateAdd("d", -365, CurrentDate) or {LastDental} = "Never" then
10
Else
8
Do the same for SMGDate and you are best converting HGBA1CValue to a number before comparing as strings do compare differently:
If CDbl({HGBA1CValue}) > 9 or {HGBA1CValue} = "Never" then
10
Else
8
Jeff S
ASKER
I used:
If CDate({rptApptsByUser;1.LastDental}) < DateAdd("d", -365, CurrentDate) or {rptApptsByUser;1.LastDental} = "Never" then
10
Else
8
and
If CDate({rptApptsByUser;1.LastDental}) < DateAdd("d", -365, CurrentDate) or {rptApptsByUser;1.LastDental} = "Never" then
crBold
Else
crRegular
and getting back an error at run time that indicates: "Bad Date Format String".
I am getting a message that the indicates: "The remaining text does not appear to be part of the formula" and it highlights everything from the ELSE down to the 8.
Local NumberVar Y;
Local NumberVar M;
Local NumberVar D;
If InStr({@LastDental},'/') > 0 Then
(
Local NumberVar Y := Val(Split({@LastDental}, '/')[3]);
Local NumberVar M := Val(Split({@LastDental}, '/')[1]);
Local NumberVar D := Val(Split({@LastDental}, '/')[2])
);
Else
(
Local NumberVar Y := 1900;
Local NumberVar M := 1;
Local NumberVar D := 1
);
If Date(Y,M,D) < Today - 365 Then
10
Else
8
mlmcc
Jeff S
ASKER
mlmcc,
I am back to "The string is non-numeric". I am stumped.
Jeff S
ASKER
mlmcc and GJParker -
Please accept my apology. I had the conditional fomatting on the HGBA1CValue I asked for help on earlier and didn't realize I still had that on. I was going through and making changes and testing these one by one and found your coding was right. The issue is with the suggestion gavsmith provided earlier. I am getting the "The string is non-numeric" on this:
If CDbl({rptApptsByUser;1.HGBA1CValue}) > 9 or {rptApptsByUser;1.HGBA1CValue} = "Never" then
10
Else
8
Behind the formula button for font size
If {YourField} > 9 then
10
Else
8
To bold - behind the formula button for style
If {YourField} > 9 then
crBold
Else
crRegular
Are the dates strings or is that the field you are displaying?
If strings what format do they have?
mlmcc