diff --git a/.github/workflows/os/cli_parse.os b/.github/workflows/os/cli_parse.os index d8dd549aa1..6d754bcfac 100644 --- a/.github/workflows/os/cli_parse.os +++ b/.github/workflows/os/cli_parse.os @@ -279,7 +279,6 @@ Процедура ОпределитьДопОписание(ДопОписание, Модуль) - НачалоПараметров = Ложь; ЕстьМассив = Ложь; ЕстьДата = Ложь; ТекстДополнения = ""; diff --git a/cli/tools/Modules/Утилиты.os b/cli/tools/Modules/Утилиты.os index b516e8d57c..cb6ce83d98 100644 --- a/cli/tools/Modules/Утилиты.os +++ b/cli/tools/Modules/Утилиты.os @@ -15,7 +15,10 @@ // // Возвращаемое значение: // Строка - пустая строка -Функция РазложитьJSON(Знач JSON, Знач МаксимальныйУровеньВложенности = 0, Знач ИмяПараметра = "", Знач Кодировка = "UTF-8") Экспорт +Функция РазложитьJSON(Знач JSON + , Знач МаксимальныйУровеньВложенности = 0 + , Знач ИмяПараметра = "" + , Знач Кодировка = "UTF-8") Экспорт МаксимальнаяВложенность = МаксимальныйУровеньВложенности; ИскомыйПараметр = ИмяПараметра; @@ -61,7 +64,11 @@ #Область СлужебныеПроцедурыИФункции -Функция ПолучитьЗначенияРекурсивно(Знач JSON, Знач Префикс = "", Знач ТекущаяВложенность = 1) +Функция ПолучитьЗначенияРекурсивно(Знач JSON, Знач Префикс = "", Знач ТекущаяВложенность = 1, СоответствиеПолей = "") + + Если Не ЗначениеЗаполнено(СоответствиеПолей) Тогда + СоответствиеПолей = Новый Соответствие; + КонецЕсли; ВозвращаемоеЗначение = ""; @@ -75,7 +82,19 @@ СледующаяВложенностьДоступна = МаксимальнаяВложенность = 0 Или СледующаяВложенность <= МаксимальнаяВложенность; Если Не ЭтоКоллекция Или Не СледующаяВложенностьДоступна Тогда - ПеременнаяСреды = Ключ; + + Дублирования = СоответствиеПолей.Получить(Ключ); + + Если Дублирования = Неопределено Тогда + Счетчик = 0; + ПеременнаяСреды = Ключ; + Иначе + Счетчик = Дублирования + 1; + ПеременнаяСреды = Ключ + СтрЗаменить(Строка(Дублирования), Символы.НПП, ""); + КонецЕсли; + + СоответствиеПолей.Вставить(Ключ, Счетчик); + ПолучитьСтроку(Значение); Если Не ЗначениеЗаполнено(ИскомыйПараметр) Тогда @@ -91,7 +110,10 @@ КонецЕсли; Иначе НовыйПрефикс = Ключ + "_"; - ВозвращаемоеЗначение = ПолучитьЗначенияРекурсивно(Значение, НовыйПрефикс, СледующаяВложенность); + ВозвращаемоеЗначение = ПолучитьЗначенияРекурсивно(Значение + , НовыйПрефикс + , СледующаяВложенность + , СоответствиеПолей); Если ЗначениеЗаполнено(ВозвращаемоеЗначение) Тогда Прервать;