Как программно связать пользователя информационной базы со справочником Пользователи и разрешить доступ

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

При автоматизации администрирования 1С, например, при синхронизации данных между разными базами через COMConnector, программисты часто сталкиваются с проблемой: пользователь в справочнике Пользователи создается, но «галочка» Доступ к информационной базе разрешен на форме не устанавливается. Это происходит из-за того, что в современных конфигурациях на базе БСП (Библиотека стандартных подсистем) связь между элементом справочника и учетной записью платформы реализована через уникальный идентификатор, и последовательность действий при их создании критически важна.

В этой статье мы подробно разберем, как правильно настроить эту связь, почему возникает ошибка записи GUID и как добиться того, чтобы программно созданный пользователь имел доступ к системе.

Разберем причину проблемы: почему галочка не ставится сама?

Проанализируем ситуацию. В типовых конфигурациях (таких как Бухгалтерия предприятия 3.0, ERP или Управление торговлей 11) флажок Доступ к информационной базе разрешен на форме справочника Пользователи часто является «виртуальным». Это означает, что он не привязан к конкретному реквизиту в базе данных. Программа вычисляет его значение при открытии формы, проверяя два условия:

  1. Заполнен ли у элемента справочника реквизит ИдентификаторПользователяИБ.
  2. Существует ли в системном списке ПользователиИнформационнойБазы запись с таким уникальным идентификатором.

Если вы просто создаете элемент справочника и записываете туда произвольный GUID, связи не возникнет, так как платформа 1С не найдет соответствующего пользователя в списке пользователей ИБ. Кроме того, существует техническое ограничение: невозможно программно «назначить» свой УникальныйИдентификатор новому пользователю ИБ — платформа всегда генерирует его самостоятельно в момент записи.

Алгоритм правильного создания пользователя через COM-соединение

Рассмотрим по шагам корректную последовательность действий, которая позволит избежать ошибок и правильно связать объекты. Вместо того чтобы пытаться установить GUID вручную, мы должны сначала создать «платформенного» пользователя, получить его идентификатор и только потом передать его в справочник.

Шаг 1: Создание пользователя информационной базы

Выясним, как создать учетную запись на уровне платформы. Для этого используется менеджер ПользователиИнформационнойБазы. Посмотрим на пример кода через COM-объект V8:


// Создаем объект пользователя ИБ в удаленной базе
ПользовательИБ = V8.ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Имя = Результат.Наименование;
ПользовательИБ.АутентификацияСтандартная = Истина;
ПользовательИБ.Пароль = "123";
ПользовательИБ.ПоказыватьВСпискеВыбора = Истина;

// При записи платформа сама сгенерирует новый УникальныйИдентификатор
ПользовательИБ.Записать();

Важный момент: попытка выполнить код ПользовательИБ.УникальныйИдентификатор = НовыйGUID приведет к ошибке «Поле объекта недоступно для записи», так как это свойство только для чтения до момента записи или генерируется системой автоматически.

Шаг 2: Создание элемента справочника и установка связи

Теперь, когда у нас есть объект ПользовательИБ, мы можем извлечь его УникальныйИдентификатор и присвоить его реквизиту справочника. Проанализируем, как это реализовать:


// Создаем элемент в справочнике Пользователи
НовыйПользователь = V8.Справочники.Пользователи.СоздатьЭлемент();

// Устанавливаем связь по GUID, который нам выдала платформа
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;

// Заполняем остальные реквизиты
НовыйПользователь.Наименование = Результат.Наименование;
НовыйПользователь.Служебный = Ложь; // Обязательно Ложь, чтобы пользователь был виден в списках

// Если используется синхронизация по ссылке из другой базы
// СпрСсылка - предварительно полученная ссылка через ПолучитьСсылку(НовыйGUID)
НовыйПользователь.УстановитьСсылкуНового(СпрСсылка);

НовыйПользователь.Записать();

Нюансы работы в конфигурациях с БСП

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

1. Использование структуры ОписаниеПользователяИБ

БСП ожидает, что при записи пользователя будут заполнены ДополнительныеСвойства. Это позволяет подсистеме безопасности корректно инициализировать настройки пользователя. Посмотрим, как дополнить код:


ОписаниеПользователяИБ = V8.NewObject("Структура");
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ОписаниеПользователяИБ.Вставить("Имя", Результат.Наименование);
ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина);
ОписаниеПользователяИБ.Вставить("ДоступКИнформационнойБазеРазрешен", Истина);

НовыйПользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);

2. Роли пользователя

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

3. Обновление служебных регистров

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

V8.Пользователи.ЗаписатьПользователя(НовыйПользователь);

Типичные ошибки при реализации

  1. Запись справочника до создания пользователя ИБ. В этом случае в реквизит ИдентификаторПользователяИБ записывается либо пустое значение, либо GUID, который еще не существует в системе. Связь не установится.
  2. Несоответствие имен. Если Имя в ПользователиИнформационнойБазы не совпадает с логином, указанным в справочнике, это может запутать администратора, хотя техническая связь по GUID будет работать.
  3. Проблемы прав при COM-соединении. Убедитесь, что пользователь, под которым устанавливается COM-соединение, имеет права на «Администрирование данных» и «Администрирование», иначе создание пользователя ИБ завершится с ошибкой прав доступа.

Итоги

Мы выяснили, что для того чтобы «галочка» доступа в справочнике Пользователи установилась программно, необходимо строго соблюдать последовательность: сначала создаем Пользователя ИБ -> получаем его ID -> записываем этот ID в справочник. Использование стандартных механизмов БСП через ДополнительныеСвойства и программный интерфейс Пользователи.ЗаписатьПользователя() является наиболее надежным способом, так как он берет на себя обновление всех сопутствующих регистров сведений и кэшей безопасности.

← На главную