При работе с расширениями в среде «1С:Предприятие 8.3» разработчики часто сталкиваются с ситуацией, когда изменение свойств расширения (например, снятие флага «Защита от опасных действий») визуально сохранено, но система продолжает вести себя так, будто действуют старые ограничения. Особенно остро это проявляется в регламентных и фоновых заданиях, которые взаимодействуют с внешними компонентами или COM-соединениями. В этой статье мы разберем механизмы кэширования серверных процессов, влияние параметров безопасности на системного пользователя и правильные подходы к доработке кода в расширениях.
Прежде всего, разберем, как платформа запускает регламентное задание. В отличие от интерактивного сеанса пользователя, фоновое задание выполняется в процессе rphost на стороне сервера. Когда вы вносите изменения в расширение, эти изменения должны быть подхвачены всеми активными процессами кластера. Рассмотрим основные причины, по которым это может не происходить:
rphost могут удерживать состояние расширений в своей памяти. Даже если в конфигураторе флаг снят, менеджер фоновых заданий может запустить новый сеанс на основе «старого» снимка расширения, хранящегося в серверном кэше.Безопасный режим, использование COM-объектов будет заблокировано независимо от настроек защиты.Если вы убедились, что флажки в конфигураторе расставлены верно, но поведение системы не меняется, проанализируем ситуацию с точки зрения серверной инфраструктуры. Выясним причину задержки обновления через кэш. Для гарантированного применения настроек выполним следующие шаги:
Рассмотрим процедуру полной очистки серверного кэша. На сервере 1С данные расширений и конфигураций кэшируются в папке служебных файлов (обычно это путь вида C:\Program Files\1cv8\srvinfo\reg_1541\). Внутри этой директории находятся папки snccntxt, содержащие контексты сеансов.
Алгоритм действий:
1CV8Reg.lst).Это заставит систему при первом же обращении к регламентному заданию перекомпилировать расширение с актуальными настройками защиты.
Поскольку проблема часто проявляется именно при использовании COM-соединения, проанализируем программную среду. Фоновое задание выполняется на сервере, следовательно, COM-объект должен быть зарегистрирован именно там. Если сервер 1С имеет разрядность 64 бита (x64), а используемая библиотека 32-битная, соединение не установится, что иногда ошибочно интерпретируется как «защита от опасных действий».
Убедимся, что регистрация выполнена корректно через regsvr32. Также проверим права доступа системной учетной записи, под которой запущена служба 1С (обычно это USR1CV8), к соответствующим веткам реестра и папкам с DLL-библиотеками.
В некоторых случаях, даже если все настройки в интерфейсе отключены, контекст вызова может навязывать безопасный режим. Разберем, как принудительно отключить его в коде расширения. Посмотрим на пример кода внутри процедуры общего модуля, которую мы заменяем через &Вместо:
&Вместо("ВыполнитьОбменДанными")
Процедура Расш1_ВыполнитьОбменДанными(Параметры)
// Принудительно отключаем безопасный режим для текущего потока,
// чтобы разрешить работу с внешними объектами и COM
УстановитьБезопасныйРежим(Ложь);
Попытка
// Пример инициализации COM-соединения
COMОбъект = Новый COMОбъект("V83.COMConnector");
// Дальнейшая логика работы с объектом
Исключение
ЗаписьЖурналаРегистрации("Ошибка COM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Использование функции УстановитьБезопасныйРежим(Ложь) позволяет внутри конкретного вызова гарантировать отсутствие ограничений, накладываемых платформой на выполнение «опасного» кода.
Выясним еще одну важную техническую деталь. Использование аннотации &Вместо полностью подменяет логику типового модуля. Это может приводить к тому, что некоторые инициализационные механизмы безопасности, предусмотренные в типовом коде, игнорируются или работают некорректно. Рассмотрим более современный и безопасный метод — &ИзменениеИКонтроль.
Этот метод позволяет внедряться в логику типовой процедуры, сохраняя контроль над кодом. Если платформа увидит, что типовой метод обновился, она сообщит о конфликте, что предотвратит ошибки в работе регламентных заданий после обновления основной конфигурации.
Подведем итог нашему исследованию. Если регламентное задание «не видит» изменений в защите от опасных действий:
COM-соединение не заработает.rphost или очистку кэша, чтобы исключить влияние старых сеансов.Таким образом, мы детально разобрали, как обеспечить стабильную работу расширений в фоновом режиме. Соблюдение этих правил позволит избежать трудноуловимых ошибок при автоматизации обменов и работе с внешними системами.