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

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

При разработке конфигурации с нуля ("самописки") перед программистом часто встает задача: как связать системный список ПользователиИнформационнойБазы, который мы видим в Конфигураторе, с прикладным справочником Пользователи в режиме "Предприятие". Это необходимо для того, чтобы иметь возможность указывать пользователей в реквизитах документов, отчетов и задач, сохраняя при этом связь с их учетными записями для входа в систему. Рассмотрим подробно, как реализовать этот механизм правильно и надежно.

1. Подготовительный этап: права доступа

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

  1. Создание роли: В Конфигураторе необходимо создать как минимум одну роль (например, ПолныеПрава или Администратор). Без ролей система не позволит авторизоваться под созданным пользователем.
  2. Назначение прав: У этой роли в дереве метаданных должны быть отмечены права "Администрирование", "Конфигурирование" и "Интерактивное открытие внешних обработок" (для отладки).
  3. Связь с пользователем: При создании первого пользователя в Конфигураторе или программно, ему обязательно должна быть назначена эта роль.

2. Проектирование справочника Пользователи

Для надежной связи справочника с системным списком нельзя полагаться только на "Имя пользователя", так как оно может измениться. Выясним, какие реквизиты нам понадобятся в справочнике Пользователи:

3. Программное создание пользователя ИБ при записи в справочник

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

Посмотрим на пример кода, который создает или обновляет пользователя ИБ:


Процедура ПриЗаписи(Отказ)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Ищем существующего пользователя ИБ по идентификатору
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ЭтотОбъект.ИдентификаторПользователяИБ);

    Если ПользовательИБ = Неопределено Тогда
        // Если не нашли, создаем нового
        ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
    КонецЕсли;

    ПользовательИБ.Имя = ЭтотОбъект.ИмяПользователяИБ;
    ПользовательИБ.ПолноеИмя = ЭтотОбъект.Наименование;
    
    // Здесь можно программно назначить роль, если она определена
    // РольАдмин = Метаданные.Роли.ПолныеПрава;
    // ПользовательИБ.Роли.Добавить(РольАдмин);

    ПользовательИБ.Записать();

    // Сохраняем полученный UUID обратно в справочник, если это новый пользователь
    Если ЭтотОбъект.ИдентификаторПользователяИБ = Неопределено Тогда
        ЭтотОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
        ЭтотОбъект.Записать(); 
    КонецЕсли;
КонецПроцедуры

Важный нюанс: Чтобы избежать рекурсии при вызове ЭтотОбъект.Записать() внутри события ПриЗаписи, лучше использовать дополнительные переменные или выполнять сохранение идентификатора в событии ПередЗаписью, если это возможно.

4. Обработка первого входа (автоматическое создание)

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

Алгоритм действий следующий:

  1. Получаем текущего пользователя через ПользователиИнформационнойБазы.ТекущийПользователь().
  2. Ищем запись в справочнике Пользователи по УникальныйИдентификатор текущего пользователя.
  3. Если запись не найдена — создаем ее программно, заполняя Наименование и ИмяПользователяИБ данными из системы.

5. Синхронизация изменений

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

6. Почему не стоит отказываться от БСП?

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

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

← На главную