При переходе конфигураций с обычными формами с платформы 1С:Предприятие 8.2 на 1С:Предприятие 8.3 разработчики нередко сталкиваются с ситуацией, когда диалоговые окна, формы подбора или многостраничные панели отображаются со сдвигами, пустыми областями или искаженными пропорциями элементов. При этом форма может периодически открываться корректно после повторного вызова или ручного изменения размера окна.
Разберем основные причины такого поведения платформы 8.3 и рассмотрим практические методы устранения проблемы.
Проанализируем ключевые факторы, из-за которых нарушается геометрия элементов:
ТекущийЭлемент. В платформе 8.3 при программной установке фокуса на элемент, расположенный на неактивной закладке панели, происходит автоматическое переключение на эту закладку. Если в коде инициализации формы выполняется смена фокуса, это может сбить расчет относительных координат связанных элементов.Видимость и Доступность в обработчиках ПередОткрытием или ПриОткрытии на платформе 8.3 вызывает отложенный пересчет геометрии, что часто ломает автоматические привязки на сложных многослойных панелях.Убедимся, что база данных запускается в правильном режиме клиента. Если конфигурация полностью построена на обычном интерфейсе, запуск должен осуществляться исключительно в режиме обычного приложения.
Проверим параметры запуска:
Автоматическая расстановка привязок (АвтоПривязка = Истина), корректно работавшая в 8.2, в среде 8.3 может вызывать наслоение полей. Выполним ручную настройку расположения:
Если искажение возникает из-за того, что платформа не успевает применить координаты при динамическом формировании элементов в событии ПриОткрытии, применим отложенный вызов через обработчик ожидания.
Посмотрим на пример организации отложенной инициализации:
Процедура ПриОткрытии()
// Откладываем выполнение тяжелых операций и настройки видимости на 0.1 секунды
ПодключитьОбработчикОжидания("ИнициализироватьОтображениеФормы", 0.1, Истина);
КонецПроцедуры
Процедура ИнициализироватьОтображениеФормы() Экспорт
// Выполняем настройку колонок и отображения элементов
НастроитьВидимостьЭлементов();
// Принудительно инициируем перерисовку элементов формы
ЭтаФорма.Обновить();
КонецПроцедуры
В ряде случаев помогает программная микрокоррекция размера формы, которая принудительно заставляет графический движок пересчитать привязки:
Процедура ПринудительноПересчитатьПривязки()
ЭтаФорма.Ширина = ЭтаФорма.Ширина + 1;
ЭтаФорма.Ширина = ЭтаФорма.Ширина - 1;
КонецПроцедуры
Если сдвиг элементов наблюдается только на рабочих местах с включенным масштабированием Windows (125% или 150%), настроим параметры совместимости исполняемого файла:
1cv8.exe (в каталоге bin соответствующей версии 8.3).Обычной очистки локального файлового кэша бывает недостаточно, так как геометрия окон сохраняется в системных таблицах базы данных. Для конкретного пользователя выполним сброс параметров формы:
// Программный сброс сохраненных настроек окна для пользователя
ИмяФормы = "Обработка.ПодборНоменклатуры.Форма.Форма";
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиОкон/" + ИмяФормы, "", ИмяПользователя());
Также сброс настроек можно выполнить интерактивно в режиме 1С:Предприятие через меню Главное меню -> Сервис -> Параметры -> Очистить настройки пользователя.
Если в конфигурации используется отключенный режим совместимости, а функционал платформы 8.3 не требует новейших механизмов, проверим значение свойства конфигурации Режим совместимости. Установка значения Версия 8.2.13 или Версия 8.2.16 возвращает классическое поведение движка отрисовки обычных форм.
Дополнительно рекомендуется выполнить тестирование и исправление информационной базы через конфигуратор (Администрирование -> Тестирование и исправление...) с обязательным предварительным созданием резервной копии.