1С 8.3 Поиск значения в Дереве Значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Поиск значения в Дереве Значений

Данные > Примеры кода 1С > 1С 8.3 Дерево значений
Функция выполняет рекурсивный поиск указанного значения в дереве значений, включая все подчиненные строки. Поиск может выполняться как по конкретной колонке, так и по всем колонкам дерева.

Параметры:
  • СтрокиДерева (КоллекцияСтрокДереваЗначений) - коллекция строк дерева значений, в которой нужно выполнить поиск
  • Значение (Произвольный) - значение, которое необходимо найти
  • ОбластьПоиска (Строка или КоллекцияКолонокДереваЗначений) - определяет область поиска:
    • если передана строка - поиск выполняется только в указанной колонке
    • если передана коллекция колонок - поиск выполняется во всех указанных колонках

Возвращаемое значение:
  • Если значение найдено - возвращается найденная строка дерева значений
  • Если значение не найдено - возвращается строка "!Значение не найдено!"
Найти значение в ДЗ в 1С 8.3:
// Ищет значение в дереве значений (рекурсивно, включая подчиненные строки)
//
// Параметры:
//  СтрокиДерева - КоллекцияСтрокДереваЗначений - строки для поиска
//  Значение - Произвольный - искомое значение
//  ОбластьПоиска - Строка - имя колонки для поиска
//                - КоллекцияКолонокДереваЗначений - колонки для поиска
//  СравниватьТипы - Булево - если Истина, сравнивает типы строго (по умолчанию Ложь)
//
// Возвращаемое значение:
//  СтрокаДереваЗначений - если значение найдено
//  Неопределено - если значение не найдено
//
Функция НайтиЗначениеВДеревеЗначений(СтрокиДерева, Значение, ОбластьПоиска, СравниватьТипы = Ложь) Экспорт

 ИщемПоВсемКолонкам = ТипЗнч(ОбластьПоиска) = Тип("КоллекцияКолонокДереваЗначений");

 Для Каждого Строка Из СтрокиДерева Цикл
   // Поиск в текущей строке
   Если ИщемПоВсемКолонкам Тогда
     // Поиск по всем указанным колонкам
     Для Каждого Колонка Из ОбластьПоиска Цикл
       Если СравнитьЗначения(Строка[Колонка.Имя], Значение, СравниватьТипы) Тогда
         Возврат Строка;
       КонецЕсли;
     КонецЦикла;
   Иначе
     // Поиск по конкретной колонке
     Если СравнитьЗначения(Строка[ОбластьПоиска], Значение, СравниватьТипы) Тогда
       Возврат Строка;
     КонецЕсли;
   КонецЕсли;

   // Рекурсивный поиск в подчиненных строках
   Если Строка.КоличествоПодчиненных() > 0 Тогда
     НайденнаяСтрока = НайтиЗначениеВДеревеЗначений(
       Строка.ПолучитьПодчиненные(),
       Значение,
       ОбластьПоиска,
       СравниватьТипы);

     Если НайденнаяСтрока <> Неопределено Тогда
       Возврат НайденнаяСтрока;
     КонецЕсли;
   КонецЕсли;
 КонецЦикла;

 Возврат Неопределено;

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

// Вспомогательная функция для сравнения значений
// с учетом или без учета типов данных
Функция СравнитьЗначения(Значение1, Значение2, СравниватьТипы)

 Если СравниватьТипы Тогда
   Возврат Значение1 = Значение2;
 Иначе
   Возврат Значение1 = Значение2 Или Строка(Значение1) = Строка(Значение2);
 КонецЕсли;

КонецФункции
Использование:
// Поиск с обычным сравнением (без учета типов)
НайденнаяСтрока = НайтиЗначениеВДеревеЗначений(
   Дерево.Строки,
  "123",     // Ищем строку "123"
  "Код",     // В колонке "Код"
   Ложь);     // Без учета типа данных

// Поиск со строгим сравнением (с учетом типов)
НайденнаяСтрока = НайтиЗначениеВДеревеЗначений(
   Дерево.Строки,
  123,       // Ищем число 123
  "Код",     // В колонке "Код"
   Истина);   // С учетом типа данных

// Поиск по нескольким колонкам
НайденнаяСтрока = НайтиЗначениеВДеревеЗначений(
   Дерево.Строки,
  "Т001",
   Дерево.Колонки, // Ищем во всех колонках
   Ложь);

0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 07.12.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому