При разработке расширений конфигурации разработчики нередко сталкиваются с ситуацией, когда добавленный код просто игнорируется платформой «1С:Предприятие». В конфигураторе модуль расширения успешно сохранен, синтаксический контроль проходит без нареканий, однако при выполнении операций в пользовательском режиме добавленные процедуры (например, с директивами &Перед, &После или &Вместо) не вызываются. Разберем по шагам, почему возникает такое поведение, как правильно локализовать причину и как исправить ошибку.
Рассмотрим типовую ситуацию. В основной конфигурации создана обработка Тест, в модуле формы которой вызывается серверная процедура:
&НаСервере
Процедура Команда1НаСервере()
Обработки.Тест.ТестПроц();
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
В модуле менеджера этой обработки определен экспортный метод:
Процедура ТестПроц() Экспорт
Сообщить("ОК Проц");
КонецПроцедуры
Далее создается расширение конфигурации, куда заимствуется обработка Тест. В модуле менеджера обработки из расширения разработчик пытается перехватить исходный метод директивой &Перед:
&Перед("ТестПроц")
Процедура НовПроц() Экспорт
Сообщить("Нов Ок Проц");
КонецПроцедуры
Ожидаемое поведение: при нажатии на кнопку в окно сообщений сначала должно быть выведено «Нов Ок Проц», а затем «ОК Проц». Однако на практике расширение полностью игнорируется, и срабатывает только исходный код. При этом явных ошибок на экран не выводится.
Главная причина такого поведения в подавляющем большинстве случаев заключается в том, что расширение подключено в безопасном режиме. Платформа 1С содержит строгие правила изоляции кода: расширение, работающее в безопасном режиме, рассматривается как недоверенное. Ему разрешается добавлять собственные изолированные метаданные, но категорически запрещается изменять и расширять модули существующей конфигурации.
Попытка внедрить аннотации &Перед, &После или &Вместо в модуль типовой конфигурации из расширения, находящегося в безопасном режиме, приводит к тому, что платформа блокирует применение измененного модуля целиком с системной ошибкой:
Ошибка расширения модуля: расширение модуля запрещено из-за того, что расширение подключено в безопасном режиме
Разберем, как обнаружить такую блокировку, если в обычном пользовательском режиме платформа не сообщает о проблеме явно:
/debug. В этом режиме платформа выводит системные предупреждения и ошибки подключения расширений прямо в окне сообщений при запуске сеанса.Проанализируем порядок действий для устранения блокировки:
Ложь).Если безопасный режим отключен, но код расширения все равно не вызывается, проверим следующие критические моменты:
Экспорт (в версии 8.3.9 перехват неэкспортных методов не поддерживается).