Разбираем отрицательный номер дня и номер вхождения дня недели на сентябре 2026 года.
Где и как запускать
Полный модуль собственной управляемой формы, расчёт на сервере.
Подготовка
Собственная пустая конфигурация УчебнаяКонфигурацияСинтаксиса 8.5.1.1343. Создайте внешнюю обработку с управляемой формой, командой Выполнить и её кнопкой; вставьте полный модуль урока в форму.
ТребуетсяВыполнение доступен серверу, толстому клиенту и внешнему соединению. Поэтому здесь тонкий клиент получает результат отдельной серверной функции.
Расписание создаётся только в памяти. Регламентное задание не создаётся, не записывается и не запускается; действующие расписания базы не читаются и не меняются.
Все даты проверки заданы явно. Вызов без даты зависит от текущего времени и для этих воспроизводимых проверок не используется.
&НаКлиенте
Процедура Выполнить(Команда)
Сообщить(ПроверитьУчебноеРасписание());
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроверитьУчебноеРасписание()
Отчет = Новый Массив;
КонецМесяца = Новый РасписаниеРегламентногоЗадания;
КонецМесяца.ДеньВМесяце = -1;
Отчет.Добавить(Строка(КонецМесяца.ДеньВМесяце = -1));
Отчет.Добавить(Строка(КонецМесяца.ТребуетсяВыполнение(Дата(2026, 9, 30, 12, 0, 0))));
Отчет.Добавить(Строка(НЕ КонецМесяца.ТребуетсяВыполнение(Дата(2026, 9, 29, 12, 0, 0))));
Отчет.Добавить(Строка(КонецМесяца.ТребуетсяВыполнение(Дата(2026, 2, 28, 12, 0, 0))));
ВтороеВоскресенье = Новый РасписаниеРегламентногоЗадания;
ВтороеВоскресенье.ДеньНеделиВМесяце = 2;
Дни = Новый Массив;
Дни.Добавить(7);
ВтороеВоскресенье.ДниНедели = Дни;
Отчет.Добавить(Строка(ВтороеВоскресенье.ДеньНеделиВМесяце = 2));
Отчет.Добавить(Строка(ВтороеВоскресенье.ТребуетсяВыполнение(Дата(2026, 9, 13, 12, 0, 0))));
Отчет.Добавить(Строка(НЕ ВтороеВоскресенье.ТребуетсяВыполнение(Дата(2026, 9, 6, 12, 0, 0))));
Отчет.Добавить(Строка(НЕ ВтороеВоскресенье.ТребуетсяВыполнение(Дата(2026, 9, 20, 12, 0, 0))));
Возврат СтрСоединить(Отчет, Символы.ПС);
КонецФункцииРазбор по шагам
ДеньВМесяце=-1 отсчитывается от конца месяца: в сентябре это 30-е, в феврале 2026 — 28-е. Не фиксируем 31 для всех месяцев.
ДеньНеделиВМесяце=2 — второе вхождение выбранного дня недели, а не вторник. Воскресенье задаётся отдельным массивом ДниНедели=[7].
В сентябре 2026 воскресенья приходятся на 6, 13, 20 и 27 числа; поэтому второе — 13-е.
Два правила находятся в разных объектах. Урок не обещает смысл одновременного смешения календарных ограничений.
Как проверить результат
Восемь строк ожидаются Истина. Первая группа проверяет конец месяца, вторая — второе воскресенье.
Для самостоятельной проверки задайте ДеньНеделиВМесяце=-1 и сравните 27 и 20 сентября: отсчёт будет от конца месяца.
Ожидаемый результат
На проверяемом календаре показаны два разных вида номера дня в месяце.
На что обратить внимание
Не путать номер дня недели с номером его вхождения.
Дата 31 февраля недопустима; последний день определяется календарём, не строковой подстановкой.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.