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