Как это всё работает?

Итак, Вы создали свой Устав. Опубликовали его. Даже внесли некоторые правки и скорректировали расписание.

Но понятнее от этого не стало, как же всё это работает🤔… Ясно, давайте сегодня рассмотрим в «глубину» нашу систему, разберем работу алгоритма формирования расписания.

Начало

Если совсем схематично отобразить работу системы, то для внешнего пользователя это выглядит примерно так:

Процесс
У нас есть:
  • Устав,
  • Интересующая нас дата, для которой мы хотим посмотреть наше расписание.

Система принимает эти данные и… выдает результат.

Конечно не все так просто. Особо пытливые умы скажут: видимо, происходит какая-то обработка данных, которые мы заполняли и корректировали в Календаре и Графике богослужений нашего Устава. И они будут правы. Теперь нашу схему можно отобразить вот так:

Процесс2

Картинка вроде бы проясняется. Но давайте дальше догадками заниматься не будем и разберем весь алгоритм пошагово.

И давайте будем рассматривать конкретный пример:
  • Уставом у нас будем наш ранее рассматриваемый Простой устав,
  • Дату возьмем - 10 июня 2021 года.

Календарь

Действительно, первое, к чему обращается система при формировании расписания - это Календарь.

По запрашиваемой дате производится поиск в трех подразделах Календаря:
  • Минея
  • Триодь
  • Переходящие праздники

С Минеей все наиболее просто: в минейном календаре дни хранятся без привязки к конкретному году, то есть дата хранится только с указанием дня и месяца. Чтобы найти нужный нам элемент, система ищет день с датой 10 июня и находит его. Это день памяти свт. Игнатия, еп. Ростовского.

Теперь разберемся с Триодью. Календарные дни этого подраздела хранятся с указанием количества дней относительно дня празднования Пасхи. Системе известны дни празднования Пасхи, в 2021 году она приходится на 2 мая. Далее совершается арифметическая операция и определяется разница в днях между 10 июня и 2 мая. Получается 39 дней. Система совершает поиск по календарю Триоди и находит этот элемент - это Вознесение Господне.

Примечание.

Подождите, скажете Вы, Вознесение же празднуется на 40-й день после Пасхи, почему 39 дней? Дело в том, что в богослужебной традиции сам день Пасхи считается 1-м днем, понедельник Светлой седмицы - 2-м и т.д. Мы же здесь принимаем день Пасхи за «нулевой» день. Соответственно, Великая суббота - это -1 день от Пасхи, а Светлый понедельник - +1 день от Пасхи.

Остались переходящие праздники. С ними не просто, приготовьтесь. Переходящими праздниками могут быть как дни Минеи, так и Триоди. День календаря становится переходящим, ели у него определено «правило для переноса служб». В этом правиле могут быть определены:

  • Перенос дня на другую дату,
  • Определение дня как дополнение (об этом смотри ниже),
  • Смена знака службы для этого дня,
  • Изменение приоритета конкретно для этого дня,
  • Исключение одного из текста служб (например, Устав требует исключить попразднество Сретения для некоторых дней при определенных условиях).

На каждый год система составляет коллекцию результатов обработки этих правил - Переходящих дней. Вот например: у нас есть Димитриевская родительская суббота. Она совершается в субботу, предшествующую дню памяти вмч. Димитрия Солунского (память 8 ноября). Плюс к этому есть исключение: если на эту субботу приходится бденный праздник, то родительская суббота переносится еще на одну субботу раньше. Соответственно, каждый год Димитриевская родительская суббота празднуется в разные дни года. Давайте сделаем эксперимент. Зайдем на страницу просмотра расписания нашего Простого Устава и выберем дату, например 5 мая 2026 года (вы выбирайте какой-либо другой год). При первом нашем обращении система выдает сообщение о том, что дескать «началось формирование расписания, подождите». На самом деле в этот момент система сначала проверяет наличие года Переходящих праздников, в нашем случае для 2026 года. Если она такового года не находит, то инициируется его создание. Система пробегается по всем дням Календаря Минеи и Триоди, у которых определено вышеуказанное правило для переходящих служб, и создает Переходящие дни на конкретную дату этого года. И только потом будет формироваться собственно расписание. Эта операция затратная и занимает некоторое время. Вот почему при первом обращении все работает достаточно неторопливо. Если мы теперь попробуем сформировать расписание для другой недели этого же 2026 года, то процесс займет уже заметно меньше времени. Все потому, что год Переходящих праздников уже создан.

