Всем привет!
Программно создаю пользователя в ЗУП 3.1.
Есть реквизиты формы элемента справочника Пользователи - ВходВПрограммуРазрешен и ПользовательИБИмя - как их заполнить, если я делаю это программно на сервере, и метод ПолучитьФорму() недоступен?
Заранее благодарю!
---
Может быть поплясать с бубном и добавить?
НовыйПользователь.ОбменДанными.Загрузка = Истина
---
Тоже сначала брал за основу (20), но при программном создании пользователя в 1С:Документооборот с ОбменДанными.Загрузка = Истина не выполняются процедуры при записи пользователя и в итоге не хватает прав на объекты.

Для создания пользователя без использования ОбменДанными.Загрузка = Истина, необходимо заполнение структуры:

```1c
    ОписаниеПользователяИБ = Новый Структура;
    ОписаниеПользователяИБ.Вставить("Действие", "Записать");
    ОписаниеПользователяИБ.Вставить("Имя", ТекущийПользовательИБ.Имя);
    ОписаниеПользователяИБ.Вставить("ПолноеИмя", ТекущийПользовательИБ.ПолноеИмя);
    ОписаниеПользователяИБ.Вставить("Пароль",ТекущийПользовательИБ.Пароль);
    ОписаниеПользователяИБ.Вставить("АутентификацияОС", Ложь);
    ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Ложь);
    ОписаниеПользователяИБ.Вставить("ЗапрещеноИзменятьПароль", Истина);
```

И передачи ее в дополнительные свойства:

```1c
    НовыйПользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", Свойства);
```
---
А зачем заполнять реквизиты формы, если её нет, да и сама форма не нужна? (элемент создается программно)
---
Если эти реквизиты не заполнены, пользователь не сможет зайти в базу.
---
А что мешает их заполнить на сервере?
И вообще вопрос, заааачееем создавать пользователя программно?
---
Если у тебя 250 пользователей, все они есть в соседней базе, и их нужно быстро создать в новой базе, программное создание обработкой это выход.
---
Реквизиты формы на это влиять никак не могут, она не используется при входе в 1С. Может реквизиты объекта? Но в чем тогда проблема их заполнить?
---
Как только пользователь заходит в 1С, выходит такое сообщение:

Авторизация не выполнена. Работа системы будет завершена.

Пользователь "Такой то" не найден в справочнике "Пользователи".

Обратитесь к администратору.

Это потому, что в справочнике Пользователи не заполнено поле ПользовательИБИмя.
А это реквизит формы элемента.

Связь между пользователем и пользователем ИБ устанавливаю так:
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
---
Это потому, что в справочнике Пользователи не заполнено поле ПользовательИБИмя.
А это реквизит формы элемента.
Вы путаете реквизит справочника и реквизит формы. Это разные вещи, реквизит справочника существует независимо от формы. Насколько понял, вам в этот реквизит(справочника) нужно просто записать имя пользователя информационной базы, так, как он в меню "Администрирование"-"Пользователи" написан
---
Я ничего не путаю. Это реквизит формы элемента справочника, и в него надо записать имя пользователя информационной базы, так, как он в меню "Администрирование"-"Пользователи" написан. Но как это сделать, я не знаю.
---
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
---
Как только пользователь заходит в 1С, выходит такое сообщение:

Авторизация не выполнена. Работа системы будет завершена.

Пользователь "Такой то" не найден в справочнике "Пользователи".

Обратитесь к администратору.

Это потому, что в справочнике Пользователи не заполнено поле ПользовательИБИмя.
А это реквизит формы элемента.

