[ЕХТ] Фреймворк для Расширений 1С: Обработка событий: описание, примеры и демобаза.
Разработка - Инструментарий разработчика
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
В предыдущей публикации перечислены основные возможности Фреймворка, есть подробная инструкция по установке и пример создания расширения. Здесь будет раскрыта только одна тема:
Управление обработкой событий
-
Программные подписки - для обработки любого события Конфигурации в Расширениях можно программно подключить один или несколько обработчиков и пост-обработчиков события.
-
Без заимствований - для обработки событий Конфигурации в Расширениях не требуется заимствовать формы, модули и объекты из Конфигурации.
-
Любые события и команды - в подключаемых обработчиках событий в Расширениях могут быть обработаны все события Конфигурации: события модулей и менеджеров объектов, события форм и элементов, а также общие команды, команды форм и объектов.
-
Универсальные обработчики - обработчик события в Расширении может обрабатывать событие от одного, нескольких или всех источников события Конфигурации.
-
Собственные события - предоставляется возможность в Расширении добавлять собственные события и обрабатывать их в этом же или других Расширениях.
Как обрабатываются события
Каждое событие Конфигурации перехватывается служебным Расширением "Подписки". После чего, информация о событии рассылается всем "подписчикам" - объектам Расширений, подписавшимся на данное событие.
Служебное Расширение Подписки
Расширение ЕХТ_Подписки автоматически добавляется в информационную базу при активации лицензии и автоматически обновляется при обновлениях или изменениях Конфигурации.

Обработка событий в Расширениях
Добавление подписки на событие
В модуле менеджера объекта или общем модуле Расширения, в функцию Сведения(), необходимо добавить строку Сведения.Подписки = Истина и добавить экспортную функцию Подписки() как на картинке ниже:

Параметры подписки
-
Событие: Тип:
Строка. Обязательный параметр. Имя события, для которого устанавливается обработчик, например,ПриСозданииНаСервере. Если обработчик должен быть вызван после обработчиков Конфигурации, то имя события указывается с префиксомПосле, например,ПослеПриСозданииНаСервере. -
Директива: Тип:
Строка. Необязательный параметр. Возможные значения:НаКлиентеилиНаСервере. Используется для уточнения контекста выполнения обработчика события для одноименных событий Платформы. Например, для обработки "события приложения"ПриНачалеРаботыСистемынужно указатьНаКлиенте, а для обработки "события внешнего соединения"ПриНачалеРаботыСистемынужно указатьНаСервере. -
Издатель: Тип:
СтрокаилиМассив. Обязательный параметр для событий элементов формы, для остальных событий - необязательный. Имя объекта метаданных Конфигурации, событие которого нужно обработать, например,Справочник.НоменклатураилиДокумент.ПоступлениеТоваров.Форма.ФормаСписка. -
Элемент: Тип:
СтрокаилиМассив. Обязательный параметр для событий элементов формы, для остальных событий не используется. Имя элемента формы, для которого устанавливается обработчик. Для событияОбработкаКомандыФормыуказывается имя команды формы. -
Подписчик: Тип:
Строка. Необязательный параметр. Имя модуля, в котором располагается обработчик события. -
Обработчик: Тип:
Строка. Необязательный параметр. Имя обработчика события. -
КоличествоПараметров: Тип:
Число. Необязательный параметр. Количество параметров функции-обработчика события. Используется, если в обработчике события в Конфигурации указано нестандартное количество параметров. Также используется для одноименных событий с разным количеством параметров. Например: при событииВыбору ТаблицыФормы в обработчик события передаются 3 параметра, а у поля формы Табличный документ - 2. -
Описание: Тип:
Строка. Обязательный параметр. Здесь указывается назначение обработчика события.
Обработчики событий
Обработчики событий это экспортные функции, расположенные в модулях объекта, добавившего подписку. Обработчики событий НаКлиенте располагаются в модуле формы Подписки, а обработчики событий на НаСервере- в модуле менеджера объекта.
Имя функции-обработчика события состоит из префикса "ЕХТ_" и имени события, например, ЕХТ_ПриСозданииНаСервере или ЕХТ_ПослеПриСозданииНаСервере.
Состав параметров обработчика события совпадает с описанием параметров события в Синтакс-Помощнике, плюс, в каждый обработчик события передается дополнительный параметр - СвойстваСобытия.
Через параметр СвойстваСобытия в обработчик передается дополнительная информация о событии, в том числе "Объект" - источник события.

