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

09.04.25

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    Иначе

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

    КонецЕсли;

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

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

 

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

См. также

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

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

21.05.2024    30821    dimanich70    83    

152

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

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

1 стартмани

18.03.2024    5006    6    John_d    11    

57

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

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

12.02.2024    34588    atdonya    28    

62

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

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

30.11.2023    6608    ke.92@mail.ru    17    

66

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

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

28.08.2023    18181    YA_418728146    8    

172

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    4853    79    progmaster    11    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 1C:Бухгалтерия 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    19893    191    sapervodichka    113    

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

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

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


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

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

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


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

Сверхразум че сказать
7. Anqben 13.04.25 10:41 Сейчас в теме
(6) То, что массивы, структуры и соответствия одинаково во всех базах работают ведь недостаточно для универсальности, для тугодумов надо функцию на 20 строчек еще отдельно называть ОчиститьМассивСтруктуруСоответствиеНоНеТаблицуИДерево, иначе все - инфаркт
3. Hitcher 179 10.04.25 10:28 Сейчас в теме
Тогда имя функции некорректное, поскольку вводит в заблуждение.
Оставьте свое сообщение