diff --git "a/docs/\320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\270\320\235\320\260\320\241\320\276\320\261\321\213\321\202\320\270\321\217.md" "b/docs/\320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\270\320\235\320\260\320\241\320\276\320\261\321\213\321\202\320\270\321\217.md"
index 8b6637f4..41994a10 100644
--- "a/docs/\320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\270\320\235\320\260\320\241\320\276\320\261\321\213\321\202\320\270\321\217.md"
+++ "b/docs/\320\237\320\276\320\264\320\277\320\270\321\201\320\272\320\270\320\235\320\260\320\241\320\276\320\261\321\213\321\202\320\270\321\217.md"
@@ -1,21 +1,49 @@
# Подсистема "Подписки на события"
Подписки на события применяются для реализации дополнительной постобработки или проверок, которые активируются после определённых событий в типовых объектах или модулях менеджера.
-В случае отстутствия типовой подписки, используется подсистема **"Подписки на события"**. Если нужно внести изменения в типовую логику работы подписки, используется заимствование методов в расширении с аннотацией &ИзменениеИКонтроль.
+В случае отсутствия типовой подписки используется подсистема **"Подписки на события"**. Если нужно внести изменения в типовую логику работы подписки, используется заимствование методов в расширении с аннотацией &ИзменениеИКонтроль.
+
+**Общая структура подписок на события:**
+ - Для каждого класса **общий модуль** (пример: "пбп_ДокументыОбработкаСобытий")
+ - В каждом общем модуле распологаются процедуры-обработчики для данного класса (пример: "ОбработкаПроведения", "ПриЗаписи")
+ - В области **СлужебныйПрограммныйИнтерфейс** добавляются одноименные процедуры для обработки конкретных событий (пример: "СписаниеБезналичныхДенежныхСредствПриЗаписи")
+ - В общем модуле **пбп_ОбщегоНазначенияПовтИсп** необходимо добавить соответствие типа объекта и вызываемой процедуры в одноименной функции **(Указывать только имя процедуры!)**
+
+**Важно!**
+ - В одноимённых обработчиках событий необходимо после выполнения метода конфигурации делать обратное присвоение параметров из массива "ПараметрыМетода", так как они могут быть изменены в выполняемом методе.
+ - В обработчиках, указанных в подписках на события, реализован возврат параметра **Отказ** согласно концепции фирмы 1С. При необходимости ускорить работу и избежать выполнения кода при условии **Отказ = Истина**, добавьте проверку этого условия в место проверки **ОбменДанными.Загрузка**.
+ **Пример:**
+```1C (BSL)
+Процедура ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
+ Если Источник.ОбменДанными.Загрузка Или Отказ Тогда
+ Возврат;
+ КонецЕсли;
+КонецПроцедуры
+```
-Общая структура подписок на события:
- - Для каждого класса **общий модуль** (пример: "пбп_ДокументыОбработчики")
- - В каждом общем модуле распологаются процедуры-обработчики класса (пример: "пбп_ДокументыОбработкаПроведения", "пбп_СправочникиПриЗаписи")
- - В области **СлужебныйПрограммныйИнтерфейс** добавляются одноименные процедуры (пример: "СписаниеБезналичныхДенежныхСредствПриЗаписи")
- - В общем модуле **пбп_ОбщегоНазначенияПовтИсп** добавить в соответствие тип объекта и вызываемую процедуру в одноименной функции **(Указывать только имя процедуры!)**
+**Пример обратного присвоения:**
+```1C (BSL)
+Процедура ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
+// ...
+ ПараметрыМетода = Новый Массив;
+ ПараметрыМетода.Добавить(Источник);
+ ПараметрыМетода.Добавить(Отказ);
+
+ пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+
+ Источник = ПараметрыМетода[0];
+ Отказ = ПараметрыМетода[1];
+// ...
+КонецПроцедуры
+```
-Порядок действий при работе с подсистемой:
- - Необходимо проверить, существует ли общая подписка на нужный тип объекта и событие. Например: **пбп_ДокументыОбработкаПроведения**, **пбп_СправочникиПриЗаписи** и так далее.
-Недопускается смешение типов объектов и событий в одной подписке. Если подписки не существует, нужно её добавить, а так же общий модуль с аналогичным названием (напр. **пбп_ДокументыОбработчики** - и подписка, и общий модуль).
+**Порядок действий при работе с подсистемой:**
+ - Необходимо проверить, существует ли общая подписка на нужный тип объекта и событие. Например: **ОбработкаПроведения**, **ПриЗаписи** и так далее.
+**Важно!** Не допускается смешение типов объектов и событий в одной подписке. Если подписка не существует, нужно её создать, а так же добавить общий модуль с аналогичным названием (напр. **пбп_ДокументыПриЗаписи** - подписка, **пбп_ДокументыОбработкаСобытий** - общий модуль).
Добавить их в подсистему **пбп_ПодпискиНаСобытия**.
- Если создана новая подписка и модуль, то в модуле создается обработчик для подписки и выбрать его в подписке. У каждого события свой набор параметров.
- Структура общего модуля обработчиков:
- - В области **СлужебныйПрограммныйИнтерфейс** располагать обработчики объектов, в ней располагаются подобласти по обработчикам. Допустимо добавлению произвольных областей внутри **СлужебныйПрограммныйИнтерфейс**, для группировки по подсистемам.
+ - В области **СлужебныйПрограммныйИнтерфейс** располагаются обработчики объектов. Внутри этой области могут быть подобласти по обработчикам. Допустимо добавлению произвольных областей внутри **СлужебныйПрограммныйИнтерфейс** для группировки по подсистемам.
```1C (BSL)
#Область ПрограммныйИнтерфейс
@@ -50,7 +78,7 @@
#КонецОбласти
```
-**Пример обработчика общего модуля "пбп_ДокументыОбработчики":**
+**Пример обработчика общего модуля "пбп_ДокументыОбработкаСобытий":**
```1C (BSL)
Процедура ПриЗаписи(Источник, Отказ) Экспорт
@@ -77,7 +105,7 @@
КонецПроцедуры
```
- - В общем модуле **пбп_ОбщегоНазначенияПовтИсп** найти функцию с названием объекта и события и добавить в соответствие тип объекта и вызываемую процедуру **(Указывать только имя процедуры!)**. Если функции для данного набора нет, создать её, перед возвратом добавить вызов заранее созданной процедуры:
+ - В общем модуле **пбп_ОбщегоНазначенияПовтИсп** найдите функцию с названием объекта и события, и добавить в соответствие тип объекта и вызываемую процедуру **(Указывать только имя процедуры!)**. Если функции для данного набора нет, создать её, перед возвратом добавить вызов заранее созданной процедуры:
**Пример вызова процедуры для заполнения соответствия:**
```1C (BSL)
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
index 19decf0c..136ccdce 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
@@ -46,6 +46,8 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Источник = ПараметрыМетода[0];
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -79,6 +81,9 @@
ПараметрыМетода.Добавить(ТекстЗаполнения);
ПараметрыМетода.Добавить(СтандартнаяОбработка);
+ Источник = ПараметрыМетода[0];
+ СтандартнаяОбработка = ПараметрыМетода[3];
+
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
Исключение
@@ -99,7 +104,7 @@
//
Процедура ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -115,6 +120,11 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Источник = ПараметрыМетода[0];
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -131,7 +141,7 @@
//
Процедура ПриЗаписи(Источник, Отказ) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -146,6 +156,10 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -154,7 +168,8 @@
КонецПроцедуры
// Возникает при проведении документа.
-// Основное назначение процедуры-обработчика данного события - генерация движений по документу. Выполняется в транзакции записи.
+// Основное назначение процедуры-обработчика данного события - генерация движений по документу.
+// Выполняется в транзакции записи.
//
// Параметры:
// Источник - ДокументОбъект - Объект, обрабатываемый подпиской на события.
@@ -163,7 +178,7 @@
//
Процедура ОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -179,6 +194,10 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -187,7 +206,8 @@
КонецПроцедуры
// Возникает при записи документа.
-// Основное назначение процедуры-обработчика данного события - проверка правильности заполнения значений реквизитов объекта.
+// Основное назначение процедуры-обработчика данного события -
+// проверка правильности заполнения значений реквизитов объекта.
//
// Параметры:
// Источник - ДокументОбъект - Объект, обрабатываемый подпиской на события.
@@ -196,7 +216,7 @@
//
Процедура ОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -212,6 +232,11 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+ ПроверяемыеРеквизиты = ПараметрыМетода[2];
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
index d195a393..0aa14522 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
@@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
- Описание.Версия = "1.0.0.2";
+ Описание.Версия = "1.0.1.2";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
index d907bb9a..46890954 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\320\276\320\261\321\213\321\202\320\270\320\271/Ext/Module.bsl"
@@ -46,6 +46,8 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Источник = ПараметрыМетода[0];
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -81,6 +83,9 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Источник = ПараметрыМетода[0];
+ СтандартнаяОбработка = ПараметрыМетода[3];
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -97,7 +102,7 @@
//
Процедура ПередЗаписью(Источник, Отказ) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -112,6 +117,11 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Источник = ПараметрыМетода[0];
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -128,7 +138,7 @@
//
Процедура ПриЗаписи(Источник, Отказ) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -143,6 +153,10 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
@@ -151,7 +165,8 @@
КонецПроцедуры
// Возникает при записи документа.
-// Основное назначение процедуры-обработчика данного события - проверка правильности заполнения значений реквизитов объекта.
+// Основное назначение процедуры-обработчика данного события -
+// проверка правильности заполнения значений реквизитов объекта.
//
// Параметры:
// Источник - ДокументОбъект - Объект, обрабатываемый подпиской на события.
@@ -160,7 +175,7 @@
//
Процедура ОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт
- Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
+ Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -176,6 +191,11 @@
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);
+ Если ПараметрыМетода[1] Тогда
+ Отказ = Истина;
+ КонецЕсли;
+ ПроверяемыеРеквизиты = ПараметрыМетода[2];
+
Исключение
ВызватьИсключение СтрШаблон("%1%2Имя метода: %3", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index 53063d22..0524e335 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -57,7 +57,7 @@
Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок
Первый БИТ
- 1.0.1.1
+ 1.0.1.2
false
false