Как убрать «дёрганье» управляемой формы в 1С при динамическом изменении видимости элементов?

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

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

В этой статье мы подробно разберем, почему возникает этот визуальный баг, и рассмотрим проверенные практические методы, позволяющие «замонолитить» интерфейс и сделать поведение управляемой формы стабильным и плавным.

Выясняем причину: почему форма «дёргается»?

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

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

Способ 1. Управление доступностью вместо видимости

Проанализируем самый простой и эффективный способ сохранить геометрию формы неизменной. Вместо полного скрытия элемента мы можем ограничить возможность взаимодействия с ним. Для этого используется свойство Доступность (или ТолькоПросмотр).

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


// Вместо скрытия элемента:
// Элементы.ГруппаРазмерыВзносов.Видимость = Ложь;

// Используем отключение доступности:
Элементы.ГруппаРазмерыВзносов.Доступность = Ложь;

Этот метод полностью исключает пересчет геометрии формы, благодаря чему интерфейс гарантированно не будет «дёргаться». Однако, если бизнес-требования категорически настаивают на полном скрытии элемента, перейдем к более сложным приемам.

Способ 2. Трюк с подменой страниц в невидимой группе

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

  1. Поместим табличную часть или группу элементов, которую необходимо скрывать, внутрь контейнера типа Группа страниц.
  2. Установим у этой группы свойство ОтображениеСтраниц в значение Нет. Это позволит скрыть стандартные ярлыки закладок, сделав группу визуально бесшовной.
  3. Создадим внутри этой группы две страницы:
    • СтраницаДанных — на ней разместим нашу целевую таблицу или элементы.
    • СтраницаЗаглушка — абсолютно пустая страница (или страница с минимальной декоративной надписью, если это уместно по дизайну).
  4. Вместо динамического управления свойством Видимость мы будем просто переключать активную страницу программно.

Посмотрим на пример кода, реализующего это переключение:


// Переключаем интерфейс на пустую страницу-заглушку, имитируя скрытие
Элементы.ГруппаКонтейнер.ТекущаяСтраница = Элементы.СтраницаЗаглушка;

// Возвращаем данные на экран
Элементы.ГруппаКонтейнер.ТекущаяСтраница = Элементы.СтраницаДанных;

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

Способ 3. Жесткая фиксация размеров таблиц и колонок

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

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

Важное правило баланса: Если у обеих смежных таблиц для свойства РастягиватьПоГоризонтали установлено значение Да (или Авто), то при скрытии элементов внутри одной из них платформа начнет динамически делить экранное пространство заново. Назначение одной из таблиц ведущей (с жесткой шириной), а другой — ведомой, решает эту проблему.

Способ 4. Работа с разделителями (Splitters) и группировкой элементов

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

  1. Объединим обе табличные части в одну родительскую группу.
  2. Установим для этой группы свойство Группировка в значение Горизонтальная.
  3. Убедимся, что заголовок этой родительской группы не содержит пустых символов (обычных пробелов), так как в некоторых версиях платформы это может приводить к спонтанному исчезновению разделителя. Если заголовок нужно скрыть или сделать пустым, используйте специальный неразрывный пробел (символ с кодом 160) или просто отключите отображение заголовка группы.

Способ 5. Анализ привязок и оптимизация компоновки с помощью Alt+Shift+R

Иногда визуальное искажение формы связано с некорректно настроенными автоматическими привязками, которые наслаиваются друг на друга в процессе работы пользователя. Чтобы проанализировать, как именно платформа видит геометрию вашей формы в режиме реального времени, воспользуемся встроенным инструментом отладки интерфейса:

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

Способ 6. Использование функциональных опций

Если скрытие или отображение элементов формы зависит от прав доступа пользователя, настроек учетной политики или констант системы, старайтесь избегать написания программного кода в обработчиках ПриСозданииНаСервере или ПриОткрытии.

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

Способ 7. Очистка кэша и сброс настроек масштабирования

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

  1. Сброс пользовательских настроек окна: В режиме «1С:Предприятие» откройте нужную форму, нажмите на заголовок окна правой кнопкой мыши и выберите команду «Восстановить положение окна». Это сбросит сохраненную в кэше геометрию, которая могла некорректно записаться при изменении разрешения экрана или подключении второго монитора.
  2. Проверка масштабирования Windows (DPI): Движок управляемых форм крайне чувствителен к нестандартному масштабу дисплея (например, 125% или 150%). Рекомендуется использовать стандартный масштаб 100% либо обновить платформу 1С до актуального релиза, где алгоритмы расчета интерфейсов при высоких значениях DPI существенно доработаны.

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

← На главную