Почему "съезжают" элементы на форме после ее закрытия в развернутом виде и как это исправить?

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

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

Выясняем причину: влияние масштаба экрана (DPI)

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

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

Таким образом, корень зла — это сохранение конфигурации на машине с нестандартным системным масштабом.

Решение 1: Корректировка форм в конфигураторе (рекомендуемый способ)

Это самый правильный и надежный способ, который устраняет причину проблемы, а не ее симптомы. Задача — "пересохранить" все проблемные формы в "правильных" условиях. Разберем по шагам, что нужно сделать.

  1. Настройте окружение. Найдите компьютер, на котором будете вносить изменения. Зайдите в параметры экрана Windows (Параметры -> Система -> Дисплей) и убедитесь, что в разделе "Масштаб и разметка" установлено значение 100%. Это критически важный шаг.
  2. Откройте конфигуратор. Запустите проблемную базу в режиме конфигуратора на компьютере с настроенным масштабом.
  3. "Передерните" формы. Найдите в дереве конфигурации все формы, с которыми возникает проблема (например, формы документов "Заказ покупателя", "Реализация товаров и услуг" и т.д.). Откройте каждую из них.
  4. Внесите фиктивное изменение. Вам не нужно ничего кардинально менять. Достаточно совершить минимальное действие, чтобы платформа посчитала форму измененной. Например, выберите любой элемент на форме, сдвиньте его на один пиксель в любую сторону с помощью стрелок на клавиатуре, а затем верните обратно. Рядом с названием формы в конфигураторе появится звездочка (*), сигнализирующая о наличии изменений.
  5. Сохраните изменения. После "передергивания" всех проблемных форм сохраните конфигурацию базы данных (Конфигурация -> Обновить конфигурацию базы данных или F7).

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

Решение 2: Программные способы исправления

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

Сброс ключа сохранения положения окна

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

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

Посмотрим на пример:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

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

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

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

Решение 3: Пользовательские и административные методы

Эти способы можно рассматривать как временное решение или методы диагностики.

Очистка хранилища настроек

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

Выполнить очистку можно с помощью небольшой обработки со следующим кодом:


// Удаляет все сохраненные настройки внешнего вида форм для всех пользователей
// ВНИМАНИЕ: Пользователи потеряют свои индивидуальные настройки списков и форм
ХранилищеНастроекДанныхФорм.Удалить(Неопределено, Неопределено, Неопределено);

Более щадящий вариант — очистка локального кэша на компьютере конкретного пользователя. Для этого нужно закрыть 1С и удалить содержимое папок в профиле пользователя Windows, обычно расположенных по путям %AppData%\1C и %localappdata%\1C. Это сбросит многие локальные настройки, но часто помогает при ошибках отображения.

Изменение свойств формы в конфигураторе

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

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

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

← На главную