Создание пользователя БД с заданным уникальным идентификатором
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Есть идея. Написать обработку с использованием метода ЗаписатьXML, в котором указать в качестве объекта какого-нибудь пользователя. После этого редактором исправить ИДД объекта в файле и применить метод ПрочитатьXML. Не знаю взлетит ли, но попробовать можно.
(10) Ну так и переносите справочник пользователей. Потом они по гуид будут обновлять реквизиты. При попытке войти пользователя с изменившимся именем, соответствующий ему пользователь не будет найден. И будет создан новый пользователь со старым именем (если типовой механизм авторизации) - вот тут надо или запретить создание нового и выдать этому сеансу какого-то спец. пользователя с ограниченными правами или как-то иначе обработать.
Или как альтернатива - добавить в справочник пользователей доп. реквизит НовоеИмяПользователя, заполняемое автоматически при изменении имени пользователя, а при переносе данных пользователя выгружать только НовоеИмяПользователя; и где-нибудь в процедуре ПриНачалеРаботыСистемы добавить проверку: Если мТекущийПользователь.Код<>мТекущийПользователь.НовоеИмяПользователя Сообщить("...")
Или как альтернатива - добавить в справочник пользователей доп. реквизит НовоеИмяПользователя, заполняемое автоматически при изменении имени пользователя, а при переносе данных пользователя выгружать только НовоеИмяПользователя; и где-нибудь в процедуре ПриНачалеРаботыСистемы добавить проверку: Если мТекущийПользователь.Код<>мТекущийПользователь.НовоеИмяПользователя Сообщить("...")
ПолучитьПользователей (GetUsers)
Синтаксис:
ПолучитьПользователей()
Возвращаемое значение:
Тип: Массив.
Описание:
Получает массив, элементами которого являются объекты ПользовательИнформационнойБазы.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Данный метод доступен пользователям, имеющим административные права.
Синтаксис:
ПолучитьПользователей()
Возвращаемое значение:
Тип: Массив.
Описание:
Получает массив, элементами которого являются объекты ПользовательИнформационнойБазы.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Данный метод доступен пользователям, имеющим административные права.
Совершенно случайно нашел как создавать Пользователя ИБ с заданным УИД (движок 8.2.19.83)
Оказывается, если в одной базе засунуть пользователя в Т (ТаблицаЗначений) и потом ЗначениеВФайл(<ИмяФайла>,Т). Потом в нужной базе обратно Т=ЗначениеИзФайла(<ИмяФайла>), то в Т появится именно Пользователь ИБ, но не сохраненный, с исходным ИД. Его можно Записать(). И он появится в базе.
А в этом файле можно заменить ИД на желаемый.
Возможно, можно на прямую (не через Т, а стразу ЗначениеВФайл(<ИмяФайла>,Пользователь). Возможно, можно тупо ЗначениеВСтрокуВнутр(Пользователь). Не проверял, но скорее всего будет работать.
Оказывается, если в одной базе засунуть пользователя в Т (ТаблицаЗначений) и потом ЗначениеВФайл(<ИмяФайла>,Т). Потом в нужной базе обратно Т=ЗначениеИзФайла(<ИмяФайла>), то в Т появится именно Пользователь ИБ, но не сохраненный, с исходным ИД. Его можно Записать(). И он появится в базе.
А в этом файле можно заменить ИД на желаемый.
Возможно, можно на прямую (не через Т, а стразу ЗначениеВФайл(<ИмяФайла>,Пользователь). Возможно, можно тупо ЗначениеВСтрокуВнутр(Пользователь). Не проверял, но скорее всего будет работать.
(12) Спасибо! Сделал по вашему совету на скорую руку, прекрасно работает:
&НаСервере
Функция ВнестиИзмененияВПользователяИБНаСервере()
//В реквизите формы УИДПользователяИБ из предыдущих процедур записан УИД ПользователяИБ, являющийся
//реквизитом справочника Пользователь. Данный справочник перенесен из другой базы данных и для него нужно создать
//ПользователяИБ с указанным УИД и связать Справочник.Пользователь и ПользовательИБ
ПользовательИБ_Объект = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(УИДПользователяИБ));
//Для получения строки структуры целевого ПользователяИБ, находим исходного ПользователяИБ с похожей структурой
ПользовательИБИсходныхНастроек = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательИсходныхНастроек.ИдентификаторПользователяИБ);
ПользовательИБ_Строка = ЗначениеВСтрокуВнутр(ПользовательИБИсходныхНастроек);
//Поиск и замена в строке УИД
ПользовательИБ_Строка = СтрЗаменить(ПользовательИБ_Строка,Сред(ПользовательИБ_Строка,45,36),УИДПользователяИБ_Новый);
//Поиск и замена в строке Имен
МассивУчастковСтроки = СтрРазделить(ПользовательИБ_Строка,",");
ПользовательИБ_Строка = СтрЗаменить(ПользовательИБ_Строка,СтрЗаменить(МассивУчастковСтроки[3],"""",""),"ИмяПользователя");
ПользовательИБ_Строка = СтрЗаменить(ПользовательИБ_Строка,СтрЗаменить(МассивУчастковСтроки[5],"""",""),"ИмяПользователя");
//Создание нового ПользователяИнформационнойБазы
ПользовательИБ_НовыйОбъект = ЗначениеИзСтрокиВнутр(ПользовательИБ_Строка);
УстановитьПривилегированныйРежим(Истина);
Попытка
ПользовательИБ_НовыйОбъект.Записать();
СтрокаРезультата = СтрШаблон("Создан новый ПользовательИБ: %1, с УИД: %2","ИмяПользователя",УИДПользователяИБ_Новый);
Возврат СтрокаРезультата;
Исключение
ВызватьИсключение "Операция закончилась неудачно!";
КонецПопытки;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот