Програмное создание нового пользователя! Как!!???

1. skala12345 21.03.19 01:47 Сейчас в теме
Нписал процедуру, пользователей сода=дает, а со справочником пользователи не синхронизируется.
В чем дело??? Весь мозг сломал! Вот код..
Процедура СоздатьЭлементПользователи (ПользователиБазы)
Для каждого элемент из ПользователиБазы.data.reference.record цикл
		
	 Если элемент.свойства().получить ("fullName") = неопределено
	тогда 
иначе
	ИмяЭлемента = элемент.fullName;
КонецЕсли;
		
	Проверкаid = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяЭлемента);
	Если Проверкаid = Неопределено тогда
		СоздатьПользователя = ПользователиИнформационнойБазы.СоздатьПользователя();
		СоздатьПользователя.Имя = ИмяЭлемента;
		СоздатьПользователя.АутентификацияСтандартная = Истина;
		СоздатьПользователя.ПолноеИмя = ИмяЭлемента;
		СоздатьПользователя.Пароль = "";
		СоздатьПользователя.Роли.Добавить(метаданные.роли.МенеджерПоПродажам);
		СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
		СоздатьПользователя.Язык = Метаданные.Языки.Русский;
		СоздатьПользователя.Записать();
		СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
		СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
		СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
		СоздатьПользователяСправочник.Недействителен = Ложь;
		СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
		 Попытка
            СоздатьПользователяСправочник.Записать(); 
            Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");    
        Исключение
            Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
        КонецПопытки
	Иначе
	продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1536 21.03.19 02:00 Сейчас в теме
(1) создать одного пользователя руками, другого программно и сравни через отладчик или консоль запросов в чем у тебя отличие!
3. skala12345 21.03.19 02:10 Сейчас в теме
(1) Сейчас другая проблема, все создается и записывается, но в списке пользователей не отображается... Хотя вход под пользователем есть, права назначены, ошибок при входе нет, но в списке справочника пользователи не отображаются...
5. muskul 21.03.19 03:14 Сейчас в теме
(3)может флаг показывать в списке выбора не стоит?
4. Туки Туки 52 21.03.19 02:57 Сейчас в теме
В конфигурациях на управляемом интерфейсе (Такси) изменили подход к ведению пользователей. Если вы добавляете не программно, то добавлять нужно из режима Предприятия - тогда пользователь ИБ у вас сам создатся. И если раньше, в обычном приложении, достаточно будет добавить польз в конфигураторе - и при заходе в Предприятие, этот польз сам создавался в спр Пользователи, то с управляемым приложением такой фокус не прокатит - система не даст зайти под пользователем ИБ, которого нет в справочнике Пользователи.


Если я все правильно понимаю, тебе нужно создавать не так:
СоздатьПользователя = ПользователиИнформационнойБазы.СоздатьПользователя(); 


а так:
СоздатьПользователя = Справочники.Пользователи.СоздатьЭлемент(); 


Отсюда
6. skala12345 21.03.19 07:09 Сейчас в теме
(4)Я создаю вначале пользователяинформационной базы, а потом его прикручиваю к пользователю таким кодом:

Процедура СоздатьЭлементПользователи (ПользователиБазы)
Для каждого элемент из ПользователиБазы.data.reference.record цикл
		
	 Если элемент.свойства().получить ("fullName") = неопределено
	тогда 
иначе
	ИмяЭлемента = элемент.fullName;
КонецЕсли;
		
	Проверкаid = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяЭлемента);
	Если Проверкаid = Неопределено и Число (элемент.external) = 0 тогда
		СоздатьПользователя = ПользователиИнформационнойБазы.СоздатьПользователя();
		СоздатьПользователя.Имя = ИмяЭлемента;
		СоздатьПользователя.АутентификацияСтандартная = Истина;
		СоздатьПользователя.ПолноеИмя = ИмяЭлемента;
		СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
		СоздатьПользователя.Пароль = "";
		СоздатьПользователя.Роли.Добавить(метаданные.роли.МенеджерПоПродажам);
		СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
		СоздатьПользователя.Язык = Метаданные.Языки.Русский;
		СоздатьПользователя.Записать();
		СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
		СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
		СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
		СоздатьПользователяСправочник.Недействителен = Ложь;
		СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
		 Попытка
            СоздатьПользователяСправочник.Записать(); 
            Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");    
        Исключение
            Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
        КонецПопытки
	Иначе
	продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать

