Программное создание пользователя 8.3

1. olenka-ul 3 23.05.17 12:42 Сейчас в теме
Всем привет!
Программно создаю пользователя в ЗУП 3.1.
Есть реквизиты формы элемента справочника Пользователи - ВходВПрограммуРазрешен и ПользовательИБИмя - как их заполнить, если я делаю это программно на сервере, и метод ПолучитьФорму() недоступен?
Заранее благодарю!
По теме из базы знаний
Найденные решения
20. Phoedoth 23.05.17 16:55 Сейчас в теме
Может быть поплясать с бубном и добавить?
НовыйПользователь.ОбменДанными.Загрузка = Истина
kulak1974; jan-pechka; e-katerina; VOPOH; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
27. ive 3 25.09.18 22:28 Сейчас в теме
(1)Тоже сначала брал за основу (20), но при программном создании пользователя в 1С:Документооборот с ОбменДанными.Загрузка = Истина не выполняются процедуры при записи пользователя и в итоге не хватает прав на объекты.

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

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


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

НовыйПользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", Свойства); 
Vyksa; VyacheslavShilov; kulak1974; gybson; Xershi; sacred_a; +6 Ответить
2. ResetAtreides 23.05.17 13:06 Сейчас в теме
А зачем заполнять реквизиты формы, если её нет, да и сама форма не нужна? (элемент создается программно)
127.0.0.0; +1 1 Ответить
3. olenka-ul 3 23.05.17 13:08 Сейчас в теме
(2) Если эти реквизиты не заполнены, пользователь не сможет зайти в базу.
VyacheslavShilov; +1 Ответить
4. DrBlack 24 23.05.17 13:12 Сейчас в теме
(3) А что мешает их заполнить на сервере?
И вообще вопрос, заааачееем создавать пользователя программно?
29. Pavel_Vladivostok 58 26.03.20 04:03 Сейчас в теме
(4) Если у тебя 250 пользователей, все они есть в соседней базе, и их нужно быстро создать в новой базе, программное создание обработкой это выход.
VyacheslavShilov; +1 Ответить
5. ResetAtreides 23.05.17 13:12 Сейчас в теме
(3) Реквизиты формы на это влиять никак не могут, она не используется при входе в 1С. Может реквизиты объекта? Но в чем тогда проблема их заполнить?
7. olenka-ul 3 23.05.17 15:24 Сейчас в теме
(5) Как только пользователь заходит в 1С, выходит такое сообщение:

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

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

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

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

Связь между пользователем и пользователем ИБ устанавливаю так:
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
VyacheslavShilov; +1 Ответить
17. ResetAtreides 23.05.17 16:45 Сейчас в теме
(7)
Это потому, что в справочнике Пользователи не заполнено поле ПользовательИБИмя.
А это реквизит формы элемента.

Вы путаете реквизит справочника и реквизит формы. Это разные вещи, реквизит справочника существует независимо от формы. Насколько понял, вам в этот реквизит(справочника) нужно просто записать имя пользователя информационной базы, так, как он в меню "Администрирование"-"Пользователи" написан
18. olenka-ul 3 23.05.17 16:49 Сейчас в теме
(17) Я ничего не путаю. Это реквизит формы элемента справочника, и в него надо записать имя пользователя информационной базы, так, как он в меню "Администрирование"-"Пользователи" написан. Но как это сделать, я не знаю.
6. ipoloskov 164 23.05.17 13:29 Сейчас в теме
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
8. olenka-ul 3 23.05.17 15:24 Сейчас в теме
(6) Как только пользователь заходит в 1С, выходит такое сообщение:

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

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

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

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

Связь между пользователем и пользователем ИБ устанавливаю так:
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
VyacheslavShilov; +1 Ответить
9. ipoloskov 164 23.05.17 16:14 Сейчас в теме
(8)
НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;

Текст всей процедуры приведите
alex-l19041; +1 Ответить
10. olenka-ul 3 23.05.17 16:28 Сейчас в теме
Результат = Запрос.Выполнить().Выгрузить();                           

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

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

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

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

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

			ЛогинОС = ПолучитьПользователяОС(эл.ФизическоеЛицо);
			
			Если ЛогинОС <> Неопределено тогда
				ПользовательИБ.АутентификацияОС = Истина;
				ПользовательИБ.ПользовательОС = "\\" + ЛогинОС;
				ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
			Иначе
				Сообщить("У пользователя не заполнено свойство ""Логин"" " +эл.ФизическоеЛицо.наименование);
				ПользовательИБ.АутентификацияСтандартная = Истина;
				ПользовательИБ.Пароль = НовыйПользователь.Код; 
				ПользовательИБ.ПоказыватьВСпискеВыбора = истина;
			КонецЕсли;			
			
			ПользовательИБ.Язык = Метаданные.Языки.Русский;
			
			ПользовательИБ.Роли.Добавить(Метаданные.роли.БазовыеПрава);
			ПользовательИБ.Роли.Добавить(Метаданные.роли.ЗапускВебКлиента);
			
		КонецЕсли;
	
		Попытка
			ПользовательИБ.Записать(); 
			Сообщить(ПользовательИБ.Имя + " создан!");	
		Исключение
			Сообщить("Ошибка создания или редактирования " +эл.ФизическоеЛицо.наименование +" "+ ОписаниеОшибки());
		КонецПопытки;
		
		НовыйПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
		НовыйПользователь.Записать();
