Skip to content

Instantly share code, notes, and snippets.

@fokusov
Last active July 13, 2023 10:25
Show Gist options
  • Save fokusov/63da2d30a04622b05d40429be847df86 to your computer and use it in GitHub Desktop.
Save fokusov/63da2d30a04622b05d40429be847df86 to your computer and use it in GitHub Desktop.
Создание нового пользователя.os
#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 = Неопределено;
Исключение
КонецПопытки;
КонецЕсли;
// Ожидание в конце выполнения программы
// магическим образом помогает избежать
// проблем с освобождением ресурсов, если
// мы использовали внешнее подключение к
// базе. Могут быть случаи, когда недостаточно
// 1 секунды.
Приостановить(1000);
Если errors Тогда
ЗавершитьРаботу(1);
КонецЕсли;
КонецПроцедуры
// ****************************************************************************
// Инициализация и запуск скрипта
// ****************************************************************************
ПриНачалеРаботы();
Попытка
Главная();
updater.КодПользователяВыполнился(); // вот этот вызов нужно вставить
Исключение
errors = Истина;
Сообщить("<span class='red'><b>" + ОписаниеОшибки() + "</b></span>");
КонецПопытки;
ПриОкончанииРаботы();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment