При работе с платформой 1С:Предприятие 8.3 у многих разработчиков возникает необходимость динамически управлять поведением форм, в частности, устанавливать свойство "Сохранять настройки окна" или принудительно открывать формы на весь экран. Давайте рассмотрим эту проблему подробнее, проанализируем доступные методы и выясним, какие существуют ограничения и обходные пути.
Свойство формы "Сохранять настройки окна" является ключевым для управления пользовательским опытом в 1С. Если этот флажок установлен, платформа автоматически сохраняет такие параметры, как размер и положение окна формы, ширину колонок таблиц и расположение разделителей. При следующем открытии этой же формы все эти настройки будут восстановлены, что обеспечивает консистентность рабочего пространства для пользователя.
Если же флажок снят, то форма будет открываться с настройками по умолчанию или с теми, которые были заданы разработчиком при её создании. Важно понимать, что в этом случае ранее сохраненные пользовательские настройки для данной формы не удаляются системой, но просто игнорируются при открытии. Это может быть полезно, например, для форм-обработок или временных форм, где единообразный внешний вид важнее индивидуальных предпочтений пользователя.
Существует ли программный способ управления этим свойством?
К сожалению, прямой программный способ задать значение свойству формы "Сохранять настройки окна" в 1С отсутствует. Данное свойство доступно для интерактивного изменения только в редакторе формы конфигурации или расширения. Разработчики на форумах 1С, сталкиваясь с этой проблемой, подтверждают, что данный реквизит формы не доступен через программный интерфейс, например, в обработчике ПриСозданииНаСервере или любом другом модуле.
Мы не можем написать код, который динамически изменил бы это свойство в зависимости от условий выполнения программы, однако в некоторых случаях может помочь специальный редактор форм в режиме предприятия. Без подобных инструментов мы вынуждены прибегать к модификации самой формы.
Аналогично ситуации со свойством "Сохранять настройки окна", платформа 1С не предоставляет прямого метода или свойства формы для её программного разворачивания на весь экран. Это одно из распространенных заблуждений, с которым сталкиваются разработчики.
Почему свойства Ширина и Высота формы не работают для разворачивания на весь экран?
Мы можем попытаться задать свойства Ширина и Высота формы программно, используя, например, размеры экрана, полученные из системных параметров. Однако такой подход не приведет к корректному разворачиванию окна на весь экран, как мы привыкли в других приложениях. Причина кроется в том, что свойства Ширина и Высота формы в 1С задаются в "символах", а не в пикселях. Эти свойства в первую очередь влияют на масштабирование элементов внутри формы, определяя её предпочтительный размер при отображении, но не на размер самого окна приложения, в котором форма открывается.
Предположим, мы получаем размеры экрана в пикселях и пытаемся установить их форме. Платформа 1С преобразует эти значения в "символы" на основе системных шрифтов и настроек DPI, что в большинстве случаев не даст ожидаемого эффекта разворачивания окна по всей площади экрана.
Ненадежные обходные пути: WScript.Shell.SendKeys
В некоторых случаях для имитации пользовательских действий, таких как нажатие комбинаций клавиш (например, Alt+Пробел, затем 'Развернуть'), разработчики используют объект WScript.Shell и его метод SendKeys. Этот подход позволяет "отправить" нажимаемые клавиши в активное окно.
// Пример использования WScript.Shell.SendKeys (не рекомендуется для продакшн систем)
// Этот код работает только в Windows и имеет множество ограничений
Если ВРежимеКлиентскогоПриложения Тогда
Попытка
WShell = Новый COMОбъект("WScript.Shell");
// Открытие системного меню окна
WShell.SendKeys("% "); // Alt+Пробел
// Выбор пункта "Развернуть" (обычно 'x' или 'r' в зависимости от локали и версии ОС)
// Лучше использовать стрелки и Enter для универсальности, но это сложнее
WShell.SendKeys("x"); // Пример: 'x' для Expand/Развернуть в англ. ОС
// Для русской ОС это может быть 'р' или другое в зависимости от раскладки.
// Более универсально: WShell.SendKeys("{UP}{ENTER}") или комбинация стрелок
Исключение
Сообщить("Ошибка при попытке развернуть окно: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Однако методы, основанные на WScript.Shell.SendKeys, считаются крайне ненадежными и имеют ряд существенных недостатков:
Таким образом, мы категорически не рекомендуем использовать WScript.Shell.SendKeys для достижения этой цели в продуктивных системах, так как это может привести к непредсказуемому поведению и снижению стабильности приложения.
Пользовательский режим: Ctrl+Shift+~ (тильда или "ё")
В пользовательском режиме клиентского приложения 1С существует полезная комбинация клавиш Ctrl+Shift+~ (тильда или "ё"), которая позволяет развернуть содержимое рабочего окна 1С на весь экран, скрыв лишние панели (например, панель разделов, панель инструментов). Это удобный способ увеличить рабочую область для пользователя, но важно понимать, что это не программное действие. Эта команда затрагивает только отображение внутри клиентского приложения 1С, а не свойства отдельной формы или её окна. То есть, отдельная форма не становится "развернутой", просто общий интерфейс 1С переходит в полноэкранный режим.
Поскольку прямого программного управления свойствами форм нет, основным способом кастомизации и изменения поведения форм в типовых конфигурациях остается использование расширений. Мы можем заимствовать форму в расширение и затем интерактивно изменить её свойства.
Однако, как показала практика на форуме, мнения и опыт разработчиков по поводу этого подхода расходятся. Некоторые пользователи отмечают, что даже если в типовой форме флажок "Сохранять настройки окна" был снят, и они попытались установить его в расширении, свойство могло не сохраняться или не работать должным образом. Другие же утверждают, что у них этот метод работал корректно.
Эти расхождения в опыте могут быть связаны с:
Мы рекомендуем всегда тщательно тестировать изменения в расширениях, особенно при модификации свойств заимствованных объектов, чтобы убедиться в желаемом поведении.
Изменение типовых форм в расширениях, хотя и является мощным инструментом кастомизации, может привести к значительным сложностям при обновлении конфигурации. Давайте разберем эти проблемы подробнее.
Суть проблемы при модификации форм в расширениях:
Когда мы заимствуем форму в расширение и изменяем её, например, устанавливая флажок "Сохранять настройки окна" или добавляя новые элементы, платформа фиксирует визуальное представление этой формы в рамках расширения. Это означает, что расширение хранит "свою" версию формы.
Конфликты при обновлении:
Основная проблема возникает при выходе новых релизов типовой конфигурации. Если в обновлении разработчики типового решения вносят изменения в ту же форму, которую мы заимствовали в расширение, возникают следующие сложности:
Рекомендации по минимизации проблем при работе с расширениями:
Чтобы снизить головную боль при обновлениях, мы рекомендуем придерживаться следующих принципов:
В платформе 1С:Предприятие версии 8.3.23 (выпущенной в марте 2023 года) появилась новая полезная команда "Восстановить размеры", доступная по сочетанию клавиш Alt+Shift+R. Эта команда предназначена для сброса пользовательских настроек формы. Она восстанавливает не только положение и размер окна формы, но и установки по умолчанию для положения разделителей и размеров колонок всех таблиц формы.
Эта функция полезна для пользователей, которые хотят быстро сбросить свои индивидуальные настройки формы к исходному состоянию, заданному разработчиком. Однако, как и в случае с Ctrl+Shift+~, это пользовательское действие, а не программный механизм. Оно не даёт нам возможности программно контролировать принудительное развертывание формы на весь экран или устанавливать свойство "Сохранять настройки окна" из кода.
Проанализировав доступные сведения и опыт коллег, мы можем сделать вывод, что прямого и надежного программного механизма для установки формы в развернутое на весь экран состояние или для управления свойством "Сохранять настройки окна" из кода платформы 1С:Предприятие на данный момент не существует. Основным путем кастомизации остается изменение форм в расширениях. Этот подход требует внимательности и понимания потенциальных конфликтов при обновлениях, хотя существуют рекомендации по их минимизации через программное добавление элементов и использование команды обновления расширений. Разработчикам приходится выбирать между удобством использования расширений и потенциальными сложностями при поддержке и обновлении системы.