При разработке конфигураций на платформе 1С:Предприятие часто возникает задача, когда при переключении на определенную подсистему мы хотим, чтобы на рабочем столе сразу отображалась какая-либо форма — например, форма списка документов, отчетов или специализированное рабочее место. Это значительно улучшает удобство использования и эргономику приложения, предоставляя пользователю мгновенный доступ к необходимому функционалу без дополнительных кликов.
В данной статье мы подробно рассмотрим, как реализовать такую функциональность для управляемых форм в 1С:Предприятии, учитывая различные версии платформы.
Для современных версий платформы 1С:Предприятие, начиная с версии 8.3.22.1704, разработчики существенно упростили решение этой задачи, добавив специальное свойство для подсистем. Это самый простой и рекомендуемый способ, который работает в интерфейсе "Такси" и в веб-клиенте.
ОбщаяФорма.ФормаСписка1, форму списка справочника, документа или отчета. Мы можем добавить эту команду через окно настройки командного интерфейса конфигурации.Для выбранной подсистемы в конфигураторе мы переходим к её свойствам. Среди свойств мы найдем флажок "Подсистема с одной командой". Мы должны установить этот флажок в положение "Истина".
Что это дает? Когда этот флажок установлен и в подсистеме присутствует только одна команда, платформа автоматически распознает намерение разработчика. При выборе данной подсистемы в пользовательском интерфейсе (например, в панели разделов интерфейса "Такси") платформа не будет отображать список команд подсистемы, а немедленно выполнит единственную команду, тем самым открыв ассоциированную с ней форму.
Этот подход является наиболее элегантным и поддерживаемым платформой, поскольку он не требует написания кода и полностью использует встроенные возможности 1С:Предприятия.
Если мы работаем с более ранними версиями платформы 1С:Предприятие (до 8.3.22) или наш сценарий требует более гибкого программного управления, мы можем использовать метод глобального контекста ОткрытьФорму(). Главная задача здесь — заставить форму открыться в текущей рабочей области, а не в новой вкладке или отдельном окне.
Метод ОткрытьФорму() является основным инструментом для программного открытия форм в 1С:Предприятии. Его синтаксис позволяет указывать различные параметры, влияющие на поведение открываемой формы.
Рассмотрим базовый синтаксис:
ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно, РежимОткрытияОкна, ОписаниеОповещенияОЗакрытии, ИдентификаторМодальногоОкна);
Для нашей задачи ключевыми параметрами будут ИмяФормы и Окно.
Для того чтобы форма открывалась в рабочей области основного окна, а не в новой вкладке или отдельном окне, в ранних версиях платформы часто применяли специфические подходы. Один из таких подходов, как мы видим из обсуждения, заключался в передаче ссылки на главное окно приложения:
ОткрытьФорму("ОбщаяФорма.ФормаСписка1",,,,ПолучитьОкна()[0]);
Давайте разберем этот код подробнее:
"ОбщаяФорма.ФормаСписка1": Это полное имя формы, которую мы хотим открыть. Мы должны заменить его на фактическое имя нашей формы.,,,: Эти параметры соответствуют Параметры, Владелец, Уникальность, которые в данном случае не используются или принимают значения по умолчанию.ПолучитьОкна()[0]: Это часть, которая направляет форму в конкретное окно. Функция ПолучитьОкна() возвращает массив всех открытых окон приложения. [0] в данном контексте обычно используется для ссылки на главное (первое) окно приложения. Этот подход является своего рода "хаком" и может быть чувствителен к контексту вызова и режиму работы клиента.Этот код необходимо разместить в таком месте, чтобы он выполнялся при старте системы или при переходе на подсистему. Наиболее подходящие места:
ПриНачалеРаботыСистемы. Этот вариант гарантирует, что форма откроется сразу при запуске приложения, если подсистема является начальной страницей. Однако, если требуется открытие формы именно при переключении на подсистему в процессе работы, этот вариант может быть менее подходящим, так как форма откроется один раз при старте.
// В модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
// Мы можем добавить условие, чтобы форма открывалась только при определенных обстоятельствах
// Например, если текущий пользователь имеет определенные права
// Или если подсистема, к которой относится эта форма, активна
// Однако, для простоты примера, мы откроем форму безусловно.
ОткрытьФорму("ОбщаяФорма.ФормаСписка1",,,,ПолучитьОкна()[0]);
КонецПроцедуры
Из "Данных поиска" мы видим, что важную роль играют параметры РежимОткрытияОкна и свойство формы РежимРабочегоСтола.
РежимОткрытияОкна: Этот параметр метода ОткрытьФорму() определяет, как будет открыта форма.
Независимый: При использовании интерфейса "Такси" или "Формы в закладках" это значение может способствовать открытию формы в рабочей области основного окна.ВОтдельномОкне: Форма всегда будет открываться в новом, независимом окне.ПолучитьОкна()[0], чтобы найти оптимальное поведение для нашей версии платформы и режима интерфейса.
РежимРабочегоСтола: Это свойство формы (не метода ОткрытьФорму()) при значении "Истина" позволяет форме открываться в режиме рабочего стола.
Форма в режиме рабочего стола имеет следующие особенности:
РежимРабочегоСтола = Истина может быть полезно для создания специализированных рабочих мест, таких как рабочее место кассира, где форма должна занимать всю доступную площадь и не иметь стандартных элементов управления окна. Однако, это может быть избыточным для простой задачи открытия формы при переключении на подсистему.
Мы проанализируем несколько дополнительных моментов, которые помогут нам в работе с подсистемами и формами:
Подсистемы формируют глобальный командный интерфейс конфигурации. Мы должны правильно настроить командный интерфейс подсистемы, чтобы команды открытия форм были доступны пользователям. В конфигураторе мы можем перейти к свойствам подсистемы и настроить состав команд, которые будут видны в панели навигации и панели действий. Если команда не видна в командном интерфейсе, пользователь не сможет её выбрать. Для удобной настройки интерфейса под нужды конечных пользователей можно использовать расширение для создания настраиваемых разделов и выноса панелей на рабочий стол.
Если открываемая форма требует параметров при открытии (например, идентификатор элемента, отбор, начальные значения), мы должны указывать их в наборе параметров формы, передаваемом в метод ОткрытьФорму(). Это делается через второй параметр метода:
// Создадим структуру для параметров
ПараметрыФормы = Новый Структура("Ключ", ЗначениеКлюча);
ОткрытьФорму("Справочник.МойСправочник.ФормаЭлемента", ПараметрыФормы, ...);
Рабочая область начальной страницы также может быть настроена для отображения определенных форм. Это другой механизм, отличный от открытия формы при выборе подсистемы, но он позволяет аналогичным образом представлять пользователю информацию сразу при старте приложения. Мы можем указать формы начальной страницы в настройках конфигурации. Для расширения стандартных возможностей начальной страницы можно использовать инструмент для добавления любых форм конфигурации на рабочий стол.
Мы не рекомендуем создавать подсистемы с уровнем вложенности более двух. Чрезмерная вложенность может усложнить читаемость интерфейса, сделать навигацию громоздкой и неочевидной для пользователя.
Общие формы — это формы, которые не привязаны к конкретным объектам метаданных (справочникам, документам и т.д.). Их можно использовать для создания любых вспомогательных или специализированных интерфейсов. При открытии общей формы мы всегда указываем её полное имя: "ОбщаяФорма.ИмяОбщейФормы".
Таким образом, мы видим, что задача по автоматическому открытию формы при выборе подсистемы имеет хорошо проработанные решения в платформе 1С:Предприятие. Для новых версий платформы достаточно использовать галочку "Подсистема с одной командой", что значительно упрощает разработку. Для более ранних версий или специфических сценариев мы всегда можем прибегнуть к программному открытию форм, тщательно настраивая параметры метода ОткрытьФорму() и учитывая особенности работы интерфейса.