Как исправить проблему с некорректным отображением и изменением размеров управляемых форм в 1С 8.3.15 после обновления?

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

При обновлении платформы «1С:Предприятие» со старых релизов (например, весьма стабильного в свое время 8.3.5) на современные версии уровня 8.3.15 и выше разработчики часто сталкиваются с неприятным сюрпризом. Дописанные или сильно измененные управляемые формы, которые годами работали корректно, внезапно начинают вести себя непредсказуемо. Они либо «расползаются» в длину, превышая размеры экрана в полтора-два раза, либо, наоборот, «схлопываются» до минимальных размеров при программном изменении видимости реквизитов.

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

Почему ломается верстка форм при переходе на платформу 8.3.15?

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

  1. Новый алгоритм расстановки элементов (начиная с версии 8.3.7). В старых версиях платформы (до 8.3.6 включительно) элементы управляемой формы позиционировались по более простой схеме, часто ориентируясь на жесткую сетку и фиксированные размеры. Начиная с версии 8.3.7, если в свойствах конфигурации режим совместимости установлен в значение выше 8.3.6 или отключен, платформа применяет новый адаптивный алгоритм автоматической компоновки. Он пытается динамически рассчитать оптимальную ширину и высоту групп на основе содержимого, что при некорректных настройках растягивания приводит к лавинообразному увеличению размеров формы.
  2. Проблемы SDI-интерфейса («Формы в закладках»). Данный режим отображения признан устаревшим. В платформе 8.3.15 были удалены некоторые системные панели инструментов, а команды масштабирования перенесены в контекстное меню формы (кнопка «Три точки»). Из-за этих изменений расчет внутренних границ окон в режиме закладок работает со сбоями. Переключение между вкладками или динамический расчет высоты часто вызывают визуальное «залипание» и растягивание элементов.
  3. Динамический пересчет геометрии при управлении видимостью. В новых версиях платформы использование свойства Видимость = Ложь или Видимость = Истина инициирует мгновенный и полный перерасчет структуры формы на стороне клиента. Если родительские группы элементов имеют свободные настройки растягивания (значения по умолчанию), скрытие одного мелкого элемента может заставить всю форму «схлопнуться» до минимальной ширины или высоты, не возвращаясь в исходное состояние при обратном действии.

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

Шаг 1. Реанимация и переход на интерфейс «Такси»

Как показывает практика, попытки сохранить работоспособность устаревшего интерфейса «Формы в закладках» на новых версиях платформы малоэффективны и ведут к постоянной борьбе с новыми багами отрисовки. Наиболее надежным решением является переход на интерфейс «Такси».

Если в вашей сильно измененной старой конфигурации этот интерфейс был отключен или вырезан, выполним его восстановление:

  1. Откроем конфигуратор и перейдем в свойства корневого объекта конфигурации.
  2. В разделе «Основные» найдем свойство РежимИспользованияИнтерфейса.
  3. Установим значение ТаксиРазрешитьИнтерфейсКлиента или Такси.
  4. Проверим настройки совместимости. Если свойство РежимСовместимости установлено в значение ниже 8.3.8., новые механизмы позиционирования элементов интерфейса «Такси» могут работать некорректно. Рекомендуется постепенно повышать режим совместимости, предварительно проводя тестирование на копии базы данных.

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

Шаг 2. Замена динамической видимости элементами «Страницы»

Проанализируем ситуацию, когда форма «кургузо» сжимается или деформируется при программном скрытии элементов. Если в вашем коде активно используются конструкции вида:

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

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

Разберем этот метод по шагам:

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

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

// Мы пишем управление страницами:
Если НужноеУсловие Тогда
    Элементы.ГруппаМультирежим.ТекущаяСтраница = Элементы.СтраницаСЭлементами;
Иначе
    Элементы.ГруппаМультирежим.ТекущаяСтраница = Элементы.СтраницаПустая;
КонецЕсли;

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

Шаг 3. Корректировка свойств авторазметки и растягивания

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

Выясним основные правила настройки свойств элементов формы:

Шаг 4. Учет масштабирования операционной системы (DPI)

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

Рекомендуем придерживаться строгого правила: любые работы по верстке, компоновке и изменению свойств управляемых форм в конфигураторе необходимо выполнять исключительно на мониторе с установленным масштабом системы 100% (96 DPI). Это гарантирует предсказуемое поведение авторазметки у всех конечных пользователей.

Шаг 5. Очистка сохраненных настроек отображения окон у пользователей

Часто программист исправляет все свойства формы в конфигураторе, запускает отладку, но форма на экране по-прежнему выглядит растянутой или поломанной. Почему это происходит? Дело в том, что платформа «1С» кэширует индивидуальные настройки размеров и положения окон для каждого пользователя.

Для устранения этой проблемы воспользуемся двумя путями решения:

Интерактивный метод (для пользователя):

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

Программный метод (для администратора):

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


// Программный сброс сохраненных настроек окна для текущего пользователя
ИмяФормы = "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента";
КлючНастроек = ИмяФормы + "/НастройкиОкна";

// Удаляем настройки позиционирования окна из системного хранилища
ХранилищеНастроекДанныхФормы.Удалить(КлючНастроек, "", ПользователиИнформационнойБазы.ТекущийПользователь().Имя);

Использование данного кода при начале работы системы или в специализированной административной обработке позволит массово сбросить «кривые» координаты окон у всех пользователей после обновления платформы.

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

← На главную