Универсальный поиск значения в дереве значений в 1С

🔧 Где деньги, Лебовски посты?

Что-то я редко здесь пишу. Пора исправляться! Держите свежий кейс из работы и полезную, на мой взгляд, «монтировку».

Задача  Ковырял механизм ЭДО — нужно было найти место, где заполняется один реквизит в электронной УПД, и подменить его.

Под капотом — дикое развесистое дерево значений, в дебрях которого в какой-то момент заполняется нужный мне реквизит. Захотелось без лишнего напряжения понять, когда именно он заполняется и есть ли вообще значение в дереве.

Решение  Погуглил, нашёл болванку функции, немного допилил для универсальности — и вот что получилось.

Как использовать:  1. Добавляем функцию как экспортную в общий модуль (я кинул в одноразовое расширение).  2. В отладке, в табло, вызываем функцию с нужным деревом значений.  3. Шагаем отладчиком — и локализуем нужное место!

Код  функции:

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

📩 Мои контакты:  🔹 Телеграм-канал 🔹 Сайт-визитка