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

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

В процессе разработки корпоративных систем на платформе 1С часто возникает задача нормативного регулирования действий пользователей. Одним из наиболее эффективных инструментов является принудительное ознакомление сотрудников с инструкциями или регламентами непосредственно в интерфейсе программы. Рассмотрим подробно, как реализовать механизм, при котором форма подтверждения открывается автоматически при входе в систему и блокирует остальной функционал до тех пор, пока пользователь не поставит «галочку» о согласии.

Организация хранения данных о подтверждении

Прежде всего, нам необходимо место для хранения информации о том, кто и когда подтвердил свое ознакомление. Для этих целей идеально подходит Регистр сведений. Проанализируем структуру такого регистра. Мы рекомендуем создать непериодический регистр сведений СоглашенияПоРаботеСПрограммой со следующими реквизитами:

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

Точка входа: выбор правильного события модуля приложения

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

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


Процедура ПриНачалеРаботыСистемы()
    // Вызываем процедуру открытия формы ознакомления
    ПараметрыОткрытия = Новый Структура;
    ОткрытьФорму("Обработка.ПодтверждениеОбОзнакомленииСИнструкциями.Форма", ПараметрыОткрытия, , , , , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры

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

Проверка состояния согласия в форме обработки

Теперь проанализируем ситуацию, когда форма не должна открываться, если пользователь уже ставил отметку ранее. Наиболее элегантным решением будет проверка условия непосредственно внутри формы обработки в событии ПриСозданииНаСервере. Если проверка показывает, что согласие уже есть, мы просто отменяем создание формы.

Рассмотрим реализацию серверной проверки кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Определяем текущего пользователя системы
    ТекущийПользовательСистемы = Пользователи.ТекущийПользователь(); 
    
    // Выполняем запрос к регистру сведений для проверки наличия отметки
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Соглашения.Согласен КАК Согласен
        |ИЗ
        |   РегистрСведений.СоглашенияПоРаботеСПрограммой КАК Соглашения
        |ГДЕ
        |   Соглашения.Сотрудник = &Сотрудник";
    
    Запрос.УстановитьПараметр("Сотрудник", ТекущийПользовательСистемы);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        
        // Если флаг согласия уже установлен, отменяем открытие формы
        Если Выборка.Согласен Тогда
            Отказ = Истина; 
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Использование метода Отказ = Истина позволяет «тихо» закрыть форму еще до того, как она отобразится на экране пользователя. Таким образом, те, кто уже ознакомился с инструкцией, даже не заметят попытки открытия окна.

Повышение надежности идентификации пользователя

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

Лучше всего использовать Параметры сеанса. Если ваша конфигурация использует БСП (Библиотеку стандартных подсистем), используйте ПараметрыСеанса.ТекущийПользователь. Если конфигурация самописная, создайте аналогичный параметр сеанса и заполняйте его при старте. Это гарантирует связь по ссылке (Уникальному идентификатору), что исключает любые ошибки идентификации.

Юридические аспекты и «сила» галочки

Важно понимать, что обычная «галочка» в базе данных имеет ограниченную юридическую силу. Чтобы такое подтверждение могло служить доказательством в спорных ситуациях, проанализируем следующие рекомендации:

  1. Логирование метаданных: При записи согласия в регистр фиксируйте не только дату, но и ИмяКомпьютера(), а также IP-адрес пользователя.
  2. Версионирование инструкций: Если вы обновили текст инструкции, старое согласие должно аннулироваться. Добавьте в регистр измерение ВерсияИнструкции. При запуске сравнивайте версию в регистре с актуальной версией документа. Если они не совпадают — открывайте форму снова.
  3. Нормативная база: Убедитесь, что в вашей организации действует локальный акт, согласно которому действия в учетной записи под уникальным логином и паролем приравниваются к простой электронной подписи сотрудника.

Особенности работы в веб-клиенте

Если ваши сотрудники работают через браузер, следует учитывать механизмы блокировки всплывающих окон. Платформа 1С обходит эти ограничения при использовании стандартных методов ОткрытьФорму, но только если вызов инициирован действием пользователя или правильно встроен в цепочку запуска. Именно поэтому перенос кода из ПриСоздании формы в событие ПриНачалеРаботыСистемы модуля приложения является ключом к стабильной работе блокировки интерфейса в веб-клиенте.

Посмотрим на финальный алгоритм действий пользователя:

  1. Пользователь вводит логин и пароль.
  2. Отрабатывает процедура ПриНачалеРаботыСистемы.
  3. Система запрашивает данные из регистра.
  4. Если записи нет, открывается форма с текстом инструкции и кнопкой «Ознакомлен».
  5. Пока кнопка не нажата, весь интерфейс 1С недоступен (заблокирован).
  6. После нажатия кнопки данные пишутся в регистр, и форма закрывается, открывая доступ к рабочему столу.

Следуя этим шагам, мы создаем надежный и отказоустойчивый механизм контроля знаний и регламентов внутри системы 1С.

← На главную