Обход объекта рекурсивно

19.05.26

Задачи пользователя - Поиск данных

Отображение и просмотр реквизитов справочника или документа - с бесконечным открытием подуровней.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Простое дерево объекта (без рекурсивного обхода реквизитов)
.epf 8,93Kb
2 3 400 руб. Купить
Обход объекта рекурсивно
.epf 10,77Kb
11 4 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Всем привет!

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

Цель обработки и статьи:

  • реализовать бесконечное открытие связанных ссылок на форме,
  • реализовать алгоритм преобразования объекта метаданных (документа, справочника) в json-подобную структуру,
  • (*) реализовать алгоритм обратного преобразования из json-подобной структуры  в объект метаданных.

* Относительно последнего пункта задача решена частично, поскольку вывод в дерево не тождественен созданию объектов конфигурации.

Обработка была разработана и протестирована:

  • Платформа 1С:Предприятие 8.3 (8.3.23.1865)
  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.150.33
  • Управление нашей фирмой, редакция 3.0, релизы 3.0.6.200
  • Розница, редакция 3.0, релизы 3.0.6.200
  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.65
  • Управление торговлей, редакция 11, релизы 11.4.13.103
  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.6.227
  • 1С:Комплексная автоматизация 2, релизы 2.5.12.265
  • предполагается, что будет работать на любой конфигурации на управляемых формах.

Анализируются все реквизиты объекта и реквизиты всех табличных частей объекта (см. рис. в ленте):

  • вариант по умолчанию - показываются только заполненные связанные ссылки
  • дополнительный вариант - также включить анализ и отображение пустых незаполненных полей
  • дополнительный вариант - также включить анализ и отображение перечислений и примитивных типов данных (Строка, Булево, Дата, Число)

Подобный алгоритм был использован и применен:

Идея задачи родилась:

 
 Видео-демонстрация внешней обработки отображения дерева объекта

 

 

 

Перед выводом дерева происходит рекурсивный обход реквизитов: для каждой ссылки определяется тип значений и сохраняется структура всех связанных ссылок. Таким образом, для примера отображения дерева по документу "Расходная накладная 29 от 23.06.2022" (рис. 6 в ленте и рис. ниже) сохранился список из 914 типов и их структур (реквизитов и табл. частей) (рис. 7 в ленте и второй рис. ниже). 

Структура хранения информации напоминает структуру json - состоит из массива структур, каждая структура содержит массив. Хранение информации в подобном виде применяется мною в проектах для передачи дерева значений между сервером и клиентом, клиентом и сервером.

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

Сложность задачи и свой исследовательский интерес продемонстрирую на следующих рисунках. Объект метаданных - например, документ - хранится в конфигурации в виде дерева объектов. Отобразить его на форме в виде дерева - скажем так, простая задача относительно конечной задумки и цели.

Бесконечно раскрывать узлы дерева также можно непосредственно на форме без усложнения исходной задачи (прикрепил к статье отдельный файл "Простое дерево объекта (без рекурсивного обхода реквизитов)") - без предварительного анализа всех связанных ссылок - выводим непосредственно каждый новый раскрытый узел дерева (каждый новый объект конфигурации). 

  

 

Следующий способ вывести дерево объекта - это использовать посредника в виде json-структуры. В данной реализации - вывод в дерево - это всего лишь один из способов показать, как разбирается и собирается объект базы данных (документ, например) через json-структуры, как рекурсивно обходится объект по всем связанным ссылкам.

Используемый стек алгоритмов:

  • Вывод дерева значений на управляемых формах
  • Добавление подчиненных узлов дерева по выделенной строке
  • Реализация бесконечной вложенности узлов
  • Реализация преобразования объекта метаданных в json-структуру
  • Реализация обратного преобразования из json-структуры в объект метаданных в виде дерева.

Обновление 19-06-2024:

  • Расширил тип исходного объекта - теперь не только Документы - добавил тип Справочники
  • Добавил в анализ примитивных типов данных такие типы, как Хранилище Значений и Уникальный Идентификатор - теперь корректно отображается и раскрывается такой справочник как Пользователи (обычно он используется в реквизите Ответственный или Автор).
  • Добавил обработку "Простое дерево объекта (без рекурсивного обхода реквизитов)". Эта обработка не хранит структуру реквизитов связанных ссылок и не обходит все поля рекурсивно - при первом построении дерева работает быстрее, и, в целом, не нагружает память устройства в отличие от другой прилагаемой обработки. См. видео ниже.

 

Обновление 20-06-2024г:

  • Исправлена ошибка в обработке "Обход дерева рекурсивно" - теперь вывод дерева ускорен. Протестировано на КА 2.5.12.265 на объекте Справочник "Варианты отчета" - см. рис. 11 в ленте и ниже. 

На этом все. Всем добра!

С пользой для клиентов, Рустем

 
 См. также
  1. Анализ прав и ролей. Поиск подходящего профиля - алгоритмический анализ и поиск
  2. Оцифровка и визуализация склада - программная прорисовка склада
  3. Удаление документов для любых баз на управляемых формах
  4. Удаление справочников для любых баз на управляемых и обычных формах
  5. Перенумерация документов и справочников - с учетом префиксов номеров
  6. Свертка базы УТ 10.3 подокументно - новая концепция 
  7. Матричное программирование - демо-стенд матричного калькулятора
  8. Справочное хранение товаров в КА 2.5 - кейс запуска адресного склада
  9. Мини-обзор разных задач - от очевидного до неочевидного
  10. Поиск отчета по документам - пример анализа незнакомых конфигураций
  11. Флажок в динамическом списке - от теории до практики "как бы простой" задачи
  12. Из Json в ДеревоЗначений - удобный просмотрщик json-структуры
  13. Внедрение адресного склада в КА 2.5 - кейс запуска адресного склада
  14. Фрилансеру: про цены, про клиентов, про планирование - мое исследование
  15. Что такое форматированный документ - прекрасная возможность раскрасить любой текст
  16. Программная работа с упаковками в КА 2.5 - примеры адаптаций механизмов упаковок в КА 2.5
  17. Универсальное сравнение регистров накопления - связь по измерениям, сравнение по ресурсам
  18. Просмотр свойств метаданных - подписки на события, функциональные опции и другое

 

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.150.33
  • Управление нашей фирмой, редакция 3.0, релизы 3.0.6.200
  • Розница, редакция 3.0, релизы 3.0.6.200
  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.65
  • Управление торговлей, редакция 11, релизы 11.4.13.103
  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.6.227
  • 1С:Комплексная автоматизация 2, релизы 2.5.12.265

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

обход дерева значений рекурсией

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

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

180000 руб.

05.09.2025    5276    2    1    

4

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.

6000 руб.

25.02.2026    5348    17    1    

20

Поиск данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13420 руб.

14.05.2012    172207    360    253    

589

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    47139    32    15    

50

Учетные задачи Поиск данных Подбор и обработка объектов 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

1.обработка позволяет автоматически вычислить дубли и привести их к единому наименованию во всех документах. 2.так же есть возможность в документах поменять счета учета для номенклатуры. Например разные бухгалтера оформляют поступление одного и того же товара - один занес на 10.01, второй на 41.01 в результате в ОСВ у нас минусы. В обработке есть возможность наглядно увидеть такие ошибки и тут же их поправить не бегая по всем документам. Достаточно поставить галочку у номенклатуры и указать счет учета который надо найти и счет учета на который надо его заменить. Обработка сама вычислит документы в которых номенклатура с галочкой была задействована и заменит счета учета. Что бы не было излишнего изменения документов, в обработке указываются типы документов, где операция замены счета разрешена (например Поступление ТМЦ, Реализация, Отчет о розничных продажах, возврат покупателю итд.)

7320 руб.

05.06.2026    631    2    0    

4

Поиск данных Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Беларусь Россия Казахстан Платные (руб)

Встройте искусственный интеллект прямо в вашу 1С за один вечер. «Цифровой сотрудник» - это чат с нейросетью внутри привычного интерфейса 1С, который умеет отвечать не «в общем», а по вашим данным: обучите его на регламентах, инструкциях и прайсах компании, подключите к данным информационной базы - и получите ассистента, который консультирует бухгалтера по учёту, отвечает менеджеру по прайсу и достаёт цифры из базы по запросу на обычном русском языке. Поддерживаются OpenAI, DeepSeek, Qwen и локальные LLM - включая вариант, когда данные вообще не покидают ваш контур.

3660 руб.

03.08.2026    367    1    0    

2

Поиск данных 1С:Управление торговлей 11 Россия Платные (руб)

Возможность по ИНН контрагента быстро найти Партнера с которым связан контрагент.

7015 руб.

11.09.2025    1126    1    0    

3
Отзывы
32. RustIG 1979 27.02.25 15:12 Сейчас в теме
(30) выложил на рутуб (без рекламы должно быть)

