Многие пользователи и разработчики, работающие со старыми конфигурациями 1С на обычных формах, сталкиваются с неприятной проблемой. После обновления платформы, если развернуть любую форму на весь экран, а затем закрыть, при следующем открытии ее элементы отображаются некорректно: они "съезжают", накладываются друг на друга, как будто конфликтуют привязки. Стандартная функция "Восстановить положение окна" временно помогает, но проблема возвращается снова и снова. Давайте разберемся в причинах этого поведения и рассмотрим все доступные способы решения, от самых простых до программных.
Проанализируем ситуацию. Проблема чаще всего проявляется после обновления платформы и затрагивает доработанные в конфигураторе формы. Ключевая причина, подтвержденная опытом многих разработчиков, кроется в настройках масштабирования экрана Windows (DPI) на том компьютере, где в последний раз вносились изменения в конфигурацию.
Платформа 1С для обычных форм очень чувствительна к этому параметру. Если разработчик правил форму на мониторе с масштабом, отличным от стандартных 100% (например, 125% или 150%, что часто используется на ноутбуках или мониторах с высоким разрешением), то платформа сохраняет размеры и координаты элементов с учетом этого масштаба. Когда пользователь открывает эту же форму на компьютере со стандартным 100% масштабом, происходит конфликт: сохраненные пропорции не соответствуют текущим настройкам, что и приводит к визуальному хаосу на форме.
Таким образом, корень зла — это сохранение конфигурации на машине с нестандартным системным масштабом.
Это самый правильный и надежный способ, который устраняет причину проблемы, а не ее симптомы. Задача — "пересохранить" все проблемные формы в "правильных" условиях. Разберем по шагам, что нужно сделать.
После этой процедуры размеры и положения элементов будут сохранены корректно, и у всех пользователей, независимо от их локальных настроек, формы будут открываться правильно.
Если нет возможности исправить все формы в конфигураторе или нужно быстрое решение, можно прибегнуть к программным методам. Суть в том, чтобы при каждом открытии формы принудительно сбрасывать ее сохраненные (некорректные) настройки положения.
Платформа сохраняет положение и размеры окна для каждого пользователя, используя специальный ключ. Если мы будем каждый раз генерировать новый уникальный ключ при открытии формы, платформа не сможет найти старые настройки и будет открывать форму с параметрами по умолчанию.
Для этого в модуле проблемной формы, в процедуре-обработчике события ПередОткрытием(), нужно добавить одну строку кода.
Посмотрим на пример:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Генерируем новый уникальный идентификатор для ключа сохранения положения окна
// Это заставит платформу "забыть" старые некорректные размеры
ЭтаФорма.ИмяСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
КонецПроцедуры
Этот метод очень эффективен. Он не удаляет настройки полностью, а просто заставляет платформу их игнорировать при каждом новом открытии, что решает проблему "съехавших" элементов. Для более новых платформ (в основном для управляемых форм, но принцип тот же) используется свойство КлючСохраненияПоложенияОкна в событии ПриСозданииНаСервере.
Эти способы можно рассматривать как временное решение или методы диагностики.
Иногда проблема может быть связана с накопленными некорректными настройками в базе данных. Можно попробовать очистить их. Важно: этот способ удалит сохраненные настройки форм (ширину колонок, отборы и т.д.) для всех пользователей, поэтому используйте его с осторожностью.
Выполнить очистку можно с помощью небольшой обработки со следующим кодом:
// Удаляет все сохраненные настройки внешнего вида форм для всех пользователей
// ВНИМАНИЕ: Пользователи потеряют свои индивидуальные настройки списков и форм
ХранилищеНастроекДанныхФорм.Удалить(Неопределено, Неопределено, Неопределено);
Более щадящий вариант — очистка локального кэша на компьютере конкретного пользователя. Для этого нужно закрыть 1С и удалить содержимое папок в профиле пользователя Windows, обычно расположенных по путям %AppData%\1C и %localappdata%\1C. Это сбросит многие локальные настройки, но часто помогает при ошибках отображения.
В некоторых случаях могут помочь изменения свойств самой формы.
АвтоПравила (может находиться в группе "Сохранение данных"). Попробуйте снять эту галку. Это может повлиять на то, как платформа управляет сохранением настроек формы.Состояние окна с "Обычное" на "Свободное". Это может дать платформе больше гибкости при расчете размеров и положения окна.В заключение, отметим, что проблема с "разъезжающимися" обычными формами — это давняя особенность платформы, связанная с масштабированием экрана. Самым надежным и правильным решением является корректировка форм в конфигураторе при 100% масштабе Windows. Программные методы и очистка кэша являются хорошими инструментами для быстрой помощи пользователям, но не устраняют первопричину.