Рассмотрим распространенную и крайне неприятную ситуацию, с которой сталкиваются администраторы и специалисты «1С» после планового обновления конфигурации «1С:Управление нашей фирмой» (УНФ) или Библиотеки стандартных подсистем (БСП). При попытке пользователей войти в базу через веб-клиент (в браузере) система аварийно завершает работу, выдавая ошибку «Конструктор не обнаружен».
При этом в журнале регистрации фиксируется детальный стек вызовов, указывающий на сбой при инициализации механизмов глобального поиска. Проанализируем природу этой ошибки, выясним, почему она возникает, и подробно разберем все шаги для ее устранения.
Давайте внимательно изучим технологический лог ошибки, который записывается в журнал регистрации при запуске системы:
{ОбщийМодуль.ГлобальныйПоискКлиент.Модуль(108)}: Возврат Вычислить("Новый ПланГлобальногоПоиска");
{ОбщийМодуль.ГлобальныйПоискКлиент.Модуль(123)}: ПланПоиска = НовыйПланГлобальногоПоиска;
{ОбщийМодуль.ГлобальныйПоискКлиент.Модуль(11)}: УстановитьПланГлобальногоПоиска;
{ОбщийМодуль.ОбщегоНазначенияКлиентПереопределяемый.Модуль(177)}: ГлобальныйПоискКлиент.ПослеНачалаРаботыСистемы;
{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(1307)}: ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы;
Обратим внимание на ключевую строчку: Возврат Вычислить("Новый ПланГлобальногоПоиска"). Возникает логичный вопрос: для чего разработчики платформы и БСП используют обертку в виде функции Вычислить() вместо прямого создания объекта через конструктор Новый ПланГлобальногоПоиска?
Дело в том, что объект метаданных ПланГлобальногоПоиска появился в платформе «1С:Предприятие 8» начиная с версии 8.3.15. Разработчики БСП стремятся обеспечить обратную совместимость конфигураций с более старыми релизами платформы. Если бы код содержал прямую декларацию Новый ПланГлобальногоПоиска, то на любой платформе ниже версии 8.3.15 конфигурация вообще не смогла бы скомпилироваться и запуститься — система сразу выдала бы критическую ошибку синтаксиса.
Использование конструкции Вычислить() позволяет платформе обходить жесткую компиляцию кода и пытаться создать объект динамически непосредственно в режиме исполнения (runtime). Если запущенная платформа поддерживает этот класс, объект успешно создается. Если же среда исполнения не знает такого типа данных, функция Вычислить() возвращает исключение, которое мы и наблюдаем: «Конструктор не обнаружен».
Ниже мы подробно разберем четыре основные причины, по которым веб-клиент «не видит» данный конструктор, и методы их решения.
Первое, на что необходимо обратить внимание — это версия используемой платформы «1С». Механизм глобального поиска в веб-клиенте на начальных этапах его внедрения содержал ряд недоработок. В частности, на ранних сборках ветки 8.3.16 (например, на релизе 8.3.16.1063) регулярно проявлялась ошибка интеграции JS-движка веб-клиента и объектной модели платформы.
Для устранения этой проблемы выполним следующие шаги:
8.3.16.1359, запланируем обновление платформы. Практика показывает, что начиная с релиза 8.3.16.1359 (и в последующих стабильных сборках веток 8.3.17, 8.3.18 и новее) данная ошибка была полностью исправлена разработчиками фирмы «1С».Даже если физически на сервере установлена самая современная версия платформы, ее новые возможности могут быть программно заблокированы на уровне самой конфигурации. За это отвечает специальное свойство — Режим совместимости.
Если после обновления конфигурации УНФ режим совместимости остался установленным на значении ниже, чем 8.3.15 (например, совместимость с 8.3.14), платформа искусственно отключает работу новых механизмов, включая глобальный поиск. В результате попытка инициализировать ПланГлобальногоПоиска вызовет ошибку «Конструктор не обнаружен».
Проанализируем этот параметр в конфигураторе:
Это одна из самых частых скрытых причин сбоя при работе через веб-клиент. Администраторы часто устанавливают новую версию платформы «1С» на сервер, но забывают скорректировать настройки публикации на веб-сервере (Apache или IIS).
Если веб-сервер продолжает использовать старые библиотеки (например, модуль wsap24.dll для Apache), то веб-клиент физически запускается под управлением старого движка (например, версии 8.3.14), который ничего не знает о глобальном поиске.
Проанализируем конфигурацию веб-сервера Apache по шагам:
httpd.conf, расположенный в каталоге установки веб-сервера в папке conf).
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.15.1565/bin/wsap24.dll"
8.3.15.x или 8.3.14.x), заменим его на путь к каталогу новой, установленной нами платформы (например, 8.3.16.1359):
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.16.1359/bin/wsap24.dll"
httpd.conf.Если обновление платформы выполнено, а пути к библиотекам на веб-сервере настроены верно, старые скрипты могут оставаться в кэше. Веб-клиент «1С» активно кэширует тяжелые файлы с описанием логики интерфейса непосредственно на стороне веб-сервера и в браузере пользователя.
Проведем комплексную очистку кэша и перепубликацию базы:
C:\inetpub\wwwroot\UNF или C:\inetpub\wwwroot\unf_promo) и полностью удалим оттуда все файлы, включая файл default.vrd.srvinfo\reg_1541\snccntry* и локальных временных папок AppData\Local\1C\1Cv8 на сервере.Реализуя описанный комплекс мер, мы гарантированно избавимся от системной ошибки инициализации глобального поиска и обеспечим стабильную, быструю работу пользователей в веб-клиенте 1С:УНФ.