Вернемся же. Мы остановились на том, что нам надо найти Переходящий праздник. Хорошо, система ищет его… и не находит. И это нормальный результат. Значит на этот день переходящих праздников Минеи и Триоди не пришлось.

А что было бы, если бы система нашла такой день? Тут без теории опять никак не обойтись. Мы имеем два варианта развития событий. Переходящий день может быть определен:

  • В обычном режиме,
  • Как дополнение.

Рассмотрим первый вариант. В таком случае в качестве дня Минеи будет использоваться найденный переходящий праздник. Например, день памяти Новомучеников и исповедников Церкви Русской определен именно так. Это переходящий праздник, приходящийся на первое воскресенье после 25 января по старому стилю. Какой бы день Минеи на этот день ни приходился, он упраздняется и в расписании мы увидим только память новомучеников.

Но также есть и второй вариант. Все лучше воспринимается на примерах, а их у нас множество. Возьмем с вами дни попразднества Господских праздников, например «Суббота по Воздвижении». Праздник совершается в ближайшую субботу после 27 сентября. При этом память рядовых святых, приходящихся на этот день, не упраздняется. «Суббота по Воздвижении» идет в этом случае как дополнение. В правиле для этого переходящего дня Минеи это именно так и указано.

То же кстати работает и с календарем Триоди. Там также каждому дню можно определить правило для переноса служб. И если бы на 10 июня пришелся такой переходящий праздник, то он бы заменил найденный нами рядовой день Триоди. Ну или мог бы использоваться в качестве дополнения.

Но вернемся к нашему случаю: переходящий праздник мы искали на 10 июня 2021 года и не нашли.

Итак, в итоге обработки Календаря мы имеем следующий результат:

  • День Минеи: свт. Игнатия, еп. Ростовского,
  • День Триоди: Вознесение Господне.

И с таким результатом мы переходим далее.

Алгоритм конкурирующих приоритетов

Сейчас система должна будет определить, для какого из дней - Минеи или Триоди - нужно искать распорядок богослужений.

Для этого сравниваются приоритеты этих дней. Как мы с вами помним, что приоритет имеется у Знака службы, и каждый день Календаря относится к одному из них. Также выше мы указали, что приоритет для дня Календаря может быть изменен правилом для переноса служб.

День Минеи 10 июня относится к Знаку службы «Шестеричная», который имеет приоритет равный 5.

Найденный нами день Триоди относится к Знаку службы «Двунадесятый Господский праздник», имеющему приоритет равный 1.

Система сравнивает приоритеты. Возможны следующие варианты:

  • Дня Триоди может быть вообще не найдено.
    Собственно сравнения тогда не происходит, и для обработки остается только день Минеи.
  • Разница в единицу.
    • Распорядок богослужений будет сформирован для дня с наибольшим приоритетом.
    • В наименование службы день с наименьшим приоритетом добавляется после «старшего брата».
  • Одинаковы.
    • Распорядок богослужений формируется для дня Триоди.
    • Наименование дня Минеи включается после наименования дня Триоди.
  • Разница более единицы.
    • Распорядок богослужений формируется для дня с наибольшим приоритетом.
    • Наименование «младшего брата» не включается в наименование службы расписания.

В нашем случае приоритет дня Триоди больше дня Минеи на 4. Потому день Триоди становится единственным для добавления. Кстати, градация приоритетов складывается из принципа чем хуже тем лучше, чем больше тем меньше… ну вы поняли.

Вот таким нехитрым образом работает этот алгоритм. И далее система переходит к формированию распорядка богослужений.

График богослужений

Теперь для выбранного через вышеописанный алгоритм дня Триоди - праздника Вознесения Господня система найдет соответствующий распорядок богослужений.

