Порядок выполнения подписок на события 1с. Все подписки на события

💖 Нравится? Поделись с друзьями ссылкой

Подписка на событие 1С 8.3 и 8.2 — объект конфигурации, позволяющий назначить обработчик на определенное событие объекта. Такой обработчик можно назначить сразу на несколько объектов конфигурации, например, сразу на все документы.

Рассмотрим этот объект метаданных подробнее.

  • ПриУстановкеНовогоНомера
  • ПриКопировании
  • ОбработкаЗаполнения
  • ПередЗаписью
  • ПриЗаписи
  • ПередУдалением
  • ОбработкаПроведения
  • ОбработкаУдаленияПроведения
  • ОбработкаПроверкиЗаполнения

Подписку на событие можно установить только на объект, а не на форму.

Очередность вызова обработчиков в 1С 8

Обработчики подписки на события вызываются после обработчика объекта, т.е. если подписка на события установлена на событие «ОбработкаПроведение», то вначале отработает обработчик из модуля объекта, а потом уже обработчик из подписки.

Получите 267 видеоуроков по 1С бесплатно:

Если подписок на одно событие несколько, то, судя по опыту, сначала вызывается вышестоящая в древе конфигурации подписка. Хотя и сама фирма 1С сообщает, что эта очередность не определена.

Использование подписок на событие в 1С

Использовать подписки очень удобно, например, для регистрации изменений для . Или какое-то другое действие, которое одинаковое для различных объектов конфигурации.

Я часто использую подписки на событие для того, чтобы не менять обработчики типовых . Это очень удобно, например, мы в подписке можем корректировать движения документа или добавлять движения по новым регистрам, не меняя при этом конфигурацию.

Настройка подписки на событие

Настроить подписку очень просто:

  • Источник — типы данных, для которых устанавливается обработчик;
  • Событие — событие, для которого установлен обработчик;
  • Обработчик — указывается процедура из , в которой будет расположен обработчик события.

При работе с информационной базой 1С нередко возникает необходимость привязать новый алгоритм к событию, связанному с изменением объекта. В 7 версии программы для запуска обработчика приходилось переписывать исходный код программы, что приводило к проблемам при обновлении конфигурации.

Проанализировав отзывы пользователей, разработчики в восьмерке реализовали новый объект, получивший название «Подписка на событие». В этой статье мы постараемся раскрыть:

  • Настройку подписок;
  • Создание;
  • Особенности функционирования.

Создание новой подписки

Как и любой другой объект метаданных, подписка на событие в 1С добавляется из конфигуратора.

Находится эти элементы в ветке дерева «Общие» (Рис.1).

Для добавления нового обработчика необходимо:


Рис.3

Во избежание проблем с обновлением, для собственных разработок лучше всего завести собственный общий модуль, который будет содержать только Ваши процедуры и функции.

Особенности функционирования подписок

Одним из главных вопросов, возникающих у пользователей начинающих работать с объектом «Подписка на события», является вопрос о порядке вызова процедур. Зачастую именно здесь кроются ошибки, связанные с тем, что процедура не срабатывает или срабатывает через раз.

На примере процедуры ПриЗаписи() для любого документа можно увидеть порядок вызова обработчиков.

Так, если в модуле объекта документ, существует эта процедура и параллельно с ней существует обработка, вызываемая из подписки и обрабатывающая то же самое событие, в первую очередь будет отработан модуль документа. Если в ходе выполнения ПриЗаписи() в модуле документа, параметр Отказ по каким-либо причинам примет значение Истина, подписка гарантировано не сработает.

В случае, когда существует несколько объектов-подписок, одинаковых для одного источника и одного события, отследить порядок выполнения очень сложно. И, если в ходе выполнения, хотя бы одного обработчика, будет вызвана исключительная ситуация, часть процедур останется не выполненной.

