Hello there again.
Do you guys could shed a light on this issue I’m facing? I know how to solve, but I can’t understand why it is happening.
this is part of the program.
LOCAL
1 #DAYS (N5)
1 #MAX (N5)
1 #far (d)
END-DEFINE
#DT := D'2021-06-28'
READ MULTI-FETCH OF 10 PAR WITH CD-ST-PARC EQ ' ' THRU ' '
#DAYS := #DT - DT-VALID /* (d) this is the valid date on the billings.
IF #DAYS > #MAX
#MAX := #DAYS
#FAR := DT-VALID
END-IF
IF #DAYS GT 9999
WRITE 'above 9999 =' #DAYS
END-IF
END-READ
WRITE '=' #MAX '=' #FAR (EM=YYYYMMDD)
END
this is the result: 8210 19990105
so far, ok.
The issue is that the version that is in production has #days defined as (n4). And I’m receiving 1320 (numeric value truncated)
You see that the oldest value for date I’ve got here is 1999-01-05. It doesn’t go over 9999 days. The if block is never used…
I know I could just go and increase the N4 to N5 in production and here we go, but I need to understand why 8210 doesn’t fit in a N4 in this case.
Hi Ralph. Thank you as always. First yes, you are right. I confused the errors, it’s a 1305.
About the null, as you can see, when I define it as a N5, there is no problem and there should be if it was the case of returning a 6-digit to a N5. Also, if there was a null value, I believe the if block would be used and would display the value, because it would be bigger than 9999 days, but it doesn’t happen. That’s why I’m confused.
[edit]
I found out the issue. The database is very large and it makes difficult to find because the date is not a descriptor, but I managed to put an ‘on error’, forcing it to show me what was coming in.
after 1h running, I found out that one of the valid-dt is set on 2122-01-22 which is another issue, but clearly explains how the value became so big.
the if block is testing for GT 9999, but not LT -9999.
initially i was afraid of something that could be hidden and using space of the numbers, because i’m not calculating over N dates, but D dates.
This will be the statement failing on the NAT1305, so your IF statement won’t be executed. Unless you can guarantee valid dates, #DAYS must be defined as N6 or P6. If your Natural parameters have set MAXYEAR to 9999, then #DAYS should be defined as N7 or P7.