Разработка и Конфигурация · 10 мин
Обработчик события в 1С: что это и как с ним работать
Что такое обработчик события в 1С, какие виды событий бывают у форм и объектов, как создать свой обработчик и избежать типичных ошибок при разработке.
Обработчик события в 1С — это процедура или функция на встроенном языке, которая автоматически вызывается платформой при наступлении определённого события: открытии формы, записи документа, изменении поля, нажатии кнопки. Разработчик не вызывает такой код вручную — платформа сама находит нужную процедуру по имени и выполняет её в заданный момент жизненного цикла объекта.
Такой механизм лежит в основе всей логики конфигураций 1С. Проверка заполнения реквизитов, расчёт сумм в табличной части, контроль остатков при проведении, заполнение полей по умолчанию — всё это реализуется через обработчики событий. Понимание того, какие события существуют, в каком порядке они вызываются и где располагается их код, необходимо любому, кто дорабатывает или поддерживает конфигурации.
Важно различать предопределённые события платформы (их имена и состав параметров жёстко заданы) и программные вызовы, которые разработчик создаёт сам. Ошибка в имени процедуры или неправильный набор параметров приведёт к тому, что обработчик просто не будет вызван — платформа не сообщит об этом явной ошибкой при сохранении модуля.
Как устроен механизм событий в платформе 1С
Платформа 1С управляет жизненным циклом объектов: формы открываются и закрываются, документы записываются и проводятся, элементы справочников создаются и помечаются на удаление. На каждом значимом этапе платформа проверяет, есть ли в соответствующем модуле процедура с предопределённым именем, и если есть — выполняет её, передавая стандартный набор параметров.
Например, при интерактивной записи документа последовательно вызываются обработчики ПередЗаписью, ПриЗаписи и ПослеЗаписи модуля объекта, а также связанные с ними обработчики модуля формы. Разработчик может встроить свою логику в любую из этих точек: проверить данные до записи, отменить запись через параметр Отказ или выполнить действия после успешного сохранения.
Многие обработчики получают параметр Отказ типа «Булево». Если установить его в Истина, платформа прервёт стандартную операцию: документ не запишется, форма не откроется, проведение не выполнится. Это основной способ программного контроля корректности данных.
Какие виды событий существуют
События в 1С условно делятся на несколько групп по месту возникновения. События формы связаны с её жизненным циклом: ПриСозданииНаСервере, ПриОткрытии, ПередЗакрытием. События элементов формы возникают при действиях пользователя с конкретным полем или кнопкой: ПриИзменении, Нажатие, НачалоВыбора, ПриОкончанииРедактирования.
События прикладных объектов (справочников, документов, регистров) располагаются в модулях объектов и срабатывают при работе с данными: ПередЗаписью, ПриЗаписи, ОбработкаПроведения, ОбработкаПроверкиЗаполнения, ПриКопировании. Эти обработчики выполняются на сервере и не зависят от того, как именно пользователь работает с объектом — через форму или программно.
Отдельная группа — события модуля приложения и общие механизмы: ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы, ОбработкаПолученияФормы в модуле менеджера объекта. Они позволяют управлять поведением системы в целом, например переопределять, какая форма откроется для объекта.
| Группа событий | Где располагается код | Примеры |
|---|---|---|
| События формы | Модуль формы | ПриСозданииНаСервере, ПриОткрытии |
| События элементов формы | Модуль формы | ПриИзменении, Нажатие, НачалоВыбора |
| События объекта | Модуль объекта | ПередЗаписью, ОбработкаПроведения |
| События приложения | Модуль приложения | ПриНачалеРаботыСистемы |
Как создать обработчик события в конфигураторе
Самый надёжный способ — создать обработчик через палитру свойств, а не вручную. В конфигураторе откройте форму или объект, выделите нужный элемент, в палитре свойств найдите раздел «События» и нажмите кнопку с лупой рядом с нужным событием. Платформа сама создаст в модуле заготовку процедуры с правильным именем и составом параметров.
Ручной ввод допустим, но рискован: достаточно опечатки в имени или лишнего параметра, чтобы процедура превратилась в обычный метод, который никогда не вызовется. При этом синтаксическая проверка модуля ошибку не покажет — формально код корректен.
- 1Откройте форму или объект в конфигураторе
- 2В палитре свойств найдите раздел «События»
- 3Нажмите кнопку с лупой у нужного события
- 4Платформа создаст заготовку процедуры в модуле
- 5Добавьте свою логику в тело процедуры
- 6Обновите конфигурацию базы данных и проверьте работу в режиме предприятия
Для событий элементов формы допустимо назначение обработчика программно, но в типовой практике это используется редко — в основном при динамическом создании элементов формы. В остальных случаях привязка через палитру свойств прозрачнее и проще в сопровождении.
Клиентские и серверные обработчики: где выполняется код
Обработчики в модуле формы делятся на клиентские и серверные. Директивы компиляции &НаКлиенте и &НаСервере определяют, где выполняется код. События вроде ПриОткрытии или ПриИзменении поля работают на клиенте и не имеют доступа к запросам и прямой работе с базой данных.
Если в клиентском обработчике нужны данные из базы — например, подобрать цену при изменении товара — создают отдельную серверную процедуру и вызывают её из клиентской. Каждый такой вызов — это обращение к серверу, поэтому при массовых изменениях (обработке строк табличной части) следует минимизировать количество серверных вызовов, иначе форма начнёт заметно тормозить.
Типичные сценарии использования обработчиков
Проверка и заполнение данных
В обработчике ОбработкаПроверкиЗаполнения проверяют условия, которые нельзя выразить стандартными свойствами реквизитов: например, что дата окончания договора позже даты начала. При обнаружении ошибки выводят сообщение и устанавливают Отказ = Истина.
Событие ПриИзменении поля используют для автоматического пересчёта связанных значений: изменилось количество — пересчиталась сумма строки. Это самый частый обработчик в формах документов.
Движения документа
Обработчик ОбработкаПроведения в модуле документа формирует записи в регистрах. Здесь же выполняется контроль остатков и другие проверки, блокирующие проведение через параметр Отказ.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ДатаОкончания < ДатаНачала Тогда
Сообщить("Дата окончания раньше даты начала");
Отказ = Истина;
КонецЕсли;
КонецПроцедурыТипичные ошибки при работе с обработчиками
Отдельная проблема — дублирование логики в нескольких обработчиках. Например, один и тот же расчёт помещают и в ПриИзменении количества, и в ПриИзменении цены. Правильнее вынести расчёт в отдельную процедуру и вызывать её из обоих обработчиков.
Подписки на события как альтернатива доработке модулей
Подписка на событие — отдельный объект метаданных, который связывает событие (например, ПередЗаписью документов) с процедурой в общем модуле. Одна подписка может охватывать сразу несколько видов объектов, а её код не требует изменения типовых модулей.
Подписки удобны для сквозной логики: заполнение ответственного, протоколирование изменений, синхронизация с внешними системами. Ограничение — обработчик подписки не имеет доступа к форме объекта, только к самому объекту данных.
Что важно запомнить
Обработчик события вызывается платформой автоматически по точному имени и составу параметров. Контроль данных размещайте в модуле объекта, реакцию на действия пользователя — в модуле формы. Для доработок типовых конфигураций предпочтительны расширения и подписки на события.
Частые вопросы об обработчиках событий в 1С
Почему мой обработчик не вызывается?
Чаще всего причина в несовпадении имени процедуры с именем события или в неверном составе параметров. Создайте обработчик заново через палитру свойств — платформа сформирует корректную заготовку. Также проверьте директиву компиляции: серверный код не вызовется из клиентского контекста.
Чем отличается ПередЗаписью от ПриЗаписи?
ПередЗаписью вызывается до сохранения объекта в базу и позволяет отменить запись через параметр Отказ. ПриЗаписи выполняется уже в транзакции записи, когда данные фактически сохраняются — отмена здесь приведёт к откату всей транзакции.
Можно ли вызвать обработчик события программно?
Технически процедуру в модуле можно вызвать как обычный метод, если она экспортная, но событие при этом не наступает — просто выполняется код. Для имитации действий пользователя над формой в тонком клиенте прямого механизма нет; логику, которую нужно переиспользовать, выносят в отдельные процедуры.
В каком порядке вызываются обработчики при записи из формы?
Сначала срабатывают события формы (ПередЗаписью на клиенте и на сервере), затем события модуля объекта: ПередЗаписью, ПриЗаписи, затем ПослеЗаписи формы. Точная последовательность зависит от режима записи и описана в документации платформы для конкретной версии.
Где искать список всех событий объекта?
Полный перечень событий с параметрами приведён в синтакс-помощнике конфигуратора в разделе соответствующего объекта, а также в палитре свойств формы или элемента — там перечислены только события, доступные для выбранного объекта.
Что выбрать: подписку на событие или доработку модуля объекта?
Для типовой конфигурации на поддержке — подписку или расширение, чтобы не усложнять обновления. В собственной конфигурации, где вы контролируете код, допустимо размещать логику прямо в модуле объекта — это нагляднее при отладке.