Skip to content

Commit

Permalink
Создание первого пользователя-администратора (BDD)
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Jul 3, 2020
1 parent 13149c3 commit 4a33cbf
Show file tree
Hide file tree
Showing 8 changed files with 486 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="78badc06-5955-45c6-8a30-99ceb30d75dc">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>7569c3ee-5678-4c71-8295-36f29f9726d1</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.СоздатьПользователей" category="Object">
<xr:TypeId>55bdc23f-32f9-4590-8df2-7a18c4b2c193</xr:TypeId>
<xr:ValueId>ecf3cec3-0401-4f2e-8406-3f41886e4247</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>СоздатьПользователей</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Создать пользователей</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm>ExternalDataProcessor.СоздатьПользователей.Form.Форма</DefaultForm>
<AuxiliaryForm/>
</Properties>
<ChildObjects>
<Form>Форма</Form>
</ChildObjects>
</ExternalDataProcessor>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="ba75a5d6-da93-477a-8a34-b56c95ff2e15">
<Properties>
<Name>Форма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobileDevice</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnOpen">ПриОткрытии</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:ExternalDataProcessorObject.СоздатьПользователей</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
</Attributes>
</Form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
#Область ОбработчикиСобытийФормы

&НаКлиенте
Перем ПутьКОбработке;

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

УбратьПодтверждениеПриЗавершенииПрограммы();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаЗапуска = СокрЛП(ПараметрЗапуска);

Если СтрокаЗапуска = "" Тогда
Возврат;
КонецЕсли;

Попытка
ПутьКОбработке = ПолучитьПутьОбработки();

ПараметрыКоманднойСтроки = ПолучитьСтруктуруПараметров(СтрокаЗапуска);
ПреобразоватьПараметрыКоторыеНачинаютсяСТочкиКНормальнымПутям(ПараметрыКоманднойСтроки);

Если ПараметрыКоманднойСтроки.Свойство("СоздатьАдминистратора") Или
ПараметрыКоманднойСтроки.Свойство("AdminCreate") Тогда

Успешно = СоздатьПервогоАдминистратораПриНеобходимости(ПараметрыКоманднойСтроки.Имя);
КонецЕсли;

Если ПараметрыКоманднойСтроки.Свойство("ЗавершитьРаботуСистемы") Тогда
ЗавершитьРаботуСистемы(Ложь, Ложь);
//ПрекратитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;

Исключение
ОписаниеОшибки = ОписаниеОшибки();
Ошибка = "Неудача при обработке параметров запуска"
+ Символы.ВК + "Параметры: " + СтрокаЗапуска
+ Символы.ВК + ОписаниеОшибки;
Лог(Ошибка);
КонецПопытки;

//ПрекратитьРаботуСистемы(Ложь);
КонецПроцедуры

&НаКлиенте
Функция ПолучитьПутьОбработки()

Перем ФайлПути, Результат;

Результат = ПолучитьПутьКОбработкеСервер();
Если НЕ ПустаяСтрока(ПутьКОбработке) Тогда
ФайлПути = Новый Файл(ПутьКОбработке);
Результат = ФайлПути.Путь;
КонецЕсли;

Возврат Результат;
КонецФункции

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

#КонецОбласти

#Область ОбработчикиКомандФормы

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УбратьПодтверждениеПриЗавершенииПрограммы()

Попытка
Выполнить("ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(""ОбщиеНастройкиПользователя"",
|""ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"", Ложь);");
Исключение
// Данного модуля и метода может не быть в конфигурации
КонецПопытки;

КонецПроцедуры

&НаСервере
// портировано из Vanessa-ADD
Функция ПолучитьПутьКОбработкеСервер()

