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

27.10.24

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Простое дерево объекта (без рекурсивного обхода реквизитов)
.epf 8,93Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.
Обход объекта рекурсивно
.epf 10,77Kb
6
6 Скачать (1 SM) Купить за 1 850 руб.

Всем привет!

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

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

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

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13727    13    48    

25

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

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

10800 руб.

14.05.2012    158928    336    253    

570

Розничная торговля WEB-интеграция Поиск данных Пользователь Платформа 1С v8.3 Оперативный учет 1С:Розница 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Альтернатива сервису 1С Номенклатура, не требует подписки ИТС, ищет данные в открытых источниках. Для поиска товара по штрихкоду в сети интернет, полезно для первоначального заполнения базы.

1999 руб.

15.10.2020    18965    23    63    

24

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

Несколько упакованных в один класс интерфейсов для обработки популярных универсальных коллекций. Для тех, кого раздражает отсутствие действительно единого интерфейса для универсальных коллекций.

5 стартмани

25.09.2024    2215    0    Артано    14    

19

Поиск данных Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

18.08.2024    1787    1cnik2    23    

14

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

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

1 стартмани

30.11.2023    4540    andreysidor4uk    18    

53

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

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

1 стартмани

05.06.2023    2320    25    PowerBoy    1    

15

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

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

1 стартмани

04.04.2023    3121    4    berserg    2    

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

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

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

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