Новые события
Для увеличения гибкости разработки, во Фреймворке были добавлены несколько новых событий, например:
-
ОбработкаКомандыФормы: событие используется для обработки команд формы; -
ОбработкаРегламентногоЗадания: событие возникает в обработчиках всех регламентных заданий Конфигурации; -
ОбработкаПодпискиНаСобытие: событие возникает в обработчиках всех объектов Подписка из метаданных Конфигурации; -
УдалениеУстаревшихДанных: служебное событие, запускаемое по заданному расписанию.
Собственные события
С помощью Фреймворка разработчики могут добавлять собственные события, подписываться на них и обрабатывать в любых Расширениях по тем же принципам, что описаны выше. Одним из назначений использования собственных событий является генерация и обработка оповещений на сервере, аналогично оповещениям на клиенте.
Список примеров
В этом разделе можно ознакомиться с несколькими простыми примерами обработки событий. К файлам публикации прикреплена демонстрационная база с несколькими справочниками и документами. Каждый пример располагается в отдельном Расширении.

Пример 1: Привет, Мир!
Пример обработки события ПриНачалеРаботыСистемы
Расширение просто выводит сообщение при запуске программы.
Пример 2: Перерасчет суммы в табличной части
Пример обработки события ПриИзменении
Расширение исправляет ошибку Конфигурации в документе "Поступление товаров", где в табличной части не пересчитывается сумма при изменении цены или количества. Форма документа не заимствуется.
Пример 3: Добавление ссылки в форму списка
Пример обработки события ПриСозданииНаСервере
В Конфигурации, в списке документов "Поступление товаров" не выведены колонки "Поставщик" и "Склад" и нет поля "Ссылка", чтобы добавить нужные колонки через "Еще - Изменить форму". Расширение добавляет поле "Ссылка".
Пример 4: Обработка команд
Пример обработки событий ОбработкаКоманды и ОбработкаКомандыФормы
Пример обработки в Расширении команд из Конфигурации: общей команды, команды объекта и команды формы. Все три типа команд выведены на форму элемента справочника Номенклатура. Пример обработки события ОбработкаКомандыФормы, которое добавлено во Фреймворке и отсутствует в Платформе.
Пример 5: Добавление подбора в документ
Пример обработки событий ПриСозданииНаСервере, ОбработкаКомандыФормы и ОбработкаВыбора
В Конфигурации, в документе "Реализация товаров" отсутствует возможность подбора товаров. Расширение, без заимствования формы документа, добавляет кнопку Подбор, добавляет выбранные товары в табличную часть и пересчитывает суммы.
Выводы
Не надо заимствовать формы
Посмотрите ещё раз на список примеров. Во всех (кроме "Привет, Мир!", конечно) нужно было доработать формы. Но, в итоге, "ни одна форма не пострадала". Как и не потребовались общие модули СобытияФорм.
Для каждой задачи - свое Расширение
Каждое решение находится в своем собственном, независимом Расширении. Если, например, разработчики Конфигурации исправят пересчет сумм, то Расширение с исправлением можно просто отключить одной галкой или удалить. Всё остальное продолжит работать по прежнему.
И главное
Не о такой ли простоте мы мечтали все долгие годы разработки? )
Готовое решение сейчас перед вами.
Попробуйте ещё свои кейсы на демобазе и приходите за покупкой!
Как установить демобазу с примерами
- Скачать из файлов публикации архив с файлом 1cv8.1CD .
- Распаковать этот архив в новую папку на компьютере.
- Добавить путь к этой папке в программе запуска 1С.
- Поехали!
Вступайте в нашу телеграмм-группу Инфостарт