Всем привет!
Представлена внешняя обработка - для просмотра полей документов (справочников), в том числе связанных ссылок. Вложенность просмотра - бесконечная.
Цель обработки и статьи:
- реализовать бесконечное открытие связанных ссылок на форме,
- реализовать алгоритм преобразования объекта метаданных (документа, справочника) в 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
- предполагается, что будет работать на любой конфигурации на управляемых формах.
Анализируются все реквизиты объекта и реквизиты всех табличных частей объекта (см. рис. в ленте):
- вариант по умолчанию - показываются только заполненные связанные ссылки
- дополнительный вариант - также включить анализ и отображение пустых незаполненных полей
- дополнительный вариант - также включить анализ и отображение перечислений и примитивных типов данных (Строка, Булево, Дата, Число)
Подобный алгоритм был использован и применен:
- в задаче регистрации объектов для обмена //infostart.ru/1c/tools/1402737/
- вывод дерева значений заимствован из шаблонов кода //infostart.ru/1c/tools/1444273/
Идея задачи родилась:
- в работах над формой структуры подчиненности и связанных ссылок //infostart.ru/1c/tools/1219927/
- в работах над формой json-структуры //infostart.ru/1c/tools/1573208/
Перед выводом дерева происходит рекурсивный обход реквизитов: для каждой ссылки определяется тип значений и сохраняется структура всех связанных ссылок. Таким образом, для примера отображения дерева по документу "Расходная накладная 29 от 23.06.2022" (рис. 6 в ленте и рис. ниже) сохранился список из 914 типов и их структур (реквизитов и табл. частей) (рис. 7 в ленте и второй рис. ниже).
Структура хранения информации напоминает структуру json - состоит из массива структур, каждая структура содержит массив. Хранение информации в подобном виде применяется мною в проектах для передачи дерева значений между сервером и клиентом, клиентом и сервером.
После чего дерево формируется для каждой ветки быстро согласно известной структуре данных для любого ссылочного типа.
Сложность задачи и свой исследовательский интерес продемонстрирую на следующих рисунках. Объект метаданных - например, документ - хранится в конфигурации в виде дерева объектов. Отобразить его на форме в виде дерева - скажем так, простая задача относительно конечной задумки и цели.
Бесконечно раскрывать узлы дерева также можно непосредственно на форме без усложнения исходной задачи (прикрепил к статье отдельный файл "Простое дерево объекта (без рекурсивного обхода реквизитов)") - без предварительного анализа всех связанных ссылок - выводим непосредственно каждый новый раскрытый узел дерева (каждый новый объект конфигурации).
Следующий способ вывести дерево объекта - это использовать посредника в виде json-структуры. В данной реализации - вывод в дерево - это всего лишь один из способов показать, как разбирается и собирается объект базы данных (документ, например) через json-структуры, как рекурсивно обходится объект по всем связанным ссылкам.
Используемый стек алгоритмов:
- Вывод дерева значений на управляемых формах
- Добавление подчиненных узлов дерева по выделенной строке
- Реализация бесконечной вложенности узлов
- Реализация преобразования объекта метаданных в json-структуру
- Реализация обратного преобразования из json-структуры в объект метаданных в виде дерева.
Обновление 19-06-2024:
- Расширил тип исходного объекта - теперь не только Документы - добавил тип Справочники
- Добавил в анализ примитивных типов данных такие типы, как Хранилище Значений и Уникальный Идентификатор - теперь корректно отображается и раскрывается такой справочник как Пользователи (обычно он используется в реквизите Ответственный или Автор).
- Добавил обработку "Простое дерево объекта (без рекурсивного обхода реквизитов)". Эта обработка не хранит структуру реквизитов связанных ссылок и не обходит все поля рекурсивно - при первом построении дерева работает быстрее, и, в целом, не нагружает память устройства в отличие от другой прилагаемой обработки. См. видео ниже.
Обновление 20-06-2024г:
- Исправлена ошибка в обработке "Обход дерева рекурсивно" - теперь вывод дерева ускорен. Протестировано на КА 2.5.12.265 на объекте Справочник "Варианты отчета" - см. рис. 11 в ленте и ниже.
На этом все. Всем добра!
С пользой для клиентов, Рустем
- Анализ прав и ролей. Поиск подходящего профиля - алгоритмический анализ и поиск
- Оцифровка и визуализация склада - программная прорисовка склада
- Удаление документов для любых баз на управляемых формах
- Удаление справочников для любых баз на управляемых и обычных формах
- Перенумерация документов и справочников - с учетом префиксов номеров
- Свертка базы УТ 10.3 подокументно - новая концепция
- Матричное программирование - демо-стенд матричного калькулятора
- Справочное хранение товаров в КА 2.5 - кейс запуска адресного склада
- Мини-обзор разных задач - от очевидного до неочевидного
- Поиск отчета по документам - пример анализа незнакомых конфигураций
- Флажок в динамическом списке - от теории до практики "как бы простой" задачи
- Из Json в ДеревоЗначений - удобный просмотрщик json-структуры
- Внедрение адресного склада в КА 2.5 - кейс запуска адресного склада
- Фрилансеру: про цены, про клиентов, про планирование - мое исследование
- Что такое форматированный документ - прекрасная возможность раскрасить любой текст
- Программная работа с упаковками в КА 2.5 - примеры адаптаций механизмов упаковок в КА 2.5
- Универсальное сравнение регистров накопления - связь по измерениям, сравнение по ресурсам
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 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