К статье
Практический материал

Разработка и Конфигурация · 10 мин

Обработчик события в 1С: что это и как с ним работать

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

Обработчик события в 1С — это процедура или функция на встроенном языке, которая автоматически вызывается платформой при наступлении определённого события: открытии формы, записи документа, изменении поля, нажатии кнопки. Разработчик не вызывает такой код вручную — платформа сама находит нужную процедуру по имени и выполняет её в заданный момент жизненного цикла объекта.

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

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

Как устроен механизм событий в платформе 1С

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

Например, при интерактивной записи документа последовательно вызываются обработчики ПередЗаписью, ПриЗаписи и ПослеЗаписи модуля объекта, а также связанные с ними обработчики модуля формы. Разработчик может встроить свою логику в любую из этих точек: проверить данные до записи, отменить запись через параметр Отказ или выполнить действия после успешного сохранения.

Многие обработчики получают параметр Отказ типа «Булево». Если установить его в Истина, платформа прервёт стандартную операцию: документ не запишется, форма не откроется, проведение не выполнится. Это основной способ программного контроля корректности данных.

Какие виды событий существуют

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

События прикладных объектов (справочников, документов, регистров) располагаются в модулях объектов и срабатывают при работе с данными: ПередЗаписью, ПриЗаписи, ОбработкаПроведения, ОбработкаПроверкиЗаполнения, ПриКопировании. Эти обработчики выполняются на сервере и не зависят от того, как именно пользователь работает с объектом — через форму или программно.

Отдельная группа — события модуля приложения и общие механизмы: ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы, ОбработкаПолученияФормы в модуле менеджера объекта. Они позволяют управлять поведением системы в целом, например переопределять, какая форма откроется для объекта.

Группа событийГде располагается кодПримеры
События формыМодуль формыПриСозданииНаСервере, ПриОткрытии
События элементов формыМодуль формыПриИзменении, Нажатие, НачалоВыбора
События объектаМодуль объектаПередЗаписью, ОбработкаПроведения
События приложенияМодуль приложенияПриНачалеРаботыСистемы

Как создать обработчик события в конфигураторе

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

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

Порядок действий
  1. 1
    Откройте форму или объект в конфигураторе
  2. 2
    В палитре свойств найдите раздел «События»
  3. 3
    Нажмите кнопку с лупой у нужного события
  4. 4
    Платформа создаст заготовку процедуры в модуле
  5. 5
    Добавьте свою логику в тело процедуры
  6. 6
    Обновите конфигурацию базы данных и проверьте работу в режиме предприятия

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

Клиентские и серверные обработчики: где выполняется код

Обработчики в модуле формы делятся на клиентские и серверные. Директивы компиляции &НаКлиенте и &НаСервере определяют, где выполняется код. События вроде ПриОткрытии или ПриИзменении поля работают на клиенте и не имеют доступа к запросам и прямой работе с базой данных.

Если в клиентском обработчике нужны данные из базы — например, подобрать цену при изменении товара — создают отдельную серверную процедуру и вызывают её из клиентской. Каждый такой вызов — это обращение к серверу, поэтому при массовых изменениях (обработке строк табличной части) следует минимизировать количество серверных вызовов, иначе форма начнёт заметно тормозить.

Типичные сценарии использования обработчиков

Проверка и заполнение данных

В обработчике ОбработкаПроверкиЗаполнения проверяют условия, которые нельзя выразить стандартными свойствами реквизитов: например, что дата окончания договора позже даты начала. При обнаружении ошибки выводят сообщение и устанавливают Отказ = Истина.

Событие ПриИзменении поля используют для автоматического пересчёта связанных значений: изменилось количество — пересчиталась сумма строки. Это самый частый обработчик в формах документов.

Движения документа

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

bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Если ДатаОкончания < ДатаНачала Тогда
		Сообщить("Дата окончания раньше даты начала");
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Типичные ошибки при работе с обработчиками

Типичные ошибки
01
Опечатка в имени процедуры — обработчик молча не вызывается, ошибки при проверке модуля нет
02
Логика контроля размещена только в форме — при программной записи объекта проверка не сработает
03
Тяжёлые запросы в клиентском событии ПриИзменении — форма зависает при каждом редактировании поля
04
Изменение данных объекта в событии ПослеЗаписи без повторной записи — изменения теряются
05
Игнорирование параметра Отказ — проверка сообщает об ошибке, но запись всё равно выполняется

Отдельная проблема — дублирование логики в нескольких обработчиках. Например, один и тот же расчёт помещают и в ПриИзменении количества, и в ПриИзменении цены. Правильнее вынести расчёт в отдельную процедуру и вызывать её из обоих обработчиков.

Подписки на события как альтернатива доработке модулей

Подписка на событие — отдельный объект метаданных, который связывает событие (например, ПередЗаписью документов) с процедурой в общем модуле. Одна подписка может охватывать сразу несколько видов объектов, а её код не требует изменения типовых модулей.

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

Итог

Что важно запомнить

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

Частые вопросы об обработчиках событий в 1С

Почему мой обработчик не вызывается?

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

Чем отличается ПередЗаписью от ПриЗаписи?

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

Можно ли вызвать обработчик события программно?

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

В каком порядке вызываются обработчики при записи из формы?

Сначала срабатывают события формы (ПередЗаписью на клиенте и на сервере), затем события модуля объекта: ПередЗаписью, ПриЗаписи, затем ПослеЗаписи формы. Точная последовательность зависит от режима записи и описана в документации платформы для конкретной версии.

Где искать список всех событий объекта?

Полный перечень событий с параметрами приведён в синтакс-помощнике конфигуратора в разделе соответствующего объекта, а также в палитре свойств формы или элемента — там перечислены только события, доступные для выбранного объекта.

Что выбрать: подписку на событие или доработку модуля объекта?

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