Небольшая функция рекурсивной очистки для универсальных коллекций с вложенными коллекциями: соответствие, структура, массив:
Функция ОчиститьКоллекцию(Коллекция) Экспорт
ТипЗначения = ТипЗнч(Коллекция);
Если ТипЗначения = Тип("Структура") Тогда
Для Каждого ЭлементКоллекции Из Коллекция Цикл
ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции.Значение);
Коллекция[ЭлементКоллекции.Ключ] = ОчищенноеПоле;
КонецЦикла;
ИначеЕсли ТипЗначения = Тип("Соответствие") Тогда
Коллекция_ = Новый Соответствие;
Для Каждого ЭлементКоллекции Из Коллекция Цикл
ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции.Значение);
Коллекция_.Вставить(ЭлементКоллекции.Ключ, ОчищенноеПоле);
КонецЦикла;
Коллекция = Коллекция_;
ИначеЕсли ТипЗначения = Тип("Массив") Тогда
Коллекция_ = Новый Массив;
Для Каждого ЭлементКоллекции Из Коллекция Цикл
ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции);
Коллекция_.Добавить(ОчищенноеПоле);
КонецЦикла;
Коллекция = Коллекция_;
Иначе
Коллекция = "";
КонецЕсли;
Возврат Коллекция;
КонецФункции
Получение копии существующей коллекции:
Функция КопироватьКоллекцию(Коллекция) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Коллекция);
ТипКоллекции= ТипЗнч(Коллекция);
Если ТипКоллекции = Тип("Структура") Или ТипКоллекции = Тип("Соответствие") Тогда
КоллекцияН = ?(ТипКоллекции = Тип("Структура"),
Новый Структура,
Новый Соответствие);
Для Каждого ПолеКоллекции Из Коллекция Цикл
КоллекцияН.Вставить(ПолеКоллекции.Ключ, ПолеКоллекции.Значение);
КонецЦикла;
ИначеЕсли ТипКоллекции = Тип("Массив") Тогда
КоллекцияН = Новый Массив;
Для Каждого ЭлементКоллекции Из Коллекция Цикл
КоллекцияН.Добавить(ЭлементКоллекции);
КонецЦикла;
Иначе
КоллекцияН = Коллекция;
КонецЕсли;
Возврат КоллекцияН;
КонецФункции