Как программно зафиксировать положение и состояние окна в 1С:Предприятие

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

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

Почему возникает проблема с положением окна?

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

Однако, если у пользователя сменилось разрешение экрана, или форма была закрыта в момент аварийного завершения работы системы, сохраненные параметры могут стать неактуальными или «выходить» за пределы текущей рабочей области. Из-за этого окно может отображаться некорректно.

Решение 1: Использование свойства ИмяСохраненияПоложенияОкна

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

Давайте посмотрим, как это реализовать на практике в модуле формы:


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

Этот метод позволяет «обнулить» историю положения окна для данной формы. Однако, будьте внимательны: при очень частом открытии форм это может привести к накоплению лишних записей в базе данных, поэтому используйте данный подход обдуманно.

Решение 2: Использование КлючСохраненияПоложенияОкна

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

Решение 3: Принудительное управление состоянием окна

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

Рассмотрим реализацию в процедуре ПриСозданииНаСервере или ПриОткрытии:


Процедура ПриОткрытии()
    // Принудительно разворачиваем окно при каждом открытии
    ЭтаФорма.СостояниеОкна = СостояниеОкна.Развернутое;
КонецПроцедуры

Использование этого метода позволяет игнорировать старые пользовательские настройки и обеспечивает единообразие интерфейса для всех пользователей, независимо от их предыдущих действий или разрешения экрана.

Рекомендации по диагностике и очистке настроек

Если проблема носит массовый характер или касается только конкретных пользователей, полезно провести очистку существующих настроек в системном хранилище:

  1. Проверьте права пользователя: не ограничена ли запись в хранилище настроек?
  2. Если настройки «залипли» в неправильном состоянии, можно удалить настройки конкретной формы через стандартные инструменты администратора или программно с помощью методов хранилища настроек.
  3. Избегайте использования методов вроде WSH.SendKeys для имитации нажатий клавиш — этот способ крайне ненадежен, зависит от операционной системы и может привести к непредсказуемым ошибкам, так как «нажатие» может быть перехвачено другим приложением.

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

← На главную