При разработке решений на платформе 1С:Предприятие 8.3 с использованием обычных форм часто возникает задача обеспечить открытие формы с определенным, фиксированным размером. Однако, система 1С по умолчанию запоминает и восстанавливает пользовательские настройки размеров и положения окон для каждой формы. Это может привести к тому, что форма, которую вы хотите видеть определенным образом, открывается иначе, чем задумано. В этом материале мы подробно рассмотрим несколько эффективных способов, как установить размер формы при ее открытии и при этом игнорировать ранее сделанные пользователем изменения.
Один из наиболее распространенных и эффективных методов — это программная установка высоты и ширины формы. Ключевым моментом здесь является выбор правильного события формы для размещения вашего кода.
Почему именно ПриОткрытии(), а не ПередОткрытием()?
Мы выясним, что платформа 1С имеет определенный порядок выполнения событий формы и восстановления пользовательских настроек. Когда форма открывается, последовательность действий выглядит примерно так:
ПередОткрытием(). На этом этапе мы можем выполнить предварительную инициализацию, но изменять размеры формы для перекрытия пользовательских настроек здесь не рекомендуется.ПередОткрытием() система 1С автоматически восстанавливает все настройки формы, сохраненные для текущего пользователя. Это включает в себя размер окна, его положение на экране, ширину колонок таблиц, видимость элементов и другие параметры. Если мы установили размеры в ПередОткрытием(), они будут тут же перезаписаны пользовательскими настройками.ПриОткрытии(). Это идеальный момент для окончательной настройки формы, в том числе для установки ее размера, если мы хотим, чтобы эти настройки игнорировали пользовательские.Таким образом, устанавливая значения свойств Высота и Ширина в процедуре ПриОткрытии(), мы гарантируем, что наши программные значения будут применены после того, как система восстановит пользовательские настройки, тем самым перекрывая их.
Рассмотрим пример кода:
Процедура ПриОткрытии(Отказ)
// Устанавливаем желаемую высоту формы в пикселях
ЭтаФорма.Высота = 600;
// Устанавливаем желаемую ширину формы в пикселях
ЭтаФорма.Ширина = 800;
КонецПроцедуры
В этом примере, при каждом открытии формы, ее высота будет принудительно установлена в 600 пикселей, а ширина — в 800 пикселей, независимо от того, какие размеры пользователь устанавливал ранее или какие настройки были сохранены в его профиле.
Для версий платформы 1С:Предприятие 8.3 и выше существует более простой и надежный способ полностью игнорировать пользовательские настройки размера и положения формы. Мы можем явно указать системе не сохранять и не восстанавливать эти параметры для конкретной формы.
Как это сделать?
СохранятьНастройкиОкна).Когда флажок «Сохранять настройки окна» снят, платформа 1С прекращает автоматически сохранять и восстанавливать пользовательские настройки для этой формы. Это означает, что при каждом открытии формы она будет вести себя так, как будто никаких пользовательских настроек не было сохранено. В таком случае, мы можем спокойно задавать Высота и Ширина формы в процедуре ПриОткрытии(), и эти значения всегда будут применяться без конфликтов с сохраненными пользовательскими данными.
Это особенно полезно, если мы хотим, чтобы форма всегда открывалась в определенном "стандартном" размере, и не хотим, чтобы действия пользователя влияли на это поведение при последующих открытиях. Например, если форма прибавляла высоту, но потом в коде мы пытались ее уменьшить, и это не работало из-за сохранения пользовательских настроек, снятие этой галки решит проблему.
Еще один интересный метод для управления поведением сохранения настроек формы — это использование свойства КлючСохраненияПоложенияОкна. Это свойство позволяет нам указать уникальный идентификатор для сохранения настроек конкретного экземпляра формы.
Как это работает?
Если мы присвоим свойству КлючСохраненияПоложенияОкна новый уникальный идентификатор каждый раз при открытии формы, то система 1С будет считать, что это совершенно "новая" форма с точки зрения сохранения настроек. Она не сможет найти ранее сохраненные настройки по этому "ключу" и, соответственно, не будет восстанавливать их. Также она не будет сохранять новые настройки, так как при следующем открытии будет использован другой уникальный ключ.
Этот подход полезен, когда нам нужно однократно открыть форму со стандартными параметрами, не влияя на постоянные настройки пользователя, или когда мы открываем форму, которая является, по сути, "временной" или "диалоговой", и ее положение/размер не должны сохраняться.
Рассмотрим пример кода, который обычно размещается в процедуре ПередОткрытием():
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Генерируем новый уникальный идентификатор
ЭтаФорма.КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор;
// После этого можно установить высоту и ширину,
// и они не будут перекрываться пользовательскими настройками
// для этого открытия.
// Если требуется, чтобы пользовательские настройки не сохранялись
// ВООБЩЕ для этой формы, то лучше использовать метод 2.
// Но если цель только предотвратить восстановление для текущего открытия,
// и не сохранять для него новые настройки, то этот метод подходит.
// Пример установки размеров (можно здесь или в ПриОткрытии):
// ЭтаФорма.Высота = 650;
// ЭтаФорма.Ширина = 900;
КонецПроцедуры
Используя этот метод, мы эффективно "обманываем" систему 1С, заставляя ее думать, что это уникальная форма, для которой нет сохраненных настроек, и не требуется их сохранять для будущего.
Иногда задача заключается не просто в установке конкретных размеров, а в том, чтобы форма всегда открывалась на весь экран, то есть в максимально развернутом состоянии. Для этого в 1С предусмотрено специальное свойство СпособОтображенияОкна.
Как это применить?
Для открытия формы в максимизированном режиме нам нужно получить объект формы и установить его свойство СпособОтображенияОкна в значение ВариантСпособаОтображенияОкна.Максимизированное. Это можно сделать как при создании новой формы, так и при модификации существующей.
Рассмотрим пример, когда мы программно получаем и открываем форму, сразу устанавливая ее в максимизированное состояние:
// Предположим, что "Источник" - это объект,
// от которого мы хотим получить форму (например, ссылка на справочник или документ)
НоваяФорма = Источник.ПолучитьФорму();
// Устанавливаем способ отображения окна как максимизированный
НоваяФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
// Открываем форму
НоваяФорма.Открыть();
Если же мы хотим, чтобы форма, которая уже является текущей (ЭтаФорма), перешла в максимизированное состояние при открытии, то мы можем использовать следующий код в процедуре ПриОткрытии():
Процедура ПриОткрытии(Отказ)
// Устанавливаем способ отображения текущей формы как максимизированный
ЭтаФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
КонецПроцедуры
Этот метод гарантирует, что форма всегда будет открываться на весь экран, независимо от предыдущих действий пользователя по изменению ее размеров.
Мы подробно рассмотрели различные подходы к установке размера обычной формы при ее открытии в 1С, с особым акцентом на игнорирование пользовательских настроек. В зависимости от ваших конкретных требований, вы можете выбрать один или комбинацию этих методов:
ЭтаФорма.Высота и ЭтаФорма.Ширина в процедуре ПриОткрытии().КлючСохраненияПоложенияОкна новый уникальный идентификатор в ПередОткрытием().СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное.Выбирая подходящий метод, мы сможем обеспечить предсказуемое и управляемое поведение наших форм в 1С, повышая удобство работы пользователей и единообразие интерфейса.