Если мы зайдем в режим редактирования любого Устава, то в разделе «График богослужений» мы найдем следующие подразделы:

  • Дни недели,
  • Знаки служб,
  • Минея,
  • Триодь.

В каждом из элементов этих подразделов можно определить свой распорядок богослужений.

Алгоритм поиска таков:

  1. Сначала проверяется наличие распорядка для выбранного «старшего» дня Календаря. Если это Минея, то в Минее, если это Триодь, то - как не удивительно, Триодь )
  2. Если распорядок не был найден, система будет искать распорядок для Знака службы «старшего» дня Календаря.
  3. Также система проверит, есть ли распорядок богослужений для дня недели искомой даты.

После этих шагов возможны варианты:

  1. Все найдено.
    • Распорядок для «старшего» дня был найден в пп. 1 или 2 предыдущего списка.
    • Также найден распорядок для дня недели.

    То, что все оказалось найдено, это конечно прекрасно. Это значит, что редактор Устава сидит не сложа руки. Но нам для формирования расписания нужен только один распорядок. Что же делать? На помощь приходит снова наши любимые приоритеты. Дело в том, что дни недели имеют также свои приоритеты:

    Воскресный день - 3, Все остальные - 5.

Система сравнивает приоритеты, и только если приоритет дня недели выше приоритета «старшего» дня, то для формирования расписания избирается день недели. В противном случае избирается найденный распорядок «старшего» дня.

  1. Что-то найдено.
    • Распорядок найден только в одном из пунктов предыдущего алгоритма.

Собственно этот распорядок и используется при формировании расписания.

  1. Не найдено ничего.

В это случае расписание на этот день не формируется вовсе. И это тоже результат работы.

Так, алгоритм нам теперь известен. Давайте смоделируем, что происходит в нашем рассматриваемом случае.

Как мы с вами помним, у нашего Простого устава службы совершаются только по воскресным дням и двунадесятым праздникам. Мы определили расписание для:

  • Воскресного дня (дни недели)
  • Двунадесятого Господского праздника (знак службы)
  • Богородичные двунадесятые праздники, в том числе и Благовещение
  • Отдельно определили распорядок для Пасхи и Рождества Христова

Следуя нашему алгоритму, система в первом пункте не находит распорядок богослужений для нашего праздника - мы его отдельно не заполняли.

А во втором пункте, совершая поиск по Знакам службы, распорядок найден будет.

Распорядок богослужений для четверга мы не определяли, а именно на этот день недели приходится 10 июня 2021 года, поэтому среди дней недели распорядка службы найдено не будет.

В итоге, алгоритм будет идти по варианту «что-то найдено». На вторник накануне будет добавлено всенощное бдение, начинающееся в 17.00, а в самый день будет совершаться Божественная литургия в 10.00 с Крестным ходом после нее, как мы и указывали при создании[ссылка] Устава.

Результат

Наименование

Как было описано выше в алгоритме конкурирующих приоритетов, если разница в приоритетах составляет не более единицы, то наименования и дня Минеи, и дня Триоди будут в расписании: сначала «старший», затем «младший».

В нашем случае наименованием будет наименование праздника Вознесения Господня.

Есть дополнение к этому. Система добавляет в начале наименования службы информацию о воскресном дне при условиях:

  • Дата приходится на воскресный день
  • Вне Великого поста
  • Знак службы «старшего» дня на равен 1 ( т.е. 2 и менее)

Печать

Если вы в настройках Устава добавили такую возможность, то у каждого элемента Графика богослужений добавляется возможность назначить печатный шаблон - формат отображения распорядка служб в печатном формате.

Если такой шаблон не выбран, то при формировании расписания будет назначаться шаблон по умолчанию, который выбирается в настройках печати Устава.

Итог

Вот собственно и всё. По такой общей схеме формируется расписание для каждого дня.

При внесении изменений в Устав и дальнейшем публикации все ранее сформированные расписания удаляются, также удаляются все сформированные года переходящих праздников. При первом обращении к расписанию они будут создаваться заново.

Исключение составляют расписания, которые были скорректированы вручную.