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

09.04.25

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    Иначе

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

    КонецЕсли;

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

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

 

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

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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3627    Abysswalker    9    

45

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

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

14.05.2025    6741    DeerCven    15    

59

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

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

21.05.2024    49754    dimanich70    83    

170

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

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

1 стартмани

18.03.2024    7401    6    John_d    13    

59

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

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

12.02.2024    62511    atdonya    31    

70

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

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

30.11.2023    9234    ke.92@mail.ru    17    

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

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

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


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

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

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


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

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

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


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