Управление размером формы (ключ сохранение положения окна)

Бывают ситуации когда форма открывается не в том размере, который ожидаешь и появляются скроллы слева и справа. Чтобы восстановить положение нужно поработать мышкой или нажать волшебное сочетание клавиш - Alt + Shift + R (восстановить положение окна).

Это происходит из-за того, что форма по умолчанию запоминает свои размеры при закрытии и восстанавливает их при открытии. Но, например, в пошаговых помощниках конечное состояние формы сильно отличается от начального. На таких формах часто используют Страницы и на каждой странице набор реквизитов разный.

По создании формы размер подстраивается под видимые в текущий момент реквизиты. Если позже эти реквизиты изменятся, например, ПриОткрытии или ПриЗагрузкеПользовательскихДанных, то форма в каких-то случаях оставляет свой старый размер и реквизиты не помещаются. С простыми формами платформа справляется хорошо. А вот на сложных такой эффект проявляется и форма открывается либо меньше, либо больше чем нужно.

Чтобы этого избежать, следует управлять специальным свойством формы - КлючСохраненияПоложенияОкна. В разрезе этих ключей хранится размер и положение окна. При управлении формой следует менять этот реквизит. Форма в этом случае будет восстанавливать (или устанавливать новый) размер под текущий набор реквизитов для этого ключа. Затем при открытии формы мы укажем нужный нам ключ и форма построится корректно.

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

Пример кода:

```

&НаКлиентеНаСервереБезКонтекста Процедура УправлениеФормой(Форма, Шаг)

Элементы = Форма.Элементы;

Если Шаг = 1 Тогда

Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаВход; Элементы.СтраницаВход.Видимость = Истина; Элементы.СтраницаРеквизиты.Видимость = Ложь; Элементы.СтраницаУспешно.Видимость = Ложь;

ИначеЕсли Шаг = 2 Тогда

Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРеквизиты; Элементы.СтраницаВход.Видимость = Ложь; Элементы.СтраницаРеквизиты.Видимость = Истина; Элементы.СтраницаУспешно.Видимость = Ложь; Иначе

Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаУспешно; Элементы.СтраницаВход.Видимость = Ложь; Элементы.СтраницаРеквизиты.Видимость = Ложь; Элементы.СтраницаУспешно.Видимость = Истина;

КонецЕсли;

Форма.КлючСохраненияПоложенияОкна = СтрШаблон("СостояниеФормыШаг%1", Шаг);

КонецПроцедуры ```

Обратить внимание следует на: Форма.КлючСохраненияПоложенияОкна = СтрШаблон("СостояниеФормыШаг%1", Шаг);

repost

218

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь