diff --git a/documentation/blog/2024/05/07-engine-release.md b/documentation/blog/2024/05/07-engine-release.md
new file mode 100644
index 00000000..cd3d1f63
--- /dev/null
+++ b/documentation/blog/2024/05/07-engine-release.md
@@ -0,0 +1,34 @@
+---
+title: YaxUnit. Версия 24.04
+authors: alkoleft
+tags: [releases, yaxunit]
+---
+
+[Release 24.04](https://github.com/bia-technologies/yaxunit/releases/tag/24.04)
+
+## Новое в версии
+
+### Тестовые данные
+
+* [NEW] Метод `УстановитьСсылкуНового` в конструкторе объектов [#310](https://github.com/bia-technologies/yaxunit/issues/310), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
+* Удаление тестовых данных без учета прав [#309](https://github.com/bia-technologies/yaxunit/issues/309), спасибо [@goodwinvu](https://github.com/goodwinvu)
+
+### Зависимости
+
+* [NEW] Зависимости тестов [#314](https://github.com/bia-technologies/yaxunit/issues/314)
+* [NEW] Добавить возможность указывать рабочий каталог в параметрах запуска [#313](https://github.com/bia-technologies/yaxunit/issues/313)
+* [NEW] Зависимости тестов. Фабрика XDTO [#322](https://github.com/bia-technologies/yaxunit/issues/322)
+
+Подробнее о зависимостях вы можете узнать из [документации](/docs/features/dependencies)
+
+### Прочее
+
+* Рефакторинг механизма событий [#315](https://github.com/bia-technologies/yaxunit/issues/315)
+ Добавлена возможность создавать обработчики событий за пределами расширения движка, подробнее в [документации](docs/features/events)
+* Добавлен шаблон PR
+
+## Исправленные ошибки
+
+* [Bug]: Не работает формат выбода ошибки HTML на Mac [#319](https://github.com/bia-technologies/yaxunit/issues/319), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
+* Мелкие исправления в документации [#320](https://github.com/bia-technologies/yaxunit/issues/320), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
+* [Bug]: Некорректное время результатов тестов в отчете формата allure, спасибо [@AlexPCRus](https://github.com/AlexPCRus)
diff --git a/documentation/docs/features/events.md b/documentation/docs/features/events.md
index 67c86fe0..5845eda2 100644
--- a/documentation/docs/features/events.md
+++ b/documentation/docs/features/events.md
@@ -67,3 +67,181 @@ YAxUnit также использует события для работы вн
* Выполнять начальную подготовку базы или настройку движка перед прогонами
* Реализовывать свои механизмы (например удаление данных с использованием подписок)
* Формировать отчеты о тестировании online.
+
+### Подписка на события движка
+
+Для подключения своих обработчиков событий вам необходимо:
+
+1. Создание структуры подсистем
+ 1. Создать свою подсистему (не рекомендуется использовать подсистемы движка) с именем оканчивающимся на `ЮТПодключаемыеМодули`, например, `Тесты_ЮТПодключаемыеМодули`.
+ 2. У созданной подсистемы снять флаг `ВключатьВКомандныйИнтерфейс`.
+ 3. Внутри нее создать подсистему с именем `ОбработчикиСобытий`.
+ 4. Внутри подсистемы `ОбработчикиСобытий` создать подсистемы для нужной группы событий:
+ * Инициализация
+ * ЗагрузкаТестов
+ * ИсполнениеТестов
+2. Добавить общий модуль (или использовать подходящий существующий) в котором будут размещены обработчики событий.
+3. Сигнатура и описание обработчиков описаны ниже, примеры многих из них можно увидеть в движке.
+
+#### Пример
+
+Задача: необходимо по умолчанию включить настройку `ВТранзакции` для всех тестов.
+
+Для этого необходимо подписаться на событие [`УстановитьПараметрыЗапускаПоУмолчанию`](#установитьпараметрызапускапоумолчаниюпараметрызапуска), которое относится к блоку [`Инициализация`](#инициализация)
+
+Структура подсистем:
+![Структура подсистем](images/test-settings-events-tree.png)
+
+```bsl title="НастройкаYAxUnit"
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Установить настройки по умолчанию.
+//
+// Параметры:
+// ПараметрыЗапуска - см. ЮТФабрика.ПараметрыЗапуска
+Процедура УстановитьПараметрыЗапускаПоУмолчанию(ПараметрыЗапуска) Экспорт
+
+ ПараметрыЗапуска.settings.ВТранзакции = Истина;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+```
+
+## Описание событий движка
+
+### Инициализация
+
+#### УстановитьПараметрыЗапускаПоУмолчанию(ПараметрыЗапуска)
+
+`&НаКлиенте`.
+
+Подписка на это событие позволяет:
+
+* выполнить базовую настройку параметров запуска
+* эту настройку можно переопределить параметрами запуска (json файл с тройками)
+* может быть полезно при расширении возможностей движка новыми л механизмами
+* обработчик может (а точнее, должен) изменять `ПараметрыЗапуска`
+
+Параметры:
+
+* ПараметрыЗапуска - см. [ЮТФабрика.ПараметрыЗапуска](/api/ЮТФабрика#параметрызапуска)
+
+#### ИнициализацияКонтекста(ДанныеКонтекста)
+
+`&НаСервере` и `&НаКлиенте`.
+
+Вызывается при первичной инициализации глобального контекста.
+Используется для первоначального заполнения контекста, параметра `ДанныеКонтекста`.
+
+Параметры:
+
+* ДанныеКонтекста - Структура
+
+#### Инициализация(ПараметрыЗапуска)
+
+`&НаКлиенте`
+
+Вызывается после инициализации контекстов и загрузки настроек.
+Позволяет выполнить настройку различных механизмов движка.
+
+:::note В этом обработчике нельзя менять параметр `ПараметрыЗапуска`.
+:::
+
+Параметры:
+
+* ПараметрыЗапуска - см. [ЮТФабрика.ПараметрыЗапуска](/api/ЮТФабрика#параметрызапуска)
+
+### ЗагрузкаТестов
+
+#### ПередЧтениеСценариев()
+
+`&НаКлиенте`
+
+Вызывается перед загрузкой тестов.
+
+#### ПередЧтениемСценариевМодуля(МетаданныеМодуля)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Вызывается перед чтением сценариев конкретного модуля (вызовом метода `ИсполняемыеСценарии`).
+Позволяет настроить базовые параметры перед чтением настроек тестов модуля.
+Параметры:
+
+* МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
+
+#### ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Позволяет настроить/обработать параметры загруженных настроек тестов модуля
+
+Параметры:
+
+* МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
+* ИсполняемыеСценарии - см. ЮТТестыСлужебный.СценарииМодуля
+
+#### ПослеЧтенияСценариев(Сценарии)
+
+`&НаКлиенте`
+
+Вызывается после загрузки всех тестов.
+
+#### ПослеФормированияИсполняемыхНаборовТестов(ИсполняемыеТестовыеМодули)
+
+`&НаКлиенте`
+
+Вызывается после формирования исполняемых тестов, сформированных на основе зарегистрированных тестов.
+
+Например, из одного клиент-серверного теста формируется 2 исполняемых теста (для сервера и для клиента)
+
+### ИсполнениеТестов
+
+#### ПередВыполнениемТестов(ИсполняемыеМодули)
+
+`&НаКлиенте`
+
+Перед запуском всех тестов.
+
+#### ПередВсемиТестамиМодуля(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПередТестовымНабором(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПередКаждымТестом(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПослеКаждогоТеста(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПослеТестовогоНабора(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПослеВсехТестовМодуля(ОписаниеСобытия)
+
+`&НаКлиенте`/`&НаСервере` в зависимости от доступности модуля.
+
+Смотрите описание [выше](#события-тестов)
+
+#### ПослеВыполненияТестов(РезультатТестирования)
+
+`&НаКлиенте`
+
+После выполнения всех тестов.
diff --git a/documentation/docs/features/images/test-settings-events-tree.png b/documentation/docs/features/images/test-settings-events-tree.png
new file mode 100644
index 00000000..968ecf35
Binary files /dev/null and b/documentation/docs/features/images/test-settings-events-tree.png differ
diff --git a/exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl
index f99212e0..cc1d3aee 100644
--- a/exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl
@@ -20,6 +20,15 @@
#Область Инициализация
+// Подписка на это событие позволяет:
+//
+// * выполнить базовую настройку параметров запуска
+// * эту настройку можно переопределить параметрами запуска (json файл с настройками)
+// * может быть полезно при расширении возможностей движка новыми настраиваемыми механизмами
+// * обработчик может (а точнее, должен) изменять `ПараметрыЗапуска`
+//
+// Параметры:
+// ПараметрыЗапуска - см. ЮТФабрика.ПараметрыЗапуска
Процедура УстановитьПараметрыЗапускаПоУмолчанию(ПараметрыЗапуска) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(ПараметрыЗапуска);
@@ -27,13 +36,12 @@
КонецПроцедуры
-Процедура Инициализация(ПараметрыЗапуска) Экспорт
-
- Параметры = ЮТКоллекции.ЗначениеВМассиве(ПараметрыЗапуска);
- ВызватьПодключаемыйОбработчикСобытия("Инициализация", "Инициализация", Параметры);
-
-КонецПроцедуры
-
+// Вызывается при первичной инициализации глобального контекста.
+// Используется для первоначального заполнения контекста, параметра `ДанныеКонтекста`
+// Вызывается и для сервера, и для клиента
+//
+// Параметры:
+// ДанныеКонтекста - Структура
Процедура ИнициализацияКонтекста(ДанныеКонтекста) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(ДанныеКонтекста);
@@ -41,6 +49,20 @@
КонецПроцедуры
+// Вызывается после инициализации контекстов и загрузки настроек.
+// Позволяет выполнить настройку различных механизмов движка.
+//
+// Важно: В этом обработчике нельзя менять параметр `ПараметрыЗапуска`.
+//
+// Параметры:
+// ПараметрыЗапуска - см. ЮТФабрика.ПараметрыЗапуска
+Процедура Инициализация(ПараметрыЗапуска) Экспорт
+
+ Параметры = ЮТКоллекции.ЗначениеВМассиве(ПараметрыЗапуска);
+ ВызватьПодключаемыйОбработчикСобытия("Инициализация", "Инициализация", Параметры);
+
+КонецПроцедуры
+
#КонецОбласти
#Область СобытияИсполненияТестов
@@ -145,7 +167,7 @@
Процедура ПередВыполнениемТестов(ИсполняемыеМодули) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(ИсполняемыеМодули);
- ВызватьПодключаемыйОбработчикСобытия("ПередВыполнениемТестов", "СобытияИсполненияТестов", Параметры);
+ ВызватьПодключаемыйОбработчикСобытия("ПередВыполнениемТестов", "ИсполнениеТестов", Параметры);
КонецПроцедуры
@@ -156,7 +178,7 @@
Процедура ПослеВыполненияТестов(РезультатТестирования) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(РезультатТестирования);
- ВызватьПодключаемыйОбработчикСобытия("ПослеВыполненияТестов", "СобытияИсполненияТестов", Параметры);
+ ВызватьПодключаемыйОбработчикСобытия("ПослеВыполненияТестов", "ИсполнениеТестов", Параметры);
КонецПроцедуры
@@ -165,6 +187,7 @@
#Область СобытияЗагрузкиТестов
// Обработка события "ПередЧтениеСценариев"
+// Вызывается перед загрузкой тестов.
Процедура ПередЧтениеСценариев() Экспорт
Параметры = Новый Массив();
@@ -173,7 +196,9 @@
КонецПроцедуры
// Обработчик события "ПередЧтениемСценариевМодуля"
-// Позволяет настроить базовые параметры перед чтением настроек тестов модуля
+// Вызывается перед чтением сценариев конкретного модуля (вызовом метода `ИсполняемыеСценарии`).
+// Позволяет настроить базовые параметры перед чтением настроек тестов модуля.
+//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
@@ -187,7 +212,7 @@
// Позволяет настроить/обработать параметры загруженных настроек тестов модуля
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
-// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля
+// ИсполняемыеСценарии - см. ЮТТестыСлужебный.СценарииМодуля
Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(МетаданныеМодуля, ИсполняемыеСценарии);
@@ -251,7 +276,7 @@
Если ПропуститьОбработчикТестовогоМодуля Тогда
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеСобытия);
- Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "СобытияИсполненияТестов", Параметры);
+ Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "ИсполнениеТестов", Параметры);
ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки);
Иначе
ВызватьОбработкуСобытияИсполненияТестов(ИмяСобытия, ОписаниеСобытия);
@@ -266,11 +291,11 @@
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеСобытия);
Если ЭтоСобытиеПеред(ИмяСобытия) Тогда
- Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "СобытияИсполненияТестов", Параметры);
+ Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "ИсполнениеТестов", Параметры);
ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия);
Иначе
ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия);
- Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "СобытияИсполненияТестов", Параметры);
+ Ошибки = ВызватьПодключаемыйОбработчикСобытия(ИмяСобытия, "ИсполнениеТестов", Параметры);
КонецЕсли;
ЗарегистрироватьОшибкиСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибки);
diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo
index 272905be..829499ea 100644
--- a/exts/yaxunit/src/Configuration/Configuration.mdo
+++ b/exts/yaxunit/src/Configuration/Configuration.mdo
@@ -20,7 +20,7 @@
8.3.10
AddOn
Russian
- 24.03
+ 24.04
Русский
Adopted
diff --git a/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/СобытияИсполненияТестов/CommandInterface.cmi b/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/ИсполнениеТестов/CommandInterface.cmi
similarity index 100%
rename from exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/СобытияИсполненияТестов/CommandInterface.cmi
rename to exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/ИсполнениеТестов/CommandInterface.cmi
diff --git a/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/СобытияИсполненияТестов/СобытияИсполненияТестов.mdo b/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/ИсполнениеТестов/ИсполнениеТестов.mdo
similarity index 84%
rename from exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/СобытияИсполненияТестов/СобытияИсполненияТестов.mdo
rename to exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/ИсполнениеТестов/ИсполнениеТестов.mdo
index 1acdbce1..cabd5580 100644
--- a/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/СобытияИсполненияТестов/СобытияИсполненияТестов.mdo
+++ b/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/Subsystems/ИсполнениеТестов/ИсполнениеТестов.mdo
@@ -1,9 +1,9 @@
- СобытияИсполненияТестов
+ ИсполнениеТестов
ru
- События исполнения тестов
+ Исполнение тестов
true
CommonModule.МокитоСлужебный
diff --git a/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/ОбработчикиСобытий.mdo b/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/ОбработчикиСобытий.mdo
index aca9b957..ee846d2a 100644
--- a/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/ОбработчикиСобытий.mdo
+++ b/exts/yaxunit/src/Subsystems/ЮТПодключаемыеМодули/Subsystems/ОбработчикиСобытий/ОбработчикиСобытий.mdo
@@ -13,6 +13,6 @@
CommonModule.ЮТЛогированиеСлужебный
ЗагрузкаТестов
Инициализация
- СобытияИсполненияТестов
+ ИсполнениеТестов
Subsystem.ЮТПодключаемыеМодули