Как вернуть исходный размер управляемой формы после скрытия элементов?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Причина поведения платформы 1С

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

Однако обратный автоматический пересчет системного окна в сторону уменьшения при обычном изменении свойства Видимость на клиенте платформой не предусмотрен. Свойства формы Ширина и Высота задают лишь расчетные пропорции, и прямое программное управление ими на клиенте во время работы уже открытого окна не уменьшает внешнюю рамку.

Сброс сохраненных настроек окна при открытии

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

Рассмотрим вариант принудительного задания нового ключа сохранения окна в обработчике ПриСозданииНаСервере. В этом случае платформа не будет восстанавливать растянутые пользователем габариты:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Генерируем уникальный ключ, чтобы форма всегда открывалась с дефолтным размером
    КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КонецПроцедуры

Если требуется программно удалить уже сохраненные настройки конкретной формы из базы для текущего пользователя, применим работу с ХранилищеСистемныхНастроек:


&НаСервере
Процедура СброситьНастройкиОкнаФормы()
    ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
    
    // Формируем ключ объекта с учетом полного пути к форме
    КлючОбъекта = ЭтаФорма.ИмяФормы 
        + ?(ПустаяСтрока(ЭтаФорма.КлючНазначенияИспользования), "", "/" + ЭтаФорма.КлючНазначенияИспользования) 
        + "/Такси/НастройкиОкна";
        
    ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
    КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КонецПроцедуры

Важно понимать: манипуляции с ХранилищеСистемныхНастроек и КлючСохраненияПоложенияОкна влияют на форму только в момент ее инициализации на сервере. На уже отображенное на экране окно клиента эти команды мгновенного эффекта не оказывают.

Переоткрытие формы на клиенте

Если бизнес-логика требует обязательно восстановить компактный размер окна после завершения работы с динамическими полями, можно использовать переоткрытие формы. Разберем этот сценарий по шагам:

  1. Сохраняем текущие заполненные данные формы в структуру или временное хранилище.
  2. Закрываем текущее растянутое окно методом ЭтаФорма.Закрыть().
  3. Открываем форму заново через ОткрытьФорму, передав сохраненные параметры и сгенерировав новый КлючСохраненияПоложенияОкна.

Форма перерисуется заново с минимально возможными размерами без пустого пространства.

Интерфейсные решения без изменения размера окна

Чтобы избежать необходимости сброса геометрии и переоткрытия окон, рекомендуется проектировать интерфейс управляемой формы одним из следующих способов:

  1. Использование группы «Страницы» с невидимыми закладками.

    Создадим на форме группу вида Страницы и установим свойство ОтображениеЗакладок = ОтображениеЗакладок.НеОтображать. На первой странице разместим компактный состав полей, на второй — полный. Переключение реализуем установкой свойства Элементы.ГруппаСтраницы.ТекущаяСтраница. Это избавит интерфейс от неконтролируемых скачков геометрии.

  2. Свертываемые группы.

    Объединим дополнительные элементы в группу со свойством Поведение = ПоведениеОбычнойГруппы.Свертываемая. Программное переключение свойства Свернута (в значения Истина или Ложь) визуально скрывает элементы в компактную заголовочную панель, что является стандартным и привычным поведением для пользователей 1С:Предприятия.

  3. Настройка растягивания и полос прокрутки.

    Для формы можно установить свойство ВертикальнаяПрокрутка = ИспользоватьПриНеобходимости. У динамически скрываемых реквизитов и их групп следует отключить свойства РастягиватьПоГоризонтали и РастягиватьПоВертикали, а также задать ограничения АвтоМаксимальнаяВысота и АвтоМаксимальнаяШирина. Это минимизирует исходное увеличение формы.

  4. Вынос вспомогательных данных в отдельную форму.

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

← На главную