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

21.06.24

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

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

Скачать файл

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

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

Всем привет!

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

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

  • реализовать бесконечное открытие связанных ссылок на форме,
  • реализовать алгоритм преобразования объекта метаданных (документа, справочника) в 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. Универсальное сравнение регистров накопления - связь по измерениям, сравнение по ресурсам

 

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

  • Бухгалтерия предприятия, редакция 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

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

См. также

Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

10800 руб.

14.05.2012    157021    331    252    

563

Архивирование (backup) Журнал регистрации Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал регистрации изменений документов в 1С для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма «История изменений». Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42929    11    24    

39

Поиск данных Системный администратор Программист Платформа 1С v8.3 Россия Абонемент ($m)

Статья об опыте развертывания и интеграции с базой данных Manticore Search для быстрого полнотекстового поиска.

1 стартмани

30.11.2023    3645    andreysidor4uk    18    

49

Поиск данных Корректировка данных Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

PowerOffice - обработка для поиска, просмотра и обработки данных для пользователей. Доступ к объектам на просмотр и редактирование данных определяется правами пользователя.

1 стартмани

05.06.2023    2107    24    PowerBoy    1    

16

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

Получение ссылки в 1С по бинарной строке из PostgreSQL в виде строки формата bytea или из MSSQL в виде шестнадцатиричной строки. Кроме ссылочных объектов ссылки могут быть получены и для перечислений. Это может быть полезно при анализе логов журнала регистрации или СУБД.

1 стартмани

04.04.2023    2792    2    berserg    2    

12

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

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

1 стартмани

18.08.2022    3130    25    KVIKS    3    

11

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

Обработка предназначена для гибкого поиска и дальнейшей замены дублей справочников, документов, а также планов видов расчетов и планов видов характеристик. В обработку включена возможность проверки наличия ссылки во внешней базе (по УИДу), поиска дублей с предварительным отбором, а также произвольной обработки реквизитов перед поиском (например, возможно удалить определенные символы из наименования).

3600 руб.

30.03.2022    8704    3    0    

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

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

Я расширил описание статьи некоторыми выводами.
Alxby; ixijixi; +2 Ответить
24. RustIG 1692 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 1692 19.06.24 13:53 Сейчас в теме
Добавил видео - две обработки - тесты на разных конфигурациях
26. RustIG 1692 20.06.24 22:10 Сейчас в теме
Обновление 20-06-2024г:

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