обход объекта рекурсивно - видео 1
вывод объекта в дерево - две обработки - видео 2
тестирование вывода объекта в дерево, часть 2 - видео 3
Светлый ум; +1 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vis_tmp 33 15.06.24 15:51 Сейчас в теме
Спасибо, полезная вещь
2. Alxby 1159 15.06.24 19:58 Сейчас в теме
Не увидел, есть ли пометка цикла, т.е. уже выведенного объекта. Если нет, неплохо бы сделать.
5. RustIG 1979 15.06.24 21:55 Сейчас в теме
(2) уточните, что это? Что за цикл? В каком виде фиксировать уже выведенный объект?
7. Alxby 1159 16.06.24 08:07 Сейчас в теме
(5) Рустем, смотрите: вот исследую я какой-то объект. В процессе исследования я раскрываю вложенные объекты до 10 уровня, и на 10 уровне дохожу до элемента, который мне уже попадался на 3 уровне. Чтобы снова не повторить путь раскрытия с 3-го по 10-й уровень для этого элемента, мне нужно вспомнить, что я его уже проходил. А чтобы не запоминать все пройденные объекты, лучше чтобы система сама об этом сообщала. Например выделением цветом, флажком, шрифтом, etc.
9. RustIG 1979 16.06.24 18:50 Сейчас в теме
(7) концепция разработки другая. Здесь нет уровней и подсчета вложенностей. Система запоминает все объекты. К примеру первым объектом будет сам Заказ покупателю. Запоминается весь его скелет. Далее по очереди будет первый реквизит ссылочного типа. У второго элемента запоминается также весь скелет. И рекурсивно обходятся все элементы ссылочного типа с запоминанием скелета объекта. Запоминается единожды, потом скелет используется бесконечно много раз при выводе дерева.
13. Alxby 1159 16.06.24 19:23 Сейчас в теме
(9)Если сама система рекурсивно запоминает все дерево - скелет до самого последнего узла, тогда тем более необходим контроль зацикливания, например, если в заказе будет ссылка на контрагента, у контрагента - ссылка на основной договор, а у договора - владелец - этот же контрагент. А если такой контроль есть, почему бы его не отразить для пользователя? ))
17. RustIG 1979 16.06.24 19:49 Сейчас в теме
(13) контроль есть, очень просто реализован . легко показать. Как вам показать зацикливание?
19. Alxby 1159 16.06.24 20:44 Сейчас в теме
(17) Да нет, мне показывать не надо). Я просто подумал, что может быть полезным отметить это для пользователя. Но автору в данном случае виднее, нужен ли такой функционал. Повторюсь: обработка заслуживает "плюса" в любом случае.
10. RustIG 1979 16.06.24 18:52 Сейчас в теме
(7)в примере на видео система запомнила 900 объектов и их скелеты - структуры данных.
14. Alxby 1159 16.06.24 19:30 Сейчас в теме
(10) Для задач, связанных с разузлованием номенклатуры (изделий и деталей) дерево может быть очень большим - с понятными последствиями для быстродействия и объема памяти. Обработка проверялась в веб-клиенте? А так, решение классное, особенно для проведения анализа взаимосвязей в базе.
15. RustIG 1979 16.06.24 19:46 Сейчас в теме
(14) 1)веб-клиент не проверялась, на сервере используется контекст формы обработки только из-за параметров " показывать примитивные типы", "показывать пустые" , если их убрать, задействовать априори, то контекст формы можно не передавать на сервер. В целом алгоритм адаптируем под любые задачи.
2)Разузлование очень большое это хорошо. В задаче разузлования разных скелетов будет мало: номенклатура и спецификации , что то еще . У меня на видео по заказу запомнилось 900 разных типов для быстрого построения дерева. В задаче разузлования разных типов будет условно 10, потом только ссылки меняются, а сама структура объектов не изменяется. Думаю, быстро отработает.
18. Alxby 1159 16.06.24 20:40 Сейчас в теме
(15) А, теперь я понял, скелет - это не состав объекта, а состав типа объекта. Тогда ок.
11. RustIG 1979 16.06.24 18:56 Сейчас в теме
(7) в процессе обследования система обходит все объекты ссылочного типа, то есть у некоторых объектов уровень вложенности один будет - когда у объекта нет своих связанных ссылок, у некоторых - уровней будет 50 - когда связанных ссылок много, а у тех в свою очередь тоже связанные ссылки. Тутиспользуется рекурсия при обходе всех ссылок.
29. RustIG 1979 27.12.24 09:42 Сейчас в теме
(7) понял вас, интересная мысль.
Скажем так, в момент написания статьи я был внутри своей концепции - и не видел других (не слышал никого).
Скажем так, для определенных целей (задач) такой способ конечно надо реализовывать самостоятельно: ввести какой-нибудь механизм, хранящий уже обработанные данные.
В последствии решая другие задачи, где можно было использовать рекурсивный обход объектов, я не только облегчил алгоритм, но и задействовал подобный механизм хранения и проверки , что следующий объект уже был обработан.
Например, в задаче регистрации объектов в плане обмена - когда для справочника (документа) мы регистрируем все ссылки реквизитов, и все ссылки реквизитов у предыдущих ссылок....
3. Alxby 1159 15.06.24 19:59 Сейчас в теме
Еще колонку с типом реквизита можно добавить
4. RustIG 1979 15.06.24 21:51 Сейчас в теме
21. RustIG 1979 17.06.24 13:02 Сейчас в теме
(3) добавил
Прикрепленные файлы:
6. Grigoriy251 140 15.06.24 23:34 Сейчас в теме
Точно, хотел тоже написать.
Полезная чтука, для анализа и для разработок. Но чего то долго обрабатывает.
А ещё можно добавить отображение движений, в принципе это не сложно.)
16. RustIG 1979 16.06.24 19:47 Сейчас в теме
(6) у меня старый ноутбук, у меня любая файловая база на упр формах открывается и работает долго
8. aximo 2716 16.06.24 09:20 Сейчас в теме
По-моему это какая-то бсп-шная тема
12. RustIG 1979 16.06.24 19:04 Сейчас в теме
(8) процедуры общих модулей Бсп не использую. Не знаю, про что вы написали.
20. kser87 2484 17.06.24 12:26 Сейчас в теме
Чего только не придумают
22. ixijixi 2159 18.06.24 09:01 Сейчас в теме
Плюсанул. Не могу не отметить, что для подобных целей (только без данных) можно использовать механизм СКД
Прикрепленные файлы:
0x00; RustIG; +2 Ответить
23. RustIG 1979 18.06.24 10:06 Сейчас в теме
(22) спасибо, интересный момент.

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

