Почему конструктор запроса зависает или обрывает соединение при открытии в пользовательском режиме?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разберем одну из самых неприятных ситуаций, с которой сталкиваются разработчики 1С: при попытке вызвать конструктор запроса (например, в консоли запросов или в обработке в пользовательском режиме) система «подвисает». В тонком клиенте это часто заканчивается ошибкой «Соединение с сервером разорвано», а в толстом клиенте программа просто перестает отвечать на любые действия пользователя. Проанализируем причины этого поведения, которые особенно ярко проявились на платформах версий 8.3.12 и 8.3.13, и найдем способы решения этой технической проблемы.

Выясним основную причину зависания

Проанализируем ситуацию: почему на старых версиях платформы (например, 8.3.10) всё работает стабильно, а при переходе на более новые релизы или при включении режима совместимости 8.3.12 начинаются проблемы? Основная причина кроется в механизме работы расширений конфигурации и алгоритме сборки метаданных платформой.

Когда мы запускаем конструктор запроса, платформа выполняет операцию построения дерева доступных объектов метаданных. Если в системе подключены расширения, конструктор должен «слить» (выполнить merge) структуру основной конфигурации и структуру расширений. В версиях 8.3.12 и начале 8.3.13 был допущен критический баг: если в расширении заимствован оборотный регистр накопления и у него активен признак изменения модуля, алгоритм анализа метаданных входит в бесконечный цикл или вызывает блокировку потока интерфейса.

Проанализируем триггеры возникновения ошибки

Для понимания того, как избежать проблемы, рассмотрим конкретные условия, при которых конструктор запроса гарантированно зависает:

  1. Заимствованные регистры накопления: В расширение добавлен оборотный регистр накопления из основной конфигурации.
  2. Признак модифицированности модуля: У заимствованного регистра в расширении установлен флаг Изменен модуль менеджера или Изменен модуль набора записей. Важно понимать, что этот флаг устанавливается автоматически, даже если вы просто открыли модуль и случайно поставили лишний пробел или комментарий.
  3. Наличие новых объектов в расширении: В этом же расширении создан какой-либо новый объект, например, добавлена новая форма к заимствованному справочнику или отчету.

Сочетание этих факторов заставляет платформу при вызове конструктора запросов инициировать глубокую проверку связей метаданных, которая из-за программной ошибки в коде 1С приводит к Application Hang (прекращению работы программы).

Способ решения №1: Реструктуризация базы данных

Рассмотрим первый и часто самый эффективный метод «быстрого лечения» — полное тестирование и исправление базы данных с фокусом на реструктуризацию таблиц. Посмотрим, как это сделать правильно:

  1. Запустим конфигуратор и создадим резервную копию базы данных.
  2. Перейдем в меню Администрирование — Тестирование и исправление.
  3. Установим флаг только на пункте Реструктуризация таблиц информационной базы.
  4. Выполним процедуру.

Реструктуризация заставляет платформу пересоздать физические таблицы в СУБД и обновить внутренние кэши описания метаданных. В ряде случаев это разрывает ошибочные логические связи, возникшие после обновления платформы, и конструктор начинает открываться нормально.

Способ решения №2: Сброс признака модифицированности в расширении

Если реструктуризация не помогла, проанализируем наши расширения. Это более точечный и надежный метод. Выясним, какой именно объект блокирует работу конструктора, и исправим его свойства.

Разберем по шагам алгоритм действий в Конфигураторе:

  1. Откроем список расширений конфигурации.
  2. Для каждого расширения проверим список заимствованных объектов, обращая особое внимание на Регистры накопления.
  3. Если у регистра накопления иконка модуля (менеджера или набора записей) подсвечена как измененная, нажмем на ней правой кнопкой мыши.
  4. Выберем пункт Удалить из расширения для этого конкретного модуля (не для всего объекта!).
  5. Если правки в модуле действительно были необходимы, попробуем перенести их в методы, использующие аннотации &НаСервере или &Перед, не вызывая «модифицированность» самого корневого объекта модуля, если это возможно в вашей версии платформы.

Как показывает практика, после удаления признака модифицированности у регистров накопления, конструктор запросов в пользовательском режиме начинает запускаться мгновенно.

Разберем ситуацию с XDTO-пакетами и кэшем

Иногда зависание сопровождается ошибками получения схем XDTO 1cFresh/ConfigurationExtensions/Management. Это происходит потому, что конструктор запроса при инициализации пытается проверить валидность всех механизмов расширений, включая интеграционные пакеты. Проанализируем, что можно сделать в этой ситуации:

Попробуем полностью очистить серверный кэш и кэш пользователя, под которым запускается служба сервера 1С. Для этого необходимо:

  1. Остановить службу 1C:Enterprise 8.3 Server Agent.
  2. Зайти в папку %AppData%\1C\1cv8 (и аналогичную папку в Local) пользователя, от имени которого работает сервер.
  3. Полностью удалить содержимое папок с именами-идентификаторами баз.
  4. Запустить службу заново.

Важно: Обычная очистка кэша локального пользователя через удаление базы из списка запуска часто бывает недостаточной, так как проблема может локализоваться именно в серверных структурах описания метаданных расширений.

Рекомендации по выбору версии платформы

Выясним, на каких версиях проблема точно исправлена. Ошибка была официально признана разработчиками 1С и исправлена в последующих релизах. Если ваша конфигурация позволяет, рекомендуем выполнить следующие действия:

  1. Обновим платформу до версии 8.3.14.1565 или выше (оптимально — актуальные релизы 8.3.20+).
  2. Если обновление платформы невозможно, установим режим совместимости конфигурации в значение 8.3.10. Как мы видели из анализа сообщений, на этой версии механизмы работы с расширениями еще не имели этого бага, так как функционал расширения структуры данных в них был ограничен.

Подводя итог, можно сказать, что зависание конструктора запросов — это «болезнь» переходного периода платформы 1С, когда расширения получили возможность серьезно влиять на структуру данных. Используя методы реструктуризации и контроля заимствованных объектов, мы можем обеспечить стабильную работу инструментов разработчика даже в таких непростых условиях.

← На главную