Разберем одну из самых неприятных ситуаций, с которой сталкиваются разработчики 1С: при попытке вызвать конструктор запроса (например, в консоли запросов или в обработке в пользовательском режиме) система «подвисает». В тонком клиенте это часто заканчивается ошибкой «Соединение с сервером разорвано», а в толстом клиенте программа просто перестает отвечать на любые действия пользователя. Проанализируем причины этого поведения, которые особенно ярко проявились на платформах версий 8.3.12 и 8.3.13, и найдем способы решения этой технической проблемы.
Проанализируем ситуацию: почему на старых версиях платформы (например, 8.3.10) всё работает стабильно, а при переходе на более новые релизы или при включении режима совместимости 8.3.12 начинаются проблемы? Основная причина кроется в механизме работы расширений конфигурации и алгоритме сборки метаданных платформой.
Когда мы запускаем конструктор запроса, платформа выполняет операцию построения дерева доступных объектов метаданных. Если в системе подключены расширения, конструктор должен «слить» (выполнить merge) структуру основной конфигурации и структуру расширений. В версиях 8.3.12 и начале 8.3.13 был допущен критический баг: если в расширении заимствован оборотный регистр накопления и у него активен признак изменения модуля, алгоритм анализа метаданных входит в бесконечный цикл или вызывает блокировку потока интерфейса.
Для понимания того, как избежать проблемы, рассмотрим конкретные условия, при которых конструктор запроса гарантированно зависает:
Изменен модуль менеджера или Изменен модуль набора записей. Важно понимать, что этот флаг устанавливается автоматически, даже если вы просто открыли модуль и случайно поставили лишний пробел или комментарий.Сочетание этих факторов заставляет платформу при вызове конструктора запросов инициировать глубокую проверку связей метаданных, которая из-за программной ошибки в коде 1С приводит к Application Hang (прекращению работы программы).
Рассмотрим первый и часто самый эффективный метод «быстрого лечения» — полное тестирование и исправление базы данных с фокусом на реструктуризацию таблиц. Посмотрим, как это сделать правильно:
Реструктуризация заставляет платформу пересоздать физические таблицы в СУБД и обновить внутренние кэши описания метаданных. В ряде случаев это разрывает ошибочные логические связи, возникшие после обновления платформы, и конструктор начинает открываться нормально.
Если реструктуризация не помогла, проанализируем наши расширения. Это более точечный и надежный метод. Выясним, какой именно объект блокирует работу конструктора, и исправим его свойства.
Разберем по шагам алгоритм действий в Конфигураторе:
&НаСервере или &Перед, не вызывая «модифицированность» самого корневого объекта модуля, если это возможно в вашей версии платформы.Как показывает практика, после удаления признака модифицированности у регистров накопления, конструктор запросов в пользовательском режиме начинает запускаться мгновенно.
Иногда зависание сопровождается ошибками получения схем XDTO 1cFresh/ConfigurationExtensions/Management. Это происходит потому, что конструктор запроса при инициализации пытается проверить валидность всех механизмов расширений, включая интеграционные пакеты. Проанализируем, что можно сделать в этой ситуации:
Попробуем полностью очистить серверный кэш и кэш пользователя, под которым запускается служба сервера 1С. Для этого необходимо:
1C:Enterprise 8.3 Server Agent.%AppData%\1C\1cv8 (и аналогичную папку в Local) пользователя, от имени которого работает сервер.Важно: Обычная очистка кэша локального пользователя через удаление базы из списка запуска часто бывает недостаточной, так как проблема может локализоваться именно в серверных структурах описания метаданных расширений.
Выясним, на каких версиях проблема точно исправлена. Ошибка была официально признана разработчиками 1С и исправлена в последующих релизах. Если ваша конфигурация позволяет, рекомендуем выполнить следующие действия:
8.3.20+).Подводя итог, можно сказать, что зависание конструктора запросов — это «болезнь» переходного периода платформы 1С, когда расширения получили возможность серьезно влиять на структуру данных. Используя методы реструктуризации и контроля заимствованных объектов, мы можем обеспечить стабильную работу инструментов разработчика даже в таких непростых условиях.