-
Notifications
You must be signed in to change notification settings - Fork 110
/
Copy pathКомандаЗапуститьВРежимеПредприятия.os
150 lines (118 loc) · 10 KB
/
КомандаЗапуститьВРежимеПредприятия.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Выполнение команды/действия в 1С:Предприятие в режиме тонкого/толстого клиента с передачей запускаемых обработок и параметров
//
// TODO добавить фичи для проверки команды
//
// Служебный модуль с набором методов работы с командами приложения
//
// Структура модуля реализована в соответствии с рекомендациями
// oscript-app-template (C) EvilBeaver
//
///////////////////////////////////////////////////////////////////////////////////////////////////
#Использовать logos
#Использовать v8runner
Перем Лог;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс
// Регистрация команды и ее аргументов/ключей
//
// Параметры:
// ИмяКоманды - Строка - имя команды
// Парсер - Парсер - объект парсера
//
Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт
ТекстОписания =
" Выполнение команды/действия в 1С:Предприятие в режиме тонкого/толстого клиента с передачей запускаемых обработок и параметров.";
ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды,
ТекстОписания);
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--command",
"Строка, передаваемая в ПараметрыЗапуска /C''");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--execute",
"Путь внешней обработки 1С для запуска в предприятии
| Разрешено использовать переменную $runnerRoot для указания пути к каталогу vanessa-runner.
| В этом случае можно использовать обработки из vanessa-runner.
| vrunner run --command ""Путь=МойКаталог;ЗавершитьРаботуСистемы"" --execute $runnerRoot/epf/ЗагрузитьРасширениеВРежимеПредприятия.epf");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--url",
"Навигационная ссылка для перехода после старта 1С:Предприятия");
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--no-wait",
"Не ожидать завершения запущенной команды/действия");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--online-file",
"Путь к файлу с online-записью выполнения");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--exitCodePath",
"Путь к текстовому файлу, обозначающему статус выполнения.
| Отсутствие файла после выполнения задания означает ошибку запуска.
| Значение ""0"" означает успешное выполнение запуска.
| Значение ""1"" означает ошибку при выполнении запуска.
| Значение ""2"" означает выполнение запуска с предупреждением.
| Любое другое значение эквивалентно отсутствию файла.");
Парсер.ДобавитьКоманду(ОписаниеКоманды);
КонецПроцедуры // ЗарегистрироватьКоманду
// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно)
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт
Лог = ДополнительныеПараметры.Лог;
// TODO отрефакторить получение ЗапускатьТолстыйКлиент
ЗапускатьТолстыйКлиент = ОбщиеМетоды.УказанПараметрТолстыйКлиент(ПараметрыКоманды["--ordinaryapp"], Лог);
ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"];
МенеджерКонфигуратора = Новый МенеджерКонфигуратора;
ПутьОбработки1С = ПараметрыКоманды["--execute"];
ПутьОбработки1С = Заменить_runnerRoot_на_КаталогVanessaRunner(ПутьОбработки1С);
ПутьОбработки1С = ОбщиеМетоды.ПолныйПуть(ПутьОбработки1С);
ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"];
МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды);
ПутьКФайлуСтатусаВыполнения = ПараметрыКоманды["--exitCodePath"];
КомандаЗапуска = КомандаЗапуска(ПараметрыКоманды["--command"], ПутьКФайлуСтатусаВыполнения);
ПутьЛогаВыполнения = ПараметрыКоманды["--online-file"];
НавигационнаяСсылка = ПараметрыКоманды["--url"];
ДополнительныеПараметры = ПараметрыКоманды["--additional"];
Если Не ПустаяСтрока(НавигационнаяСсылка) Тогда
ДополнительныеПараметры = СтрШаблон("/URL ""%1"" %2", НавигационнаяСсылка, ДополнительныеПараметры);
КонецЕсли;
ДопСообщения = МенеджерКонфигуратора.НовыеДопСообщенияДляЗапускаПредприятия();
ДопСообщения.Ключ = "ЗапускВРежимеПредприятия";
ДопСообщения.СообщениеВСлучаеУспеха = "Выполнение в режиме 1С:Предприятие завершено";
ДопСообщения.СообщениеВСлучаеПадения = "Возникла ошибка при выполнении в режиме 1С:Предприятие!";
ДопСообщения.СообщениеВСлучаеПропуска = "Выполнение команды в режиме 1С:Предприятие завершилось с предупреждением!";
Попытка
МенеджерКонфигуратора.ЗапуститьВРежимеПредприятияСПроверкойВыполнения(
ДопСообщения,
КомандаЗапуска, ПутьОбработки1С,
ЗапускатьТолстыйКлиент, ДополнительныеПараметры,
ОжидатьЗавершения,
ПутьЛогаВыполнения,
ПутьКФайлуСтатусаВыполнения);
Исключение
МенеджерКонфигуратора.Деструктор();
ВызватьИсключение;
КонецПопытки;
МенеджерКонфигуратора.Деструктор();
Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду
Функция КомандаЗапуска(Знач ПараметрКомандаЗапуска, Знач ПутьКФайлуСтатусаВыполнения)
КомандыЗапуска = Новый Массив;
Если ЗначениеЗаполнено(ПараметрКомандаЗапуска) Тогда
КомандыЗапуска.Добавить(ПараметрКомандаЗапуска);
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКФайлуСтатусаВыполнения) Тогда
КомандыЗапуска.Добавить(СтрШаблон("exitCodePath=%1", ПутьКФайлуСтатусаВыполнения));
КонецЕсли;
Если КомандыЗапуска.Количество() = 0 Тогда
Возврат "";
КонецЕсли;
КомандаЗапуска = СтрСоединить(КомандыЗапуска, ";");
Если ПараметрыСистемы.ЭтоWindows Тогда
КомандаЗапуска = """" + КомандаЗапуска + """";
Иначе
КомандаЗапуска = СтрЗаменить(КомандаЗапуска, """", "\""");
КомандаЗапуска = СтрЗаменить(КомандаЗапуска, ";", "\;");
КонецЕсли;
Возврат КомандаЗапуска;
КонецФункции
Функция Заменить_runnerRoot_на_КаталогVanessaRunner(Знач ИсходнаяСтрока)
Возврат СтрЗаменить(ИсходнаяСтрока, "$runnerRoot", ОбщиеМетоды.КаталогПроекта());
КонецФункции