КонецЦикла;
Показать
11. alex-l19041 8 23.05.17 16:33 Сейчас в теме
(10) после создания
ПользователиИнформационнойБазы.СоздатьПользователя();
надо еще создать

элемент справочника Пользователи
12. ipoloskov 164 23.05.17 16:34 Сейчас в теме
После
Сообщить("Ошибка создания или редактирования " +эл.ФизическоеЛицо.наименование +" "+ ОписаниеОшибки()); 

сделайте
ВызватьИсключение;

а то у вас НовыйПользователь.ИдентификаторПользователяИБ записывается, даже если ПользовательИБ не записался.
Пользователи ИБ создаются? Можно посмотреть в конфигураторе.
VyacheslavShilov; +1 Ответить
13. olenka-ul 3 23.05.17 16:35 Сейчас в теме
(12) Спасибо, сделаю.

Да, пользователи ИБ создаются.
14. ipoloskov 164 23.05.17 16:36 Сейчас в теме
(13) тогда непонятно. Сделайте точку останова и посмотрите, что у вас в НовыйПользователь.ИдентификаторПользователяИБ перед и после записи.
15. olenka-ul 3 23.05.17 16:41 Сейчас в теме
(14) До записи нового пользователя - идентификатор пустой, после записи - принимает значение уникального идентификатора пользователя ИБ.
16. ipoloskov 164 23.05.17 16:44 Сейчас в теме
(15) до записи какого пользователя? Пользователь или ПользовательИБ?
19. olenka-ul 3 23.05.17 16:53 Сейчас в теме
(16) до записи пользователя.

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

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

идентификатор пустой, после - принимает значение уникального идентификатора пользователя ИБ.
20. Phoedoth 23.05.17 16:55 Сейчас в теме
Может быть поплясать с бубном и добавить?
НовыйПользователь.ОбменДанными.Загрузка = Истина
kulak1974; jan-pechka; e-katerina; VOPOH; +4 Ответить
21. olenka-ul 3 23.05.17 17:02 Сейчас в теме
(20) Спасибо, помогло!!! Только не понимаю как, не могли бы вы пояснить?
22. borodaty_pontorez 23.05.17 17:04 Сейчас в теме
(21) Скорее всего там какие то проверки идут, а ОбменДанными.Загрузка = Истина их пропускает
VyacheslavShilov; +1 Ответить
23. Phoedoth 23.05.17 17:08 Сейчас в теме
(21) Думаю где-то в перед записью пользователя пишут что-то вроде Объект.ИдентификаторПользователяИБ = Ссылка.ИдентификаторПользователяИБ

чтобы люди покупали конфигурацию для администрирования а не писали обработки. Впрочем я в это не вникал.
25. VOPOH 20.12.17 12:44 Сейчас в теме
(20) Валерий Спасибо Вам Огромное, я 3 дня сидел голову ломал, думал, уж все окончено со мной, но Ваш ответ меня спас!!!
31. jan-pechka 426 27.11.23 10:51 Сейчас в теме
(20)Спасибо. у меня как раз был этот флаг в Истине при загрузке спр.Пользователи - и никак не получалось создать ПользователейИБ, а как заремарила - все взлетело!

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

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

Показать
VyacheslavShilov; kabantus; +2 Ответить
24. Minakov00078 38 20.09.17 16:54 Сейчас в теме
Это конечно.. треш. Сам потратил несколько часов на связь пользователя ИБ и элемента справочника пользователя. Помогло только

НовыйПользователь.ОбменДанными.Загрузка = Истина.
В противном случае- всегда 0000 00000 вылетали в поле идентификаторИБ для элемента справочника Пользователи после записи чтобы я туда не подставлял
VyacheslavShilov; +1 Ответить
26. olegmedvedev 65 20.12.17 12:58 Сейчас в теме
а может мне кто прояснить - зачем программно создавать пользователя?
28. Gang031 17.09.19 11:30 Сейчас в теме
(26) например нужно из одной базы перенести пользователей в другую
30. Алексей777 100 15.06.21 18:36 Сейчас в теме
// Код для создания пользователя ИБ с привязкой к пользователю БСП (справочник.пользователи).

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

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

		ОписаниеПользователяИБ.Вставить("Роли");
		
		ОбъектУчета.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
		
		ОбъектУчета.Записать();
		
// Назначаем роли через назначение групп доступа. ГруппыДоступа  - это список значений на форме с типом СправочникСсылка.ГруппыДоступа.
		Для Каждого Группа Из ГруппыДоступа Цикл
			ГруппаДоступаОбъект = Группа.Значение.ПолучитьОбъект();
			
			Если ГруппаДоступаОбъект.Пользователи.Найти(ОбъектУчета.Ссылка, "Пользователь") = Неопределено Тогда
				ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = ОбъектУчета.Ссылка;
				ГруппаДоступаОбъект.Записать();
			КонецЕсли;
			
		КонецЦикла;
Показать
VyacheslavShilov; user1671936; psa247; Xershi; Nikita_Tretyakov; sdaf; +6 Ответить
32. psa247 21 24.10.24 08:42 Сейчас в теме
(30)
ГУИДПользователя = "Требуемый уникальный идентификатор";

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

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

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

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

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

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

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


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

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

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

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

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

КонецЦикла;
Показать


Спасибо! Работает на УНФ 3.0
VyacheslavShilov; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот