Skip to content

Commit 59e9dab

Browse files
committed
Добавлено чтение иерархических файлов настроек #697
Добавлено 2 теста для иерархических файлов настроек
1 parent 5562307 commit 59e9dab

File tree

18 files changed

+251
-171
lines changed

18 files changed

+251
-171
lines changed

Plugins/Настройки.epf

641 Bytes
Binary file not shown.
Binary file not shown.
185 Bytes
Binary file not shown.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
{
2-
"Тесты_Настройки": "значение для Тесты_Настройки",
2+
"Тесты_Настройки": {
3+
"Ключ": "значение для Тесты_Настройки",
4+
}
35
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"Ключ": "значение для Тесты_Настройки",
3+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"Тесты_Настройки": {
3+
"configpath": "Тесты_Настройки_Потомок.json"
4+
}
5+
}
Lines changed: 90 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,124 +1,90 @@
1-
&НаКлиенте
2-
Перем КонтекстЯдра;
3-
4-
// { Plugin interface
5-
6-
&НаКлиенте
7-
Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт
8-
Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов);
9-
КонецФункции
10-
11-
&НаКлиенте
12-
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
13-
КонтекстЯдра = КонтекстЯдраПараметр;
14-
КонецПроцедуры
15-
16-
&НаСервере
17-
Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов)
18-
Возврат Объект().ОписаниеПлагина(ВозможныеТипыПлагинов);
19-
КонецФункции
20-
21-
// } Plugin interface
22-
23-
// { Settings interface
24-
25-
&НаКлиенте
26-
Функция ПолучитьНастройки() Экспорт
27-
Если Объект.Настройки = Неопределено Тогда
28-
ПутьФайлаНастроек = КонтекстЯдра.ПутьФайлаНастроек();
29-
30-
Объект.Настройки = Новый Структура();
31-
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
32-
Если ФайлНастроек.Существует() Тогда
33-
ЧтениеJSON = Новый ЧтениеJSON;
34-
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
35-
36-
Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь);
37-
КонецЕсли;
38-
Объект.Настройки = Новый ФиксированнаяСтруктура(Настройки);
39-
КонецЕсли;
40-
Возврат Объект.Настройки;
41-
КонецФункции
42-
43-
&НаКлиенте
44-
Функция ПолучитьНастройку(Знач КлючНастройки) Экспорт
45-
46-
ПолучитьНастройки();
47-
48-
Результат = Неопределено;
49-
Объект.Настройки.Свойство(КлючНастройки, Результат);
50-
Возврат Результат;
51-
52-
КонецФункции
53-
54-
// } Settings interface
55-
56-
&НаСервере
57-
Функция Объект()
58-
Возврат РеквизитФормыВЗначение("Объект");
59-
КонецФункции
60-
61-
// } Settings interface
62-
.Настройки = Новый ФиксированнаяСтруктура(Настройки);
63-
КонецЕсли;
64-
Возврат Объект.Настройки;
65-
КонецФункции
66-
67-
&НаКлиенте
68-
Функция ПолучитьНастройку(Знач КлючНастройки) Экспорт
69-
70-
ПолучитьНастройки();
71-
72-
Результат = Неопределено;
73-
Объект.Настройки.Свойство(КлючНастройки, Результат);
74-
Возврат Результат;
75-
76-
КонецФункции
77-
78-
// } Settings interface
79-
80-
&НаСервере
81-
Функция Объект()
82-
Возврат РеквизитФормыВЗначение(""Объект"");
83-
КонецФункции
84-
85-
// } Settings interface
86-
",
87-
{4,1,
88-
{9,
89-
{1},0,"Объект",
90-
{1,0},
91-
{"Pattern",
92-
{"#",85629dd2-6be4-49c6-9a69-13411102aa57}
93-
},
94-
{0,
95-
{0,
96-
{"B",1},0}
97-
},
98-
{0,
99-
{0,
100-
{"B",1},0}
101-
},
102-
{0,0},
103-
{0,0},1,0,0,0,
104-
{0,0},
105-
{0,0}
106-
},0,0,
107-
{#base64:77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxTZXR0
108-
aW5ncyB4bWxucz0iaHR0cDovL3Y4LjFjLnJ1LzguMS9kYXRhLWNvbXBvc2l0aW9u
109-
LXN5c3RlbS9zZXR0aW5ncyIgeG1sbnM6ZGNzY29yPSJodHRwOi8vdjguMWMucnUv
110-
OC4xL2RhdGEtY29tcG9zaXRpb24tc3lzdGVtL2NvcmUiIHhtbG5zOnN0eWxlPSJo
111-
dHRwOi8vdjguMWMucnUvOC4xL2RhdGEvdWkvc3R5bGUiIHhtbG5zOnN5cz0iaHR0
112-
cDovL3Y4LjFjLnJ1LzguMS9kYXRhL3VpL2ZvbnRzL3N5c3RlbSIgeG1sbnM6djg9
113-
Imh0dHA6Ly92OC4xYy5ydS84LjEvZGF0YS9jb3JlIiB4bWxuczp2OHVpPSJodHRw
114-
Oi8vdjguMWMucnUvOC4xL2RhdGEvdWkiIHhtbG5zOndlYj0iaHR0cDovL3Y4LjFj
115-
LnJ1LzguMS9kYXRhL3VpL2NvbG9ycy93ZWIiIHhtbG5zOndpbj0iaHR0cDovL3Y4
116-
LjFjLnJ1LzguMS9kYXRhL3VpL2NvbG9ycy93aW5kb3dzIiB4bWxuczp4cz0iaHR0
117-
cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDov
118-
L3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KCTxvdXRwdXRQ
119-
YXJhbWV0ZXJzLz4NCjwvU2V0dGluZ3M+}
120-
},
121-
{0,0},
122-
{0,0},
123-
{0,0},
124-
{0,0},0,0}
1+
&НаКлиенте
2+
Перем КонтекстЯдра;
3+
4+
// { Plugin interface
5+
6+
&НаКлиенте
7+
Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт
8+
Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов);
9+
КонецФункции
10+
11+
&НаКлиенте
12+
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
13+
КонтекстЯдра = КонтекстЯдраПараметр;
14+
КонецПроцедуры
15+
16+
&НаСервере
17+
Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов)
18+
Возврат Объект().ОписаниеПлагина(ВозможныеТипыПлагинов);
19+
КонецФункции
20+
21+
// } Plugin interface
22+
23+
// { Settings interface
24+
25+
&НаКлиенте
26+
Функция ПолучитьНастройки() Экспорт
27+
ИмяКлючаФайлаНастройки = "configpath";
28+
29+
Если Объект.Настройки = Неопределено Тогда
30+
ПутьФайлаНастроек = КонтекстЯдра.ПутьФайлаНастроек();
31+
ФайлНастройки = Новый Файл(ПутьФайлаНастроек);
32+
33+
Настройки = ПрочитатьНастройкиИзФайлаJSon(ПутьФайлаНастроек);
34+
Настройки = ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Настройки, ИмяКлючаФайлаНастройки, ФайлНастройки.Путь);
35+
Объект.Настройки = Новый ФиксированнаяСтруктура(Настройки);
36+
КонецЕсли;
37+
Возврат Объект.Настройки;
38+
КонецФункции
39+
40+
&НаКлиенте
41+
Функция ПолучитьНастройку(Знач КлючНастройки) Экспорт
42+
43+
ПолучитьНастройки();
44+
45+
Результат = Неопределено;
46+
Объект.Настройки.Свойство(КлючНастройки, Результат);
47+
Возврат Результат;
48+
49+
КонецФункции
50+
51+
// } Settings interface
52+
53+
&НаСервере
54+
Функция Объект()
55+
Возврат РеквизитФормыВЗначение("Объект");
56+
КонецФункции
57+
58+
// } Settings interface
59+
60+
&НаКлиенте
61+
Функция ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Знач Настройки, Знач ИмяКлючаФайлаНастройки,
62+
Знач КаталогРодительскойНастройки)
63+
64+
Результат = Новый Структура;
65+
Для каждого Настройка Из Настройки Цикл
66+
Значение = Настройка.Значение;
67+
Если ТипЗнч(Значение) = Тип("Структура") Тогда
68+
ПутьДопФайлаНастроек = Неопределено;
69+
Если Значение.Свойство(ИмяКлючаФайлаНастройки, ПутьДопФайлаНастроек) Тогда
70+
Значение = ПрочитатьНастройкиИзФайлаJSon(КаталогРодительскойНастройки + "/" + ПутьДопФайлаНастроек);
71+
КонецЕсли;
72+
КонецЕсли;
73+
Результат.Вставить(Настройка.Ключ, Значение);
74+
КонецЦикла;
75+
Возврат Результат;
76+
77+
КонецФункции
78+
79+
&НаКлиенте
80+
Функция ПрочитатьНастройкиИзФайлаJSon(Знач ПутьФайлаНастроек)
81+
Результат = Новый Структура();
82+
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
83+
Если ФайлНастроек.Существует() Тогда
84+
ЧтениеJSON = Новый ЧтениеJSON;
85+
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
86+
87+
Результат = ПрочитатьJSON(ЧтениеJSON, Ложь);
88+
КонецЕсли;
89+
Возврат Результат;
90+
КонецФункции

src/Plugins/Настройки/ObjectModule.bsl

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,18 @@
2222

2323
//&НаКлиенте
2424
Функция ПолучитьНастройки() Экспорт
25+
ИмяКлючаФайлаНастройки = "configpath";
26+
2527
Если Настройки = Неопределено Тогда
2628
ПутьФайлаНастроек = КонтекстЯдра.ПутьФайлаНастроек();
29+
ФайлНастройки = Новый Файл(ПутьФайлаНастроек);
2730

2831
//ФайлНастройки = Новый Файл("C:\projects\xUnitFor1C\fixtures\core\Тесты_Настройки.json");//TODO удалить отладочный код
32+
//ФайлНастройки = Новый Файл("C:\projects\xUnitFor1C\fixtures\core\Тесты_Настройки_Родитель.json");//TODO удалить отладочный код
2933
//ПутьФайлаНастроек = ФайлНастройки.ПолноеИмя;
3034

31-
Настройки = Новый Структура();
32-
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
33-
Если ФайлНастроек.Существует() Тогда
34-
ЧтениеJSON = Новый ЧтениеJSON;
35-
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
36-
37-
Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь);
38-
КонецЕсли;
35+
Настройки = ПрочитатьНастройкиИзФайлаJSon(ПутьФайлаНастроек);
36+
Настройки = ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Настройки, ИмяКлючаФайлаНастройки, ФайлНастройки.Путь);
3937
Настройки = Новый ФиксированнаяСтруктура(Настройки);
4038
КонецЕсли;
4139
Возврат Настройки;
@@ -53,3 +51,33 @@
5351
КонецФункции
5452

