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