Добавление пользователя в Обновляторе-1С

Июл 18, 2023 DEV

Поступила интересная задача по автоматическому заведению пользователя сразу в несколько баз 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>");
КонецПопытки;

ПриОкончанииРаботы();

Добавить комментарий