5553
// } Settings interface
54+
55+
Функция ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Знач Настройки, Знач ИмяКлючаФайлаНастройки,
56+
Знач КаталогРодительскойНастройки)
57+
58+
Результат = Новый Структура;
59+
Для каждого Настройка Из Настройки Цикл
60+
Значение = Настройка.Значение;
61+
Если ТипЗнч(Значение) = Тип("Структура") Тогда
62+
ПутьДопФайлаНастроек = Неопределено;
63+
Если Значение.Свойство(ИмяКлючаФайлаНастройки, ПутьДопФайлаНастроек) Тогда
64+
Значение = ПрочитатьНастройкиИзФайлаJSon(КаталогРодительскойНастройки + "/" + ПутьДопФайлаНастроек);
65+
КонецЕсли;
66+
КонецЕсли;
67+
Результат.Вставить(Настройка.Ключ, Значение);
68+
КонецЦикла;
69+
Возврат Результат;
70+
71+
КонецФункции
72+
73+
Функция ПрочитатьНастройкиИзФайлаJSon(Знач ПутьФайлаНастроек)
74+
Результат = Новый Структура();
75+
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
76+
Если ФайлНастроек.Существует() Тогда
77+
ЧтениеJSON = Новый ЧтениеJSON;
78+
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
79+
80+
Результат = ПрочитатьJSON(ЧтениеJSON, Ложь);
81+
КонецЕсли;
82+
Возврат Результат;
83+
КонецФункции
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Form\Форма\Форма.bsl-->4e8e1a4a-a947-419b-95c8-58a411e3ffa4.0 (50, 111)
1+
Form\Форма\Форма.bsl-->4e8e1a4a-a947-419b-95c8-58a411e3ffa4.0 (50, 140)