Таким образом, последовательность обработок можно задать следующей схемой:

  1. Обрабатываются события модуля объекта;
  2. Обрабатываются подписки, связанные непосредственно с текущим типом данных;
  3. Отрабатывается код, привязанный к общему типу.

Очень важно запомнить, что ни в коем случае в процедуры, исполняемые при записи, при проведении нельзя вставлять код, меняющий данные объекта-источника, это может привести к ненужному зацикливанию. Лучше подобный код использовать в процедурах ПередЗаписью.

Обработчик события открытия формы

Возрастающая популярность управляемых форм, используемых в 8 версии программы, а так же проблемы связанные с обновлением этих объектов с сохранением собственных изменений, привели к тому, что, начиная с платформы 8.2.15, в программе появилось событие ОбработкаПолученияФормы. Именно сюда можно вставлять код, изменяющий и заменяющий типовые формы.

Некоторые особенности данного обработчика:

  • Событие не сработает в случае, если в конфигурации открываемая типовая форма прописана строго;
  • Событие может быть реализовано только для управляемых форм;
  • Общий модуль, содержащий этот обработчик должен не только иметь признак «Сервер», но и содержать установленный флажок в поле «Вызов сервера».

Важно учитывать, что эта подписка вызывается не для конкретного объекта, а для его менеджера, то есть поле источник должно содержать это слово (Рис.4)

Рис.4

Подводя итог вышесказанному, хочется сказать, что «Подписка на событие» крайне полезный и нужный для разработчика инструмент, позволяющий без серьезных вмешательств в конфигурацию реализовывать собственные цели и задачи.

Мы нажали на какую-то кнопку, сразу начинает выполняться определенное действие — закрывается или открывается форма, сохраняется или читается документ — возникает соответствующее событие. На любое событие программист имеет возможность назначить специальную функцию, которая написана на встроенном языке 1С и сможет выполнить заданные ей действия при возникновении события.

Очень часто возникает необходимость назначить обработчик сразу на целый документ или несколько отдельных. Например, в каждом из документов содержится реквизит «Пользователь». Или мы просто такой общий реквизит добавили. Заполнен ли данный реквизит, мы сможем увидеть, только проконтролировав самостоятельно весь процесс. Но как нам это сделать?

Подписки на события в 1С

Подписка на события в 1С — это объект, который находится в соответствующей конфигурации Общие / Подписки на события. Эта подписка позволяет назначить обработчик для таких случаев, когда наступают определенные события сразу для нескольких объектов.

Установим название и добавим новую подписку на событие 1С

Нужно в свойствах подписки выбрать несколько или один определенный документ, справочник на который мы ставим обработчик. Соответственно, нужно выбрать в свойствах подписку одно из стандартных событий, которое может произойти с выбранным объектом.

Говоря «документы и справочники» мы значительно все упрощаем, потому что в действительности вы можете использовать очень много различных объектов. Одним недостатком является то, что нельзя подписаться на события формы.

Количество событий, которые можно выбрать зависит от самого объекта. Нужно быть очень внимательным, поскольку выбрав много объектов, в списке вам будут отображаться только те события, которые могут быть у каждого из выбранных объектов. (События, которые являются общими для всех выбранных объектов).


Выполнив все эти действия, остается только создать функцию обработчик. Чтобы это сделать нужно, чтобы в конфигурации был общий модуль, где поставлена галочка возле пункта «Северный». Когда вы нажмете кнопку «лупа» будет создана функция-обработчик.

Мы сумели подписаться для всех документов на событие "Перед записью". Теперь будет выполнятся функция при записи любого документа, в которой прописана проверка. Если проверка прошла отрицательно, то для того, чтобы отказаться в записи документа нужно установить параметр функции
Отказ = Истина.

При совершении любых действий пользователем платформа 1С генерирует программные события. Как правило генерируется не одно событие, а целая цепочка событий. Задача программиста правильно разместить программный код в событиях, чтобы добиться ожидаемого поведения от программы. Однако начинающему программисту по 1С это не просто будет сделать, по причинам перечисленным ниже.

