1
0
mirror of https://github.com/Untru/gitmanager.git synced 2025-08-11 21:46:59 +02:00

Добавил терминал и обработку запуска

This commit is contained in:
Pavel Chegodaev
2025-07-31 23:07:53 +03:00
parent 4a3c8c821b
commit fa6d4f9f03
8 changed files with 3437 additions and 0 deletions

View File

@@ -1533,6 +1533,7 @@
<dataProcessors>DataProcessor.ЗаменаИОбъединениеЭлементов</dataProcessors>
<dataProcessors>DataProcessor.ЗаполнениеГрафиковРаботы</dataProcessors>
<dataProcessors>DataProcessor.ЗаполнениеКалендарныхГрафиков</dataProcessors>
<dataProcessors>DataProcessor.Запуск</dataProcessors>
<dataProcessors>DataProcessor.КомандыПроцессов</dataProcessors>
<dataProcessors>DataProcessor.КонструкторФормул</dataProcessors>
<dataProcessors>DataProcessor.МенеджерРелизов</dataProcessors>
@@ -1553,6 +1554,7 @@
<dataProcessors>DataProcessor.РезультатыОбновленияПрограммы</dataProcessors>
<dataProcessors>DataProcessor.РекомендацияПоПовышениюСкоростиРаботы</dataProcessors>
<dataProcessors>DataProcessor.Сканирование</dataProcessors>
<dataProcessors>DataProcessor.Терминал</dataProcessors>
<dataProcessors>DataProcessor.УдалениеПомеченныхОбъектов</dataProcessors>
<dataProcessors>DataProcessor.УправлениеЗадачами</dataProcessors>
<informationRegisters>InformationRegister.БезопасноеХранилищеДанных</informationRegisters>

File diff suppressed because it is too large Load Diff

View File

@@ -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"",
|так как у него нет ролей Полные права и Администратор системы.
|
|Вероятно, пользователь был создан в конфигураторе.
|Для автоматического создания пользователя в справочнике требуется
|назначить ему роли Полные права и Администратор системы.'"),
Строка(ПользовательИБ));
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ПользовательИБ.УникальныйИдентификатор);
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи");
ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
ЭлементБлокировки.УстановитьЗначение("Наименование", ПользовательИБ.ПолноеИмя);
Блокировка.Заблокировать();
Пользователь = Неопределено;
ПользователиСлужебный.ПользовательПоИдентификаторуСуществует(ПользовательИБ.УникальныйИдентификатор,, Пользователь);
Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
ВнешнийПользовательОбъект = Пользователь.ПолучитьОбъект();
ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = Неопределено;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВнешнийПользовательОбъект);
Пользователь = Неопределено;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользовательИБ.ПолноеИмя);
Если ЗначениеЗаполнено(Пользователь)
И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ)
И Пользователь.ИдентификаторПользователяИБ <> ПользовательИБ.УникальныйИдентификатор
И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда
Пользователь = Неопределено;
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
Пользователь = Справочники.Пользователи.СоздатьЭлемент();
ПользовательСоздан = Истина;
Иначе
Пользователь = Пользователь.ПолучитьОбъект();
ПользовательСоздан = Ложь;
КонецЕсли;
Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
ОписаниеПользователяИБ = Новый Структура;
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
Пользователь.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Возврат Пользователь.Ссылка;
КонецФункции

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9c70198e-e182-413c-ac1a-6584b2a37935">
<producedTypes>
<objectType typeId="5ed4878e-d660-45f9-a79b-5aafc2f44533" valueTypeId="44fb20d2-5404-4803-96e4-98279233406f"/>
<managerType typeId="49c74d9e-8ffd-4f77-a987-fc6d0b018b37" valueTypeId="71bbf820-6cea-4335-bcf4-1eda16a89b61"/>
</producedTypes>
<name>Запуск</name>
<synonym>
<key>ru</key>
<value>Запуск</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<defaultForm>DataProcessor.Запуск.Form.Форма</defaultForm>
<forms uuid="93e87f01-b54d-48d7-9436-55b3f608427e">
<name>Форма</name>
<synonym>
<key>ru</key>
<value>Форма</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:DataProcessor>

View File

