Часто возникает задача повысить удобство работы пользователей, настроив для них индивидуальное начальное окружение в 1С. Например, менеджер по продажам должен при запуске программы сразу видеть подсистему "Продажи", а специалист по закупкам — "Закупки". В старых режимах интерфейса это решалось одной строкой кода, но в современном интерфейсе "Такси" есть свои особенности. Разберем, как реализовать такую функциональность.
Проанализируем ситуацию: у нас есть самописная конфигурация без Библиотеки стандартных подсистем (БСП), и нам нужно, чтобы для разных пользователей при старте открывались разные разделы (подсистемы). Метод, который работал для интерфейса версии 8.2, в "Такси" не дает ожидаемого результата.
// Этот код работал в режиме совместимости с версией 8.2,
// но не работает в "Такси" напрямую
Процедура ПриНачалеРаботыСистемы()
ПерейтиПоНавигационнойСсылке("e1cib/navigationpoint/МояПодсистема");
КонецПроцедуры
Рассмотрим несколько способов решения этой задачи в интерфейсе "Такси", от прямого до альтернативных, но не менее эффективных.
Основная проблема, из-за которой вызов ПерейтиПоНавигационнойСсылке() в процедуре ПриНачалеРаботыСистемы() может не сработать, заключается в жизненном цикле открытия форм в "Такси". Часто сначала исполняется код в модуле приложения, а уже потом формируется и отображается начальная страница (рабочий стол). В результате, рабочий стол просто "перекрывает" открытую по ссылке подсистему, и пользователь ее не видит.
Чтобы обойти эту особенность, необходимо выполнить переход по навигационной ссылке с небольшой задержкой. Это даст интерфейсу время полностью инициализироваться. Идеальный инструмент для этого — обработчик ожидания.
Рассмотрим по шагам:
В модуле управляемого приложения, в процедуре ПриНачалеРаботыСистемы(), определим, какую подсистему нужно открыть для текущего пользователя. Логику можно построить на основе ролей пользователя, его настроек или других критериев.
Вместо прямого вызова перехода, подключим однократный обработчик ожидания с минимальным интервалом.
Сам переход по ссылке вынесем в экспортную процедуру, которую и будет вызывать обработчик ожидания.
Посмотрим на пример кода:
Сначала изменим модуль управляемого приложения.
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
// Здесь ваша логика определения нужной подсистемы для пользователя.
// Для примера, предположим, что мы определили, что нужно открыть "Продажи".
ИмяПодсистемы = "Продажи";
// Создаем описание оповещения для обработчика ожидания.
// Первый параметр - имя экспортной процедуры, которую нужно вызвать.
// Второй параметр - модуль, где эта процедура находится (в данном случае этот же модуль).
// Третий параметр - данные, которые мы хотим передать в процедуру.
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьНужнуюПодсистемуПослеЗапуска", ЭтотОбъект, ИмяПодсистемы);
// Подключаем обработчик, который сработает один раз через 0.1 секунды.
ПодключитьОбработчикОжидания(ОписаниеОповещения, 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНужнуюПодсистемуПослеЗапуска(ИмяПодсистемы) Экспорт
// Формируем навигационную ссылку
НавигационнаяСсылка = "e1cib/navigationpoint/" + ИмяПодсистемы;
// И выполняем переход
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
КонецПроцедуры
Этот подход является наиболее близким к исходному запросу — он программно открывает нужную подсистему в виде отдельной закладки, имитируя нажатие на соответствующую кнопку в панели разделов.
Парадигма интерфейса "Такси" предполагает, что основной рабочей областью является начальная страница (или рабочий стол). Вместо того чтобы заставлять пользователя переключаться между вкладками, можно сконфигурировать его рабочий стол так, чтобы он содержал все необходимые инструменты из нужной подсистемы. Это более нативный для "Такси" подход.
Подход А: Настройка через роли в конфигураторе
Этот способ не требует программирования и идеально подходит, когда пользователи четко разделены по ролям.
Теперь любой пользователь с этой ролью при запуске программы будет видеть настроенную вами форму вместо стандартной начальной страницы. Этот метод позволяет очень гибко и без кода управлять стартовым экраном для разных групп пользователей.
Подход Б: Программное управление настройками рабочего стола
Если нужна еще большая гибкость (например, настройки зависят не от роли, а от индивидуальных предпочтений), можно управлять настройками рабочего стола программно. Суть метода в следующем:
ХранилищеСистемныхНастроек).Этот способ сложнее в реализации, но дает максимальную гибкость. Он подходит для сложных систем, где требуется тонкая персональная настройка интерфейса.
Этот метод является развитием предыдущего и был предложен в обсуждении. Он заключается в создании одной сложной общей формы, которая будет служить рабочим столом для всех, но ее содержимое будет динамически меняться в зависимости от пользователя.
Как это работает:
ПриСозданииНаСервере, анализируются права и настройки текущего пользователя.Преимущество этого подхода в том, что вся логика по настройке интерфейса сосредоточена в одном месте, что упрощает поддержку. Недостаток — сложность разработки самой универсальной формы.
В итоге, выбор способа зависит от ваших задач. Если вам нужно просто "нажать" на кнопку подсистемы при старте — используйте первый метод с обработчиком ожидания. Если вы хотите создать удобное и современное рабочее место в духе "Такси" — выбирайте второй или третий метод, сфокусированный на настройке начальной страницы.