В управляемой форме могут быть сгенерированы события: ПриЧтенииНаСервере, ПриСозданииНаСервере, ПриОткрытии и т.д.

События в управляемой форме генерируются на клиенте и на сервере: ПередЗаписью, ПередЗаписьюНаСервере.

События вызываются в разных модулях: ФормаЭлемента, МодульОбъекта, МодульМенеджера.

Некоторые события могут вызываться несколько раз, если в списке несколько элементов справочника, например: ОбработкаПолученияПредставления.

Управляемая форма может быть открыта в результате выполнения разных действий пользователя при этом цепочки вызова событий будут различаться. При любых следующих действиях пользователя со справочником будет открыта управляемая форма: создание нового элемента, копирование элемента, изменение существующего элемента справочника.

События также генерируются элементами формы: при добавлении строки в табличную часть, при редактировании строки табличной части, при активизации строки или поля, при выборе элемента справочника в поле ввода и т.д.

Чтобы лучше понять логику и последовательность вызываемых событий, можно воспользоваться разработкой «Изучение событий» прикрепленной к данной статье. Зная контекст вызова события, последовательность событий и действия которые будет выполнять пользователь будет легче понять в какой обработчик событий лучше всего поместить свой программный код.

Инструкция к применению программы «Изучение событий»

Программа «Изучение событий» показывает события, которые генерирует платформа 1С при интерактивных действиях пользователя. Принцип работы следующий, пользователь открывает справочник, программа показывает цепочку событий. Пользователь помечает на удаление элемент справочника, программа выводит последовательность возникающих событий. События отображаются с небольшой задержкой по умолчанию 3 секунды, это необходимо чтобы отделить одну цепочку событий от другой цепочки событий. Поэтому выполнять интерактивные действия нужно «неторопливо».

Все события отображаются в специальном окне «Последние события». В нем можно включить или выключить запись событий. По умолчанию при первом открытии запись событий включена. Окно «Последние события» советую закрепить снизу экрана сразу при запуске программы, для удобного просмотра событий.

Программа не может сама определить каким действием вызвана цепочка событий, советую в поле «Действие причина» набирать с клавиатуры названия ваших последних действий, например «Открыта форма списка справочника», «Помечен на удаление элемент в списке справочника» и т.д. Это облегчит затем анализ действий и событий.

События записываются и отображаются для объектов, размещенных в разделе «Трассировка событий» при условии включенной записи событий в форме «Последние события».

Все записанные события можно посмотреть через «Отчет по событиям», который находится в разделе «Сервис».

Чтобы быстро очистить все записанные действия и события в разделе «Сервис» выбираем «Очистить события и действия».

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в EDT версии 1.7.0.567.

В 1C:Enterprise Development Tools (EDT) мы реализовали прототип нового инструмента. Рабочее название этого инструмента – редактор Все подписки на события . Он поможет вам удобно анализировать подписки на все события, которые существуют в прикладном решении.

Подписки на события

Платформа 1С:Предприятия позволяет создавать в прикладном решении подписки на события объектов конфигурации. Подписка – это процедура, которая будет выполнена после того, как выполнится исходный обработчик события. Удобство подписок заключается в том, что одну процедуру можно «подписать» на событие, принадлежащее разным объектам конфигурации. Таким образом, если есть алгоритм, который нужно выполнять и при записи организации, и при записи подразделения, его можно расположить в подписке, и тогда вам вообще не придётся даже изменять обработчики этого события в самих объектах.

Получается что подписка – это удобный и универсальный механизм. Но в больших прикладных решениях количество подписок на события может достигать нескольких сотен. Анализировать их в дереве конфигурации, в линейном списке, становится неудобно. Например, в прикладном решении 1С:Управление предприятием (ERP) более 340 подписок на события.

EDT несколько облегчает работу с подписками, показывая их в панели Схема , когда открыт модуль какого-либо прикладного объекта.


