-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunloadrelease.os
231 lines (152 loc) · 11.6 KB
/
unloadrelease.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
#Использовать fs
#Использовать tempfiles
#Использовать ReadParams
#Использовать strings
#Использовать v8runner
#Использовать v8storage
#Использовать cmdline
Процедура ЗапуститьСкрип(База = "", ИмяФайлаНастроек = "")
Отказ = Ложь;
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьИменованныйПараметр("-base");
Парсер.ДобавитьИменованныйПараметр("-setting");
Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Если Параметры["-base"] <> Неопределено Тогда
База = Параметры["-base"];
КонецЕсли;
Если Параметры["-setting"] <> Неопределено Тогда
ИмяФайлаНастроек = Параметры["-setting"];
Иначе
ИмяФайлаНастроек = "config.json";
КонецЕсли;
ИмяКонфигурационногоФайла = ОбъединитьПути(ТекущийКаталог(), ИмяФайлаНастроек);
//инициализируем работу с настройками
ошибкиЧтения = Неопределено;
СоответствиеПараметров = ЧтениеПараметров.Прочитать(ИмяКонфигурационногоФайла, ошибкиЧтения);
ПроверитьКорректностьПараметров(СоответствиеПараметров, Отказ);
Если Не Отказ Тогда
ИмяПапкиВыгрузки = СоответствиеПараметров.Получить("ПапкаВыгрузкиCF");
МассивБаз = СоответствиеПараметров.Получить("Базы");
//если выбрана база запускаем выгрузку только ее
Если ЗначениеЗаполнено(База) Тогда
МассивОбрабатываемыхБаз = Новый Массив();
НастройкаБазы = ПолучитьНастройкуБазы(МассивБаз, База);
Если НастройкаБазы = Неопределено Тогда
Сообщить("В настройках не найдена база: " + База);
Иначе
МассивОбрабатываемыхБаз.Добавить(НастройкаБазы);
КонецЕсли;
Иначе
МассивОбрабатываемыхБаз = МассивБаз;
КонецЕсли;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ИмяПапкиВыгрузки", СоответствиеПараметров.Получить("ПапкаВыгрузкиCF"));
ВыполнитьСборкуПромежуточногоРелизаПоМассивуБаз(ДополнительныеПараметры, МассивОбрабатываемыхБаз);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьКорректностьПараметров(СоответствиеПараметров, Отказ)
ИмяПапкиВыгрузки = СоответствиеПараметров.Получить("ПапкаВыгрузкиCF");
МассивБаз = СоответствиеПараметров.Получить("Базы");
//проверка основных настрок
Если НЕ ЗначениеЗаполнено(ИмяПапкиВыгрузки) Тогда
Отказ = Истина;
Сообщить("Не найден параметр настройки - ПапкаВыгрузкиCF");
КонецЕсли;
//проверка списка баз
Если МассивБаз = Неопределено Тогда
МассивБаз = Новый Массив();
КонецЕсли;
Если МассивБаз.Количество() = 0 Тогда
Отказ = Истина;
Сообщить("Не задан список баз");
КонецЕсли;
Для Каждого НастройкаБаз Из МассивБаз Цикл
ПорядковыйНомер = МассивБаз.Найти(НастройкаБаз) + 1;
Если Не НастройкаБаз.Свойство("Имя")
Или Не ЗначениеЗаполнено(НастройкаБаз.Имя) Тогда
Отказ = Истина;
Сообщить("Для базы " + ПорядковыйНомер + " не задано свойство - Имя");
КонецЕсли;
Если Не НастройкаБаз.Свойство("Хранилище_Адрес")
Или Не ЗначениеЗаполнено(НастройкаБаз.Хранилище_Адрес) Тогда
Отказ = Истина;
Сообщить("Для базы " + ПорядковыйНомер + " не задано свойство - Хранилище_Адрес");
КонецЕсли;
Если Не НастройкаБаз.Свойство("Хранилище_Логин")
Или Не ЗначениеЗаполнено(НастройкаБаз.Хранилище_Логин) Тогда
Отказ = Истина;
Сообщить("Для базы " + ПорядковыйНомер + " не задано свойство - Хранилище_Логин");
КонецЕсли;
Если Не НастройкаБаз.Свойство("Хранилище_Пароль")
Или Не ЗначениеЗаполнено(НастройкаБаз.Хранилище_Пароль) Тогда
Отказ = Истина;
Сообщить("Для базы " + ПорядковыйНомер + " не задано свойство - Хранилище_Пароль");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьНастройкуБазы(МассивБаз, База)
НастройкаБазы = Неопределено;
КоличествоНастроек = МассивБаз.Количество();
Счетчик = 0;
Пока Счетчик + 1 <= КоличествоНастроек
И НастройкаБазы = Неопределено Цикл
СтруктураНастроек = МассивБаз[Счетчик];
Если СтруктураНастроек.Имя = База Тогда
НастройкаБазы = СтруктураНастроек;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
Возврат НастройкаБазы;
КонецФункции
Процедура ВыполнитьСборкуПромежуточногоРелизаПоМассивуБаз(ДополнительныеПараметры, МассивБаз)
Для Каждого НастройкаБазы Из МассивБаз Цикл
ВыполнитьСборкуПромежуточногоРелизаПоНастройкам(ДополнительныеПараметры, НастройкаБазы);
КонецЦикла;
КонецПроцедуры
Процедура ВыполнитьСборкуПромежуточногоРелизаПоНастройкам(ДополнительныеПараметры, НастройкаБазы)
Сообщить("" + ТекущаяУниверсальнаяДата() + ". Начало выгрузки базы: " + НастройкаБазы.Имя);
ИмяКаталогаВыгрузкиБазы = НастройкаБазы.Имя;
КаталогВыгрузки = ОбъединитьПути(ТекущийКаталог(), ДополнительныеПараметры.ИмяПапкиВыгрузки, ИмяКаталогаВыгрузкиБазы);
ИмяФайлаВыгрузки = ОбъединитьПути(КаталогВыгрузки, ПолучитьТекущуюДеньВСтроке() + ".cf");
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
//если каталога нет то создаем его
Если Не ФС.Существует(КаталогВыгрузки) Тогда
СоздатьКаталог(КаталогВыгрузки);
КонецЕсли;
//выгрузим конфигурацию в файл
УправлениеКонфигураторомХранилища = Новый УправлениеКонфигуратором();
УправлениеКонфигураторомХранилища.КаталогСборки(ВременныйКаталог);
УправлениеКонфигураторомХранилища.ИспользоватьВерсиюПлатформы(НастройкаБазы.ВерсияПлатформы);
УправлениеКонфигураторомХранилища.УстановитьКодЯзыка("RU");
ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации(НастройкаБазы.Хранилище_Адрес, УправлениеКонфигураторомХранилища);
ХранилищеКонфигурации.УстановитьПараметрыАвторизации(НастройкаБазы.Хранилище_Логин, НастройкаБазы.Хранилище_Пароль);
Попытка
ХранилищеКонфигурации.ПрочитатьХранилище();
Исключение
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если ХранилищеКонфигурации.ЧтениеХранилищаВыполнено() Тогда
ХранилищеКонфигурации.ПоследняяВерсияКонфигурацииВФайл(ИмяФайлаВыгрузки);
Иначе
Сообщить("Не удалось прочитать хранилище: " + НастройкаБазы.Хранилище);
КонецЕсли;
Сообщить("" + ТекущаяУниверсальнаяДата() + ". Окончание выгрузки базы: " + НастройкаБазы.Имя);
КонецПроцедуры
Функция ПолучитьТекущуюДеньВСтроке()
Результат = "";
ВремяВыгрузки = ТекущаяУниверсальнаяДата();
ДеньВыгрузкиВСтроке = Формат(ВремяВыгрузки, "ДЛФ=D");
МассивЧастиДаты = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок("" + ДеньВыгрузкиВСтроке, ".");
Счетчик = МассивЧастиДаты.Количество() - 1;
Пока Счетчик >= 0 Цикл
Элемент = МассивЧастиДаты[Счетчик];
Если Счетчик = 0 Тогда
Результат = Результат + Элемент;
Иначе
Результат = Результат + Элемент + "_";
КонецЕсли;
Счетчик = Счетчик - 1;
КонецЦикла;
Возврат Результат;
КонецФункции
ЗапуститьСкрип();