В процессе разработки интерфейса управляемого приложения часто возникает задача динамического изменения начальной страницы (рабочего стола). Стандартных настроек в конфигураторе не всегда достаточно, особенно когда состав отображаемых форм должен зависеть от подразделения пользователя, конкретных параметров сеанса или сложных условий, которые невозможно описать только набором ролей. В данной статье мы разберем несколько способов управления рабочим столом: от простых настроек видимости до глубокого программного управления через системные хранилища. Если штатных возможностей 1С недостаточно для реализации сложных условий, можно использовать платформу One RPA для роботизации действий и автоматизации рутинных операций в интерфейсе системы.
Прежде чем приступать к написанию кода, проанализируем штатные возможности платформы 1С. В конфигураторе существует специальный инструмент для настройки рабочего стола. Если ваша задача сводится к тому, чтобы показать бухгалтеру одну форму, а менеджеру — другую, это решение будет самым оптимальным.
Для настройки выполним следующие шаги:
Важно отметить, что этот механизм работает не только для форм обработок, но и для общих форм. Платформа автоматически сформирует интерфейс при запуске, основываясь на пересечении ролей текущего пользователя и настроек видимости. Если пользователю не доступна ни одна из форм в колонке, колонка просто не будет отображена, а оставшаяся растянется на весь экран.
Если логика подмены форм более сложная (например, зависит от того, в каком магазине сегодня работает продавец), нам потребуется программный подход. Основным инструментом здесь выступает объект НастройкиНачальнойСтраницы. Рассмотрим пошагово, как реализовать этот механизм, например, в модуле управляемого приложения или в расширении.
Проанализируем пример кода, который позволяет полностью переопределить состав начальной страницы:
// Создаем новый объект настроек
НастройкиНачальнойСтраницы = Новый НастройкиНачальнойСтраницы;
СоставФорм = Новый СоставФормНачальнойСтраницы;
// Добавляем нужную форму в левую колонку
// Вместо "Обработка.РабочееМесто.Форма.Форма" укажите полный путь к вашей форме
СоставФорм.ЛеваяКолонка.Добавить("Обработка.Расш1_РабочийСтол.Форма.Форма");
// Применяем состав к объекту настроек
НастройкиНачальнойСтраницы.УстановитьСоставФорм(СоставФорм);
// Сохраняем настройки в системное хранилище для текущего пользователя
ХранилищеСистемныхНастроек.Сохранить(
"Общее/НастройкиНачальнойСтраницы",
,
НастройкиНачальнойСтраницы
);
Выясним причину, по которой этот код может не сработать мгновенно. Если вы выполняете эти действия уже после того, как интерфейс был отрисован, изменения не вступят в силу до следующего сеанса. Чтобы применить их «на лету», необходимо вызвать метод ОбновитьИнтерфейс(). Однако будьте осторожны: этот метод вызывает полную перерисовку окон, что может привести к закрытию вспомогательных окон пользователя.
Объект СоставФормНачальнойСтраницы обладает двумя коллекциями: ЛеваяКолонка и ПраваяКолонка. Интересной особенностью является то, что программная настройка может изменять структуру страницы, заданную в метаданных.
Рассмотрим подробнее:
ЛеваяКолонка, начальная страница автоматически перестроится в одноколоночный режим.ТекущийВариантИнтерфейсаКлиентскогоПриложения) устанавливать одну колонку, а для широкоформатных — две.Иногда постоянная запись в ХранилищеСистемныхНастроек является избыточной. Существует альтернативный метод, который часто называют «Дашборд». Суть его заключается в следующем:
ПриСозданииНаСервере этой формы анализируются параметры сеанса или роли пользователя.ЭтотОбъект.Элементы.Этот метод работает быстрее и стабильнее, так как он не перезаписывает системные таблицы настроек и не требует вызова ОбновитьИнтерфейс(). В качестве альтернативного варианта создания интерактивного дашборда можно использовать готовое решение для адаптивного рабочего стола на базе SVG.
Важно понимать, в каком приоритете платформа 1С выбирает, что показать пользователю. Рассмотрим эту иерархию (от высшего к низшему):
ХранилищеСистемныхНастроек по ключу "Общее/НастройкиНачальнойСтраницы".Если вы один раз программно установили настройки через код, они будут «перекрывать» любые изменения, которые вы позже внесете в конфигураторе. Чтобы вернуть управление конфигуратору (например, при смене должности сотрудника), нужно явно очистить программные настройки:
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиНачальнойСтраницы", , ИмяПользователя);
Поскольку формы начальной страницы открываются ядром платформы автоматически при старте, мы не можем передать в них параметры напрямую через метод ОткрытьФорму(). Чтобы обеспечить взаимодействие, проанализируем следующие варианты:
ПриСозданииНаСервере.Оповестить(), но этот метод работает только на клиенте.Посмотрим на пример в мобильном клиенте. При разработке для мобильных устройств следует учитывать, что экран ограничен по ширине. Даже если вы настроите две колонки, мобильная платформа выстроит их в одну вертикальную ленту. Поэтому рекомендуется проверять тип клиента и для мобильных пользователей устанавливать максимально упрощенный состав форм, используя ПредставлениеПриложения() или СистемнаяИнформация.
Подводя итог, можно сказать, что наиболее гибким инструментом является сочетание НастройкиНачальнойСтраницы и ХранилищеСистемныхНастроек. Это позволяет создавать действительно персональные и функциональные рабочие места для каждого пользователя системы. Для просмотра и очистки системных параметров пригодится обработка для управления хранилищем настроек пользователей.