Как программно установить свойство формы "Сохранять настройки окна" и открыть форму 1С во весь экран?

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

При работе с платформой 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, считаются крайне ненадежными и имеют ряд существенных недостатков:

  1. Нестабильность: Они могут работать нестабильно в различных операционных системах, версиях платформы или при изменениях в раскладке клавиатуры.
  2. Зависимость от фокуса: Для успешного выполнения команды окно должно быть активно и иметь фокус ввода. Если фокус перейдет на другое окно, команда может быть отправлена не туда, куда ожидалось.
  3. Языковые особенности: Буква, соответствующая пункту меню "Развернуть", может отличаться в разных языковых версиях Windows.
  4. Проблемы с безопасностью и правами: Использование COM-объектов может быть ограничено политиками безопасности или пользовательскими правами.
  5. Сложность отладки: Отладка такого кода затруднительна, а ошибки часто носят невоспроизводимый характер.

Таким образом, мы категорически не рекомендуем использовать WScript.Shell.SendKeys для достижения этой цели в продуктивных системах, так как это может привести к непредсказуемому поведению и снижению стабильности приложения.

Пользовательский режим: Ctrl+Shift+~ (тильда или "ё")

В пользовательском режиме клиентского приложения 1С существует полезная комбинация клавиш Ctrl+Shift+~ (тильда или "ё"), которая позволяет развернуть содержимое рабочего окна 1С на весь экран, скрыв лишние панели (например, панель разделов, панель инструментов). Это удобный способ увеличить рабочую область для пользователя, но важно понимать, что это не программное действие. Эта команда затрагивает только отображение внутри клиентского приложения 1С, а не свойства отдельной формы или её окна. То есть, отдельная форма не становится "развернутой", просто общий интерфейс 1С переходит в полноэкранный режим.

Альтернативный подход: Изменение форм через расширения

Поскольку прямого программного управления свойствами форм нет, основным способом кастомизации и изменения поведения форм в типовых конфигурациях остается использование расширений. Мы можем заимствовать форму в расширение и затем интерактивно изменить её свойства.

  1. Заимствование формы: Открываем расширение, находим нужную форму в основной конфигурации, и через контекстное меню (обычно "Добавить в расширение") заимствуем её.
  2. Изменение свойства: Открываем заимствованную форму в редакторе расширения и устанавливаем флажок "Сохранять настройки окна" в свойствах формы.

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

Эти расхождения в опыте могут быть связаны с:

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

Важные нюансы и проблемы при работе с расширениями и их влияние на обновления

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

Суть проблемы при модификации форм в расширениях:

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

Конфликты при обновлении:

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

  1. Ручное адаптирование: Расширение может потребовать ручного вмешательства для адаптации к новой версии формы, в чем может помочь ИИ помощник обновления процедур и функций расширений. Это означает, что нам придется анализировать изменения в типовой форме и переносить их в нашу заимствованную форму в расширении, или, по крайней мере, убеждаться, что расширение продолжает работать корректно.
  2. "Слетание" путей к данным: В более ранних версиях платформы могли наблюдаться проблемы, когда после обновления или даже после использования команды обновления расширения формы, у элементов заимствованной формы "слетали" пути к данным. Это означало, что поля ввода, таблицы и другие элементы теряли связь со своими реквизитами, что приводило к ошибкам в работе формы. К счастью, сообщалось, что в версии платформы 8.3.15.1700 эта ошибка была исправлена, и механизм обновления стал более стабильным.
  3. Изменение типов данных или реквизитов: Если в основной конфигурации изменяются типы данных существующих реквизитов или добавляются/удаляются реквизиты, используемые в расширении, могут возникать конфликты. Например, если мы добавили в расширении элемент, привязанный к реквизиту формы, который был удален или переименован в типовой конфигурации, расширение перестанет работать.

Рекомендации по минимизации проблем при работе с расширениями:

Чтобы снизить головную боль при обновлениях, мы рекомендуем придерживаться следующих принципов:

  1. Предпочитайте программное добавление элементов: По возможности, старайтесь модифицировать управляемые формы программно внутри расширения, используя готовые функции. Это означает, что вместо интерактивного изменения заимствованной формы в дизайнере, мы можем добавлять реквизиты, команды и элементы формы, а также задавать их свойства непосредственно в модуле формы расширения. Такой подход часто более устойчив к изменениям в типовой конфигурации, поскольку мы не "замораживаем" всю структуру формы, а лишь точечно добавляем функционал.
  2. Используйте команду "Обновить расширение формы": Платформа предоставляет специальную команду для обновления расширения формы. Она предназначена для переноса изменений из расширяемой формы основной конфигурации в расширяющую форму в расширении. Это может помочь синхронизировать структуру формы после обновления. Однако всегда проверяйте результат работы этой команды, так как она не всегда может идеально разрешить все конфликты.
  3. Тестирование после обновлений: Всегда проводите тщательное тестирование и анализ расширений на наличие ошибок во всех формах, измененных расширениями, после каждого обновления типовой конфигурации. Это позволит оперативно выявить и устранить потенциальные проблемы.
  4. Минимализм в модификациях: Старайтесь вносить минимально необходимые изменения в заимствованные формы. Чем меньше мы изменяем оригинальную форму, тем меньше вероятность конфликтов при обновлениях.

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

В платформе 1С:Предприятие версии 8.3.23 (выпущенной в марте 2023 года) появилась новая полезная команда "Восстановить размеры", доступная по сочетанию клавиш Alt+Shift+R. Эта команда предназначена для сброса пользовательских настроек формы. Она восстанавливает не только положение и размер окна формы, но и установки по умолчанию для положения разделителей и размеров колонок всех таблиц формы.

Эта функция полезна для пользователей, которые хотят быстро сбросить свои индивидуальные настройки формы к исходному состоянию, заданному разработчиком. Однако, как и в случае с Ctrl+Shift+~, это пользовательское действие, а не программный механизм. Оно не даёт нам возможности программно контролировать принудительное развертывание формы на весь экран или устанавливать свойство "Сохранять настройки окна" из кода.

Заключение

Проанализировав доступные сведения и опыт коллег, мы можем сделать вывод, что прямого и надежного программного механизма для установки формы в развернутое на весь экран состояние или для управления свойством "Сохранять настройки окна" из кода платформы 1С:Предприятие на данный момент не существует. Основным путем кастомизации остается изменение форм в расширениях. Этот подход требует внимательности и понимания потенциальных конфликтов при обновлениях, хотя существуют рекомендации по их минимизации через программное добавление элементов и использование команды обновления расширений. Разработчикам приходится выбирать между удобством использования расширений и потенциальными сложностями при поддержке и обновлении системы.

← На главную