Такое отображение подписок удобно для целого ряда задач, связанных с редактированием модуля. Но оно все равно не подходит тогда, когда нужно быстро найти и проанализировать все алгоритмы, которые выполняются в подписках при наступлении того или иного события.

Все подписки на события

Чтобы избавиться от неудобств, перечисленных выше, мы реализовали универсальный способ представления подписок, событий, объектов конфигурации и процедур, в которых реализуются алгоритмы подписок.


В результате вы можете вызвать редактор Все подписки на события для всей конфигурации, или только для одного объекта – разница будет лишь в составе данных, отфильтрованных некоторым образом.


В левой части редактор показывает все события, а в каждом событии все его подписки. При выделении конкретной подписки, справа вверху показывается список объектов конфигурации, на событие которых «подписана» подписка. А справа внизу показывается модуль и процедура, в которой находится алгоритм подписки. Дважды кликнув на процедуре, вы можете открыть ее в редакторе встроенного языка.

Находясь в редакторе, вы можете анализировать не только отдельные подписки, но и все подписки, относящиеся к одному событию. Если выделить событие, то редактор покажет все модули и все процедуры, подписанные на обработку этого события.


Если вы вызываете редактор для некоторого объекта конфигурации, будут показаны события и подписки только этого объекта, а сам объект всегда будет подсвечен красным в списке источников. Таким образом, вы можете быстро проконтролировать, например, что выбранная вами подписка работает для всех объектов конфигурации, для которых это нужно.


Вызов редактора с помощью контекстной команды (на объекте конфигурации) позволяет вам сразу уменьшить количество подписок, отображаемых в редакторе. Например, вы можете посмотреть подписки только на те события, которые обрабатываются в модуле объекта или в модуле менеджера.


Кроме этого редактор содержит универсальный фильтр, с помощью которого вы можете произвольным образом настраивать состав объектов, событий и процедур.


Обратите внимание, что с помощью этого фильтра вы можете выбирать не только конкретные объекты, являющиеся источником событий, но и наборы типов, такие как СправочникОбъект , ДокументОбъект и другие. Такие наборы типов включают в себя все справочники или все документы, которые есть в конфигурации.

С помощью поиска по строке вы можете быстро найти только те подписки, которые относятся к интересующему вас механизму.


В любой момент вы можете быстро отфильтровать содержимое по тому событию или источнику, который показан в редакторе. Например, вы нашли подписку ПроверитьФормулуРасчета . Её источником является план видов расчета Удержания .


С помощью контекстной команды на плане видов расчета вы можете быстро увидеть только те подписки, которые связаны с его событиями.


Автоматическое добавление точек останова

Одним из распространённых способов анализа подписок на события является последовательный просмотр всех вызываемых процедур в отладчике в порядке их выполнения. Для этого редактор предоставляет удобный инструмент автоматического добавления точек останова в обработчики.

Прежде всего, вы можете вызвать этот инструмент прямо в редакторе.


Вы можете найти и выбрать интересующий вас объект, выбрать одно из его событий, и отметить, например, все обработчики. После нажатия ОК точки останова будут добавлены на первую исполняемую строку каждого отмеченного обработчика, и все эти точки появятся в панели Точки прерывания в перспективе Отладка .


Другой способ добавить точки останова удобен тогда, когда вы уже нашли в редакторе интересующий вас объект или событие. В этом случае из контекстного меню вы можете вызвать подходящую вам команду.


И, наконец, третий способ, которым вы можете воспользоваться, это автоматическое добавление точек останова уже в процессе отладки. В этом случае вам не нужно открывать редактор, потому что команда добавления находится прямо в панели Точки прерывания .


Таким образом, редактор Все подписки на события является универсальным инструментом, позволяющим использовать самые разные сценарии анализа. Он будет полезен не только разработчикам, которые хорошо знают прикладное решение, но и специалистам по внедрению или IT-специалистам, которым требуется разобраться с незнакомой функциональностью.

Рассказать друзьям