From 92ae199e66d641277684d972f29bf12797ad1fce Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Wed, 29 Apr 2026 01:03:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 46 +++++++- packagedef | 2 +- ...271\320\264\320\265\321\200\320\260ENV.os" | 32 ++++++ ...20\265\321\202\321\200\320\276\320\262.os" | 30 +++-- ...265\321\202\321\200\320\276\320\262ENV.os" | 61 ++++++++-- ...265\321\202\321\200\320\276\320\262INI.os" | 79 +++++++++++-- ...65\321\202\321\200\320\276\320\262JSON.os" | 84 ++++++++++++-- ...5\321\202\321\200\320\276\320\262VAULT.os" | 65 +++++++++-- ...65\321\202\321\200\320\276\320\262YAML.os" | 107 +++++++++++++----- ...21\201\321\202\320\262\320\270\320\265.os" | 73 +++++++++++- ...20\265\321\202\321\200\320\276\320\262.os" | 74 ++++++++++-- 11 files changed, 560 insertions(+), 93 deletions(-) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" diff --git a/docs/README.md b/docs/README.md index cac5f06..af5f262 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,10 +6,12 @@ - [Класс МенеджерПараметров:](#класс-менеджерпараметров) - [Параметр](#параметр) - [ЧтениеВыполнено](#чтениевыполнено) + - [ПрочитанныеПараметры](#прочитанныепараметры) - [Прочитать](#прочитать) - [УстановитьФайлПараметров](#установитьфайлпараметров) - [ДобавитьПровайдерПараметров](#добавитьпровайдерпараметров) - [ОтключитьПровайдер](#отключитьпровайдер) + - [ПровайдерПоИдентификатору](#провайдерпоидентификатору) - [НастройкаПоискаФайла](#настройкапоискафайла) - [ИспользоватьПровайдерJSON](#использоватьпровайдерjson) - [ИспользоватьПровайдерYAML](#использоватьпровайдерyaml) @@ -79,6 +81,16 @@ // ``` + +#### ПрочитанныеПараметры +```bsl +// Возвращает соответствие прочитанных параметров (сырой результат без обработки конструктором) +// +// Возвращаемое значение: +// Соответствие - прочитанные параметры +// +``` + #### Прочитать ```bsl @@ -102,9 +114,21 @@ // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: -// КлассОбъект - Объект - класс провайдера или имя класса -// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99) +// КлассОбъект - Объект - класс провайдера +// Приоритет - Число - числовой приоритет выполнения провайдера; +// меньшее значение читается первым (по умолчанию берётся из провайдера) +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера; +// при коллизии автоматически добавляется суффикс #2, #3 и т.д. // +// Возвращаемое значение: +// Объект - переданный КлассОбъект (для цепочки настроек через .Настройки()) +// +``` + +Пример использования с цепочкой настроек: +```bsl +МП.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV, 2).Настройки() + .УстановитьПрефикс("APP_"); ``` @@ -117,6 +141,24 @@ // ``` + +#### ПровайдерПоИдентификатору +```bsl +// Возвращает класс провайдера по идентификатору для прямой настройки +// +// Параметры: +// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2") +// +// Возвращаемое значение: +// Произвольный - класс провайдера или Неопределено если не найден +// +``` + +Пример: +```bsl +МП.ПровайдерПоИдентификатору("env").Настройки().УстановитьПрефикс("APP_"); +``` + #### НастройкаПоискаФайла ```bsl diff --git a/packagedef b/packagedef index ac53ca7..8613d52 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.11.1") + .Версия("0.12.0") .Автор("Khorev Aleksey") .АдресАвтора("Khorevaa@gmail.com") .Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" new file mode 100644 index 0000000..c6d540c --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" @@ -0,0 +1,32 @@ + +Перем Префикс; // Строка - префикс фильтрации переменных среды + +#Область Публичное_API + +// Устанавливает префикс фильтрации переменных среды +// +// Параметры: +// ПрефиксФильтра - Строка - префикс +// +// Возвращаемое значение: +// НастройкиПровайдераENV - ссылка на текущий объект +// +Функция УстановитьПрефикс(Знач ПрефиксФильтра) Экспорт + Префикс = ПрефиксФильтра; + Возврат ЭтотОбъект; +КонецФункции + +// Возвращает установленный префикс +// +// Возвращаемое значение: +// Строка - текущий префикс +// +Функция ПолучитьПрефикс() Экспорт + Возврат Префикс; +КонецФункции + +#КонецОбласти + +Процедура ПриСозданииОбъекта(НачальныйПрефикс = "") + Префикс = НачальныйПрефикс; +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\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/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 35b8b40..169c7e0 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\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/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -12,12 +12,12 @@ // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) передаётся провайдеру как fallback // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт Если Не Включен Тогда Возврат Новый Соответствие; @@ -52,6 +52,24 @@ Приоритет = НовыйПриоритет; КонецПроцедуры +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - новый идентификатор провайдера +// +Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + Идентификатор = НовыйИдентификатор; +КонецПроцедуры + +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// Произвольный - объект настроек или Неопределено если провайдер не поддерживает метод Настройки() +// +Функция Настройки() Экспорт + Возврат КлассПровайдера.Настройки(); +КонецФункции + // Выполняет запись данных провайдера // // Параметры: @@ -111,17 +129,11 @@ ИЛИ РеализованИнтерфейсЗаписи); Если НЕ ПроверкаПровайдера Тогда - // TODO: Добавить описание того что реализовано а что нет ВызватьИсключение "Не реализован необходимый интерфейс провайдера"; КонецЕсли; ТипПровайдера = ВходящийКлассПровайдера.ТипПровайдера(); - - Если ЭтоФайловыйПровайдер() Тогда - КлассПровайдера = Новый ФайловыйПровайдерПараметров(ВходящийКлассПровайдера); - Иначе - КлассПровайдера = ВходящийКлассПровайдера; - КонецЕсли; + КлассПровайдера = ВходящийКлассПровайдера; Приоритет = КлассПровайдера.Приоритет(); Идентификатор = КлассПровайдера.Идентификатор(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" index 89be6e5..561f7aa 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -3,8 +3,15 @@ Перем Лог; Перем Префикс; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераENV + Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") Префикс = ПрефиксПеременныхСреды; + _Приоритет = 2; + _Идентификатор = "env"; + _Настройки = Новый НастройкиПровайдераENV(ПрефиксПеременныхСреды); Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); КонецПроцедуры @@ -16,7 +23,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 2; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -25,7 +45,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "env"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -37,17 +70,29 @@ Возврат "env"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиПровайдераENV - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) игнорируется; для указания префикса +// использовать метод Настройки().УстановитьПрефикс(...) // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс(); - Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", ЭффективныйПрефикс); ПеременныеСреды = ПеременныеСреды(); ПрочитанныеПараметры = Новый Соответствие; @@ -63,16 +108,16 @@ Результат = Новый Соответствие; - Если ПустаяСтрока(Префикс) Тогда + Если ПустаяСтрока(ЭффективныйПрефикс) Тогда Результат = ПрочитанныеПараметры; Иначе Для каждого ПеременнаяСреды Из ПрочитанныеПараметры Цикл - Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(Префикс)) Тогда + Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(ЭффективныйПрефикс)) Тогда Результат.Вставить( - Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(Префикс) + 1)), + Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(ЭффективныйПрефикс) + 1)), ПеременнаяСреды.Значение ); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" index 3e14e84..7a03311 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" @@ -2,6 +2,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -10,7 +14,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -19,7 +36,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "ini"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -40,29 +70,52 @@ Возврат "ini"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда + + ПрочитанныеПараметры = Новый Соответствие; - ПрочитанныеПараметры = Новый Соответствие; + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); Возврат ПрочитанныеПараметры; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -109,3 +162,7 @@ КонецФункции // Прочитать Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini"); + +_Приоритет = 1; +_Идентификатор = "ini"; +_Настройки = Новый НастройкиФайловогоПровайдера; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" index 60287a3..6656d15 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" @@ -4,6 +4,10 @@ Перем Лог; Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "json"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -36,35 +66,61 @@ // Возвращает расширения файлов по умолчанию // // Возвращаемое значение: -// Строка - расширения файлов по умолчанию (yaml yml) +// Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт Возврат "json"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Если провайдер имеет собственные настройки и задан файл — используем свои настройки + // через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + // Fallback: настройки переданы снаружи (обратная совместимость) + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; ПрочитанныеПараметры = Новый Соответствие; - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда + // Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; + + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); Возврат ПрочитанныеПараметры; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -152,3 +208,7 @@ КонецПроцедуры Лог = Логирование.ПолучитьЛог("oscript.lib.configor.json"); + +_Приоритет = 1; +_Идентификатор = "json"; +_Настройки = Новый НастройкиФайловогоПровайдера; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" index e30fb8f..98862be 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" @@ -4,6 +4,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераVault + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "vault"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -33,21 +63,38 @@ Возврат "vault"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиПровайдераVault - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт ПрочитанныеПараметры = Новый Соответствие; - Адрес = НастройкиПровайдера.Адрес; - Токен = НастройкиПровайдера.Токен; - Запрос = НастройкиПровайдера.Запрос; + // Приоритет у собственных настроек + Н = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(Н.Адрес) Тогда + Н = НастройкиПровайдера; + КонецЕсли; + + Адрес = Н.Адрес; + Токен = Н.Токен; + Запрос = Н.Запрос; Если Не ЗначениеЗаполнено(Адрес) Тогда Лог.Отладка("Не указан адрес сервера. Чтение невозможно"); @@ -139,3 +186,7 @@ КонецФункции Лог = Логирование.ПолучитьЛог("oscript.lib.configor.vault"); + +_Приоритет = 1; +_Идентификатор = "vault"; +_Настройки = Новый НастройкиПровайдераVault; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" index 79ba9aa..40e97f7 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" @@ -3,6 +3,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -11,7 +15,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -20,7 +37,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "yaml"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -41,46 +71,63 @@ Возврат "yaml yml"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - ПрочитанныеПараметры = Новый Соответствие; + // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + ПрочитанныеПараметры = Новый Соответствие; - ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Попытка + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); + Попытка + Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); + ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); + Исключение + Лог.Ошибка("Ошибка чтения настроек + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); - - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Исключение - - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ВызватьИсключение; - - КонецПопытки; + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -136,4 +183,8 @@ #КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml"); \ No newline at end of file +Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml"); + +_Приоритет = 1; +_Идентификатор = "yaml"; +_Настройки = Новый НастройкиФайловогоПровайдера; \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" index 6952324..824332b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" @@ -3,7 +3,19 @@ Перем Лог; Перем мПараметры; -Процедура ПриСозданииОбъекта(Параметры) +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка + +Процедура ПриСозданииОбъекта(Параметры = Неопределено) + + _Приоритет = 3; + _Идентификатор = "map"; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + + Если Параметры = Неопределено Тогда + мПараметры = Новый Соответствие; + Возврат; + КонецЕсли; Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда ВызватьИсключение @@ -11,7 +23,6 @@ КонецЕсли; мПараметры = Параметры; - Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); КонецПроцедуры @@ -23,7 +34,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 3; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -32,7 +56,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "map"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -44,15 +81,35 @@ Возврат "memory"; КонецФункции +// Устанавливает источник параметров +// +// Параметры: +// ИсточникПараметров - Соответствие - источник параметров +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт + + Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + мПараметры = ИсточникПараметров; + Возврат ЭтотОбъект; + +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - игнорируется // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт Лог.Отладка("Считываю параметры из соответствия"); @@ -60,4 +117,8 @@ КонецФункции +Функция Настройки() Экспорт + Возврат Неопределено; +КонецФункции + #КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 7ee8028..ae78f1a 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\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\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -14,8 +14,8 @@ Перем ПровайдерыПараметров; // Соответствие -Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера -Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault +Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера - для обратной совместимости +Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault - для обратной совместимости Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта @@ -130,11 +130,17 @@ // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: -// КлассОбъект - Объект - класс провайдера или имя класса -// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99) +// КлассОбъект - Объект - класс провайдера +// Приоритет - Число - числовой приоритет выполнения провайдера +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера +// при коллизии добавляется суффикс #2, #3 и т.д. // -Процедура ДобавитьПровайдерПараметров(Знач КлассОбъект, - Знач Приоритет = Неопределено) Экспорт +// Возвращаемое значение: +// Объект - переданный КлассОбъект (для chaining настроек через Настройки()) +// +Функция ДобавитьПровайдерПараметров(Знач КлассОбъект, + Знач Приоритет = Неопределено, + Знач ИдентификаторПровайдера = Неопределено) Экспорт ДобавляемыйПровайдерПараметров = Новый ПровайдерПараметров(КлассОбъект); @@ -142,9 +148,18 @@ ДобавляемыйПровайдерПараметров.УстановитьПриоритет(Приоритет); КонецЕсли; - ПровайдерыПараметров.Вставить(ДобавляемыйПровайдерПараметров.Идентификатор, ДобавляемыйПровайдерПараметров); + Если ЗначениеЗаполнено(ИдентификаторПровайдера) Тогда + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ИдентификаторПровайдера); + КонецЕсли; -КонецПроцедуры + ФинальныйИдентификатор = ПолучитьСвободныйИдентификатор(ДобавляемыйПровайдерПараметров.Идентификатор); + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ФинальныйИдентификатор); + + ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров); + + Возврат КлассОбъект; + +КонецФункции // Отключает провайдера из таблицы провайдеров // @@ -164,6 +179,27 @@ КонецПроцедуры +// Возвращает класс-провайдер по идентификатору для прямой настройки +// +// Параметры: +// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2") +// +// Возвращаемое значение: +// Произвольный - класс провайдера или Неопределено если не найден +// +Функция ПровайдерПоИдентификатору(Знач ИдентификаторПровайдера) Экспорт + + Провайдер = ПровайдерыПараметров[ИдентификаторПровайдера]; + + Если Провайдер = Неопределено Тогда + Лог.Отладка("Провайдер с идентификатором <%1> не найден", ИдентификаторПровайдера); + Возврат Неопределено; + КонецЕсли; + + Возврат Провайдер; + +КонецФункции + // Возвращает объект настройки поиска файлов // // Возвращаемое значение: @@ -350,12 +386,14 @@ ИдентификаторПровайдера = КлассПровайдера.Идентификатор; + // Передаём глобальные настройки как fallback (обратная совместимость) + // Провайдер использует их только если у него нет собственных настроек Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки(); ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки(); Иначе - ПараметрыПровайдера = Новый Структура; + ПараметрыПровайдера = Неопределено; КонецЕсли; Попытка @@ -438,6 +476,24 @@ КонецПроцедуры +// Возвращает свободный идентификатор, добавляя суффикс #2, #3 при коллизии +Функция ПолучитьСвободныйИдентификатор(БазовыйИдентификатор) + + Если ПровайдерыПараметров[БазовыйИдентификатор] = Неопределено Тогда + Возврат БазовыйИдентификатор; + КонецЕсли; + + Счетчик = 2; + Пока Истина Цикл + Кандидат = БазовыйИдентификатор + "#" + Счетчик; + Если ПровайдерыПараметров[Кандидат] = Неопределено Тогда + Возврат Кандидат; + КонецЕсли; + Счетчик = Счетчик + 1; + КонецЦикла; + +КонецФункции + Функция ПолучитьНастройкуФайловогоПровайдера() Если НастройкаФайловогоПровайдера = Неопределено Тогда