Перенос информационной базы «1С:Предприятие 8» из файлового режима в клиент-серверный (например, под управлением СУБД PostgreSQL) — это стандартный шаг при росте компании и увеличении нагрузки. Однако этот процесс часто сопровождается неожиданными техническими сбоями. Один из наиболее распространенных и неприятных сюрпризов — ситуация, когда ранее исправно работавшие расширения конфигурации частично «отваливаются». Новые элементы интерфейса (например, добавленные кнопки) отображаются на форме в режиме клиента, но при попытке нажать на них код не отрабатывает, серверные вызовы игнорируются, а точки останова в конфигураторе при отладке просто не срабатывают.
В рамках этой статьи мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы платформы «1С:Предприятие», которые приводят к подобному поведению, и рассмотрим пошаговые инструкции по восстановлению работоспособности ваших расширений.
В файловом варианте базы данных требования к безопасности выражены не так жестко. При переносе базы в клиент-серверный вариант (особенно если развертывание происходило путем загрузки резервной копии .dt на новый сервер) платформа активирует механизмы контроля безопасного режима для всех подключенных расширений.
Если для расширения в списке установлен флаг «Безопасный режим», платформа накладывает жесткие ограничения на выполнение серверных процедур:
&Перед, &После, &Вместо).Попытка просто снять галочку «Безопасный режим» в режиме «1С:Предприятие» (через меню «Администрирование — Расширения») в конфигурациях на базе БСП (Библиотеки Стандартных Подсистем, таких как ERP, КА, УНФ) часто приводит к тому, что система помечает расширение красным крестиком на удаление или полностью блокирует его. Это происходит из-за того, что БСП контролирует хэш-суммы и профили безопасности подключенных модулей.
Для правильного отключения ограничений в клиент-серверном варианте выполним следующие шаги:
Администрирование и Администрирование расширений конфигурации).При импорте базы данных из файла .dt на новый сервер рабочие процессы службы 1С (rphost) создают локальный кэш конфигурации. В некоторых случаях этот кэш «залипает». Платформа считает, что структура метаданных расширения не менялась, и использует старый скомпилированный код основной конфигурации, игнорируя новые перехватчики (hooks) из расширения.
Выясним, как принудительно заставить сервер 1С полностью обновить кэш и перестроить таблицы сопоставления метаданных.
Этот способ отлично зарекомендовал себя на практике и позволяет быстро «оживить» расширение без перезапуска всего сервера приложений 1С:
.cfe..cfe.Свойства. Объединять нужно только объекты метаданных, формы и программный код.Этот обходной путь заставляет платформу сгенерировать новые уникальные идентификаторы (GUID) для объектов метаданных расширения, что гарантированно очищает старый кэш сервера приложений для данных объектов.
Если код расширения фактически выполняется (например, данные в базе меняются), но отладчик упорно не хочет останавливаться на точках останова в модулях расширения, проблема кроется в настройках запуска службы сервера 1С.
По умолчанию при создании нового кластера серверов режим отладки выключен из соображений производительности. Проанализируем, как включить отладку на сервере под управлением ОС Windows:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...
ImagePath, который определяет строку запуска службы ragent.exe.-debug. Строка запуска должна выглядеть примерно так:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
1C:Enterprise 8.3 Server Agent через оснастку «Службы».После перезапуска службы необходимо проверить настройки подключения в Конфигураторе: перейдем в меню Отладка — Подключение... и убедимся, что серверные сеансы отображаются в списке доступных для подключения предметов отладки.
При переносе конфигураций, таких как УНФ 1.6, разработчики часто забывают проверить режим совместимости расширения. Если режим совместимости расширения отличается от режима совместимости основной конфигурации или если используется устаревшая версия платформы, серверная часть расширения может компилироваться с ошибками, которые не выводятся в журнал регистрации.
Рекомендуется всегда устанавливать режим совместимости расширения в значение «Не использовать» или строго сопоставлять его с режимом совместимости основной конфигурации.
Рассмотрим пример типичной структуры кода обработчика кнопки, который может вызывать проблемы при некорректно настроенной компиляции на сервере:
&НаКлиенте
Процедура Расш1_ДобавленнаяКнопкаНажатие(Кнопка)
// Клиентский контекст всегда работает без проблем
ПоказатьПредупреждение(, "Вызов серверной процедуры...");
// Передаем управление на сервер
ВыполнитьДействиеНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьДействиеНаСервере()
// В безопасном режиме этот код будет проигнорирован платформой!
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры
Если вы столкнулись с описанной проблемой после переноса базы данных на СУБД PostgreSQL, пройдите по следующим шагам:
-debug, если вам требуется отладка.snccntx в каталоге srvinfo) и запустите службу заново..cfe без переноса общих свойств, чтобы принудительно обновить внутренние идентификаторы метаданных.