При обновлении типовых конфигураций, таких как «Бухгалтерия предприятия 3.0», до новых версий, где библиотека стандартных подсистем (БСП) обновляется до ветки 3.1.2 и выше, разработчики часто сталкиваются с неприятной проблемой. Старые справочники или документы, использующие обычные (неуправляемые) формы, перестают открываться. Вместо привычного интерфейса система выдает критическую ошибку: «При подписке АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных на событие ПередЗаписью произошла ошибка. Обработчик события не найден».
В этой статье мы подробно разберем, почему возникает эта ошибка, как она связана с архитектурными изменениями в 1С и какими способами можно вернуть работоспособность вашим объектам.
Давайте проанализируем ситуацию. Подписка на событие АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных предназначена для контроля записи данных в режиме автономной работы (актуально для работы в «облаке» или модели сервиса). Основная проблема заключается в контексте исполнения кода.
Обычные формы работают исключительно в контексте «Толстого клиента». В то же время современные версии БСП ориентированы на работу в «Тонком клиенте» и на стороне «Сервера». Когда вы пытаетесь открыть обычную форму, платформа инициализирует объект и проверяет все связанные с ним подписки на события. Если обработчик подписки находится в общем модуле, у которого не установлен флаг «Толстый клиент (обычное приложение)», платформа физически не может «увидеть» этот код в текущем режиме запуска. Для нее этого обработчика просто не существует, что и приводит к ошибке «Обработчик события не найден».
Рассмотрим подробнее, почему это происходит именно при открытии формы, хотя подписка назначена на событие ПередЗаписью. Дело в том, что при инициализации формы (особенно обычной) платформа может выполнять неявные проверки модифицированности или доступности данных, что триггерит механизмы проверки метаданных. Если в цепочке вызовов встречается ссылка на недоступный обработчик, работа прерывается.
Проанализируем самый безопасный метод, который не требует изменения типового программного кода общих модулей. Если ваш справочник или документ является кастомным (добавленным вами) и не требует специфических проверок для работы в модели сервиса (SaaS), проще всего исключить его из списка источников подписки.
Выполним следующие шаги:
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных.Важный нюанс: Чтобы не вносить изменения непосредственно в типовую конфигурацию (и не усложнять последующие обновления), крайне рекомендуется выполнить это действие через Расширение конфигурации. Просто добавьте подписку в расширение и измените состав источников там.
Разберем ситуацию, когда по каким-то причинам вам необходимо оставить объект в составе этой подписки. В этом случае нам придется разрешить компиляцию модуля, содержащего обработчик, для толстого клиента.
Посмотрим на алгоритм действий:
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных.ОбменДаннымиВМоделиСервиса (или аналогичный, связанный с автономной работой).Проанализируем последствия: Установка этого флага заставит систему компилировать код модуля при запуске в режиме обычного приложения. Однако будьте осторожны: если внутри модуля используется код, который содержит инструкции, недоступные для толстого клиента (например, специфические серверные вызовы без соответствующих препроцессоров), это может привести к ошибкам компиляции в других местах. Поэтому первый способ с исключением источника является более предпочтительным.
Рассмотрим глобальное решение. Ошибка наглядно показывает, что поддержка обычных форм в современных конфигурациях на базе БСП 3.x постепенно прекращается. Рано или поздно вы столкнетесь с тем, что другие механизмы (печать, присоединенные файлы, версионирование) также откажут в работе в «толстом» контексте.
Если ресурсы позволяют, рекомендуем выполнить следующие действия:
&НаКлиенте и &НаСервере).Это полностью снимет проблему совместимости с подписками БСП, так как управляемые формы работают в правильном контексте, на который рассчитывают разработчики типовых решений.
Многие программисты пытаются найти ошибку, ставя точку останова в процедуре-обработчике подписки. Как мы выяснили ранее, точка останова не срабатывает, потому что платформа выбрасывает исключение еще на этапе компиляции или связывания обработчика с событием. Платформа понимает, что для текущего режима запуска (Обычное приложение) процедура недоступна, и даже не пытается начать ее выполнение. Именно поэтому отладка здесь не помогает — нужно анализировать именно метаданные и свойства модулей.
Подводя итог, можно сказать, что появление ошибки Обработчик события не найден — это сигнал о несоответствии старых доработок новой архитектуре БСП. Для быстрого исправления «здесь и сейчас» используйте Способ 1 через расширение. Это позволит вам продолжить работу без изменения ядра системы. Однако в долгосрочной перспективе единственным правильным путем будет отказ от использования обычных форм в конфигурациях, которые активно развиваются на платформе 8.3.
Основные выводы:
Толстый клиент (обычное приложение) у общего модуля БСП.