/
КомандаЗагрузитьКонфигурацию.os
254 lines (193 loc) · 14.6 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#Использовать v8runner
#Использовать logos
Перем РежимыОбновления;
Перем ИспользуемаяВерсияПлатформы;
Перем Лог;
Перем ВозможныйРезультат;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс
Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт
ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Загрузка/обновление конфигурации");
Парсер.ДобавитьКоманду(ОписаниеКоманды);
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "СтрокаПодключения", "Строка подключения к рабочему контуру");
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ПутьДистрибутива", "Путь к дистрибутиву в виде каталога версии");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "/mode", "Режим обновления:
| -auto - Сначала искать CFU, потом CF
| -cf - Использовать только CF
| -cfu - Использовать только CFU
| -load - Полная загрузка конфигурации
| -skip - Не выполнять обновление");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды,
"-db-user",
"Пользователь информационной базы");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды,
"-db-pwd",
"Пароль пользователя информационной базы");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды,
"-v8version",
"Маска версии платформы 1С");
КонецПроцедуры
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
СоздатьПеречислениеРежимыОбновления();
СоздатьПеречислениеВозможныйРезультат();
ТекущийРежим = ВыбратьРежимПоПараметрамКоманды(ПараметрыКоманды["/mode"]);
Если ТекущийРежим = Неопределено Тогда
Лог.Ошибка("Неверно задан режим загрузки");
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Если ТекущийРежим = РежимыОбновления.ПропуститьШаг Тогда
Лог.Информация("Пропускаю шаг загрузки конфигурации");
Возврат ВозможныйРезультат.Успех;
КонецЕсли;
СтрокаПодключения = ПараметрыКоманды["СтрокаПодключения"];
ПутьДистрибутива = ПараметрыКоманды["ПутьДистрибутива"];
Пользователь = ПараметрыКоманды["-db-user"];
Пароль = ПараметрыКоманды["-db-pwd"];
ИспользуемаяВерсияПлатформы = ПараметрыКоманды["-v8version"];
Если ПустаяСтрока(СтрокаПодключения) Тогда
Лог.Ошибка("Не задана строка подключения");
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Если ПустаяСтрока(ПутьДистрибутива) Тогда
Лог.Ошибка("Не задан путь дистрибутива");
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Попытка
Возврат ВыполнитьОбновлениеКонфигурации(СтрокаПодключения, ПутьДистрибутива, Пользователь, Пароль, ТекущийРежим);
Исключение
Лог.Ошибка(ОписаниеОшибки());
Возврат ВозможныйРезультат.ОшибкаВремениВыполнения;
КонецПопытки;
КонецФункции
////////////////////////////////////////////////////////////////////////////////////////////////
// Непосредственное выполнение команды
Функция ВыполнитьОбновлениеКонфигурации(
Знач СтрокаПодключения,
Знач ПутьДистрибутива,
Знач ИмяПользователя,
Знач ПарольПользователя,
Знач РежимОбновления)
Конфигуратор = ЗапускПриложений.НастроитьКонфигуратор(
СтрокаПодключения,
ИмяПользователя,
ПарольПользователя,
ИспользуемаяВерсияПлатформы);
Возврат ОбновитьВВыбранномРежиме(РежимОбновления, Конфигуратор, ПутьДистрибутива);
КонецФункции
Функция ОбновитьВВыбранномРежиме(Знач РежимОбновления, Знач Конфигуратор, Знач ПутьДистрибутива) Экспорт
Лог.Отладка("Режим обновления: " + РежимОбновления);
Лог.Отладка("Путь дистрибутива: " + ПутьДистрибутива);
Если РежимОбновления = РежимыОбновления.Авто Тогда
Возврат ВыполнитьАвтоОбновление(Конфигуратор, ПутьДистрибутива);
ИначеЕсли РежимОбновления = РежимыОбновления.Обновление Тогда
Возврат ОбновитьПринудительно(Конфигуратор, ПутьДистрибутива);
ИначеЕсли РежимОбновления = РежимыОбновления.ПолныйДистрибутив Тогда
Возврат ОбновитьПолнымДистрибутивом(Конфигуратор, ПутьДистрибутива);
ИначеЕсли РежимОбновления = РежимыОбновления.ЗагрузкаКонфигурации Тогда
Возврат ЗагрузитьКонфигурацию(Конфигуратор, ПутьДистрибутива);
Иначе
ВызватьИсключение "Неизвестный режим обновления";
КонецЕсли;
КонецФункции
Функция ВыполнитьАвтоОбновление(Знач Конфигуратор, Знач ПутьДистрибутива)
ФайлДистрибутива = НайтиОбязательныйФайл(ПутьДистрибутива, "*.cfu");
Если ФайлДистрибутива = Неопределено Тогда
ФайлДистрибутива = НайтиОбязательныйФайл(ПутьДистрибутива, "*.cf");
КонецЕсли;
Если ФайлДистрибутива = Неопределено Тогда
Лог.Ошибка(СтрШаблон("Не обнаружен файл конфигурации в каталоге '%1'", ПутьДистрибутива));
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Возврат ОбновитьБазуДанных(Конфигуратор, ФайлДистрибутива);
КонецФункции
Функция ОбновитьПринудительно(Знач Конфигуратор, Знач ПутьДистрибутива)
ФайлДистрибутива = НайтиОбязательныйФайл(ПутьДистрибутива, "*.cfu");
Если ФайлДистрибутива = Неопределено Тогда
Лог.Ошибка(СтрШаблон("Не обнаружен файл конфигурации в каталоге '%1'", ПутьДистрибутива));
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Возврат ОбновитьБазуДанных(Конфигуратор, ФайлДистрибутива);
КонецФункции
Функция ОбновитьПолнымДистрибутивом(Знач Конфигуратор, Знач ПутьДистрибутива)
ФайлДистрибутива = НайтиОбязательныйФайл(ПутьДистрибутива, "*.cf");
Если ФайлДистрибутива = Неопределено Тогда
Лог.Ошибка(СтрШаблон("Не обнаружен файл конфигурации в каталоге '%1'", ПутьДистрибутива));
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Возврат ОбновитьБазуДанных(Конфигуратор, ФайлДистрибутива);
КонецФункции
Функция ЗагрузитьКонфигурацию(Знач Конфигуратор, Знач ПутьДистрибутива)
ФайлДистрибутива = НайтиОбязательныйФайл(ПутьДистрибутива, "*.cf");
Если ФайлДистрибутива = Неопределено Тогда
Лог.Ошибка(СтрШаблон("Не обнаружен файл конфигурации в каталоге '%1'", ПутьДистрибутива));
Возврат ВозможныйРезультат.НеверныеПараметры;
КонецЕсли;
Попытка
Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ФайлДистрибутива, Ложь);
Текст = Конфигуратор.ВыводКоманды();
Если Не ПустаяСтрока(Текст) Тогда
Лог.Информация(Текст);
КонецЕсли;
Возврат ВозможныйРезультат.Успех;
Исключение
Лог.Ошибка(Конфигуратор.ВыводКоманды());
Возврат ВозможныйРезультат.ОшибкаВремениВыполнения;
КонецПопытки;
КонецФункции
Функция ОбновитьБазуДанных(Знач Конфигуратор, Знач ФайлДистрибутива)
ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска();
ПараметрыЗапуска.Добавить("/UpdateCfg");
ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ФайлДистрибутива));
Попытка
Конфигуратор.ВыполнитьКоманду(ПараметрыЗапуска);
Текст = Конфигуратор.ВыводКоманды();
Если Не ПустаяСтрока(Текст) Тогда
Лог.Информация(Текст);
КонецЕсли;
Возврат ВозможныйРезультат.Успех;
Исключение
Лог.Ошибка(Конфигуратор.ВыводКоманды());
Возврат ВозможныйРезультат.ОшибкаВремениВыполнения;
КонецПопытки;
КонецФункции
Функция НайтиОбязательныйФайл(Знач Каталог, Знач Маска)
Файлы = НайтиФайлы(Каталог, Маска);
Если Файлы.Количество() > 0 Тогда
Возврат Файлы[0].ПолноеИмя;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
///////////////////////////////////////////////////////////
// Вспомогательные методы
Функция ВыбратьРежимПоПараметрамКоманды(Знач ПараметрРежим)
Если ПустаяСтрока(ПараметрРежим) или ПараметрРежим = "-auto" Тогда
Возврат РежимыОбновления.Авто;
ИначеЕсли ПараметрРежим = "-cf" Тогда
Возврат РежимыОбновления.ПолныйДистрибутив;
ИначеЕсли ПараметрРежим = "-cfu" Тогда
Возврат РежимыОбновления.Обновление;
ИначеЕсли ПараметрРежим = "-load" Тогда
Возврат РежимыОбновления.ЗагрузкаКонфигурации;
ИначеЕсли ПараметрРежим = "-skip" Тогда
Возврат РежимыОбновления.ПропуститьШаг;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция СоздатьПеречислениеРежимыОбновления() Экспорт
РежимыОбновления = Новый Структура;
РежимыОбновления.Вставить("Авто", 0);
РежимыОбновления.Вставить("ПолныйДистрибутив", 1);
РежимыОбновления.Вставить("Обновление", 2);
РежимыОбновления.Вставить("ЗагрузкаКонфигурации", 3);
РежимыОбновления.Вставить("ПропуститьШаг", 4);
Возврат РежимыОбновления;
КонецФункции
Функция СоздатьПеречислениеВозможныйРезультат() Экспорт
ВозможныйРезультат = МенеджерКомандПриложения.РезультатыКоманд();
Возврат ВозможныйРезультат;
КонецФункции
Функция ОбернутьВКавычки(Знач Строка)
Возврат ЗапускПриложений.ОбернутьВКавычки(Строка);
КонецФункции
Лог = Логирование.ПолучитьЛог("vanessa.app.deployka");