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