Встречались ли вы с ситуацией, когда у пользователя, особенно в старых конфигурациях вроде 1С:УПП, форма документа при первом открытии выглядит идеально, а при последующих — все элементы "съезжают", а сама форма не разворачивается на весь экран? Эта проблема часто встречается при работе с обычными формами на платформе 1С:Предприятие 8.3. Проанализируем причины и разберем по шагам, как это исправить.
Основная причина кроется в механизме сохранения пользовательских настроек положения и размеров окон. Иногда эти настройки повреждаются или некорректно применяются из-за системных особенностей, таких как масштабирование экрана. Давайте рассмотрим все способы решения, от самых простых для пользователя до более сложных для разработчика.
Прежде чем привлекать программиста, попросим пользователя выполнить несколько простых действий. Часто этого бывает достаточно.
/ClearCache не всегда удаляет все временные файлы. Более надежный способ — ручная очистка.
%appdata%, нажмите Enter. Вы попадете в папку AppData\Roaming.1C, а внутри нее — 1cv8.1cv8 вы увидите папки с длинными буквенно-цифровыми именами (это ID информационных баз). Удалите папку, соответствующую проблемной базе. Внимание: это сбросит все пользовательские настройки расположения окон и колонок для данной базы.%localappdata%\1C\1cv8.Для более аккуратного подхода, чтобы не удалять все настройки пользователя целиком, можно использовать специальные обработки, позволяющие выполнить просмотр, восстановление и очистку хранилища настроек более избирательно.
Обычные формы 1С очень чувствительны к настройкам операционной системы, особенно к масштабированию экрана.
Проверьте, чтобы на компьютере пользователя в параметрах экрана (Правый клик по рабочему столу -> "Параметры экрана") масштаб был установлен на 100%. Любое другое значение (125%, 150%) может приводить к некорректному расчету привязок и "разъезжающейся" форме. Если масштаб изменен, его нужно вернуть на 100% и перезайти в 1С. Стоит отметить, что если ваша цель — не исправить ошибку отображения, а добиться запуска 1С на полный экран без заголовка окна, для этого существуют специфические решения.
Если пользовательские методы не помогли, значит, проблема глубже. Разберем, что можно сделать в конфигураторе.
Поиск проблемного элемента
Часто причиной сбоя является один конкретный элемент или страница (вкладка) на форме. Выясним, какая именно:
Упростить диагностику и изменение свойств "на лету" можно с помощью специальных инструментов, таких как редактор форм в режиме предприятия.
После того как проблемная область найдена, откройте форму в конфигураторе. Попробуйте на этой вкладке немного сдвинуть любой элемент, а затем вернуть его на место и сохранить конфигурацию. Иногда даже такое незначительное изменение заставляет платформу пересчитать привязки корректно.
"Правильная" перекомпиляция
Существует известный нюанс, связанный с разрешением экрана. Привязки обычных форм могут "запоминать" разрешение, на котором конфигурация была сохранена в последний раз. Если вы сохраняете конфигурацию на мониторе с низким разрешением, у пользователей с высоким разрешением могут возникнуть проблемы.
Решение: Внесите любое незначительное изменение в проблемную форму (например, сдвиньте элемент на 1 пиксель) и сохраните конфигурацию на компьютере с заведомо большим разрешением экрана, чем у пользователя. Желательно использовать стандартное высокое разрешение (например, 1920x1080) и 100% масштаб.
Это надежный способ, который заставит 1С игнорировать сохраненные (и, возможно, поврежденные) пользовательские настройки для конкретной формы и всегда открывать ее так, как она задана в конфигураторе.
Для этого в модуль нужной формы, в процедуру-обработчик события ПередОткрытием или ПриОткрытии, нужно добавить всего одну строку кода.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Генерируем новый уникальный идентификатор для имени сохранения положения окна.
// Это заставит платформу игнорировать ранее сохраненные пользовательские настройки
// для этой формы и использовать настройки по умолчанию из конфигурации.
ЭтаФорма.ИмяСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
КонецПроцедуры
Этот код при каждом открытии присваивает форме новое, случайное имя для сохранения настроек. В результате платформа не может найти старые сохраненные настройки и вынуждена использовать "заводские" из конфигуратора. Можно добавить условие, чтобы этот код выполнялся только для конкретного пользователя, у которого возникает проблема. Для более сложных задач существуют и готовые решения для программного изменения форм в виде общих модулей и расширений.