diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 0a14763..3d0667d 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -205,17 +205,12 @@ // ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; Если Не ЗначениеЗаполнено(ПутьФайлаНастроекПоУмолчанию) Тогда - ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, - ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию()); + ПутьФайлаНастроекПоУмолчанию = ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию(); КонецЕсли; - ПутьКФайлуНастройки = ЗначенияПараметров.Получить(КлючФайлаНастроек); - Если Не ЗначениеЗаполнено(ПутьКФайлуНастройки) Тогда - Лог.Отладка("В параметрах не задан ключ %1 к файлу настройки", КлючФайлаНастроек); - КонецЕсли; - НастройкиИзФайла = ПрочитатьНастройкиИзФайлаJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки, + НастройкиИзФайла = ПрочитатьНастройкиИзПараметраФайл(ЗначенияПараметров, КлючФайлаНастроек, ТекущийКаталогПроекта, ПутьФайлаНастроекПоУмолчанию); - + ЗначенияПараметровНизкийПриоритет = Новый Соответствие; Если НастройкиИзФайла.Количество() > 0 Тогда @@ -232,13 +227,60 @@ // ДобавитьДанныеПодключения(ЗначенияПараметров); КонецПроцедуры +Функция ПрочитатьНастройкиИзПараметраФайл(ЗначенияПараметров, КлючФайлаНастроек, ТекущийКаталогПроекта, + ПутьФайлаНастроекПоУмолчанию) + + ЧитаемОдинФайл = Истина; + МассивИменФайлов = Неопределено; + + ПутьКФайлуНастройки = ЗначенияПараметров.Получить(КлючФайлаНастроек); + Если Не ЗначениеЗаполнено(ПутьКФайлуНастройки) Тогда + + Лог.Отладка("В параметрах не задан ключ %1 к файлу настройки", КлючФайлаНастроек); + + Иначе + МассивИменФайлов = СтрРазделить(ПутьКФайлуНастройки, ";"); + Если МассивИменФайлов.Количество() > 0 Тогда + + ЧитаемОдинФайл = Ложь; + + КонецЕсли; + КонецЕсли; + + Если ЧитаемОдинФайл Тогда + + НастройкиИзФайла = ПрочитатьНастройкиИзФайлаJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки, + ПутьФайлаНастроекПоУмолчанию); + + Иначе + + НастройкиИзФайла = Новый Соответствие; + Для каждого ИмяФайла Из МассивИменФайлов Цикл + НовыеПараметры = ПрочитатьФайлJSON(ОбъединитьПути(ТекущийКаталогПроекта, ИмяФайла)); + ОбработатьПараметрыРекурсивно(НовыеПараметры, НастройкиИзФайла, ТекущийКаталогПроекта); + КонецЦикла; + + КонецЕсли; + + Возврат НастройкиИзФайла; +КонецФункции // ПрочитатьНастройкиИзПараметраФайл() + Функция ПрочитатьНастройкиИзФайлаJSON(Знач ТекущийКаталогПроекта, Знач ПутьКФайлу, Знач ПутьФайлаПоУмолчанию ) Рез = Новый Соответствие; // Лог.Отладка(":"+ПутьКФайлу+":"+ПутьФайлаПоУмолчанию); Если ПутьКФайлу = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда ПутьКФайлу = ПутьФайлаПоУмолчанию; + Лог.Отладка("Использую путь к файлу настройки по умолчанию %1", ПутьКФайлу); + Файл = Новый Файл(ОбъединитьПути(ТекущийКаталогПроекта, ПутьКФайлу)); + + Если НЕ Файл.Существует() Тогда + Лог.Отладка("Файл настройки по умолчанию не существует. %1", ПутьКФайлу); + + Возврат Рез; + КонецЕсли; + Иначе Лог.Отладка("Передан путь к файлу настройки %1", ПутьКФайлу); КонецЕсли; diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 481368b..4be75e6 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -22,6 +22,7 @@ СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайлаСКомментариями"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайлаПоСсылке"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзДвухФайловПоСсылке"); + СписокТестов.Добавить("Тест_ЧтениеПараметровИзНесколькихФайловПереданныхВКлючеКоманднойСтроки"); СписокТестов.Добавить("Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзКоманднойСтроки"); @@ -110,6 +111,38 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ЧтениеПараметровИзНесколькихФайловПереданныхВКлючеКоманднойСтроки() Экспорт + // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); + ИМЯ_НАСТРОЙКИ = "Настройки"; + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; + + ПутьФайлаНастроек1 = МенеджерВременныхФайлов.СоздатьФайл("json"); + СохранитьНастройкуВФайл(ПутьФайлаНастроек1, СтрШаблон("{ ""temp-%1"": %2 }", + ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + Файл1 = Новый Файл(ПутьФайлаНастроек1); + + ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); + СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""%1"": %2 }", + ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + Файл = Новый Файл(ПутьФайлаНастроек); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + + СтрокаНесколькихФайлов = СтрШаблон("%1;%2", Файл1.Имя, Файл.Имя); + + ПараметрыКомСтроки = Новый Массив; + ПараметрыКомСтроки.Добавить(СтрокаНесколькихФайлов); + + Параметры = ЧтениеПараметров.Прочитать(Парсер, ПараметрыКомСтроки, ИМЯ_НАСТРОЙКИ); + + Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); + Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); + Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); +КонецПроцедуры + Процедура Тест_ЧтениеПараметровИзФайлаСКомментариями() Экспорт ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; @@ -173,7 +206,6 @@ КонецПроцедуры Процедура Тест_ЧтениеПараметровИзДвухФайловПоСсылке() Экспорт - // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = 3;