Как при запуске 1С автоматически открывать нужную подсистему для пользователя в интерфейсе 'Такси'?

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

Часто возникает задача повысить удобство работы пользователей, настроив для них индивидуальное начальное окружение в 1С. Например, менеджер по продажам должен при запуске программы сразу видеть подсистему "Продажи", а специалист по закупкам — "Закупки". В старых режимах интерфейса это решалось одной строкой кода, но в современном интерфейсе "Такси" есть свои особенности. Разберем, как реализовать такую функциональность.

Проанализируем ситуацию: у нас есть самописная конфигурация без Библиотеки стандартных подсистем (БСП), и нам нужно, чтобы для разных пользователей при старте открывались разные разделы (подсистемы). Метод, который работал для интерфейса версии 8.2, в "Такси" не дает ожидаемого результата.


// Этот код работал в режиме совместимости с версией 8.2, 
// но не работает в "Такси" напрямую
Процедура ПриНачалеРаботыСистемы()
    ПерейтиПоНавигационнойСсылке("e1cib/navigationpoint/МояПодсистема");
КонецПроцедуры

Рассмотрим несколько способов решения этой задачи в интерфейсе "Такси", от прямого до альтернативных, но не менее эффективных.

Решение 1: Корректное использование навигационных ссылок в "Такси"

Основная проблема, из-за которой вызов ПерейтиПоНавигационнойСсылке() в процедуре ПриНачалеРаботыСистемы() может не сработать, заключается в жизненном цикле открытия форм в "Такси". Часто сначала исполняется код в модуле приложения, а уже потом формируется и отображается начальная страница (рабочий стол). В результате, рабочий стол просто "перекрывает" открытую по ссылке подсистему, и пользователь ее не видит.

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

Рассмотрим по шагам:

  1. В модуле управляемого приложения, в процедуре ПриНачалеРаботыСистемы(), определим, какую подсистему нужно открыть для текущего пользователя. Логику можно построить на основе ролей пользователя, его настроек или других критериев.

  2. Вместо прямого вызова перехода, подключим однократный обработчик ожидания с минимальным интервалом.

  3. Сам переход по ссылке вынесем в экспортную процедуру, которую и будет вызывать обработчик ожидания.

Посмотрим на пример кода:

Сначала изменим модуль управляемого приложения.


&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
    
    // Здесь ваша логика определения нужной подсистемы для пользователя.
    // Для примера, предположим, что мы определили, что нужно открыть "Продажи".
    ИмяПодсистемы = "Продажи";
    
    // Создаем описание оповещения для обработчика ожидания.
    // Первый параметр - имя экспортной процедуры, которую нужно вызвать.
    // Второй параметр - модуль, где эта процедура находится (в данном случае этот же модуль).
    // Третий параметр - данные, которые мы хотим передать в процедуру.
    ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьНужнуюПодсистемуПослеЗапуска", ЭтотОбъект, ИмяПодсистемы);
    
    // Подключаем обработчик, который сработает один раз через 0.1 секунды.
    ПодключитьОбработчикОжидания(ОписаниеОповещения, 0.1, Истина);
    
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьНужнуюПодсистемуПослеЗапуска(ИмяПодсистемы) Экспорт
    
    // Формируем навигационную ссылку
    НавигационнаяСсылка = "e1cib/navigationpoint/" + ИмяПодсистемы;
    
    // И выполняем переход
    ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
    
КонецПроцедуры

Этот подход является наиболее близким к исходному запросу — он программно открывает нужную подсистему в виде отдельной закладки, имитируя нажатие на соответствующую кнопку в панели разделов.

Решение 2: Настройка начальной страницы (рабочего стола)

Парадигма интерфейса "Такси" предполагает, что основной рабочей областью является начальная страница (или рабочий стол). Вместо того чтобы заставлять пользователя переключаться между вкладками, можно сконфигурировать его рабочий стол так, чтобы он содержал все необходимые инструменты из нужной подсистемы. Это более нативный для "Такси" подход.

Подход А: Настройка через роли в конфигураторе

Этот способ не требует программирования и идеально подходит, когда пользователи четко разделены по ролям.

  1. Создайте в конфигураторе одну или несколько общих форм, которые будут служить рабочими столами. Например, форма "РабочийСтолПродажника" и "РабочийСтолЗакупщика".
  2. Наполните эти формы нужными элементами: списками документов, отчетами, командами для создания новых объектов. Вы можете разместить на форме несколько колонок для удобства.
  3. Откройте нужную роль в дереве конфигурации (например, роль "МенеджерПоПродажам").
  4. В палитре свойств роли найдите свойство "Начальная страница".
  5. Нажмите на кнопку выбора и укажите созданную вами общую форму в качестве рабочего стола для этой роли.

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

Подход Б: Программное управление настройками рабочего стола

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

  1. Администратор или сам пользователь настраивает свой рабочий стол в режиме 1С:Предприятие так, как ему удобно.
  2. Эти настройки можно сохранить (например, с помощью объекта ХранилищеСистемныхНастроек).
  3. При старте системы для другого пользователя можно программно загружать для него один из сохраненных "эталонных" вариантов настроек.

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

Решение 3: Создание универсальной общей формы-конструктора

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

Как это работает:

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

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

В итоге, выбор способа зависит от ваших задач. Если вам нужно просто "нажать" на кнопку подсистемы при старте — используйте первый метод с обработчиком ожидания. Если вы хотите создать удобное и современное рабочее место в духе "Такси" — выбирайте второй или третий метод, сфокусированный на настройке начальной страницы.

← На главную