1
0
mirror of https://github.com/firstBitSportivnaya/PSSL.git synced 2024-11-21 17:56:47 +02:00

Added reverse assignment (#88)

Доработана установка параметров процедуры после выполнения подписок на события
This commit is contained in:
Denis Ushakov 2024-08-05 11:39:35 +03:00 committed by GitHub
parent 62d23839ff
commit 7805fb0f48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 97 additions and 24 deletions

View File

@ -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)

View File

@ -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", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;

View File

@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.0.2";
Описание.Версия = "1.0.1.2";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");

View File

@ -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", ОписаниеОшибки(), Символы.ПС, ИмяМетода);
КонецПопытки;

View File

@ -57,7 +57,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
</DefaultRoles>
<Vendor>Первый БИТ</Vendor>
<Version>1.0.1.1</Version>
<Version>1.0.1.2</Version>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>