ОбъектНаСервере = ОбъектНаСервере();
ИспользуемоеИмяФайла = ОбъектНаСервере.ИспользуемоеИмяФайла;
ПрефиксИмени = НРег(Лев(ИспользуемоеИмяФайла, 6));
Если (ПрефиксИмени <> "e1cib/") И (ПрефиксИмени <> "e1cib\") Тогда
Возврат ИспользуемоеИмяФайла;
КонецЕсли;

Возврат "";
КонецФункции

Функция ОбъектНаСервере()
Возврат РеквизитФормыВЗначение("Объект");
КонецФункции

&НаКлиенте
// портировано из Vanessa-ADD
Функция ПолучитьСтруктуруПараметров(Стр)
Результат = Новый Структура;

Массив = РазложитьСтрокуВМассивПодстрок(Стр,";");
Для каждого Элем Из Массив Цикл
Поз = Найти(Элем,"=");
Если Поз > 0 Тогда
Ключ = Лев(Элем, Поз-1);
Значение = Сред(Элем, Поз+1);
Попытка
Результат.Вставить(Ключ, Значение);
Исключение
Лог("Не смог получить значение из строки запуска: " + Ключ);
КонецПопытки;
Иначе
Если НЕ ПустаяСтрока(Элем) Тогда
Попытка
Результат.Вставить(Элем, Истина);
Исключение
Лог("Не смог получить значение из строки запуска: " + Элем);
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат Результат;
КонецФункции

&НаКлиенте
//&НаСервереБезКонтекста
// портировано из Vanessa-ADD
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт

Результат = Новый Массив;

// для обеспечения обратной совместимости
Если ПропускатьПустыеСтроки = Неопределено Тогда
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
Если ПустаяСтрока(Строка) Тогда
Если Разделитель = " " Тогда
Результат.Добавить("");
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЕсли;

Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;

Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
Результат.Добавить(Строка);
КонецЕсли;

Возврат Результат;

КонецФункции

&НаКлиенте
// портировано из Vanessa-ADD
Процедура ПреобразоватьПараметрыКоторыеНачинаютсяСТочкиКНормальнымПутям(СтруктураПараметров)
МассивКлючей = Новый Массив;

Для каждого ПараметрБилда Из СтруктураПараметров Цикл
Если Лев(ПараметрБилда.Значение,1) = "." Тогда
МассивКлючей.Добавить(ПараметрБилда.Ключ);
ИначеЕсли Найти(ПараметрБилда.Значение, "$instrumentsRoot") > 0 Тогда
МассивКлючей.Добавить(ПараметрБилда.Ключ);
КонецЕсли;
КонецЦикла;

Для каждого Ключ Из МассивКлючей Цикл
Было = СтруктураПараметров[Ключ];
Стало = ПреобразоватьПутьСТочкамиКНормальномуПути(СтруктураПараметров[Ключ]);
Лог("Было=" + Было + ", Стало=" + Стало, "");

СтруктураПараметров.Вставить(Ключ,Стало);
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Функция ПреобразоватьПутьСТочкамиКНормальномуПути(ОригСтр)

Если Найти(ОригСтр, "$instrumentsRoot") > 0 И НЕ ПустаяСтрока(ПутьКОбработке) Тогда
ОригСтр = СтрЗаменить(ОригСтр, "$instrumentsRoot", ДополнитьСлешВПуть(ПутьКОбработке));
Возврат ОригСтр;
КонецЕсли;

Возврат ОригСтр;

КонецФункции

// Функция ДополнитьСлешВПуть
//
// Параметры:
// ИмяКаталога
//
// Описание:
// Функция дополняет и возвращает слеш в путь в конец строки, если он отсутствует
//
// портировано из Vanessa-ADD
//
&НаКлиенте
Функция ДополнитьСлешВПуть(Знач Каталог) Экспорт
разделитель = "\";

Если ПустаяСтрока(Каталог) Тогда
Возврат Каталог;
КонецЕсли;
СисИнфо = Новый СистемнаяИнформация;
Если Найти(Строка(СисИнфо.ТипПлатформы), "Linux")>0 Тогда
//Если ЭтоLinux Тогда
разделитель = "/";
КонецЕсли;

Если Прав(Каталог, 1) <> разделитель Тогда
Каталог = Каталог + разделитель;
КонецЕсли;
Возврат Каталог;
КонецФункции

// портировано из Vanessa-ADD
//Функция СоздатьПервогоАдминистратораПриНеобходимости(Имя, ПараметрЗапуска)
Функция СоздатьПервогоАдминистратораПриНеобходимости(Имя)

Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда
Лог("Уже существуют пользователь. Пользователь-администратор не создан!");
Возврат Ложь;
КонецЕсли;

//Если Не (ПустаяСтрока(ПараметрЗапуска) Или ПараметрЗапуска = "AdminCreate" Или ПараметрЗапуска = "СоздатьАдминистратора") Тогда
// Возврат Ложь;
//КонецЕсли;

Администратор = ПользователиИнформационнойБазы.СоздатьПользователя();
Администратор.Имя = Имя;
Администратор.АутентификацияСтандартная = Истина;
Администратор.ПоказыватьВСпискеВыбора = Истина;
Администратор.ПолноеИмя = Имя;

Если Метаданные.Роли.Найти("ПолныеПрава") <> Неопределено Тогда
Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава);
КонецЕсли;

Администратор.Язык = Метаданные.Языки.Русский;
Администратор.Записать();

Сообщение = СтрЗаменить("Пользователь-администратор с именем %1 создан!", "%1", Имя);
Лог(Сообщение, "");

Возврат Истина;

КонецФункции

&НаСервере
Процедура Лог(Знач Комментарий, Знач Уровень = "Ошибка")

Если Не ЗначениеЗаполнено(Уровень) Тогда
Уровень = "Информация";
КонецЕсли;

УровеньЖР = УровеньЖурналаРегистрации.Информация;
Если НРег(Уровень) = "ошибка" Тогда
УровеньЖР = УровеньЖурналаРегистрации.Ошибка;
ИначеЕсли НРег(Уровень) = "предупреждение" Тогда
УровеньЖР = УровеньЖурналаРегистрации.Предупреждение;
КонецЕсли;

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = Уровень + ": " + Комментарий;
СообщениеПользователю.Сообщить();

ЗаписьЖурналаРегистрации(КлючЖР(), УровеньЖР, Неопределено, Неопределено, Комментарий);

КонецПроцедуры

&НаСервере
Функция КлючЖР()
Возврат "VanessaRunner.СозданиеПользователей";
КонецФункции

#КонецОбласти
Loading

0 comments on commit 4a33cbf

Please sign in to comment.