В практике разработки на платформе 1С:Предприятие 8 при использовании обычных форм программисты часто сталкиваются с неприятным визуальным эффектом. Пользователь открывает документ или справочник, растягивает окно для удобства работы, закрывает его, а при повторном открытии видит странную картину: само окно сохранило свои увеличенные размеры, но все элементы внутри него (кнопки, табличные части, поля ввода) остались «сгруппированными» в левом верхнем углу, как будто форма имеет минимальный размер. При этом стоит пользователю хотя бы на пиксель изменить размер окна вручную или нажать кнопку «Восстановить положение окна», как интерфейс мгновенно «прыгает» на свои места и начинает отображаться корректно.
В данной статье мы подробно разберем, почему возникает этот эффект «залипания» интерфейса, проанализируем механизмы работы платформы с привязками и выясним, как окончательно победить эту проблему как со стороны разработчика, так и со стороны администратора системы.
Прежде чем приступать к исправлению, давайте проанализируем ситуацию и поймем физику процесса. В обычных формах 1С за расположение элементов отвечают привязки. Это правила, которые указывают системе, как должен вести себя край элемента (левый, правый, верхний или нижний) при изменении границ формы. Существует два основных фактора, приводящих к описанному сбою:
Как показала практика обсуждения на форуме, самым эффективным и быстрым способом является полный сброс старых привязок и передача управления платформе. Давайте разберем этот процесс по шагам.
Проанализируем алгоритм действий в Конфигураторе:
Ctrl + A.Важный нюанс: Механизм Автоправила заставляет платформу самостоятельно рассчитывать поведение элементов. Это отлично работает для простых и средних по сложности форм. Однако, если ваша форма содержит сложные вложенные панели с динамическим скрытием элементов, обязательно проверьте визуальное отображение после включения этой опции. Платформа может сгруппировать элементы не совсем так, как вы планировали изначально.
Если по каким-то причинам вы не можете использовать Автоправила (например, вам нужны уникальные ручные привязки, которые платформа не может рассчитать автоматически), можно применить программную хитрость. Мы заставим форму перерисовать содержимое, имитируя изменение размера пользователем в момент открытия.
Рассмотрим пример кода, который можно добавить в модуль формы в процедуру ПриОткрытии(). Мы немного изменим ширину формы и сразу вернем её в исходное состояние:
Процедура ПриОткрытии()
// Программный хак для форсирования пересчета привязок
ЭтаФорма.Ширина = ЭтаФорма.Ширина + 1;
ЭтаФорма.Ширина = ЭтаФорма.Ширина - 1;
КонецПроцедуры
Этот метод принудительно вызывает внутреннее событие пересчета координат всех дочерних объектов. Несмотря на то, что это выглядит как «костыль», данный способ часто спасает в ситуациях, когда стандартные механизмы отрисовки 1С дают сбой на современных мониторах с высоким разрешением.
Если проблема наблюдается только у конкретного пользователя на конкретной машине, а у остальных все в порядке, то причина, скорее всего, кроется в поврежденном кэше настроек окна. Проанализируем, как это исправить без изменения кода конфигурации.
Способ «мягкой» очистки:
Alt + - (минус).После этого действия платформа удалит запись о размерах этой формы из профиля пользователя. При следующем открытии форма примет тот размер, который задан разработчиком в Конфигураторе. В большинстве случаев это решает проблему «залипания».
Способ радикальной очистки кэша:
Если проблема массовая, системному администратору стоит рассмотреть возможность удаления папок с кэшем пользователя. Обычно они располагаются по пути %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8. Помните, что это действие сбросит настройки всех окон, списков и отчетов пользователя, поэтому использовать его нужно с осторожностью.
При проектировании обычных форм, чтобы избежать подобных проблем в будущем, рекомендуется придерживаться следующих правил:
МинимальнаяШирина или МинимальнаяВысота, убедитесь, что они не конфликтуют с размерами элементов, расположенных на ней.СохранятьПоложениеОкна в свойствах формы. Это гарантирует, что форма всегда будет открываться именно такой, какой вы её спроектировали.Подводя итог, можно сказать, что наиболее надежным решением является комбинация очистки старых привязок и включения Автоправил. Это минимизирует влияние человеческого фактора при расстановке координат и позволяет платформе 1С самостоятельно управлять интерфейсом, адаптируя его под текущее разрешение экрана пользователя.