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

(7) Изменяет память-то... ))) с точностью до наоборот...
Я вот создаю только ПользователяИБ , он отображается в списке , но пока он не зашел - его нет в справочнике, а при первом входе пользователь записывается в Справочник Пользователи...
Это вариант загрузки пользователей из файла (ранее записанного пользователями из другой базы), но ведь это пример...
Я вот создаю только ПользователяИБ , он отображается в списке , но пока он не зашел - его нет в справочнике, а при первом входе пользователь записывается в Справочник Пользователи...
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
ПользовательИБ.АутентификацияОС = ПрочитанныйОбъект.OSAuthentication;
ПользовательИБ.АутентификацияOpenID = ПрочитанныйОбъект.OpenIDAuthentication;
ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
ПользовательИБ.ПользовательОС = ПрочитанныйОбъект.OSUser;
ПользовательИБ.СохраняемоеЗначениеПароля = ПрочитанныйОбъект.StoredPasswordValue;
ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];
Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
ИзФайла = РольXDTO.Name;
Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда
Если ФормироватьПротокол Тогда
ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Роль '%1' не обнаружена в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
КонецЕсли;
ВызватьИсключение "Ошибка";
КонецЕсли;
ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
КонецЦикла;
ПользовательИБ.Записать();
ПоказатьЭто вариант загрузки пользователей из файла (ранее записанного пользователями из другой базы), но ведь это пример...
(9) Пробовал создавать только пользователяИБ, при входе он пишет что пользователь в списке справочника пользователей не найден. Написал код выше все работает, но пользователь не отображается, даже после того как зашёл в БД, начинает отображаться только после того как в активном сеансе его найдешь два раза щелкнешь и запишешь.
Странно как то, так то все заходит и работает....
Странно как то, так то все заходит и работает....
(10) Я реально сейчас еще раз проверил на ЗУП 3.1 - загрузил этим текстом пользователей - проверил - все появились только в ИБ (в Конфигураторе) и все отражаются в списке, в Справочнике не было ни одного.
После тестового входа одним из них - он появляется в Справочнике
Заполните все реквизиты , которые у меня заполняются....
После тестового входа одним из них - он появляется в Справочнике
Заполните все реквизиты , которые у меня заполняются....
(11) Сделал как ты говоришь это бухгалтерия предприятия 3.0 видимо там не создается пользователь автоматически. Попытлася записать своим методом.
Для повторной попытки надо удалить пользователей, но пишет:
ОбщийМодуль.Пользователи.Модуль(935)}: Значение не является значением объектного типа (УникальныйИдентификатор)
Обработчик.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор);
Как корректно создать пользователя?? Чтоб ошибок не было... Видно что-то не так...
Вот такой код сейчас:
Прошу помочь, где я ошибку допустил?
Для повторной попытки надо удалить пользователей, но пишет:
ОбщийМодуль.Пользователи.Модуль(935)}: Значение не является значением объектного типа (УникальныйИдентификатор)
Обработчик.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор);
Как корректно создать пользователя?? Чтоб ошибок не было... Видно что-то не так...
Вот такой код сейчас:
Процедура СоздатьЭлементПользователи (ПользователиБазы)
Для каждого элемент из ПользователиБазы.data.reference.record цикл
Если элемент.свойства().получить ("fullName") = неопределено
тогда
иначе
ИмяЭлемента = элемент.fullName;
КонецЕсли;
Проверкаid = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяЭлемента);
Если Проверкаid = Неопределено и Число (элемент.external) = 1 тогда
СоздатьПользователя = ПользователиИнформационнойБазы.СоздатьПользователя();
СоздатьПользователя.Имя = ИмяЭлемента;
СоздатьПользователя.АутентификацияOpenID = Истина;
СоздатьПользователя.АутентификацияСтандартная = Истина;
СоздатьПользователя.ПолноеИмя = ИмяЭлемента;
СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
СоздатьПользователя.Пароль = "";
СоздатьПользователя.Роли.Добавить(метаданные.роли.МенеджерПоПродажам);
СоздатьПользователя.ПоказыватьВСпискеВыбора = Истина;
СоздатьПользователя.Язык = Метаданные.Языки.Русский;
СоздатьПользователя.РежимЗапуска = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение;
Попытка
СоздатьПользователя.Записать();
Исключение
Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
КонецПопытки;
СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.Недействителен = Ложь;
СоздатьПользователяСправочник.Подготовлен = Истина;
Попытка
СоздатьПользователяСправочник.Записать();
Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");
Исключение
Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
КонецПопытки
Иначе
продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПрошу помочь, где я ошибку допустил?
Вот вполне рабочий код для БП3
Только ПрочитанныйОбъект надо заменить на что-то конкретное, ибо объект читался из файла и там было все заполнено
(12)
Только ПрочитанныйОбъект надо заменить на что-то конкретное, ибо объект читался из файла и там было все заполнено
(12)
Попытка
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПрочитанныйОбъект.Name);
Если ПользовательИБ <> Неопределено Тогда
Если НЕ ПерезаписыватьПользователя Тогда
Продолжить;
КонецЕсли;
ИНАЧЕ ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
КонецЕсли;
ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
ПользовательИБ.АутентификацияОС = ЛОЖЬ;
ПользовательИБ.АутентификацияOpenID = ЛОЖЬ;
ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
ПользовательИБ.Пароль ="";
ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];
Если ПрочитанныйОбъект.Установлено("DefaultInterface") Тогда
ИзФайла = ПрочитанныйОбъект.DefaultInterface;
Если Метаданные.Интерфейсы.Найти(ИзФайла) = Неопределено Тогда
ВызватьИсключение "Ошибка";
КонецЕсли;
ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[ИзФайла];
КонецЕсли;
Если ПрочитанныйОбъект.Установлено("Language") Тогда
ИзФайла = ПрочитанныйОбъект.Language;
Если Метаданные.Языки.Найти(ИзФайла) = Неопределено Тогда
Если ФормироватьПротокол Тогда
ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Язык '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
КонецЕсли;
ВызватьИсключение "Ошибка";
КонецЕсли;
ПользовательИБ.Язык = Метаданные.Языки[ИзФайла];
КонецЕсли;
//ПользовательИБ.Роли.Добавить(Метаданные.Роли["ПолныеПрава"]);
Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
ИзФайла = РольXDTO.Name;
Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда
КонецЕсли;
ВызватьИсключение "Ошибка";
КонецЕсли;
ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
КонецЦикла;
ПользовательИБ.Записать();
СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
СоздатьПользователяСправочник.Наименование = ПользовательИБ.Имя;
СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = ПользовательИБ.УникальныйИдентификатор;
СоздатьПользователяСправочник.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
СоздатьПользователяСправочник.Недействителен = Ложь;
СоздатьПользователяСправочник.Подготовлен = Истина;
СоздатьПользователяСправочник.Записать();
Сообщить(СоздатьПользователяСправочник.Наименование + " создан!");
Результат.Загружено = Результат.Загружено + 1;
Исключение
Сообщить("Ошибка создания или редактирования " +ИмяЭлемента +" "+ ОписаниеОшибки());
КонецПопытки;
Показать
В бухгалтерии тоже все прекрасно создает...
Единственно с чем столкнулся - действительно без создания в справочнике - не пускает - добавил ваш код ..
И все прекрасно создалось и в списке выводит и зайти удалось от любого имени
Единственно конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.68.61)
Единственно с чем столкнулся - действительно без создания в справочнике - не пускает - добавил ваш код ..
СоздатьПользователяСправочник = Справочники.Пользователи.СоздатьЭлемент();
СоздатьПользователяСправочник.Наименование = ИмяЭлемента;
СоздатьПользователяСправочник.ОбменДанными.Загрузка = Истина;
СоздатьПользователяСправочник.ИдентификаторПользователяСервиса = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.ИдентификаторПользователяИБ = СоздатьПользователя.УникальныйИдентификатор;
СоздатьПользователяСправочник.Недействителен = Ложь;
СоздатьПользователяСправочник.Подготовлен = Истина;
ПопыткаоздатьПользователяСправочник.Записать();
И все прекрасно создалось и в списке выводит и зайти удалось от любого имени
Единственно конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.68.61)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот