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