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

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

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

Выясним причину сбоя привязок

Проанализируем механику работы платформы, чтобы понять, почему возникает такое поведение. Ошибка обусловлена давним конфликтом механизма расчета относительных координат обычных форм платформы 8.3 с увеличенным масштабом экрана в операционной системе Windows (DPI выше 100%, например 125% или 150%).

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

Разберем основные способы решения этой проблемы — от быстрых настроек операционной системы и ярлыка до программной доработки формы в Конфигураторе.

Способ 1. Принудительный сброс сохранения положения окна (Программный метод)

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

Для этого открываем проблемную форму в Конфигураторе и выполним следующие действия:

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

Посмотрим на пример кода в модуле формы:


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

КонецПроцедуры

Благодаря этому ходу платформа воспринимает каждое открытие формы как первоначальное и не загружает сжатые размеры из системного хранилища пользовательских настроек.

Способ 2. Изменение масштаба системного экрана Windows

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

  1. Нажмите правой кнопкой мыши по рабочему столу Windows и выберите пункт Параметры экрана.
  2. В разделе Масштаб и разметка установите значение масштаба строго на 100%.
  3. Выполните выход из системы Windows или перезагрузите ПК, чтобы изменения вступили в силу для всех процессов.

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

Способ 3. Переопределение масштабирования в свойствах ярлыка 1С

В случаях, когда физический монитор имеет высокое разрешение (4K или Full HD на небольшой диагонали) и работать при системном масштабе 100% невозможно, настроим переопределение работы с DPI для самого исполняемого файла 1С.

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

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

Иногда искаженная геометрия «залипает» в системной базе данных для конкретного пользователя. Чтобы избавиться от накопленной ошибки без полной очистки общего кэша, выполним очистку пользовательских настроек:

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

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

← На главную