@@ -0,0 +1,534 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>Группа3</name>
<id>31</id>
<items xsi:type="form:FormGroup">
<name>Группа1</name>
<id>11</id>
<items xsi:type="form:FormField">
<name>Команда</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>КомандаЗапуска</segments>
</dataPath>
<extendedTooltip>
<name>КомандаРасширеннаяПодсказка</name>
<id>3</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандаКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<extendedEditMultipleValues>true</extendedEditMultipleValues>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ФормаВыполнитьСервер</name>
<id>9</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаВыполнитьСерверРасширеннаяПодсказка</name>
<id>10</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ВыполнитьСервер</commandName>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.СтрелкаВправоЗеленая</picture>
</picture>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаВыполнитьКлиент</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаВыполнитьКлиентРасширеннаяПодсказка</name>
<id>8</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ВыполнитьКлиент</commandName>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>Группа1РасширеннаяПодсказка</name>
<id>12</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Вывод</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Вывод</segments>
</dataPath>
<extendedTooltip>
<name>ВыводРасширеннаяПодсказка</name>
<id>6</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВыводКонтекстноеМеню</name>
<id>5</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<multiLine>true</multiLine>
<extendedEditMultipleValues>true</extendedEditMultipleValues>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа3</value>
</title>
<width>70</width>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>Группа3РасширеннаяПодсказка</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Группа2</name>
<id>29</id>
<items xsi:type="form:Table">
<name>Команды</name>
<id>13</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Команды</segments>
</dataPath>
<titleLocation>None</titleLocation>
<items xsi:type="form:FormField">
<name>КомандыЗначение</name>
<id>26</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Команды.Value</segments>
</dataPath>
<extendedTooltip>
<name>КомандыЗначениеРасширеннаяПодсказка</name>
<id>28</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандыЗначениеКонтекстноеМеню</name>
<id>27</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>EnterOnInput</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>КомандыКоманднаяПанель</name>
<id>14</id>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<searchStringAddition>
<name>КомандыСтрокаПоиска</name>
<id>17</id>
<extendedTooltip>
<name>КомандыСтрокаПоискаРасширеннаяПодсказка</name>
<id>19</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандыСтрокаПоискаКонтекстноеМеню</name>
<id>18</id>
<autoFill>true</autoFill>
</contextMenu>
<source>Команды</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<name>КомандыСостояниеПросмотра</name>
<id>23</id>
<extendedTooltip>
<name>КомандыСостояниеПросмотраРасширеннаяПодсказка</name>
<id>25</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандыСостояниеПросмотраКонтекстноеМеню</name>
<id>24</id>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>Команды</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<name>КомандыУправлениеПоиском</name>
<id>20</id>
<extendedTooltip>
<name>КомандыУправлениеПоискомРасширеннаяПодсказка</name>
<id>22</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандыУправлениеПоискомКонтекстноеМеню</name>
<id>21</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>Команды</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>КомандыРасширеннаяПодсказка</name>
<id>16</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КомандыКонтекстноеМеню</name>
<id>15</id>
<autoFill>true</autoFill>
</contextMenu>
<changeRowSet>true</changeRowSet>
<changeRowOrder>true</changeRowOrder>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
<horizontalScrollBar>AutoUse</horizontalScrollBar>
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<fileDragMode>AsFileRef</fileDragMode>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа2</value>
</title>
<extendedTooltip>
<name>Группа2РасширеннаяПодсказка</name>
<id>30</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<saveWindowSettings>true</saveWindowSettings>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>AlwaysHorizontal</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.Терминал</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>КомандаЗапуска</name>
<title>
<key>ru</key>
<value>Команда запуска</value>
</title>
<id>2</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>Вывод</name>
<title>
<key>ru</key>
<value>Вывод</value>
</title>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>Команды</name>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<id>4</id>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:ValueListExtInfo">
<itemValueType/>
</extInfo>
</attributes>
<formCommands>
<name>ВыполнитьКлиент</name>
<title>
<key>ru</key>
<value>Клиент</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Выполнить клиент</value>
</toolTip>
<use>
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.СтрелкаВправоЗеленая</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ВыполнитьКлиент</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
</formCommands>
<formCommands>
<name>ВыполнитьСервер</name>
<title>
<key>ru</key>
<value>Сервер</value>
</title>
<id>2</id>
<toolTip>
<key>ru</key>
<value>Выполнить сервер</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ВыполнитьСервер</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>

View File

@@ -0,0 +1,44 @@
&НаКлиенте
Процедура ВыполнитьКлиент(Команда)
ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения("ПриПолученииРезультатаЗапускаПрограммы", ЭтотОбъект);
ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы);
КонецПроцедуры
&НаКлиенте
Процедура ПриПолученииРезультатаЗапускаПрограммы(Результат, ДополнительныеПараметры) Экспорт
КодВозврата = Результат.КодВозврата;
ПотокВывода = Результат.ПотокВывода;
ПотокОшибок = Результат.ПотокОшибок;
Вывод = ПотокВывода + Символы.ПС + ПотокОшибок;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьСерверНаСервере()
ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
Результат = ФайловаяСистема.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы);
ПотокВывода = Результат.ПотокВывода;
ПотокОшибок = Результат.ПотокОшибок;
Вывод = ПотокВывода + Символы.ПС + ПотокОшибок;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьСервер(Команда)
Команды.Вставить(0, КомандаЗапуска, КомандаЗапуска, , );
ВыполнитьСерверНаСервере();
КонецПроцедуры

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7100a79f-f0ee-40dd-9756-96cfed4a1d89">
<producedTypes>
<objectType typeId="0385b8f9-821b-4823-9d81-7915cc353cd8" valueTypeId="a6302f3c-f75f-45da-a771-031735b5d30a"/>
<managerType typeId="23f9b3a1-54e0-4144-837e-61617cb599c0" valueTypeId="3484919c-e54f-45a6-a8f5-c5473945bbc0"/>
</producedTypes>
<name>Терминал</name>
<synonym>
<key>ru</key>
<value>Терминал</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<defaultForm>DataProcessor.Терминал.Form.Форма</defaultForm>
<forms uuid="54882814-5b98-4d9d-86ae-db34354afb54">
<name>Форма</name>
<synonym>
<key>ru</key>
<value>Форма</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:DataProcessor>

View File

@@ -89,4 +89,6 @@
<content>Catalog.Команды</content>
<content>Catalog.УчетныеДанные</content>
<content>Enum.ТипыУчетныхДанных</content>
<content>DataProcessor.Запуск</content>
<content>DataProcessor.Терминал</content>
</mdclass:Subsystem>