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