Разработка интерфейсов на обычных формах в «1С:Предприятие 8» часто преподносит сюрпризы, связанные с механизмом отрисовки элементов. Типичная ситуация: программист использует встроенное свойство Свертка для динамического управления пространством формы, но вместо ожидаемого скрытия или схлопывания панели, она просто «зависает», становится недоступной или отображается пустым пятном. В этой статье мы подробно разберем причины такого поведения, проанализируем влияние привязок и выясним, как правильно работать с сохранением настроек окна, чтобы избежать интерфейсных багов.
В обычных формах для управления автоматическим изменением размера элементов управления используется перечисление РежимСверткиЭлементаУправления. Предполагается, что при установке этого свойства панель должна компактно прижиматься к одному из краев формы или соседних элементов. Рассмотрим стандартный код, который часто используют разработчики:
// Пример разворачивания панели
ЭлементыФормы.ПанельНаличнаяОплата.Свертка = РежимСверткиЭлементаУправления.Нет;
Однако на практике мы сталкиваемся с тем, что форма «запоминает» свое предыдущее состояние, и при попытке программно изменить режим свертки координаты элементов рассчитываются неверно. Панель может физически остаться на форме, но иметь нулевую высоту или быть перекрытой другими объектами из-за конфликта автоматических расчетов платформы.
Проанализируем первую и самую распространенную причину — неправильно настроенные привязки (Anchors). В обычных формах каждый элемент жестко или гибко связан с границами формы или другими элементами. Если у панели, которую мы пытаемся свернуть, установлены противоречивые привязки, система не сможет корректно пересчитать ее положение.
Рассмотрим основные правила настройки привязок для сворачиваемых панелей:
Как показывает практика, даже при идеальных привязках проблема может сохраняться. Выясним причину: платформа 1С сохраняет настройки каждого окна (размер, положение, состояние панелей) в специальный кэш пользователя (файлы настроек в профиле на диске). При повторном открытии формы 1С пытается применить старые координаты к измененной программно форме, что и приводит к визуальным артефактам.
Чтобы заставить систему игнорировать «кривой» кэш, мы можем использовать свойство формы КлючСохраненияПоложенияОкна. Рассмотрим пример решения, которое помогает моментально очистить влияние старых настроек:
Процедура ПриОткрытии()
// Генерация нового ключа при каждом открытии заставляет форму игнорировать кэш
КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
КонецПроцедуры
Важное предостережение: Постоянное использование Новый УникальныйИдентификатор() — это «костыль», который имеет серьезный побочный эффект. Каждый такой идентификатор создает новую запись в файлах настроек пользователя (например, в v8info.lst). Со временем это приводит к «замусориванию» профиля пользователя, увеличению объема папки с кэшем и замедлению работы программы.
Вместо того чтобы генерировать случайный ключ при каждом входе, разберем более профессиональный подход. Мы можем изменять ключ сохранения только тогда, когда мы действительно внесли изменения в структуру формы. Рассмотрим пример:
Процедура ПриОткрытии()
// Используем фиксированную строку.
// Если мы изменим ее на "Версия_2", настройки у всех пользователей сбросятся один раз.
КлючСохраненияПоложенияОкна = "Версия_Формы_1.01";
КонецПроцедуры
Этот метод позволяет пользователям сохранять удобные им размеры окна в рамках текущей сессии, но при обновлении конфигурации или исправлении бага с панелями вы просто меняете номер версии в коде, и интерфейс «оздоравливается» у всей базы пользователей одновременно.
Если штатный механизм Свертка продолжает работать нестабильно (что не редкость для сложных форм с множеством вложенных панелей), проанализируем альтернативный алгоритм управления видимостью:
РежимСверткиЭлементаУправления, используйте прямое управление видимостью: ЭлементыФормы.Панель.Видимость = Ложь;.УстановитьГраницы().Подводя итог, можно сказать, что проблема «недоступности» панели при сворачивании — это конфликт между программным изменением свойств и сохраненным состоянием в профиле пользователя. Сочетание корректных привязок и грамотного управления свойством КлючСохраненияПоложенияОкна позволяет полностью устранить эти неприятные эффекты в обычных формах 1С.