Почему некорректно отображается обычная форма после обновления платформы с 1С 8.2 на 8.3 и как это исправить

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

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

Разберем основные причины такого поведения платформы 8.3 и рассмотрим практические методы устранения проблемы.

Причины изменения поведения рендеринга обычных форм в 1С 8.3

Проанализируем ключевые факторы, из-за которых нарушается геометрия элементов:

  1. Новый алгоритм работы с DPI и масштабированием. В платформе 8.3 переработан механизм автомасштабирования под высокое разрешение экрана (DPI 125%, 150% и выше). При динамическом расчете координат элементов обычных форм это может приводить к смещению элементов до первой ручной перерисовки окна.
  2. Изменение логики работы свойства ТекущийЭлемент. В платформе 8.3 при программной установке фокуса на элемент, расположенный на неактивной закладке панели, происходит автоматическое переключение на эту закладку. Если в коде инициализации формы выполняется смена фокуса, это может сбить расчет относительных координат связанных элементов.
  3. Особенности пересчета привязок при динамическом скрытии элементов. Изменение свойств Видимость и Доступность в обработчиках ПередОткрытием или ПриОткрытии на платформе 8.3 вызывает отложенный пересчет геометрии, что часто ломает автоматические привязки на сложных многослойных панелях.
  4. Режим запуска и совместимости. Работа обычной конфигурации под управляемым режимом запуска или отключение режима совместимости приводит к активации строгих механизмов платформы 8.3, к которым старый графический макет не адаптирован.

Способ 1. Проверка режима запуска конфигурации

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

Проверим параметры запуска:

  1. В конфигураторе откроем свойства корневого узла конфигурации и проверим свойство Основной режим запуска — должно быть установлено значение Обычное приложение.
  2. В списке информационных баз стартера 1С откроем свойства базы и в параметрах запуска проверим флаг режима: для обычных форм должен использоваться толстый клиент (обычное приложение).

Способ 2. Корректировка привязок элементов в конфигураторе

Автоматическая расстановка привязок (АвтоПривязка = Истина), корректно работавшая в 8.2, в среде 8.3 может вызывать наслоение полей. Выполним ручную настройку расположения:

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

Способ 3. Отложенная инициализация и принудительная перерисовка формы

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

Посмотрим на пример организации отложенной инициализации:


Процедура ПриОткрытии()
    // Откладываем выполнение тяжелых операций и настройки видимости на 0.1 секунды
    ПодключитьОбработчикОжидания("ИнициализироватьОтображениеФормы", 0.1, Истина);
КонецПроцедуры

Процедура ИнициализироватьОтображениеФормы() Экспорт
    // Выполняем настройку колонок и отображения элементов
    НастроитьВидимостьЭлементов();
    
    // Принудительно инициируем перерисовку элементов формы
    ЭтаФорма.Обновить();
КонецПроцедуры

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


Процедура ПринудительноПересчитатьПривязки()
    ЭтаФорма.Ширина = ЭтаФорма.Ширина + 1;
    ЭтаФорма.Ширина = ЭтаФорма.Ширина - 1;
КонецПроцедуры

Способ 4. Настройка совместимости DPI в операционной системе

Если сдвиг элементов наблюдается только на рабочих местах с включенным масштабированием Windows (125% или 150%), настроим параметры совместимости исполняемого файла:

  1. Найдем исполняемый файл платформы 1cv8.exe (в каталоге bin соответствующей версии 8.3).
  2. Откроем Свойства -> вкладка Совместимость -> нажмем кнопку Изменить параметры высокого DPI.
  3. Установим флаг Переопределите режим масштабирования высокого разрешения.
  4. В выпадающем списке выберем вариант Приложение (или Система) и применим изменения.

Способ 5. Сброс системных настроек окна формы

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


// Программный сброс сохраненных настроек окна для пользователя
ИмяФормы = "Обработка.ПодборНоменклатуры.Форма.Форма";
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиОкон/" + ИмяФормы, "", ИмяПользователя());

Также сброс настроек можно выполнить интерактивно в режиме 1С:Предприятие через меню Главное меню -> Сервис -> Параметры -> Очистить настройки пользователя.

Способ 6. Проверка режима совместимости и тестирование базы

Если в конфигурации используется отключенный режим совместимости, а функционал платформы 8.3 не требует новейших механизмов, проверим значение свойства конфигурации Режим совместимости. Установка значения Версия 8.2.13 или Версия 8.2.16 возвращает классическое поведение движка отрисовки обычных форм.

Дополнительно рекомендуется выполнить тестирование и исправление информационной базы через конфигуратор (Администрирование -> Тестирование и исправление...) с обязательным предварительным созданием резервной копии.

← На главную