Полезные функции: поиск поля коллекции рекурсивно

09.01.25

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

Небольшая функция для поиска значения поля универсальной коллекции.

Функция, которую я часто использую в работе - поиск значения в коллекции (включая вложенную в другую коллекцию)

Функция принимает коллекцию и имя необходимого поля. Для поиска во вложенных коллекциях имя поля можно указывать через точку. Например, если в структуре есть поле Адрес, которое также является структурой, у которой есть поле Улица, то в параметр Поле можно написать "Адрес.Улица"

Функция возвращает Истина, если поле найдено, или Ложь, если нет. В случае с Истина в параметр Значение записывается значение найденного поля
 

Функция НайтиПолеКоллекции(Знач Коллекция, Знач Поле, Значение = Неопределено)

    ТипКоллекции= ТипЗнч(Коллекция);
    ЭтоКоллекция= ТипКоллекции = Тип("Структура") Или ТипКоллекции = Тип("Соответствие");

    Если СтрНайти(Поле, ".") и ЭтоКоллекция Тогда

        ЧастиПоля = СтрРазделить(Поле, ".");
        ТекущееПоле = ЧастиПоля[0];

        Если Не НайтиПолеКоллекции(Коллекция, ТекущееПоле, ЗначениеПоля) Тогда
            Возврат Ложь;
        Иначе

            ЧастиПоля.Удалить(0);
            СледующаяКоллекция = Коллекция[ТекущееПоле];
            СледующееПоле = СтрСоединить(ЧастиПоля, ".");

            Возврат НайтиПолеКоллекции(СледующаяКоллекция, СледующееПоле, ЗначениеПоля);

        КонецЕсли;

    ИначеЕсли ТипКоллекции = Тип("Структура")Тогда
        Возврат Коллекция.Свойство(Поле, ЗначениеПоля);
    ИначеЕсли ТипКоллекции = Тип("Соответствие") Тогда
        ЗначениеПоля = Коллекция[Поле];
        Возврат ЗначениеПоля <> Неопределено;
    Иначе
        Возврат Ложь;
    КонецЕсли;

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

 

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

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

См. также

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

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

30.10.2025    3318    Abysswalker    7    

44

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

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

14.05.2025    6169    DeerCven    15    

57

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

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

21.05.2024    48208    dimanich70    83    

169

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

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

1 стартмани

18.03.2024    7257    6    John_d    13    

59

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

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

12.02.2024    60141    atdonya    31    

69

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

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

30.11.2023    9034    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dkoder 6 10.01.25 09:52 Сейчас в теме
1. рекурсия придумана для другого (и жрет ресурсы и время). можно обойтись циклом
2. не понял смысл передачи параметров по значению, это что бы надежно рекурсия жрала ресурсы? или борьба с мутабельностью?
3. ключ соответствия часто не Строка
4. предполагаю ошибку в коде - в параметрах функции "Значение", а далее по коду "ЗначениеПоля"
Для отправки сообщения требуется регистрация/авторизация