Как исправить некорректное отображение и «сползание» элементов на обычных формах в 1С 8.3

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

При переходе на платформу 1С:Предприятие 8.3 пользователи конфигураций на обычных (толстых) формах — таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» или «Комплексная автоматизация 1.1» — часто сталкиваются с крайне неприятным багом. В какой-то момент формы списка или выбора справочника Номенклатура начинают отображаться некорректно: табличные части сжимаются, границы элементов «налезают» друг на друга, а кнопки панели инструментов и вовсе исчезают из видимости.

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

Выясняем глубинную причину: почему «плывут» обычные формы в 1С 8.3?

Для того чтобы эффективно бороться с проблемой, проанализируем физику процесса. Исторически обычные формы проектировались разработчиками под стандартное разрешение экрана с плотностью пикселей 96 DPI (что соответствует масштабу интерфейса Windows 100%). Все элементы управления на форме позиционировались по фиксированной пиксельной сетке.

Начиная с версий платформы 1С 8.3.9 и 8.3.10, разработчики изменили алгоритмы масштабирования под мониторы с высоким разрешением (High DPI). Теперь, если у пользователя в настройках операционной системы установлено масштабирование экрана более 100% (например, 125% или 150% на современных Full HD и 4K мониторах ноутбуков), платформа пытается на лету пересчитать координаты и размеры элементов формы.

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

Ловушка кэша настроек: почему очистка AppData помогает лишь временно?

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

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

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

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

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

  1. Подготовка рабочего места разработчика: Тот, кто будет вносить изменения в форму через Конфигуратор, должен временно установить в настройках экрана Windows масштаб ровно 100% (96 DPI). Если вести разработку на мониторе с масштабом 125% или 150%, Конфигуратор запишет в метаданные кривые координаты, и у пользователей со стандартными мониторами интерфейс сломается еще сильнее.
  2. Поиск конфликтных зон: Откроем нужную форму в Конфигураторе (например, форму списка справочника Номенклатура). Перейдем в режим тестирования формы, нажав сочетание клавиш Ctrl + R. Попробуем интерактивно растягивать и сжимать форму мышкой по горизонтали и вертикали. Те элементы, привязки которых настроены некорректно, платформа подсветит красными мигающими линиями.
  3. Оптимизация привязок: Откроем свойства проблемного элемента, кликнем правой кнопкой мыши и выберем пункт «Установить привязки». Избегайте длинных зависимых цепочек привязок. Старайтесь привязывать ключевые элементы (табличные поля, панели) напрямую к границам самой формы (к левой, правой, верхней или нижней границе формы), а не к соседним элементам.
  4. Настройка свойств окна: Перейдем в свойства самой формы и найдем параметр «Состояние окна». Изменим его значение со значения «Обычное» на «Свободное». Это позволит платформе более гибко рассчитывать начальные размеры табличных частей при первом запуске на любых разрешениях.

Способ №2. Программный сброс параметров сохранения положения окна

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

Рассмотрим пример кода, который необходимо вставить в модуль формы в обработчик события ПередОткрытием:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    // Динамически назначаем уникальный ключ сохранения положения окна.
    // Платформа будет считать, что форма открывается впервые, 
    // и проигнорирует сломанные координаты из базы данных.
    ЭтаФорма.ИмяСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
    
КонецПроцедуры

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


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    // Отключаем автоматическую запись и чтение координат формы
    ЭтаФорма.СохранятьПоложениеОкна = Ложь;
    
КонецПроцедуры

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

Способ №3. Разовое удаление поврежденных настроек пользователей

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

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

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

Анализ неработающих и временных решений

Проанализируем методы, которые часто советуют на различных форумах, но эффективность которых крайне мала:

Резюме: Наиболее качественным решением проблемы является исправление структуры привязок формы в Конфигураторе при разрешении экрана 96 DPI. В качестве надежной альтернативы без изменения интерфейса рекомендуется использовать программное отключение сохранения положения окна через свойство СохранятьПоложениеОкна = Ложь.

← На главную