Как замерить время открытия формы списка справочника в 1С?

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

В процессе разработки и сопровождения систем на базе 1С:Предприятие 8.3 программисты часто сталкиваются с проблемой медленного открытия форм. Особенно это актуально для форм списков, где основным элементом управления является Динамический список. Пользователи жалуются на «подвисание» интерфейса, при этом модуль формы может быть абсолютно пуст, что ставит начинающего разработчика в тупик. Разберем детально, как локализовать проблему и какими инструментами замерить реальную скорость работы интерфейса.

Программный замер времени создания и открытия формы

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

Важно различать методы ПолучитьФорму и ОткрытьФорму. Метод ПолучитьФорму только создает объект формы, в то время как ОткрытьФорму инициирует весь цикл отображения, включая отрисовку интерфейса и первичную выборку данных динамическим списком. Проанализируем пример кода для замера:


ОтметкаВремени = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Замеряем только получение объекта формы
Форма = ПолучитьФорму("Справочник.Займы.ФормаСписка");
ВремяСозданияФормы = ТекущаяУниверсальнаяДатаВМиллисекундах() - ОтметкаВремени;
Сообщить("Время создания объекта формы (мс): " + ВремяСозданияФормы);

// Замеряем полное открытие
ОтметкаВремени = ТекущаяУниверсальнаяДатаВМиллисекундах();
ОткрытьФорму("Справочник.Займы.ФормаСписка");
ВремяОткрытияФормы = ТекущаяУниверсальнаяДатаВМиллисекундах() - ОтметкаВремени;
Сообщить("Время вызова команды открытия (мс): " + ВремяОткрытияФормы);

Если результаты замера показывают небольшие значения (например, 160–200 мс), а пользователь все равно видит «крутящееся колесо» в течение 5 секунд, значит, основная задержка происходит на этапе отрисовки или выполнения запроса в динамическом списке, который отрабатывает асинхронно после отображения каркаса формы.

Использование встроенного замера производительности в Конфигураторе

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

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Включим режим отладки (если он еще не включен) и запустим сеанс «1С:Предприятие».
  3. В Конфигураторе перейдем в меню Отладка — Замер производительности. В этот момент иконка замера (с часиками) должна стать активной.
  4. Перейдем в пользовательский сеанс и выполним действие, вызывающее открытие формы списка.
  5. Сразу после того как форма полностью загрузится, вернемся в Конфигуратор и повторно нажмем кнопку Замер производительности, чтобы остановить его.

Система сформирует таблицу, в которой будут указаны все вызванные процедуры, включая системные (скрытые) модули. Мы сможем увидеть, сколько времени заняли вызовы сервера и какие процедуры были наиболее длительными. Если даже здесь мы не видим явных «тяжелых» строк кода, значит, проблема кроется в настройках компоновки данных динамического списка.

Как поставить точку останова в пустой форме?

Часто возникает вопрос: как «поймать» момент открытия, если в модуле формы нет ни одной строки кода? Проанализируем несколько приемов, которые используют профессиональные разработчики:

Анализ проблем Динамического списка

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

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

Влияние регламентных заданий и «холодного старта»

Рассмотрим ситуацию, которую обнаружил автор темы: при первом запуске программы форма открывается 3.5 секунды, а в последующие разы — мгновенно. Это классический пример влияния регламентных заданий и кэширования конфигурации.

В момент запуска системы 1С:Предприятие выполняет целый ряд тяжелых операций:

Если ваша база данных расположена на медленном диске или сервер перегружен в момент старта, любые действия в первые минуты после входа будут замедлены. Для оптимизации рекомендуется разносить запуск тяжелых регламентных заданий на ночное время и следить за тем, чтобы настройки пользователей (отборы, группировки в списках) не были избыточными. Помните, что иногда проще «сбросить настройки формы» пользователю, чем пытаться оптимизировать сложный запрос, который тормозит из-за одного некорректного отбора по неиндексированному полю.

← На главную