forked from vanessa-opensource/vanessa-runner
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathНастройкиДля1С.os
109 lines (90 loc) · 6.36 KB
/
НастройкиДля1С.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
#Использовать logos
Перем Лог;
Перем Переменные;
Функция ПрочитатьНастройки(Знач ПутьКНастройкам) Экспорт
Рез = Неопределено;
Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы());
Если Не ПустаяСтрока(ПутьКНастройкам) Тогда
Лог.Отладка("Читаю настройки из файла %1", ПутьКНастройкам);
ФайлНастроек = Новый Файл(ОбщиеМетоды.ПолныйПуть(ПутьКНастройкам));
СообщениеОшибки = СтрШаблон("Ожидали, что файл настроек %1 существует, а его нет.", ФайлНастроек.ПолноеИмя);
Ожидаем.Что(ФайлНастроек.Существует(), СообщениеОшибки).ЭтоИстина();
ЧтениеТекста = Новый ЧтениеТекста(ФайлНастроек.ПолноеИмя, КодировкаТекста.UTF8);
СтрокаJSON = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
ПарсерJSON = Новый ПарсерJSON();
Рез = ПарсерJSON.ПрочитатьJSON(СтрокаJSON);
Лог.Отладка("Успешно прочитали настройки");
Лог.Отладка("Настройки из файла:");
Для каждого КлючЗначение Из Рез Цикл
Лог.Отладка(" %1 = %2", КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
Иначе
Лог.Отладка("Файл настроек не передан. Использую значение по умолчанию.");
КонецЕсли;
Возврат Рез;
КонецФункции
Функция ПолучитьНастройку(Знач Настройки, Знач ИмяНастройки, Знач ЗначениеПоУмолчанию,
Знач ОписаниеНастройки, Знач ПолучатьПолныйПуть = Истина) Экспорт
Рез = ЗначениеПоУмолчанию;
Если Настройки <> Неопределено Тогда
Рез_Врем = Настройки.Получить(ИмяНастройки);
Если Рез_Врем <> Неопределено Тогда
Лог.Отладка(" Ключ %1, Значение %2", ИмяНастройки, Рез_Врем);
Рез = ЗаменитьШаблонныеПеременныеВСтроке(Рез_Врем);
Лог.Отладка("В настройках нашли %1 %2", ОписаниеНастройки, Рез);
КонецЕсли;
КонецЕсли;
Лог.Отладка("Использую %1 %2", ОписаниеНастройки, Рез);
Если ПолучатьПолныйПуть Тогда
Рез = ОбщиеМетоды.ПолныйПуть(Рез);
Лог.Отладка("Использую %1 (полный путь) %2", ОписаниеНастройки, Рез);
КонецЕсли;
Возврат Рез;
КонецФункции
// Добавить шаблонную переменную
//
// Параметры:
// Переменная - Строка - имя переменной-ключа
// Значение - Строка - значение, на которое нужно заменить
//
Процедура ДобавитьШаблоннуюПеременную(Знач Переменная, Знач Значение) Экспорт
Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы());
Если Не ЗначениеЗаполнено(Переменные) Тогда
Переменные = Новый Структура;
КонецЕсли;
Лог.Отладка("Добавляю шаблонную переменную %1, значение <%2>", Переменная, Значение);
Переменные.Вставить(Переменная, Значение);
КонецПроцедуры
// ЗаменитьШаблонныеПеременныеВКоллекции
//
// Параметры:
// КоллекцияПараметров - Соответствие - коллекция, в которой меняются шаблонные переменные на
//
Процедура ЗаменитьШаблонныеПеременныеВКоллекции(КоллекцияПараметров) Экспорт
Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы());
Приемник = Новый Соответствие;
Для каждого КлючЗначение Из КоллекцияПараметров Цикл
Значение = КлючЗначение.Значение;
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ЗаменитьШаблонныеПеременныеВСтроке(Значение);
КонецЕсли;
Приемник.Вставить(КлючЗначение.Ключ, Значение);
КонецЦикла;
Для каждого КлючЗначение Из Приемник Цикл
КоллекцияПараметров.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
КонецПроцедуры
Функция ЗаменитьШаблонныеПеременныеВСтроке(Знач ИсходнаяСтрока)
Рез = ИсходнаяСтрока;
Для каждого КлючЗначение Из Переменные Цикл
Рез = СтрЗаменить(Рез, "$" + КлючЗначение.Ключ, КлючЗначение.Значение);
Рез = СтрЗаменить(Рез, "$" + НРег(КлючЗначение.Ключ), КлючЗначение.Значение);
КонецЦикла;
Если Рез <> ИсходнаяСтрока Тогда
Лог.Отладка("Выполнена замена с помощью шаблонных переменных.
| Исходное значение <%1>,
| Результат <%2>", ИсходнаяСтрока, Рез);
КонецЕсли;
Возврат Рез;
КонецФункции