Универсальные методы для работы с коллекциями

09.04.25

Разработка - Универсальные функции

Несколько небольших методов для работы с универсальными коллекциями значений.

Небольшая функция рекурсивной очистки для универсальных коллекций с вложенными коллекциями: соответствие, структура, массив:
 


Функция ОчиститьКоллекцию(Коллекция) Экспорт

    ТипЗначения = ТипЗнч(Коллекция);

    Если ТипЗначения = Тип("Структура") Тогда

        Для Каждого ЭлементКоллекции Из Коллекция Цикл
            ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции.Значение);
            Коллекция[ЭлементКоллекции.Ключ] = ОчищенноеПоле;
        КонецЦикла;

    ИначеЕсли ТипЗначения = Тип("Соответствие") Тогда

        Коллекция_ = Новый Соответствие;

        Для Каждого ЭлементКоллекции Из Коллекция Цикл
            ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции.Значение);
            Коллекция_.Вставить(ЭлементКоллекции.Ключ, ОчищенноеПоле);
        КонецЦикла;

        Коллекция = Коллекция_;

    ИначеЕсли ТипЗначения = Тип("Массив") Тогда

        Коллекция_ = Новый Массив;

        Для Каждого ЭлементКоллекции Из Коллекция Цикл
            ОчищенноеПоле = ОчиститьКоллекцию(ЭлементКоллекции);
            Коллекция_.Добавить(ОчищенноеПоле);
        КонецЦикла;

        Коллекция = Коллекция_;
    Иначе
        Коллекция = "";
    КонецЕсли;

    Возврат Коллекция;

КонецФункции

 

Получение копии существующей коллекции:
 

Функция КопироватьКоллекцию(Коллекция) Экспорт

    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Коллекция);

    ТипКоллекции= ТипЗнч(Коллекция);

    Если ТипКоллекции = Тип("Структура") Или ТипКоллекции = Тип("Соответствие") Тогда

        КоллекцияН = ?(ТипКоллекции = Тип("Структура"), 
        Новый Структура, 
        Новый Соответствие);

        Для Каждого ПолеКоллекции Из Коллекция Цикл
            КоллекцияН.Вставить(ПолеКоллекции.Ключ, ПолеКоллекции.Значение);
        КонецЦикла;

    ИначеЕсли ТипКоллекции = Тип("Массив") Тогда

        КоллекцияН = Новый Массив;

        Для Каждого ЭлементКоллекции Из Коллекция Цикл
            КоллекцияН.Добавить(ЭлементКоллекции);
        КонецЦикла;

    Иначе

        КоллекцияН = Коллекция;

    КонецЕсли;

    Возврат КоллекцияН;

КонецФункции

 

Вступайте в нашу телеграмм-группу Инфостарт

коллекции функции

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5221    DeerCven    15    

57

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    45809    dimanich70    83    

161

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6782    6    John_d    13    

59

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    56587    atdonya    31    

68

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8544    ke.92@mail.ru    17    

67

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22608    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Avatarzorro 64 10.04.25 02:03 Сейчас в теме
это не универсальная писанина а костыль. У всех или почти у всех коллекций есть метод Очистить(). Плюс коллекции не только структура соответствие и массив, а еще таблицы, деревья, табличные части и тд.

По факту такая процедура пишется в примерно 5 строк и работает как часы. Возможно в 15 если найдется коллекция у которой метода очистить() нет.

А то что в после - лютейшая шляпа
2. Anqben 10.04.25 09:50 Сейчас в теме
(1)
это не универсальная писанина а костыль. У всех или почти у всех коллекций есть метод Очистить()


Срыв покровов: метод Очистить() очищает и ключи тоже. А этот метод оставляет в структуре и соответствии ключи и очищает только значения. За этим она и нужна

А то, что в комментарии дальше написано - лютейшая шляпа
4. Avatarzorro 64 11.04.25 04:22 Сейчас в теме
(2) конечно, ты же его даже не понял. Для тебя коллекции это структура, соответствие и массив. А их намного больше. Но ты даже этого не понял из моего коммента. И суть очистки коллекции в удалении строк. Что такое строка в структуре разрешаю даже загуглить
5. Anqben 11.04.25 09:17 Сейчас в теме
(4) Я не знаю, в какой книге ты вычитал, что если я делаю метод очистки коллекции, то я просто обязан делать ее для каждого существующго типа коллекции, а не только для тех, которые мне нужны. Но достаточно 10 секунд мозгами своими подумать, что у таблицы и дерева как раз есть твой любимый метод Очистить(), который удаляет информацию не разрушая структуру (т.к. она в колонки зашита) в отличии от коллекции, где Очистить() удаляет и данные, и структуру полей

И суть очистки коллекции в удалении строк


Мне твоя интерпретация сути очистки не интересна. Я очистил ее так, как мне надо было - значения с сохранениями ключей, что потом используется для получения пустой json схемы. Советы свои можешь себе посоветовать
6. Avatarzorro 64 11.04.25 11:07 Сейчас в теме
(5) и назвал топик "Универсальные методы для работы с коллекциями".

Сверхразум че сказать
7. Anqben 13.04.25 10:41 Сейчас в теме
(6) То, что массивы, структуры и соответствия одинаково во всех базах работают ведь недостаточно для универсальности, для тугодумов надо функцию на 20 строчек еще отдельно называть ОчиститьМассивСтруктуруСоответствиеНоНеТаблицуИДерево, иначе все - инфаркт
8. Avatarzorro 64 14.04.25 09:34 Сейчас в теме
(7) для для не очень умных. Если закинуть в твою писанину таблицу че будет?
9. Anqben 05.05.25 10:31 Сейчас в теме
(8) Для для не очень умных - пустая строка вернется. По тексту функции же не видно, да?
10. Avatarzorro 64 07.05.25 14:35 Сейчас в теме
(9) так универсальный метод работы с коллекциями же....

универсальный


УНИВЕРСАЛЬНЫЙ
3. Hitcher 180 10.04.25 10:28 Сейчас в теме
Тогда имя функции некорректное, поскольку вводит в заблуждение.
Для отправки сообщения требуется регистрация/авторизация