Подписка на событие 1С 8.3 и 8.2 — объект конфигурации, позволяющий назначить обработчик на определенное событие объекта. Такой обработчик можно назначить сразу на несколько объектов конфигурации, например, сразу на все документы.
Рассмотрим этот объект метаданных подробнее.
Содержание
События на которые можно назначить обработчик подписки на событие
- ПриУстановкеНовогоНомера
- ПриКопировании
- ОбработкаЗаполнения
- ПередЗаписью
- ПриЗаписи
- ПередУдалением
- ОбработкаПроведения
- ОбработкаУдаленияПроведения
- ОбработкаПроверкиЗаполнения
Подписку на событие можно установить только на объект, а не на форму.
Очередность вызова обработчиков в 1С 8
Обработчики подписки на события вызываются после обработчика объекта, т.е. если подписка на события установлена на событие «ОбработкаПроведение», то вначале отработает обработчик из модуля объекта, а потом уже обработчик из подписки.
Получите 267 видеоуроков по 1С бесплатно:
Если подписок на одно событие несколько, то, судя по опыту, сначала вызывается вышестоящая в древе конфигурации подписка. Хотя и сама фирма 1С сообщает, что эта очередность не определена.
Использование подписок на событие в 1С
Использовать подписки очень удобно, например, для регистрации изменений для плана обмена. Или какое-то другое действие, которое одинаковое для различных объектов конфигурации.
Я часто использую подписки на событие для того, чтобы не менять обработчики типовых документов. Это очень удобно, например, мы в подписке можем корректировать движения документа или добавлять движения по новым регистрам, не меняя при этом конфигурацию.
Настройка подписки на событие
Настроить подписку очень просто:
- Источник — типы данных, для которых устанавливается обработчик;
- Событие — событие, для которого установлен обработчик;
- Обработчик — указывается процедура из общего модуля, в которой будет расположен обработчик события.
Другие статьи по 1С:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в EDT версии 1.7.0.567.
В 1C:Enterprise Development Tools (EDT) мы реализовали прототип нового инструмента. Рабочее название этого инструмента – редактор Все подписки на события. Он поможет вам удобно анализировать подписки на все события, которые существуют в прикладном решении.
Подписки на события
Платформа 1С:Предприятия позволяет создавать в прикладном решении подписки на события объектов конфигурации. Подписка – это процедура, которая будет выполнена после того, как выполнится исходный обработчик события. Удобство подписок заключается в том, что одну процедуру можно «подписать» на событие, принадлежащее разным объектам конфигурации. Таким образом, если есть алгоритм, который нужно выполнять и при записи организации, и при записи подразделения, его можно расположить в подписке, и тогда вам вообще не придётся даже изменять обработчики этого события в самих объектах.
Получается что подписка – это удобный и универсальный механизм. Но в больших прикладных решениях количество подписок на события может достигать нескольких сотен. Анализировать их в дереве конфигурации, в линейном списке, становится неудобно. Например, в прикладном решении 1С:Управление предприятием (ERP) более 340 подписок на события.
EDT несколько облегчает работу с подписками, показывая их в панели Схема, когда открыт модуль какого-либо прикладного объекта.
Такое отображение подписок удобно для целого ряда задач, связанных с редактированием модуля. Но оно все равно не подходит тогда, когда нужно быстро найти и проанализировать все алгоритмы, которые выполняются в подписках при наступлении того или иного события.
Все подписки на события
Чтобы избавиться от неудобств, перечисленных выше, мы реализовали универсальный способ представления подписок, событий, объектов конфигурации и процедур, в которых реализуются алгоритмы подписок.
В результате вы можете вызвать редактор Все подписки на события для всей конфигурации, или только для одного объекта – разница будет лишь в составе данных, отфильтрованных некоторым образом.
В левой части редактор показывает все события, а в каждом событии все его подписки. При выделении конкретной подписки, справа вверху показывается список объектов конфигурации, на событие которых «подписана» подписка. А справа внизу показывается модуль и процедура, в которой находится алгоритм подписки. Дважды кликнув на процедуре, вы можете открыть ее в редакторе встроенного языка.
Находясь в редакторе, вы можете анализировать не только отдельные подписки, но и все подписки, относящиеся к одному событию. Если выделить событие, то редактор покажет все модули и все процедуры, подписанные на обработку этого события.
Если вы вызываете редактор для некоторого объекта конфигурации, будут показаны события и подписки только этого объекта, а сам объект всегда будет подсвечен красным в списке источников. Таким образом, вы можете быстро проконтролировать, например, что выбранная вами подписка работает для всех объектов конфигурации, для которых это нужно.
Вызов редактора с помощью контекстной команды (на объекте конфигурации) позволяет вам сразу уменьшить количество подписок, отображаемых в редакторе. Например, вы можете посмотреть подписки только на те события, которые обрабатываются в модуле объекта или в модуле менеджера.
Кроме этого редактор содержит универсальный фильтр, с помощью которого вы можете произвольным образом настраивать состав объектов, событий и процедур.
Обратите внимание, что с помощью этого фильтра вы можете выбирать не только конкретные объекты, являющиеся источником событий, но и наборы типов, такие как СправочникОбъект, ДокументОбъект и другие. Такие наборы типов включают в себя все справочники или все документы, которые есть в конфигурации.
С помощью поиска по строке вы можете быстро найти только те подписки, которые относятся к интересующему вас механизму.
В любой момент вы можете быстро отфильтровать содержимое по тому событию или источнику, который показан в редакторе. Например, вы нашли подписку ПроверитьФормулуРасчета. Её источником является план видов расчета Удержания.
С помощью контекстной команды на плане видов расчета вы можете быстро увидеть только те подписки, которые связаны с его событиями.
Автоматическое добавление точек останова
Одним из распространённых способов анализа подписок на события является последовательный просмотр всех вызываемых процедур в отладчике в порядке их выполнения. Для этого редактор предоставляет удобный инструмент автоматического добавления точек останова в обработчики.
Прежде всего, вы можете вызвать этот инструмент прямо в редакторе.
Вы можете найти и выбрать интересующий вас объект, выбрать одно из его событий, и отметить, например, все обработчики. После нажатия ОК точки останова будут добавлены на первую исполняемую строку каждого отмеченного обработчика, и все эти точки появятся в панели Точки прерывания в перспективе Отладка.
Другой способ добавить точки останова удобен тогда, когда вы уже нашли в редакторе интересующий вас объект или событие. В этом случае из контекстного меню вы можете вызвать подходящую вам команду.
И, наконец, третий способ, которым вы можете воспользоваться, это автоматическое добавление точек останова уже в процессе отладки. В этом случае вам не нужно открывать редактор, потому что команда добавления находится прямо в панели Точки прерывания.
Таким образом, редактор Все подписки на события является универсальным инструментом, позволяющим использовать самые разные сценарии анализа. Он будет полезен не только разработчикам, которые хорошо знают прикладное решение, но и специалистам по внедрению или IT-специалистам, которым требуется разобраться с незнакомой функциональностью.
Михаил Сайко
Большинство клиентов 1С используют типовые конфигурации, в которые, тем не менее, вносят изменения для комфортной работы и соответствия имеющимся бизнес-процессам. Администраторы знают – чем больше таких изменений внесено, тем сложнее и дольше производить обновления, которые выпускаются к тому же довольно часто. Поэтому разработчики в свою очередь стремятся к минимизации изменений типовой конфигурации. Для разрешения этой дилеммы был разработан механизм подписок на события в 1С 8.3. Подписки позволяют проделать нужные операции, не затрагивая стандартные процедуры и функции конфигурации 1С.
Создаем подписку в 1С
Перед созданием подписки необходимо обдумать два момента – после какого события процедура должна быть выполнена и для каких объектов. Большой плюс данного механизма заключается в том, что одну подписку можно запрограммировать для всех документов или справочников. Программисту не придется для каждого объекта конфигурации писать процедуру, прописывать ее вызов, передачу параметров. Разработчикам нужно лишь следить, чтобы все реквизиты, к которым обращается подписка на событие при записи документа, были у перечисленных типов.
После того как перечень объектов конфигурации для подписки определен, необходимо выбрать событие, после которого выполнится наша процедура. Список возможных событий для выбранных объектов система предложит вам при создании. Чтобы начать процесс создания подписки, запустите конфигуратор, откройте конфигурацию через «Общие» – «Подписка на событие». Нажатие на «Добавить» приведет к появлению в конфигурации новой подписки со стандартным именем, после чего откроются свойства.
В первую очередь необходимо заполнить поля «Имя» и «Синоним», по которым разработчики понимают, что делает данная подписка. Помните, что в поле «Имя» недопустимо вписывать пробелы, то есть все слова нужно писать слитно. Свойство «Источник» указывает, какие узлы конфигурации участвуют в подписке. Вы можете указать один, несколько или даже все объекты одного типа, например, все справочники.
Тип источников напрямую влияет на предлагаемые системой события. Выбирая одно из них, помните, что сначала отрабатывают стандартные процедуры, а потом настает очередь подписок в конфигурации. После события приходит очередь определиться с тем, в каком общем модуле будет записана наша процедура. В свойстве «Обработчик» необходимо указать один из присутствующих в конфигурации модулей с установленным свойством «Серверный».
После выбора модуля и перехода в него, остается лишь описать действия процедуры, и на этом создание подписки в конфигурации будет закончено. Далее можно обновлять конфигурацию 1C и проверять результат работы описанной на встроенном языке процедуры. Разработчики с помощью подписок делают проверки перед записью или проведением документа для контроля заполнения нужных полей. Также удобно заполнять дополнительные регистры – документ или элемент справочника уже записан, и вы можете использовать достоверные данные.
Механизм расширений, который активно используют разработчики 1С версии 8.3.6 и выше, позволяет более тонко прописывать подписки, не затрагивая типовую конфигурацию. При обновлении добавленные разработчиком проверки могут мешать реструктуризации документов, поэтому необходимо отключить подписки. Легче отключить одно расширение, чем предусматривать возможность отключения всех подписок в конфигурации, которых может быть более сотни.
Подписки в расширениях
Расширение – это конфигурация 1С, которая «накладывается» на основную конфигурацию. Само по себе расширение не является функционирующей системой, но благодаря ему разработчики получают свободу действий. Основное преимущество заключается в том, что при обновлении расширение отключается, и обновляется типовая конфигурация. Именно поэтому разработчики стараются переносить свои подписки в расширение.
В расширении есть возможность дополнять модули документов и других объектов и их форм. Достаточно добавить их из основной конфигурации в расширение. Также разработчики могут выбирать, когда исполнять код из расширения относительно процедур из основной конфигурации:
В последнем случае код из конфигурации не будет работать, как будто его закомментировали, а вместо него написали свою процедуру. Как это происходит, рассмотрим на примере документа «Реализация товаров и услуг» – будем выдавать сообщение об успехе продажи перед записью. Для этого нам необходимо добавить к конфигурации расширение:
- Запускайте конфигуратор;
- Открывайте меню «Конфигурация» – «Расширения конфигурации»;
- Добавляйте новое расширение конфигурации и называйте его в соответствии с его предназначением;
- Убирайте галки «Безопасный режим» и «Защита от опасных действий». Они нам помешают;
- Откройте его структуру.
Чтобы добавить в расширение подписки на события, нужно добавить в расширение документ. Находим его в основной конфигурации, жмем по правой кнопке и в контекстном меню выбираем команду «Добавить в расширение». После это находим нужный документ в расширении и через контекстное меню открываем его модуль объекта.
В открывшемся окне мы сможем дополнить стандартные процедуры и даже заменить их, выбрав уточнение «Вместо» для нашей процедуры. Выбираем процедуру «Перед записью» и после нее будем выводить сообщение об успехе операции. Для этого нужно выбрать из перечня стандартных процедур нужную и указать тип вызова – «Вызывать после». Создастся процедура, внутри которой вы сможете описать текст процедуры.
Напишем, чтобы перед записью документа выводилось сообщение об успехе операции. Остается лишь обновить расширение и запустить 1С – при сохранении документа нам будет выводиться сообщение. Это означает, что мы достигли цели и внесли изменение в процесс перед записью документа без изменения типовой конфигурации.
Описанный метод не позволяет подпиской охватить все документы, поэтому все стандартные подписки используются разработчиками в 1С 8.3. Но расширение позволяет разработать, такую важную вещь, как подписка на событие формы, что невозможно сделать в основной конфигурации без изменения формы документа.
Дорабатывайте конфигурации с минимальными изменениями и обновления не будут отнимать у вас много времени.