src/Plugins/Настройки/und/4e8e1a4a-a947-419b-95c8-58a411e3ffa4.0

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,14 @@
7373

7474
&НаКлиенте
7575
Функция ПолучитьНастройки() Экспорт
76+
ИмяКлючаФайлаНастройки = ""configpath"";
77+
7678
Если Объект.Настройки = Неопределено Тогда
7779
ПутьФайлаНастроек = КонтекстЯдра.ПутьФайлаНастроек();
80+
ФайлНастройки = Новый Файл(ПутьФайлаНастроек);
7881

79-
Объект.Настройки = Новый Структура();
80-
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
81-
Если ФайлНастроек.Существует() Тогда
82-
ЧтениеJSON = Новый ЧтениеJSON;
83-
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
84-
85-
Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь);
86-
КонецЕсли;
82+
Настройки = ПрочитатьНастройкиИзФайлаJSon(ПутьФайлаНастроек);
83+
Настройки = ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Настройки, ИмяКлючаФайлаНастройки, ФайлНастройки.Путь);
8784
Объект.Настройки = Новый ФиксированнаяСтруктура(Настройки);
8885
КонецЕсли;
8986
Возврат Объект.Настройки;
@@ -108,6 +105,38 @@
108105
КонецФункции
109106

110107
// } Settings interface
108+
109+
&НаКлиенте
110+
Функция ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Знач Настройки, Знач ИмяКлючаФайлаНастройки,
111+
Знач КаталогРодительскойНастройки)
112+
113+
Результат = Новый Структура;
114+
Для каждого Настройка Из Настройки Цикл
115+
Значение = Настройка.Значение;
116+
Если ТипЗнч(Значение) = Тип(""Структура"") Тогда
117+
ПутьДопФайлаНастроек = Неопределено;
118+
Если Значение.Свойство(ИмяКлючаФайлаНастройки, ПутьДопФайлаНастроек) Тогда
119+
Значение = ПрочитатьНастройкиИзФайлаJSon(КаталогРодительскойНастройки + ""/"" + ПутьДопФайлаНастроек);
120+
КонецЕсли;
121+
КонецЕсли;
122+
Результат.Вставить(Настройка.Ключ, Значение);
123+
КонецЦикла;
124+
Возврат Результат;
125+
126+
КонецФункции
127+
128+
&НаКлиенте
129+
Функция ПрочитатьНастройкиИзФайлаJSon(Знач ПутьФайлаНастроек)
130+
Результат = Новый Структура();
131+
ФайлНастроек = Новый Файл(ПутьФайлаНастроек);
132+
Если ФайлНастроек.Существует() Тогда
133+
ЧтениеJSON = Новый ЧтениеJSON;
134+
ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек);
135+
136+
Результат = ПрочитатьJSON(ЧтениеJSON, Ложь);
137+
КонецЕсли;
138+
Возврат Результат;
139+
КонецФункции
111140
",
112141
{4,1,
113142
{9,

0 commit comments

Comments
 (0)