Хочется добавить, что ЛЮБЫЕ даты 1900-го года воспринимаются также как datenull().
Т.е.
X++:
date d = 31\12\1900;
if (!d)
{
info("пусто!");
}
И видимо поэтому функция endMth, которая принимает пустую дату - видит что это как бы не дата и возвращает попросту 0, хотя и типа date.
Но 0 видимо для типа date не является ложью (false) в выражении if (!date), поэтому система спокойно идет себе дальше....