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