diff --git a/src/Configuration/Configuration.mdo b/src/Configuration/Configuration.mdo
index 7fee588..b6a925c 100644
--- a/src/Configuration/Configuration.mdo
+++ b/src/Configuration/Configuration.mdo
@@ -1533,6 +1533,7 @@
DataProcessor.ЗаменаИОбъединениеЭлементов
DataProcessor.ЗаполнениеГрафиковРаботы
DataProcessor.ЗаполнениеКалендарныхГрафиков
+ DataProcessor.Запуск
DataProcessor.КомандыПроцессов
DataProcessor.КонструкторФормул
DataProcessor.МенеджерРелизов
@@ -1553,6 +1554,7 @@
DataProcessor.РезультатыОбновленияПрограммы
DataProcessor.РекомендацияПоПовышениюСкоростиРаботы
DataProcessor.Сканирование
+ DataProcessor.Терминал
DataProcessor.УдалениеПомеченныхОбъектов
DataProcessor.УправлениеЗадачами
InformationRegister.БезопасноеХранилищеДанных
diff --git a/src/DataProcessors/Запуск/Forms/Форма/Form.form b/src/DataProcessors/Запуск/Forms/Форма/Form.form
new file mode 100644
index 0000000..bd16080
--- /dev/null
+++ b/src/DataProcessors/Запуск/Forms/Форма/Form.form
@@ -0,0 +1,2323 @@
+
+
+
+ ru
+ Мастер настроек
+
+
+ ГруппаШаги
+ 58
+
+ ГруппаСозданиеПользователя
+ 60
+
+ Декорация10
+ 107
+
+ ru
+ <b>Добро пожаловать</> в <s>маин</> мастер настроек.
+Важные ограничения.
+1) База не предполагается к работе в web-клиенте
+2) Каталоги создаются и должны быть доступны от пользователя от которого запускается 1с!
+
+ true
+ true
+
+ true
+
+
+ Декорация10РасширеннаяПодсказка
+ 109
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация10КонтекстноеМеню
+ 108
+ true
+
+ true
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация4
+ 69
+ true
+ true
+
+ true
+
+
+ Декорация4РасширеннаяПодсказка
+ 71
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация4КонтекстноеМеню
+ 70
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ИмяПользователя
+ 130
+ true
+ true
+
+ true
+
+
+ ИмяПользователя
+
+
+ ИмяПользователяРасширеннаяПодсказка
+ 132
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ИмяПользователяКонтекстноеМеню
+ 131
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ИмяПользователяGit
+ 41
+ true
+ true
+
+ true
+
+
+ ИмяПользователяGit
+
+
+ ИмяПользователяGitРасширеннаяПодсказка
+ 43
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ИмяПользователяGitКонтекстноеМеню
+ 42
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ПочтаПользователяGit
+ 44
+ true
+ true
+
+ true
+
+
+ ПочтаПользователяGit
+
+
+ ПочтаПользователяGitРасширеннаяПодсказка
+ 46
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПочтаПользователяGitКонтекстноеМеню
+ 45
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ПарольGit
+ 62
+ true
+ true
+
+ true
+
+
+ ПарольGit
+
+
+ ПарольGitРасширеннаяПодсказка
+ 64
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПарольGitКонтекстноеМеню
+ 63
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ТокенGit
+ 47
+ true
+ true
+
+ true
+
+
+ ТокенGit
+
+
+ ТокенGitРасширеннаяПодсказка
+ 49
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ТокенGitКонтекстноеМеню
+ 48
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ СоздатьПользователя
+ 39
+ true
+ true
+
+ true
+
+
+ СоздатьПользователяРасширеннаяПодсказка
+ 40
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.СоздатьПользователя
+ PictureAndText
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+
+ StdPicture.Forward
+
+ Auto
+ Always
+ Right
+
+
+ НовыйПользователь
+ 110
+
+ ru
+ Пользователь
+
+ true
+ true
+
+ true
+
+
+ НовыйПользователь
+
+
+ НовыйПользовательРасширеннаяПодсказка
+ 112
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НовыйПользовательКонтекстноеМеню
+ 111
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ НастройкиПользователя
+ 98
+ true
+ true
+
+ true
+
+
+ НастройкиПользователя
+
+
+ НастройкиПользователяРасширеннаяПодсказка
+ 100
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НастройкиПользователяКонтекстноеМеню
+ 99
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Создание пользователя
+
+
+ ru
+ Группа создание пользователя
+
+
+ ГруппаСозданиеПользователяРасширеннаяПодсказка
+ 61
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ Vertical
+ true
+
+ 0:9e082d71-175a-4e80-8cca-6b538d3240eb
+
+
+
+
+ ГруппаСозданиеПроекта
+ 65
+
+ Декорация5
+ 72
+ true
+ true
+
+ true
+
+
+ Декорация5РасширеннаяПодсказка
+ 74
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация5КонтекстноеМеню
+ 73
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НазваниеПроекта
+ 55
+ true
+ true
+
+ true
+
+
+ НазваниеПроекта
+
+
+ НазваниеПроектаРасширеннаяПодсказка
+ 57
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НазваниеПроектаКонтекстноеМеню
+ 56
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+ ru
+ ERP
+
+
+
+
+ ТаскТрекер
+ 81
+ true
+ true
+
+ true
+
+
+ ТаскТрекер
+
+
+ ТаскТрекерРасширеннаяПодсказка
+ 83
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ТаскТрекерКонтекстноеМеню
+ 82
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ТипРепозитория
+ 84
+ true
+ true
+
+ true
+
+
+ ТипРепозитория
+
+
+ ТипРепозиторияРасширеннаяПодсказка
+ 86
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ТипРепозиторияКонтекстноеМеню
+ 85
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+
+ ПутьКGitCloneHTTP
+ 75
+ true
+ true
+
+ true
+
+
+ ПутьКGitCloneHTTP
+
+
+ ПутьКGitCloneHTTPРасширеннаяПодсказка
+ 77
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПутьКGitCloneHTTPКонтекстноеМеню
+ 76
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+ ru
+ https://github.com/user/example.git
+
+
+
+
+ Декорация9
+ 104
+
+ ru
+ <fontsize 10><b>Структура каталога репозитория</></>
+Структура должна быть создана по шаблону <link https://github.com/vanessa-opensource/vanessa-bootstrap>https://github.com/vanessa-opensource/vanessa-bootstrap</>, но erf должны лежать в epf
+
+ true
+ true
+
+ true
+
+
+ Декорация9РасширеннаяПодсказка
+ 106
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация9КонтекстноеМеню
+ 105
+ true
+
+ true
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ОсновнаяПапка
+ 28
+ true
+ true
+
+ true
+
+
+ ОсновнаяПапка
+
+
+ ru
+ Основной путь к репозиториям
+
+
+ ОсновнаяПапкаРасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ОсновнаяПапкаКонтекстноеМеню
+ 29
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+
+ StartChoice
+ ОсновнаяПапкаНачалоВыбора
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+ ru
+ С/:devops/
+
+
+
+
+ Декорация8
+ 95
+
+ ru
+ <fontsize 10><b>Структура каталога</></>
+
+devops/
+├── Repositories/
+├──├── Base1/
+├──├── Base2/
+├── Releases/
+
+ true
+ true
+
+ true
+
+
+ Декорация8РасширеннаяПодсказка
+ 97
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация8КонтекстноеМеню
+ 96
+ true
+
+ true
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ГруппаДляGitLab
+ 90
+
+ ИДПроектаРепозитория
+ 87
+ true
+ true
+
+ true
+
+
+ ИДПроектаРепозитория
+
+
+ ИДПроектаРепозиторияРасширеннаяПодсказка
+ 89
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ИДПроектаРепозиторияКонтекстноеМеню
+ 88
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+ 226
+ 248
+ 251
+
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Для git lab
+
+
+ ru
+ Группа для git lab
+
+
+ ГруппаДляGitLabРасширеннаяПодсказка
+ 91
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualGroup
+
+ HorizontalIfPossible
+ Collapsible
+ true
+ WeakSeparation
+ true
+ true
+ true
+ Auto
+ Auto
+
+
+
+ Декорация6
+ 78
+
+ ru
+ По умолчанию будет создан проект с режимом работы "Пакетный", для ibcmd надо переключить
+По умолчанию конфигурация не будет собираться в релиз
+
+ true
+ true
+
+ true
+
+
+ Декорация6РасширеннаяПодсказка
+ 80
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация6КонтекстноеМеню
+ 79
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СоздатьПроект
+ 53
+ true
+ true
+
+ true
+
+
+ СоздатьПроектРасширеннаяПодсказка
+ 54
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.СоздатьПроект
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+ Right
+
+
+ Проект
+ 101
+ true
+ true
+
+ true
+
+
+ Проект
+
+
+ ПроектРасширеннаяПодсказка
+ 103
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПроектКонтекстноеМеню
+ 102
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Создание проекта
+
+
+ ru
+ Группа создание проекта
+
+
+ ГруппаСозданиеПроектаРасширеннаяПодсказка
+ 66
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ Vertical
+ true
+
+ 0:9e082d71-175a-4e80-8cca-6b538d3240eb
+
+
+
+
+ ДобавлениеБаз
+ 67
+
+ СчитатьСписокБаз
+ 1
+
+ ru
+ Получить базы
+
+ true
+ true
+
+ true
+
+
+ СчитатьСписокБазРасширеннаяПодсказка
+ 2
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.СчитатьСписокБаз
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+
+
+ СписокБазДанных
+ 3
+ true
+ true
+
+ true
+
+
+ СписокБазДанных
+
+ None
+
+ СписокБазДанныхИмяБазы
+ 16
+ true
+ true
+
+ true
+
+
+ СписокБазДанных.ИмяБазы
+
+
+ СписокБазДанныхИмяБазыРасширеннаяПодсказка
+ 18
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхИмяБазыКонтекстноеМеню
+ 17
+ true
+
+ InputField
+ EnterOnInput
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ СписокБазДанныхПутьКБазе
+ 19
+ true
+ true
+
+ true
+
+
+ СписокБазДанных.ПутьКБазе
+
+
+ СписокБазДанныхПутьКБазеРасширеннаяПодсказка
+ 21
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхПутьКБазеКонтекстноеМеню
+ 20
+ true
+
+ InputField
+ EnterOnInput
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ СписокБазДанныхСервер
+ 22
+ true
+ true
+
+ true
+
+
+ СписокБазДанных.Сервер
+
+
+ СписокБазДанныхСерверРасширеннаяПодсказка
+ 24
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхСерверКонтекстноеМеню
+ 23
+ true
+
+ InputField
+ EnterOnInput
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ СписокБазДанныхИмяНаСервере
+ 25
+ true
+ true
+
+ true
+
+
+ СписокБазДанных.ИмяНаСервере
+
+
+ СписокБазДанныхИмяНаСервереРасширеннаяПодсказка
+ 27
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхИмяНаСервереКонтекстноеМеню
+ 26
+ true
+
+ InputField
+ EnterOnInput
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ None
+
+ СписокБазДанныхКоманднаяПанель
+ 5
+ Left
+ true
+
+
+ СписокБазДанныхСтрокаПоиска
+ 7
+
+ СписокБазДанныхСтрокаПоискаРасширеннаяПодсказка
+ 9
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхСтрокаПоискаКонтекстноеМеню
+ 8
+ true
+
+ СписокБазДанных
+
+ true
+
+
+
+ СписокБазДанныхСостояниеПросмотра
+ 10
+
+ СписокБазДанныхСостояниеПросмотраРасширеннаяПодсказка
+ 12
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхСостояниеПросмотраКонтекстноеМеню
+ 11
+ true
+
+ ViewStatusAddition
+ СписокБазДанных
+
+ true
+
+
+
+ СписокБазДанныхУправлениеПоиском
+ 13
+
+ СписокБазДанныхУправлениеПоискомРасширеннаяПодсказка
+ 15
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхУправлениеПоискомКонтекстноеМеню
+ 14
+ true
+
+ SearchControlAddition
+ СписокБазДанных
+
+ true
+
+
+
+ СписокБазДанныхРасширеннаяПодсказка
+ 6
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокБазДанныхКонтекстноеМеню
+ 4
+ true
+
+ true
+ true
+ true
+ true
+ true
+ MultiRow
+
+ 1
+ 1
+ AutoUse
+ AutoUse
+ true
+ true
+ true
+ Auto
+ Auto
+ true
+ true
+ true
+ true
+ AsFileRef
+
+ 209
+ 252
+ 218
+
+
+
+
+ Декорация7
+ 92
+
+ ru
+ При создании базы у кластера будут заполнены настройки по умолчанию, при необходимости сменить.
+Первоначальнонастройки заполняются исходя из того что у вас 1 сервер и все пути идентичны.
+<fontsize 10><b>Убедитесь</></>, что у службы от которой запускается 1с есть права на папку
+
+После создания баз поменяйте у них имя и пароль
+
+ true
+ true
+
+ true
+
+
+ Декорация7РасширеннаяПодсказка
+ 94
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация7КонтекстноеМеню
+ 93
+ true
+
+ true
+ Label
+ true
+
+ Left
+
+ 0:9e082d71-175a-4e80-8cca-6b538d3240eb
+
+
+
+
+ ДобавитьБазы
+ 37
+ true
+ true
+
+ true
+
+
+ ДобавитьБазыРасширеннаяПодсказка
+ 38
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.ДобавитьБазы
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+ Usual
+
+ true
+ true
+
+ true
+
+
+ ru
+ Добавление баз
+
+
+ ru
+ Добавление баз
+
+
+ ДобавлениеБазРасширеннаяПодсказка
+ 68
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ Vertical
+ true
+
+ 200
+ 240
+ 207
+
+
+
+
+ ГруппаДополнительныеШаги
+ 113
+
+ УстановитьОскрипт
+ 121
+ true
+ true
+
+ true
+
+
+ УстановитьОскриптРасширеннаяПодсказка
+ 122
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.УстановитьОскрипт
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+
+
+ Декорация11
+ 127
+
+ ru
+ Возможно потребуется рестарт службы 1с
+
+ true
+ true
+
+ true
+
+
+ Декорация11РасширеннаяПодсказка
+ 129
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Декорация11КонтекстноеМеню
+ 128
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+
+ УстановитьКЛИ
+ 125
+ true
+ true
+
+ true
+
+
+ УстановитьКЛИРасширеннаяПодсказка
+ 126
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.УстановитьКЛИ
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+
+
+ СоздатьРепозиторииКБазам
+ 123
+ true
+ true
+
+ true
+
+
+ СоздатьРепозиторииКБазамРасширеннаяПодсказка
+ 124
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.СоздатьРепозиторииКБазам
+ Auto
+ true
+ true
+ UserCmds
+
+ 255
+ 253
+ 166
+
+ Auto
+
+ true
+ true
+
+ true
+
+
+ ru
+ Дополнительные шаги
+
+
+ ru
+ Группа дополнительные шаги
+
+
+ ГруппаДополнительныеШагиРасширеннаяПодсказка
+ 114
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ Vertical
+ true
+
+ 200
+ 240
+ 207
+
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Группа шаги
+
+
+ ru
+ Группа шаги
+
+
+ ГруппаШагиРасширеннаяПодсказка
+ 59
+ Label
+ true
+ true
+
+ Left
+
+
+ Pages
+
+ Auto
+ Auto
+
+
+
+ ФормаКоманднаяПанель
+ -1
+ Left
+
+ Use
+ UseList
+ true
+ true
+ true
+ Vertical
+ true
+ true
+ true
+ Normal
+ true
+ true
+
+ Объект
+ 1
+
+ DataProcessorObject.Запуск
+
+
+ true
+
+
+ true
+
+ true
+
+
+ СписокБазДанных
+
+ ru
+ Список баз данных
+
+ 2
+
+ ValueTable
+
+
+ true
+
+
+ true
+
+
+ СписокБазДанных
+
+
+ ИмяБазы
+
+ ru
+ Имя базы
+
+ 1
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ ПутьКБазе
+
+ ru
+ Путь к базе
+
+ 2
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ Сервер
+
+ ru
+ Сервер
+
+ 3
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ ИмяНаСервере
+
+ ru
+ Имя на сервере
+
+ 4
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+
+ ОсновнаяПапка
+
+ ru
+ Основная папка
+
+ 3
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ОсновнаяПапка
+
+
+
+ ИмяПользователяGit
+
+ ru
+ Имя пользователя git
+
+ 4
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ИмяПользователяGit
+
+
+
+ ПочтаПользователяGit
+
+ ru
+ Почта пользователя git
+
+ 5
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ПочтаПользователяGit
+
+
+
+ НовыйПользователь
+
+ ru
+ Новый пользователь
+
+ 6
+
+ CatalogRef.Пользователи
+
+
+ true
+
+
+ true
+
+
+ НовыйПользователь
+
+
+
+ ТокенGit
+
+ ru
+ Токен git
+
+ 7
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ТокенGit
+
+
+
+ Проект
+
+ ru
+ Проект
+
+ 8
+
+ CatalogRef.Проекты
+
+
+ true
+
+
+ true
+
+
+ Проект
+
+
+
+ НазваниеПроекта
+
+ ru
+ Название проекта
+
+ 9
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ НазваниеПроекта
+
+
+
+ ПарольGit
+
+ ru
+ Пароль git
+
+ 10
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ПарольGit
+
+
+
+ ПутьКGitCloneHTTP
+
+ ru
+ Путь к git clone (HTT
+
+ 11
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ПутьКGitCloneHTTP
+
+
+
+ ТаскТрекер
+
+ ru
+ Таск трекер
+
+ 12
+
+ CatalogRef.ТаскТрекеры
+
+
+ true
+
+
+ true
+
+
+ ТаскТрекер
+
+
+
+ ТипРепозитория
+
+ ru
+ Тип репозитория
+
+ 13
+
+ EnumRef.ТипРепозитория
+
+
+ true
+
+
+ true
+
+
+ ТипРепозитория
+
+
+
+ URLТаскТрекера
+
+ ru
+ URLТаск трекера
+
+ 14
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ URLТаскТрекера
+
+
+
+ ИДПроектаРепозитория
+
+ ru
+ ИДПроекта репозитория
+
+ 15
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ИДПроектаРепозитория
+
+
+
+ НастройкиПользователя
+
+ ru
+ Настройки пользователя
+
+ 16
+
+ CatalogRef.НастройкиПользователей
+
+
+ true
+
+
+ true
+
+
+ НастройкиПользователя
+
+
+
+ Реквизит1
+ 17
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ База
+
+ ru
+ База
+
+ 18
+
+ CatalogRef.Базы
+
+
+ true
+
+
+ true
+
+
+
+ Кластер
+
+ ru
+ Кластер
+
+ 19
+
+ CatalogRef.Кластеры
+
+
+ true
+
+
+ true
+
+
+
+ ИмяПользователя
+
+ ru
+ Имя пользователя
+
+ 20
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+ ИмяПользователя
+
+
+
+ СчитатьСписокБаз
+
+ ru
+ Считать список баз
+
+ 1
+
+ ru
+ Считать список баз
+
+
+
+
+ СчитатьСписокБаз
+
+
+ Auto
+
+
+ ДобавитьБазы
+
+ ru
+ Добавить базы
+
+ 2
+
+ ru
+ Добавить базы
+
+
+
+
+ ДобавитьБазы
+
+
+ Auto
+
+
+ СоздатьПользователя
+
+ ru
+ Создать пользователя
+
+ 3
+
+ ru
+ Создать пользователя
+
+
+
+
+ СоздатьПользлователя
+
+
+ Auto
+
+
+ СоздатьПроект
+
+ ru
+ Создать проект
+
+ 4
+
+ ru
+ Создать проект
+
+
+
+ StdPicture.Forward
+
+
+
+ СоздатьПроект
+
+
+ TextPicture
+ Auto
+
+
+ УстановитьОскрипт
+
+ ru
+ Установить Oscript
+
+ 5
+
+ ru
+ Установить оскрипт
+
+
+
+
+ УстановитьОскрипт
+
+
+ Auto
+
+
+ СоздатьРепозиторииКБазам
+
+ ru
+ Создать репозитории к базам
+
+ 6
+
+ ru
+ Создать репозитории к базам
+
+
+
+
+ СоздатьРепозиторииКБазам
+
+
+ Auto
+
+
+ УстановитьКЛИ
+
+ ru
+ Установить КЛИ
+
+ 7
+
+ ru
+ Установить КЛИ
+
+
+
+
+ УстановитьКЛИ
+
+
+ Auto
+
+
+
+
+
+
+
diff --git a/src/DataProcessors/Запуск/Forms/Форма/Module.bsl b/src/DataProcessors/Запуск/Forms/Форма/Module.bsl
new file mode 100644
index 0000000..8c57b66
--- /dev/null
+++ b/src/DataProcessors/Запуск/Forms/Форма/Module.bsl
@@ -0,0 +1,486 @@
+
+&НаКлиенте
+Процедура ОсновнаяПапкаНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
+ СтандартнаяОбработка = Ложь;
+
+ ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
+ ДиалогОткрытия.Каталог = ОсновнаяПапка;
+ ДиалогОткрытия.Заголовок = "Выберите каталог основной папки проекта";
+ ДиалогОткрытия.Показать(Новый ОписаниеОповещения("ВыборКаталога_Завершение", ЭтотОбъект, "" ));
+
+ Модифицированность = Истина;
+КонецПроцедуры
+
+
+&НаКлиенте
+Процедура ВыборКаталога_Завершение(Результат, Параметр) Экспорт
+
+ Если Результат = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+ ОсновнаяПапка = Результат[0];
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СчитатьСписокБаз(Команда)
+
+ СписокБазДанных.Очистить();
+ Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда
+ ВременныйКаталог = КаталогДокументов();
+ ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "\Documents\", "\AppData\Roaming\1C\1CEStart\");
+ Иначе
+ ВременныйКаталог = КаталогВременныхФайлов();
+ ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "\Local\Temp\", "\Roaming\1C\1CEStart\");
+ КонецЕсли;
+
+
+ ИмяФайла = "ibases.v8i";
+ ФайлЗапуска1С = Новый Файл(ВременныйКаталог + ИмяФайла);
+
+ Если ФайлЗапуска1С.Существует() Тогда
+
+ ТекстовыйДокИзФайла = Новый ТекстовыйДокумент;
+ ТекстовыйДокИзФайла.Прочитать(ФайлЗапуска1С.ПолноеИмя);
+
+ //Текст = ТекстовыйДокИзФайла.ПолучитьТекст();
+
+ СлБаза = Ложь;
+ Для НомерСтроки = 1 По ТекстовыйДокИзФайла.КоличествоСтрок() Цикл
+
+ СтрокаТекста = ТекстовыйДокИзФайла.ПолучитьСтроку(НомерСтроки);
+
+ Если Лев(СтрокаТекста, 1) = "[" Тогда //Это имя в списке
+
+ СтруктураБазы = Новый Структура;
+
+ СтруктураБазы.Вставить("ИмяБазы", Сред(СтрокаТекста, 2, СтрДлина(СтрокаТекста) - 2));
+
+ ИначеЕсли СтрЧислоВхождений(СтрокаТекста, "Connect=File=") > 0 Тогда
+
+ Путь = СтрЗаменить(СтрокаТекста, "Connect=File=", "");
+
+ Путь = СтрЗаменить(Путь, ";", "");
+ Путь = СтрЗаменить(Путь, """", "");
+
+ СтруктураБазы.Вставить("ПутьКБазе", Путь);
+
+ //Проверяем добавляемую строку
+ Если СписокБазДанных.НайтиСтроки(Новый Структура("ИмяБазы", СтруктураБазы.ИмяБазы)).Количество() = 0 Тогда
+ СтрокаБазы = СписокБазДанных.Добавить();
+
+ ЗаполнитьЗначенияСвойств(СтрокаБазы, СтруктураБазы);
+ КонецЕсли;
+ ИначеЕсли СтрЧислоВхождений(СтрокаТекста, "Connect=Srvr=") > 0 Тогда
+ Путь = СтрЗаменить(СтрокаТекста, "Connect=Srvr=", "");
+ Путь = СтрЗаменить(Путь, "Ref=", "");
+ Путь = СтрЗаменить(Путь, """", "");
+
+ Пути = СтрРазделить(Путь, ";", Ложь);
+ СтруктураБазы.Вставить("Сервер", Пути[0]);
+ СтруктураБазы.Вставить("ИмяНаСервере", Пути[1]);
+
+ Если СписокБазДанных.НайтиСтроки(Новый Структура("ИмяБазы", СтруктураБазы.ИмяБазы)).Количество() = 0 Тогда
+ СтрокаБазы = СписокБазДанных.Добавить();
+
+ ЗаполнитьЗначенияСвойств(СтрокаБазы, СтруктураБазы);
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура СоздатьПользлователяНаСервере()
+
+ Пользователи.СоздатьАдминистратора();
+ НовыйПользователь = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя, Истина);
+ Если НовыйПользователь.Пустая() Тогда
+ НовыйПользователь = СоздатьАдминистратора();
+ КонецЕсли;
+ НастройкиПользователя = НастройкаПоВладельцу(НовыйПользователь);
+ Если НастройкиПользователя.Пустая() Тогда
+ НастройкиПользователяОбъект = Справочники.НастройкиПользователей.СоздатьЭлемент();
+ НастройкиПользователяОбъект.Заполнить(Неопределено); //TODO Реализовать автозаполнение настроек по умолчанию
+ НастройкиПользователяОбъект.Владелец = НовыйПользователь;
+ НастройкиПользователяОбъект.ИмяПользователяGit = ИмяПользователяGit;
+ НастройкиПользователяОбъект.ПочтаПользователяGit = ПочтаПользователяGit;
+ НастройкиПользователяОбъект.ТокенGit = ТокенGit;
+ НастройкиПользователяОбъект.Проект = Справочники.Проекты.Неопределен;
+ НастройкиПользователяОбъект.Записать();
+ НастройкиПользователя = НастройкиПользователяОбъект.Ссылка;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция НастройкаПоВладельцу(Владелец)
+
+ Результат = Справочники.НастройкиПользователей.ПустаяСсылка();
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | НастройкиПользователей.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.НастройкиПользователей КАК НастройкиПользователей
+ |ГДЕ
+ | НастройкиПользователей.Владелец = &Владелец";
+
+ Запрос.УстановитьПараметр("Владелец", Владелец);
+
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Выборка = РезультатЗапроса.Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+ Результат = Выборка.Ссылка;
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+&НаКлиенте
+Процедура СоздатьПользлователя(Команда)
+ СоздатьПользлователяНаСервере();
+ ПоказатьЗначение(, НастройкиПользователя);
+КонецПроцедуры
+
+&НаСервере
+Процедура СоздатьПроектНаСервере()
+
+ Проект = Справочники.Проекты.НайтиПоНаименованию(НазваниеПроекта);
+ Если НЕ Проект.Пустая() Тогда
+ Возврат;
+ КонецЕсли;
+
+ ПроектОбъект = Справочники.Проекты.СоздатьЭлемент();
+ ПроектОбъект.Заполнить(Неопределено); //TODO Реализовать автозаполнение настроек по умолчанию
+ ПроектОбъект.Наименование = НазваниеПроекта;
+ Если ТипРепозитория = Перечисления.ТипРепозитория.GitHub Тогда
+ Авторизация = СтрШаблон("://%1@%2", ИмяПользователяGit, ТокенGit);//TODO Безопасное хранилище паролей
+ ИначеЕсли ТипРепозитория = Перечисления.ТипРепозитория.GitLab Тогда
+ Авторизация = СтрШаблон("://%1@%2", ИмяПользователяGit, ТокенGit);
+ Иначе
+ //Не обработанные типы репозиториев
+ КонецЕсли;
+ ПроектОбъект.PathGitClone = СтрЗаменить(ПутьКGitCloneHTTP, "://", Авторизация);
+ ПроектОбъект.КаталогРепозиториевПроекта = ОсновнаяПапка;
+ ПроектОбъект.КаталогРепозиториевШара = ОсновнаяПапка;
+ ПроектОбъект.КаталогСборкиРелиза = ОсновнаяПапка + "\release";
+ ПроектОбъект.ТаскТрекер =ТаскТрекер;
+ ПроектОбъект.ТипРепозитория = ТипРепозитория;
+ ПроектОбъект.ИДПроектаРепозитория = ИДПроектаРепозитория;
+ ПроектОбъект.РежимРаботыКонфигурации = Перечисления.РежимыРаботыКонфигурации.Пакетный;
+ ПроектОбъект.Записать();
+ Проект = ПроектОбъект.Ссылка;
+ НастройкаОбъект = НастройкиПользователя.ПолучитьОбъект();
+ НастройкаОбъект.Проект = Проект;
+ НастройкаОбъект.Записать();
+
+ СоздатьКаталог(ПроектОбъект.КаталогСборкиРелиза);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПроект(Команда)
+ СоздатьПроектНаСервере();
+ ПоказатьЗначение(, Проект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьБазы(Команда)
+
+ ВыделенныеСтроки = Элементы.СписокБазДанных.ВыделенныеСтроки;
+ МассивБаз = Новый Массив;
+
+ Для Каждого СтрокаБазы Из ВыделенныеСтроки Цикл
+ ДанныеСтроки = Элементы.СписокБазДанных.ДанныеСтроки(СтрокаБазы);
+ Если Не ЗначениеЗаполнено(ДанныеСтроки.Сервер) Тогда
+ Сообщить("База не серверная созданна не будет" + ДанныеСтроки.ИмяБазы);
+ Продолжить;
+ КонецЕсли;
+ СтруктураСервернойБазы = СтруктураСервернойБазы();
+ ЗаполнитьЗначенияСвойств(СтруктураСервернойБазы, ДанныеСтроки);
+ МассивБаз.Добавить(СтруктураСервернойБазы);
+ КонецЦикла;
+
+ ДобавитьБазыНаСервере(МассивБаз);
+ ПоказатьЗначение(, Кластер);
+КонецПроцедуры
+
+
+&НаКлиенте
+Функция СтруктураСервернойБазы()
+ Возврат Новый Структура("ИмяБазы, Сервер, ИмяНаСервере");
+КонецФункции
+
+&НаСервере
+Процедура ДобавитьБазыНаСервере(МассивБаз)
+
+ Для Каждого Элемент Из МассивБаз Цикл
+
+ Кластер = Справочники.Кластеры.НайтиПоНаименованию(Элемент.Сервер, Истина);
+ Если Кластер.Пустая() Тогда
+ КластерОбъект = Справочники.Кластеры.СоздатьЭлемент();
+ КластерОбъект.ИмяАгентаБазы = "GitAgent";
+ КластерОбъект.КаталогRAS = "GitAgent";
+ КластерОбъект.НомерВерсииПлатформы = "8.3"; //TODO
+ КластерОбъект.ПутьКПапкеДевопс = ОсновнаяПапка;
+ КластерОбъект.ПутьКШаре = ОсновнаяПапка;
+ КластерОбъект.ФайлЗапускаOscript = "";//
+ //КластерОбъект.ФайлЗапускаOscript = "";//Добавить путь к rac
+ КластерОбъект.Наименование = Элемент.Сервер;
+ КластерОбъект.СерверПубликации = Элемент.Сервер;
+ КластерОбъект.Записать();
+ Кластер = КластерОбъект.Ссылка;
+ КонецЕсли;
+ База = Справочники.Базы.НайтиПоНаименованию(Элемент.ИмяНаСервере, Истина);
+ Если База.Пустая() Тогда
+ БазаОбъект = Справочники.Базы.СоздатьЭлемент();
+ БазаОбъект.Владелец = Проект;
+ БазаОбъект.БазаПубликации = Элемент.ИмяНаСервере;
+ БазаОбъект.КластерСерверов = Кластер;
+ БазаОбъект.Наименование = Элемент.ИмяНаСервере;
+ БазаОбъект.ТипБазы = Перечисления.ТипыБаз.ТестоваяБаза;
+ БазаОбъект.Ответственный = НовыйПользователь;
+ БазаОбъект.ИмяИнформационнойБазы = Элемент.ИмяНаСервере;
+ БазаОбъект.ИмяПользователяИнформационнойБазы = "1с";
+ БазаОбъект.ПарольПользователяИнформационнойБазы = "1с";
+ БазаОбъект.Записать();
+
+ Сообщить("Создана база " + БазаОбъект.Ссылка);
+ КонецЕсли;
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьОскриптНаСервере()
+
+
+ ИмяФайла = ПолучитьИмяВременногоФайла("exe");
+ АдресФайла = "https://github.com/oscript-library/ovm/releases/latest/download/ovm.exe";
+ НовыеПараметры = КоннекторHTTP.НовыеПараметры();
+ НовыеПараметры.Заголовки.Вставить("User-Agent",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
+ НовыеПараметры.Таймаут = 90;
+ Ответ = КоннекторHTTP.Get(АдресФайла,,НовыеПараметры);
+ Данные = КоннекторHTTP.КакДвоичныеДанные(Ответ);
+ Данные.Записать(ИмяФайла);
+
+ ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
+ ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
+
+
+ Результат = ФайловаяСистема.ЗапуститьПрограмму(СтрШаблон("%1 install dev", ИмяФайла), ПараметрыЗапускаПрограммы);
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокВывода);
+ Если ЗначениеЗаполнено(Результат.ПотокОшибок) Тогда
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокОшибок);
+ КонецЕсли;
+
+ Результат = ФайловаяСистема.ЗапуститьПрограмму(СтрШаблон("%1 use --install dev", ИмяФайла), ПараметрыЗапускаПрограммы);
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокВывода);
+ Если ЗначениеЗаполнено(Результат.ПотокОшибок) Тогда
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокОшибок);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УстановитьОскрипт(Команда)
+ УстановитьОскриптНаСервере();
+КонецПроцедуры
+
+&НаСервере
+Процедура СоздатьРепозиторииКБазамНаСервере()
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | Базы.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.Базы КАК Базы";
+
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Выборка = РезультатЗапроса.Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+
+ КаталогРепозиторияБазыШара = РаботаСGit.КаталогРепозиторияБазыШара(Выборка.Ссылка);
+ КаталогРепозиторияБазы = РаботаСGit.КаталогРепозиторияБазы(Выборка.Ссылка);
+ Если ПустаяСтрока(КаталогРепозиторияБазыШара) Тогда
+ Ошибка = "Ошибка: Не указан каталог репозиториев в проекте!";
+ Сообщить(Ошибка);
+ Продолжить;
+ КонецЕсли;
+ Если Не РаботаСGit.КаталогРепозиторияСуществует(КаталогРепозиторияБазыШара) Тогда
+ Если Не РаботаСGit.СоздатьКаталогРепозитория(КаталогРепозиторияБазыШара) Тогда
+ Ошибка = СтрШаблон("Ошибка: Не удалось создать каталог репозитория базы: %1", КаталогРепозиторияБазыШара);
+ Сообщить(Ошибка);
+ Продолжить;
+ КонецЕсли;
+ КонецЕсли;
+ Если Не РаботаСGit.ПустойРепозиторий(КаталогРепозиторияБазыШара) Тогда
+ Ошибка = СтрШаблон("Ошибка! В каталоге есть файлы: %1%2Перед созданием репозитория каталог должен быть пустым.", КаталогРепозиторияБазы, Символы.ПС);
+ Сообщить(Ошибка);
+ Продолжить;
+ КонецЕсли;
+
+ РаботаСGit.СоздатьНовыйРепозиторийВГИТ(Выборка.Ссылка, НовыйПользователь);
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьРепозиторииКБазам(Команда)
+ СоздатьРепозиторииКБазамНаСервере();
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьКЛИНаСервере()
+ ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
+ ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
+
+ Результат = ФайловаяСистема.ЗапуститьПрограмму("opm install pivo-cli", ПараметрыЗапускаПрограммы);
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокВывода);
+ Если ЗначениеЗаполнено(Результат.ПотокОшибок) Тогда
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокОшибок);
+ КонецЕсли;
+ Результат = ФайловаяСистема.ЗапуститьПрограмму("pivo-cli", ПараметрыЗапускаПрограммы);
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокВывода);
+ Если ЗначениеЗаполнено(Результат.ПотокОшибок) Тогда
+ ОбщегоНазначения.СообщитьПользователю(Результат.ПотокОшибок);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УстановитьКЛИ(Команда)
+ УстановитьКЛИНаСервере();
+КонецПроцедуры
+
+
+// Используется при обновлении и начальном заполнении информационной базы.
+// 1) Создает первого администратора и сопоставляет его с новым или существующим
+// пользователем в справочнике Пользователи.
+// 2) Сопоставляет администратора, указанного в параметре ПользовательИБ, с новым или
+// существующим пользователем в справочнике Пользователи.
+//
+// Параметры:
+// ПользовательИБ - Неопределено - создать первого администратора, если не существует.
+// - ПользовательИнформационнойБазы - используется, когда нужно сопоставить
+// существующего администратора с новым или существующим пользователем
+// в справочнике Пользователи.
+//
+// Возвращаемое значение:
+// Неопределено - первый администратор уже существует.
+// СправочникСсылка.Пользователи - пользователь в справочнике, с которым сопоставлен созданный
+// первый администратор или указанный существующий.
+//
+Функция СоздатьАдминистратора(ПользовательИБ = Неопределено) Экспорт
+
+ Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
+ ТекстОшибки = НСтр("ru = 'Справочник Пользователи недоступен в неразделенном режиме.'");
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ УстановитьПривилегированныйРежим(Истина);
+
+ // Добавление администратора.
+ Если ПользовательИБ = Неопределено Тогда
+ ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
+ ПользовательИБ.Имя = ИмяПользователя;
+ ПользовательИБ.ПолноеИмя = ПользовательИБ.Имя;
+ ПользовательИБ.Роли.Очистить();
+ ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава);
+ РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы;
+ Если НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы) Тогда
+ ПользовательИБ.Роли.Добавить(РольАдминистратораСистемы);
+ КонецЕсли;
+ ПользовательИБ.Записать();
+ Иначе
+ Если Не ПользователиСлужебный.РолиАдминистратораДоступны(ПользовательИБ) Тогда
+ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Невозможно создать пользователя в справочнике для пользователя
+ |информационной базы ""%1"",
+ |так как у него нет ролей Полные права и Администратор системы.
+ |
+ |Вероятно, пользователь был создан в конфигураторе.
+ |Для автоматического создания пользователя в справочнике требуется
+ |назначить ему роли Полные права и Администратор системы.'"),
+ Строка(ПользовательИБ));
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ПользовательИБ.УникальныйИдентификатор);
+ КонецЕсли;
+
+ НачатьТранзакцию();
+ Попытка
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
+ ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи");
+ ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
+ ЭлементБлокировки.УстановитьЗначение("Наименование", ПользовательИБ.ПолноеИмя);
+ Блокировка.Заблокировать();
+
+ Пользователь = Неопределено;
+ ПользователиСлужебный.ПользовательПоИдентификаторуСуществует(ПользовательИБ.УникальныйИдентификатор,, Пользователь);
+ Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
+ ВнешнийПользовательОбъект = Пользователь.ПолучитьОбъект();
+ ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = Неопределено;
+ ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВнешнийПользовательОбъект);
+ Пользователь = Неопределено;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
+ Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользовательИБ.ПолноеИмя);
+
+ Если ЗначениеЗаполнено(Пользователь)
+ И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ)
+ И Пользователь.ИдентификаторПользователяИБ <> ПользовательИБ.УникальныйИдентификатор
+ И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
+ Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда
+
+ Пользователь = Неопределено;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
+ Пользователь = Справочники.Пользователи.СоздатьЭлемент();
+ ПользовательСоздан = Истина;
+ Иначе
+ Пользователь = Пользователь.ПолучитьОбъект();
+ ПользовательСоздан = Ложь;
+ КонецЕсли;
+
+ Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
+
+ ОписаниеПользователяИБ = Новый Структура;
+ ОписаниеПользователяИБ.Вставить("Действие", "Записать");
+ ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
+ Пользователь.Записать();
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
+ Возврат Пользователь.Ссылка;
+
+КонецФункции
+
+
+
diff --git a/src/DataProcessors/Запуск/Запуск.mdo b/src/DataProcessors/Запуск/Запуск.mdo
new file mode 100644
index 0000000..3de3455
--- /dev/null
+++ b/src/DataProcessors/Запуск/Запуск.mdo
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ Запуск
+
+ ru
+ Запуск
+
+ true
+ DataProcessor.Запуск.Form.Форма
+
+ Форма
+
+ ru
+ Форма
+
+ PersonalComputer
+ MobileDevice
+
+
diff --git a/src/DataProcessors/Терминал/Forms/Форма/Form.form b/src/DataProcessors/Терминал/Forms/Форма/Form.form
new file mode 100644
index 0000000..fa519ba
--- /dev/null
+++ b/src/DataProcessors/Терминал/Forms/Форма/Form.form
@@ -0,0 +1,534 @@
+
+
+
+ Группа3
+ 31
+
+ Группа1
+ 11
+
+ Команда
+ 1
+ true
+ true
+
+ true
+
+
+ КомандаЗапуска
+
+
+ КомандаРасширеннаяПодсказка
+ 3
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандаКонтекстноеМеню
+ 2
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ ФормаВыполнитьСервер
+ 9
+ true
+ true
+
+ true
+
+
+ ФормаВыполнитьСерверРасширеннаяПодсказка
+ 10
+ Label
+ true
+ true
+
+ Left
+
+
+ Hyperlink
+ Form.Command.ВыполнитьСервер
+ Auto
+ true
+ true
+ UserCmds
+
+ CommonPicture.СтрелкаВправоЗеленая
+
+ Auto
+
+
+ ФормаВыполнитьКлиент
+ 7
+ true
+ true
+
+ true
+
+
+ ФормаВыполнитьКлиентРасширеннаяПодсказка
+ 8
+ Label
+ true
+ true
+
+ Left
+
+
+ Hyperlink
+ Form.Command.ВыполнитьКлиент
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+ true
+ true
+
+ true
+
+
+ Группа1РасширеннаяПодсказка
+ 12
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualGroup
+
+ AlwaysHorizontal
+ Auto
+ true
+ true
+ Auto
+ Auto
+
+
+
+ Вывод
+ 4
+ true
+ true
+
+ true
+
+
+ Вывод
+
+
+ ВыводРасширеннаяПодсказка
+ 6
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВыводКонтекстноеМеню
+ 5
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Группа3
+
+ 70
+ true
+
+ Группа3РасширеннаяПодсказка
+ 32
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualGroup
+
+ HorizontalIfPossible
+ Auto
+ true
+ true
+ Auto
+ Auto
+
+
+
+ Группа2
+ 29
+
+ Команды
+ 13
+ true
+ true
+
+ true
+
+
+ Команды
+
+ None
+
+ КомандыЗначение
+ 26
+ true
+ true
+
+ true
+
+
+ Команды.Value
+
+
+ КомандыЗначениеРасширеннаяПодсказка
+ 28
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандыЗначениеКонтекстноеМеню
+ 27
+ true
+
+ InputField
+ EnterOnInput
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+ None
+
+ КомандыКоманднаяПанель
+ 14
+ Left
+ true
+
+
+ КомандыСтрокаПоиска
+ 17
+
+ КомандыСтрокаПоискаРасширеннаяПодсказка
+ 19
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандыСтрокаПоискаКонтекстноеМеню
+ 18
+ true
+
+ Команды
+
+ true
+
+
+
+ КомандыСостояниеПросмотра
+ 23
+
+ КомандыСостояниеПросмотраРасширеннаяПодсказка
+ 25
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандыСостояниеПросмотраКонтекстноеМеню
+ 24
+ true
+
+ ViewStatusAddition
+ Команды
+
+ true
+
+
+
+ КомандыУправлениеПоиском
+ 20
+
+ КомандыУправлениеПоискомРасширеннаяПодсказка
+ 22
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандыУправлениеПоискомКонтекстноеМеню
+ 21
+ true
+
+ SearchControlAddition
+ Команды
+
+ true
+
+
+
+ КомандыРасширеннаяПодсказка
+ 16
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КомандыКонтекстноеМеню
+ 15
+ true
+
+ true
+ true
+ true
+ true
+ true
+ MultiRow
+
+ 1
+ 1
+ AutoUse
+ AutoUse
+ true
+ true
+ Auto
+ Auto
+ true
+ true
+ AsFileRef
+
+ true
+ true
+
+ true
+
+
+ ru
+ Группа2
+
+
+ Группа2РасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualGroup
+
+ HorizontalIfPossible
+ Auto
+ true
+ true
+ Auto
+ Auto
+
+
+
+ ФормаКоманднаяПанель
+ -1
+ Left
+ true
+
+ true
+ true
+ true
+ AlwaysHorizontal
+ true
+ true
+ true
+ true
+ true
+
+ Объект
+ 1
+
+ DataProcessorObject.Терминал
+
+
+ true
+
+
+ true
+
+ true
+
+
+ КомандаЗапуска
+
+ ru
+ Команда запуска
+
+ 2
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ Вывод
+
+ ru
+ Вывод
+
+ 3
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ Команды
+
+ ru
+ Команды
+
+ 4
+
+ ValueList
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+ ВыполнитьКлиент
+
+ ru
+ Клиент
+
+ 1
+
+ ru
+ Выполнить клиент
+
+
+
+ CommonPicture.СтрелкаВправоЗеленая
+
+
+
+ ВыполнитьКлиент
+
+
+ Auto
+
+
+ ВыполнитьСервер
+
+ ru
+ Сервер
+
+ 2
+
+ ru
+ Выполнить сервер
+
+
+
+
+ ВыполнитьСервер
+
+
+ Auto
+
+
+
+
+
+
+
diff --git a/src/DataProcessors/Терминал/Forms/Форма/Module.bsl b/src/DataProcessors/Терминал/Forms/Форма/Module.bsl
new file mode 100644
index 0000000..d6a2781
--- /dev/null
+++ b/src/DataProcessors/Терминал/Forms/Форма/Module.bsl
@@ -0,0 +1,44 @@
+
+&НаКлиенте
+Процедура ВыполнитьКлиент(Команда)
+
+ ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы();
+ ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
+ ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения("ПриПолученииРезультатаЗапускаПрограммы", ЭтотОбъект);
+
+ ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриПолученииРезультатаЗапускаПрограммы(Результат, ДополнительныеПараметры) Экспорт
+ КодВозврата = Результат.КодВозврата;
+ ПотокВывода = Результат.ПотокВывода;
+ ПотокОшибок = Результат.ПотокОшибок;
+ Вывод = ПотокВывода + Символы.ПС + ПотокОшибок;
+
+КонецПроцедуры
+
+
+&НаСервере
+Процедура ВыполнитьСерверНаСервере()
+
+ ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
+ ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
+ ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
+ Результат = ФайловаяСистема.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы);
+
+ ПотокВывода = Результат.ПотокВывода;
+ ПотокОшибок = Результат.ПотокОшибок;
+ Вывод = ПотокВывода + Символы.ПС + ПотокОшибок;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВыполнитьСервер(Команда)
+ Команды.Вставить(0, КомандаЗапуска, КомандаЗапуска, , );
+ ВыполнитьСерверНаСервере();
+КонецПроцедуры
diff --git a/src/DataProcessors/Терминал/Терминал.mdo b/src/DataProcessors/Терминал/Терминал.mdo
new file mode 100644
index 0000000..4647d7c
--- /dev/null
+++ b/src/DataProcessors/Терминал/Терминал.mdo
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ Терминал
+
+ ru
+ Терминал
+
+ true
+ DataProcessor.Терминал.Form.Форма
+
+ Форма
+
+ ru
+ Форма
+
+ PersonalComputer
+ MobileDevice
+
+
diff --git a/src/Subsystems/УправлениеРазработкой/УправлениеРазработкой.mdo b/src/Subsystems/УправлениеРазработкой/УправлениеРазработкой.mdo
index cb1dd93..f7a2935 100644
--- a/src/Subsystems/УправлениеРазработкой/УправлениеРазработкой.mdo
+++ b/src/Subsystems/УправлениеРазработкой/УправлениеРазработкой.mdo
@@ -89,4 +89,6 @@
Catalog.Команды
Catalog.УчетныеДанные
Enum.ТипыУчетныхДанных
+ DataProcessor.Запуск
+ DataProcessor.Терминал