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

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

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

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

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

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

Пример кода:


&НаКлиентеНаСервереБезКонтекста 
Процедура УправлениеФормой(Форма, Шаг) 
  
 Элементы = Форма.Элементы; 
  
 Если Шаг = 1 Тогда  
   
  Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаВход; 
  Элементы.СтраницаВход.Видимость = Истина; 
  Элементы.СтраницаРеквизиты.Видимость = Ложь;
                Элементы.СтраницаУспешно.Видимость = Ложь; 
   
 ИначеЕсли Шаг = 2 Тогда 
   
  Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРеквизиты; 
  Элементы.СтраницаВход.Видимость = Ложь; 
  Элементы.СтраницаРеквизиты.Видимость = Истина;
                Элементы.СтраницаУспешно.Видимость = Ложь; 
 Иначе 
   
  Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаУспешно; 
  Элементы.СтраницаВход.Видимость = Ложь; 
  Элементы.СтраницаРеквизиты.Видимость = Ложь;
                Элементы.СтраницаУспешно.Видимость = Истина; 
 
 КонецЕсли; 
 
 Форма.КлючСохраненияПоложенияОкна = СтрШаблон("СостояниеФормыШаг%1", Шаг); 
  
КонецПроцедуры

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