Добавление пользователя в Обновляторе-1С
Поступила интересная задача по автоматическому заведению пользователя сразу в несколько баз 1С Бухгалтерия 3.0 с помощью Обновлятора-1С.
При создании пользователя должны прописываться следующие параметры:
1. Имя пользователя.
2. Полное Имя.
3. Вход в программу разрешен = истина
4. Аутентификация 1С Предприятие = истина
5. Пароль для пользователя.
6. Потребовать смену пароля при входе = истина
7. Пользователю запрещено менять пароль = ложь
8. Пользователю запрещено восстанавливать пароль = ложь
9. Показывать в списке выбора = ложь
10. Электронная почта.
Права доступа:
1. Администратор
2. Главный бухгалтер
3. Открытие внешних отчетов.
4. Синхронизация с другими программами.
Решение есть и даже в нескольких вариантах, но все же пришлось повозиться со скриптом из-за электронной почты (она не мигрирует автоматически из пользователя конфигуратора в пользователя 1С БСП и просит закончить миграцию самостоятельно) и прав доступа через профили групп доступа.
В итоге родился следующий код:
#use "updater1c"
// ****************************************************************************
// Переменные модуля
// ****************************************************************************
Перем errors; // Признак того, что при выполнении скрипта были ошибки.
Перем updater; // Обновлятор, через который мы получаем информацию о базе,
// а также вызываем различные функции обновлятора.
Перем connector; // Коннектор для подключения к базе.
Перем v8; // Само подключение к базе через коннектор.
// ****************************************************************************
// Ваш код для выполнения обновлятором
// ****************************************************************************
Процедура Главная()
ИмяПользователя = "Тест";
ПолноеИмяПользователя = "Тестов Тест";
Пароль = "123";
ЭлПочта = "test@mail.ru";
// создаём пользователя ИБ
ПользовательИБ = v8.ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Имя = ИмяПользователя;
ПользовательИБ.ПолноеИмя = ПолноеИмяПользователя;
ПользовательИБ.Пароль = Пароль;
ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
ПользовательИБ.АутентификацияОС = Истина;
ПользовательИБ.АутентификацияСтандартная = Истина;
ПользовательИБ.ЗапрещеноИзменятьПароль = Ложь;
ПользовательИБ.ЗапрещеноВосстанавливатьПароль = Ложь;
ПользовательИБ.АдресЭлектроннойПочты = ЭлПочта;
Если v8.ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ.Имя) = Неопределено Тогда
ПользовательИБ.Записать();
Сообщить("Новый пользователь создан.");
Иначе
Сообщить("Пользователь с таким именем уже есть в базе!");
Возврат;
КонецЕсли;
// создаём пользователя в справочнике Пользователи
Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
Пользователь.Недействителен = Ложь;
ОписаниеПользователяИБ = v8.NewObject("Структура");
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
ОписаниеПользователяИБ.Вставить("Имя", ИмяПользователя);
ОписаниеПользователяИБ.Вставить("ПолноеИмя", ПолноеИмяПользователя);
ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина);
ОписаниеПользователяИБ.Вставить("АутентификацияОС", Истина);
ОписаниеПользователяИБ.Вставить("Пароль", Пароль);
ОписаниеПользователяИБ.Вставить("Почта", ЭлПочта);
ОписаниеПользователяИБ.Вставить("АдресЭлектроннойПочты", ЭлПочта);
ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Ложь);
ОписаниеПользователяИБ.Вставить("ЗапрещеноИзменятьПароль", Ложь);
ОписаниеПользователяИБ.Вставить("ЗапрещеноВосстанавливатьПароль", Ложь);
ОписаниеПользователяИБ.Вставить("РежимЗапуска", "Авто");
ОписаниеПользователяИБ.Вставить("ВходВПрограммуРазрешен", Истина);
ОписаниеПользователяИБ.Вставить("ПотребоватьСменуПароляПриВходе", Истина);
Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
Пользователь.Записать();
//e-mail добавим через контактуню информацию
ВидКонтактнойИнформации = v8.Справочники.ВидыКонтактнойИнформации.EmailПользователя;
ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип;
ЗначенияПолей = v8.УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(ЭлПочта, ВидКонтактнойИнформации);
v8.УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Пользователь, ЗначенияПолей, ВидКонтактнойИнформации, ТипКонтактнойИнформации);
Пользователь.Записать();
ТекПользователь = Пользователь.Ссылка;
// назначаем права пользователю ИБ
ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Администратор");
v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Главный бухгалтер");
v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Открытие внешних отчетов и обработок");
v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Синхронизация данных с другими программами");
v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
КонецПроцедуры
// ****************************************************************************
// Служебные процедуры
// ****************************************************************************
Процедура ПриНачалеРаботы()
errors = Ложь;
updater = Новый Updater1C;
connector = updater.CreateConnector();
v8 = updater.BaseConnectNew(connector);
КонецПроцедуры
Процедура ПриОкончанииРаботы()
Если v8 <> Неопределено Тогда
Попытка
ОсвободитьОбъект(v8);
v8 = Неопределено;
Исключение
КонецПопытки;
КонецЕсли;
Если connector <> Неопределено Тогда
Попытка
ОсвободитьОбъект(connector);
connector = Неопределено;
Исключение
КонецПопытки;
КонецЕсли;
Если updater <> Неопределено Тогда
Попытка
ОсвободитьОбъект(updater);
updater = Неопределено;
Исключение
КонецПопытки;
КонецЕсли;
Приостановить(1000);
Если errors Тогда
ЗавершитьРаботу(1);
КонецЕсли;
КонецПроцедуры
// ****************************************************************************
// Инициализация и запуск скрипта
// ****************************************************************************
ПриНачалеРаботы();
Попытка
Главная();
updater.КодПользователяВыполнился();
Исключение
errors = Истина;
Сообщить("<span class='red'><b>" + ОписаниеОшибки() + "</b></span>");
КонецПопытки;
ПриОкончанииРаботы();