Создаю из XML файла, сейчас пользователи создаються, под ним можно зайти, но в списке справочника пользователей он не отображается, в чем может быть дело??
Прикрепленные файлы:
7. Туки Туки 52 21.03.19 08:00 Сейчас в теме
(6) Если мне не изменяет память, нужно создаваться только пользователя в справочнике, а пользователь инф базы создастся при этом автоматически
8. skala12345 21.03.19 09:10 Сейчас в теме
(7) не пробовал, но откуда тогда брать настройки для входа пользователя?? Вставлять в дополнительные свойства справочника массив, а массив настроек создавать отдельно?
9. YannikAlx 28 21.03.19 09:28 Сейчас в теме
(7) Изменяет память-то... ))) с точностью до наоборот...
Я вот создаю только ПользователяИБ , он отображается в списке , но пока он не зашел - его нет в справочнике, а при первом входе пользователь записывается в Справочник Пользователи...

	ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
						
			ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
			ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
			ПользовательИБ.АутентификацияОС = ПрочитанныйОбъект.OSAuthentication;
			ПользовательИБ.АутентификацияOpenID = ПрочитанныйОбъект.OpenIDAuthentication;
			ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
			ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
			ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
			ПользовательИБ.ПользовательОС = ПрочитанныйОбъект.OSUser;
			ПользовательИБ.СохраняемоеЗначениеПароля = ПрочитанныйОбъект.StoredPasswordValue;
			ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];
			Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
				ИзФайла = РольXDTO.Name;
				Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда
					Если ФормироватьПротокол Тогда
						ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Роль '%1' не обнаружена в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
					КонецЕсли;
					ВызватьИсключение "Ошибка";
				КонецЕсли;
				ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
			КонецЦикла;
			ПользовательИБ.Записать();
Показать



Это вариант загрузки пользователей из файла (ранее записанного пользователями из другой базы), но ведь это пример...
10. skala12345 21.03.19 10:29 Сейчас в теме
(9) Пробовал создавать только пользователяИБ, при входе он пишет что пользователь в списке справочника пользователей не найден. Написал код выше все работает, но пользователь не отображается, даже после того как зашёл в БД, начинает отображаться только после того как в активном сеансе его найдешь два раза щелкнешь и запишешь.
Странно как то, так то все заходит и работает....
11. YannikAlx 28 21.03.19 10:35 Сейчас в теме
(10) Я реально сейчас еще раз проверил на ЗУП 3.1 - загрузил этим текстом пользователей - проверил - все появились только в ИБ (в Конфигураторе) и все отражаются в списке, в Справочнике не было ни одного.
После тестового входа одним из них - он появляется в Справочнике

Заполните все реквизиты , которые у меня заполняются....
12. skala12345 21.03.19 14:53 Сейчас в теме
(11) Сделал как ты говоришь это бухгалтерия предприятия 3.0 видимо там не создается пользователь автоматически. Попытлася записать своим методом.
Для повторной попытки надо удалить пользователей, но пишет:
ОбщийМодуль.Пользователи.Модуль(935)}: Значение не является значением объектного типа (УникальныйИдентификатор)
Обработчик.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор);

Как корректно создать пользователя?? Чтоб ошибок не было... Видно что-то не так...
Вот такой код сейчас:

Процедура СоздатьЭлементПользователи (ПользователиБазы)
Для каждого элемент из ПользователиБазы.data.reference.record цикл
		
	 Если элемент.свойства().получить ("fullName") = неопределено
	тогда 
иначе
	ИмяЭлемента = элемент.fullName;
КонецЕсли;
		
	Проверкаid = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяЭлемента);
	Если Проверкаid = Неопределено и Число (элемент.external) = 1 тогда
		СоздатьПользователя = ПользователиИнформационнойБазы.СоздатьПользователя();
		СоздатьПользователя.Имя = ИмяЭлемента;
		СоздатьПользователя.АутентификацияOpenID = Истина;
		СоздатьПользователя.АутентификацияСтандартная = Истина;
		СоздатьПользователя.ПолноеИмя = ИмяЭлемента;
		СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
		СоздатьПользователя.Пароль = "";
		СоздатьПользователя.Роли.Добавить(метаданные.роли.МенеджерПоПродажам);
		СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
		СоздатьПользователя.Язык = Метаданные.Языки.Русский;
		СоздатьПользователя.РежимЗапуска = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение;
		 Попытка
		СоздатьПользователя.Записать();
		  Исключение
            Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
        КонецПопытки;
		СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
		СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
		СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина; 
		СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = СоздатьПользователя.УникальныйИдентификатор; 
		СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
		СоздатьПользователяСправочник.Недействителен = Ложь;
		СоздатьПользователяСправочник.Подготовлен = Истина;
		 Попытка
		    СоздатьПользователяСправочник.Записать(); 
		    Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");    
		Исключение
		    Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
		КонецПопытки
	Иначе
	продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать

Прошу помочь, где я ошибку допустил?
14. YannikAlx 28 21.03.19 16:24 Сейчас в теме
Вот вполне рабочий код для БП3
Только ПрочитанныйОбъект надо заменить на что-то конкретное, ибо объект читался из файла и там было все заполнено

(12)
Попытка
			ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПрочитанныйОбъект.Name);
			Если ПользовательИБ <> Неопределено Тогда
				Если НЕ ПерезаписыватьПользователя Тогда
					Продолжить;
				КонецЕсли;
                         ИНАЧЕ ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
			КонецЕсли;
					
			
			ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
			ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
			ПользовательИБ.АутентификацияОС = ЛОЖЬ;
			ПользовательИБ.АутентификацияOpenID = ЛОЖЬ;
			ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
			ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
			ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
			ПользовательИБ.Пароль ="";
			ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];

			Если ПрочитанныйОбъект.Установлено("DefaultInterface") Тогда
				ИзФайла = ПрочитанныйОбъект.DefaultInterface;
				Если Метаданные.Интерфейсы.Найти(ИзФайла) = Неопределено Тогда
	
					ВызватьИсключение "Ошибка";
				КонецЕсли;
				ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[ИзФайла];
			КонецЕсли;
			Если ПрочитанныйОбъект.Установлено("Language") Тогда
				ИзФайла = ПрочитанныйОбъект.Language;
				Если Метаданные.Языки.Найти(ИзФайла) = Неопределено Тогда
					Если ФормироватьПротокол Тогда
						ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Язык '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
					КонецЕсли;
					ВызватьИсключение "Ошибка";
				КонецЕсли;
				ПользовательИБ.Язык = Метаданные.Языки[ИзФайла];
			КонецЕсли;  
			//ПользовательИБ.Роли.Добавить(Метаданные.Роли["ПолныеПрава"]);
			Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
				ИзФайла = РольXDTO.Name;
				Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда

					КонецЕсли;
					ВызватьИсключение "Ошибка";
				КонецЕсли;
				ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
			КонецЦикла;
			ПользовательИБ.Записать();
			
			СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
			СоздатьПользователяСправочник.Наименование = ПользовательИБ.Имя;
			СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
			СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = ПользовательИБ.УникальныйИдентификатор;
			СоздатьПользователяСправочник.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
			СоздатьПользователяСправочник.Недействителен = Ложь;
			СоздатьПользователяСправочник.Подготовлен = Истина;
			
				СоздатьПользователяСправочник.Записать();
				Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");
				Результат.Загружено = Результат.Загружено + 1;
		Исключение
			Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки()); 


		КонецПопытки;
Показать
13. YannikAlx 28 21.03.19 16:02 Сейчас в теме
В бухгалтерии тоже все прекрасно создает...
Единственно с чем столкнулся - действительно без создания в справочнике - не пускает - добавил ваш код ..

СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.Недействителен = Ложь;
СоздатьПользователяСправочник.Подготовлен = Истина;
ПопыткаоздатьПользователяСправочник.Записать(); 


И все прекрасно создалось и в списке выводит и зайти удалось от любого имени
Единственно конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.68.61)
Оставьте свое сообщение

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