Я расширил описание статьи некоторыми выводами.
Alxby; ixijixi; +2 Ответить
24. RustIG 1979 19.06.24 12:47 Сейчас в теме
Обновление от 19-06-2024:

Проверил на следующих конфигурациях и релизах:

+ Бухгалтерия предприятия, редакция 3.0, релизы 3.0.150.33
+ Управление нашей фирмой, редакция 3.0, релизы 3.0.6.200
+ Розница, редакция 3.0, релизы 3.0.6.200
+ Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.65
+ Управление торговлей, редакция 11, релизы 11.4.13.103
+ 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.6.227
+ 1С:Комплексная автоматизация 2, релизы 2.5.12.265

Добавил новое:

+ Расширил тип исходного объекта - теперь не только Документы - добавил тип Справочники
+ Добавил в анализ примитивных типов данных такие типы, как Хранилище Значений и Уникальный Идентификатор - теперь корректно отображается и раскрывается такой справочник как Пользователи (обычно он используется в реквизите Ответственный или Автор).
+ Добавил обработку "Простое дерево объекта (без рекурсивного обхода реквизитов)"
25. RustIG 1979 19.06.24 13:53 Сейчас в теме
Добавил видео - две обработки - тесты на разных конфигурациях
26. RustIG 1979 20.06.24 22:10 Сейчас в теме
Обновление 20-06-2024г:

Исправлена ошибка в обработке "Обход дерева рекурсивно" - теперь вывод дерева ускорен. Протестировано на КА 2.5.12.265 на объекте Справочник "Варианты отчета".
Переполнения памяти нет.
27. Светлый ум 508 27.12.24 07:07 Сейчас в теме
Какое количество подуровней было?
(мне нужно спецификацию 14-18 уровней раскрутить)
28. RustIG 1979 27.12.24 09:21 Сейчас в теме
(27)
Какое количество подуровней было?


безлимит

мне нужно спецификацию 14-18 уровней раскрутить


визуально проанализировать и вручную раскрывать спецификации - можно до любого уровня....

____________________________________________________
В Томске , кажется, штаб -квартира компании Ольги Усковой...
30. SergMuravev 910 14.02.25 01:54 Сейчас в теме
Видео не открываются
31. RustIG 1979 27.02.25 13:26 Сейчас в теме
(30) а как сейчас видео добавлять к статьям, не знаете случаем?
32. RustIG 1979 27.02.25 15:12 Сейчас в теме
(30) выложил на рутуб (без рекламы должно быть)

обход объекта рекурсивно - видео 1
вывод объекта в дерево - две обработки - видео 2
тестирование вывода объекта в дерево, часть 2 - видео 3
Светлый ум; +1 Ответить
33. SergMuravev 910 27.02.25 22:51 Сейчас в теме
(32) Спасибо. Про видео не знаю.
Для отправки сообщения требуется регистрация/авторизация