Связь между пользователем и пользователем ИБ устанавливаю так:
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
---
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
Текст всей процедуры приведите
---
```1c
    Результат = Запрос.Выполнить().Выгрузить();

    Для Каждого ЭЛ из Результат Цикл
    Попытка
    СсылкаНаПользователя = Справочники.Пользователи.НайтиПоРеквизиту("ФизическоеЛицо", эл.ФизическоеЛицо);

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

    Исключение
    Сообщить("Ошибка создания " + Эл.ФизическоеЛицо.Наименование + " " + ОписаниеОшибки());
    КонецПопытки;

    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(НовыйПользователь.ИдентификаторПользователяИБ);

    Если ПользовательИБ = Неопределено Тогда

    ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();

    Имя = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(НовыйПользователь.Наименование);
    Имя1 = СтрЗаменить(Имя, ".", ");
    Имя2 = СтрЗаменить(Имя1, " ", ");

    ПользовательИБ.Имя = Имя2;

    ПользовательИБ.ПолноеИмя = СокрЛП(НовыйПользователь.ПолноеНаименование());

    ЛогинОС = ПолучитьПользователяОС(эл.ФизическоеЛицо);

    Если ЛогинОС <> Неопределено тогда
    ПользовательИБ.АутентификацияОС = Истина;
    ПользовательИБ.ПользовательОС = "\\" + ЛогинОС;
    ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
    Иначе
    Сообщить("У пользователя не заполнено свойство "Логин" " +эл.ФизическоеЛицо.наименование);
    ПользовательИБ.АутентификацияСтандартная = Истина;
    ПользовательИБ.Пароль = НовыйПользователь.Код;
    ПользовательИБ.ПоказыватьВСпискеВыбора = истина;
    КонецЕсли;

    ПользовательИБ.Язык = Метаданные.Языки.Русский;

    ПользовательИБ.Роли.Добавить(Метаданные.роли.БазовыеПрава);
    ПользовательИБ.Роли.Добавить(Метаданные.роли.ЗапускВебКлиента);

    КонецЕсли;

    Попытка
    ПользовательИБ.Записать();
    Сообщить(ПользовательИБ.Имя + " создан!");
    Исключение
    Сообщить("Ошибка создания или редактирования " +эл.ФизическоеЛицо.наименование +" "+ ОписаниеОшибки());
    КонецПопытки;

    НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
    НовыйПользователь.Записать();
    КонецЦикла;
```
---
после создания ПользователиИнформационнойБазы.СоздатьПользователя(); надо еще создать

элемент справочника Пользователи
---
После

```1c
    Сообщить("Ошибка создания или редактирования " +эл.ФизическоеЛицо.наименование +" "+ ОписаниеОшибки());
```

сделайте

```1c
    ВызватьИсключение;
```

а то у вас НовыйПользователь.ИдентификаторПользователяИБ записывается, даже если ПользовательИБ не записался.
Пользователи ИБ создаются? Можно посмотреть в конфигураторе.
---
Спасибо, сделаю.

Да, пользователи ИБ создаются.
---
тогда непонятно. Сделайте точку останова и посмотрите, что у вас в НовыйПользователь.ИдентификаторПользователяИБ перед и после записи.
---
До записи нового пользователя - идентификатор пустой, после записи - принимает значение уникального идентификатора пользователя ИБ.
---
до записи какого пользователя? Пользователь или ПользовательИБ?
---
до записи пользователя.

Т.е. до строки

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

идентификатор пустой, после - принимает значение уникального идентификатора пользователя ИБ.
---
Может быть поплясать с бубном и добавить?
НовыйПользователь.ОбменДанными.Загрузка = Истина
---
Спасибо, помогло!!! Только не понимаю как, не могли бы вы пояснить?
---
Скорее всего там какие то проверки идут, а ОбменДанными.Загрузка = Истина их пропускает
---
Думаю где-то в перед записью пользователя пишут что-то вроде Объект.ИдентификаторПользователяИБ = Ссылка.ИдентификаторПользователяИБ

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

```1c
    НовСпр = Справочники.Пользователи.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(НовСпр, Спр.Реквизиты);
    НовСпр.КонтактнаяИнформация.Загрузить(Спр.КонтактнаяИнформация);

    ОбновляемыеСвойства = Пользователи.НовоеОписаниеПользователяИБ();
    ОбновляемыеСвойства.Вставить("Имя", Спр.Реквизиты.Наименование);
    ОбновляемыеСвойства.Вставить("ПолноеИмя", Спр.Реквизиты.Наименование);
    ОбновляемыеСвойства.Вставить("ПоказыватьВСпискеВыбора", Истина);
    ОбновляемыеСвойства.Вставить("АутентификацияОС", Ложь);
    //ОбновляемыеСвойства.Вставить("ПользовательОС", "\\SL24\" + Выборка.Логин);
    ОбновляемыеСвойства.Вставить("УникальныйИдентификатор", Неопределено); //ИдентификаторПользователяИБ
    ОбновляемыеСвойства.Вставить("Действие", "Записать");
    ОбновляемыеСвойства.Вставить("ВходВПрограммуРазрешен", Истина);
    ОбновляемыеСвойства.Вставить("АутентификацияСтандартная", Истина); //Ложь

    //ОбновляемыеСвойства.Вставить("Пароль", "12345");

    НовСпр.ДополнительныеСвойства.Вставить("Действие", "Записать");
    НовСпр.ДополнительныеСвойства.Вставить("ВходВПрограммуРазрешен", Истина);
    //НовСпр.ДополнительныеСвойства.Вставить("АутентификацияОС", Истина);
    НовСпр.ДополнительныеСвойства.Вставить("АутентификацияСтандартная", Истина);//Ложь
    НовСпр.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОбновляемыеСвойства);
    //ПользовательОбъект.ОбменДанными.Загрузка = Истина;

    //НовСпр.ОбменДанными.Загрузка = Истина; //!!!!!!!!!!!!!!!!!!! Для спр.Пользователи не нужно вкл.этот флаг, иначе ПользовательИБ не создастся!

    НовСпр.Записать();
```
---
Это конечно.. треш. Сам потратил несколько часов на связь пользователя ИБ и элемента справочника пользователя. Помогло только

НовыйПользователь.ОбменДанными.Загрузка = Истина.
В противном случае- всегда 0000 00000 вылетали в поле идентификаторИБ для элемента справочника Пользователи после записи чтобы я туда не подставлял
---
а может мне кто прояснить - зачем программно создавать пользователя?
---
например нужно из одной базы перенести пользователей в другую
---
```1c
    // Код для создания пользователя ИБ с привязкой к пользователю БСП (справочник.пользователи).

    ГУИДПользователя = "Требуемый уникальный идентификатор";

    Ссылка = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИДПользователя ));

    Если НЕ Ссылка.ПолучитьОбъект() = Неопределено Тогда
    ОбъектУчета = Ссылка.ПолучитьОбъект();
    Иначе
    ОбъектУчета = Справочники.Пользователи.СоздатьЭлемент();
    ОбъектУчета.УстановитьСсылкуНового(Ссылка);
    КонецЕсли;

    ИмяПользователя = "Иванов Иван Иванович";

    ОбъектУчета.Наименование = ФИО;

    ОбъектУчета.ИдентификаторПользователяИБ = Новый УникальныйИдентификатор(ГУИДПользователя);

    ОписаниеПользователяИБ = Новый Структура;
    ОписаниеПользователяИБ.Вставить("Действие", "Записать");
    ОписаниеПользователяИБ.Вставить("Имя", ИмяПользователя );
    ОписаниеПользователяИБ.Вставить("ПолноеИмя", ИмяПользователя );
    ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина);
    ОписаниеПользователяИБ.Вставить("Пароль", "123");
    ОписаниеПользователяИБ.Вставить("АутентификацияОС", Ложь);
    ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Истина);
    ОписаниеПользователяИБ.Вставить("ЗапрещеноИзменятьПароль", Ложь);
    ОписаниеПользователяИБ.Вставить("РежимЗапуска","Авто");

    ОписаниеПользователяИБ.Вставить("Язык",
    ?(Метаданные.ОсновнойЯзык = Неопределено, ", Метаданные.ОсновнойЯзык.Имя));

    ОписаниеПользователяИБ.Вставить("Роли");

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

    ОбъектУчета.Записать();

    // Назначаем роли через назначение групп доступа. ГруппыДоступа - это список значений на форме с типом СправочникСсылка.ГруппыДоступа.
    Для Каждого Группа Из ГруппыДоступа Цикл
    ГруппаДоступаОбъект = Группа.Значение.ПолучитьОбъект();

    Если ГруппаДоступаОбъект.Пользователи.Найти(ОбъектУчета.Ссылка, "Пользователь") = Неопределено Тогда
    ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = ОбъектУчета.Ссылка;
    ГруппаДоступаОбъект.Записать();
    КонецЕсли;

    КонецЦикла;
```
---
Спасибо! Работает на УНФ 3.0