Будет полезна при конструировании прямых запросов к серверу баз данных и интеграции с другими системами (минуя сервер 1С).
Платформа 1С представляет собой высокоуровневое средство работы с базами данных. В общем случае, разработчику не нужно задумываться что и как происходит на стороне СУБД, так как платформа сама решает сколько ей создавать таблиц и какие внутри них буду поля.
Однако в крупных проектах возникает потребность работы с данными напрямую, например, для анализа информации сторонними средствами или, как в моем случае, интеграции базы данных с внешними приложениями. В такой ситуации необходимо иметь представление о том, в каких полях физических таблиц искать нужную нам информацию.
Как раз для такого случая предназначена встроенная функция ПолучитьСтруктуруХраненияБазыДанных(), возвращающая все необходимые данные в виде таблицы значений. Причем некоторые реквизиты (Поля и Индексы) этой таблицы сами представляют собой таблицы значений.
С одной стороны, все данные в одной структуре иметь удобно, но, с другой, возникают дополнительные сложности с передачей этой таблицы на клиента (метод Загрузить(), к сожалению, не загружает вложенные таблицы). Ввиду этого приходится пробегать по всем стокам таблицы в цикле, что при больших объемах приводит к замедлению работы.
В связи с этим лучшим вариантом будет передавать в функцию имена объектов метаданных, чтобы уменьшить объем возвращаемых данных. Однако не все таблицы СУБД связаны с метаданными конфигурации, поэтому возможность просмотреть полный список я оставил.
Функционал обработки
При активизации элемента дерева метаданных проихсодит заполнение списка таблиц, полей и индексов. При двойном клике по корню дерева отображаются все таблицы, включая служебные (не рекомендуется, так как возрастают объемы данных, по которым идет поиск).
В табличных частях работают стандартные команды поиска и вывода списка.
Отличия от существующих реализаций
Существует несколько схожик публикаций, например, //infostart.ru/public/90486/ и //infostart.ru/public/91004/. Однако их неудобство заключается в отсутствии дерева метаданных, что затрудняет навигацию. Поиск осуществляется также по называнию таблиц и полей в базе, а не наоборот.
Наиболее близка по функционалу к публикация автора le_(//infostart.ru/public/128235/). В отличие от нее, данная обработка содержит наиболее полное дерево метаданных (планы обмена, константы, журналы документов и пр.). Кроме того структура данных представлена более наглядно: список таблиц объекта метаданных, список полей и список индексов выводятся в отдельных табличных частях.
UPD-2024-01-06 (v1.3). Исправлена ошибка, возникающая в режиме совместимости 8.3.7 и выше (изменилось поведение платформы).
UPD-2012-08-17 (v1.2). Сделан патч для корректной обработки регламентных заданий, исправлен пункт отображения планов видов расчета, исправлено поведение при переключении типа структуры в корне конфигурации.
P.S. Некоторые работодатели при приеме на работу задают вопрос о количестве физических и виртуальных таблиц для регистров. Неплохо бы знать ответы на эти вопросы, тем более, что это уровень 1С:Профессионал. Если вы хотите не только выучить этот ответ, но и "пощупать" эти таблицы, тогда эта обработка для вас!
а в обработке предусмотрен вывод в документ(например, сохранение mxl) структуры или только просмотреть можно?
(1) child1983, специально выгрузка не предусматривалась.
Доступна только стандартная возможность вывода табличной части в табличный документ, откуда его можно экспортировать.
Есть ли возможность поиска объекта 1С по имени таблицы СУБД?
Было бы просто отлично.
Я использую следующий метод: по двойному клику на корне получаю все таблицы, а дальше по Ctrl + F на столбце Имя таблицы хранения (или Найти из контекстного меню) получаю ту единственную строку.
Если делать это отдельной командой, то все равно так или иначе придется получать полную таблицу.
это обработки с управляемыми формами, на моей конфигурации не открываются
За работу +
По корню не получает полную структуру: необходимо внести изменения вот сюда:
Показать
перед получением структуры добавить проверку на пустую строку:
(7)
Получает, но по двойному клику на корневом элементе дерева (на имени конфигурации). Я давно порываюсь сделать там контекстное меню или кнопку, чтобы как-то обозначить такую возможность, но пока не собрался.
В описании изменений платформы я не нашел информации об изменении поведения в работе этой функции. То есть, передавая пустую строку в массиве можно получить полную структуру хранения. Предлагаемое изменение кажется необязательным. Расскажите подробнее об условиях использования обработки (платформа, конфигурация), если это не так.
Платформа 8.3.10.2561, по двойному клику на корне ругалось
СтруктураДанных = ПолучитьСтруктуруХраненияБазыДанных(ОбъектыМетаданных, ТипСтруктуры = 1);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
.
Поправил начало заполнения так
Показать
В СП про 1й параметр сказано только что он необязательный. Про пустую строку не нашел:
Тип: Массив.
Массив имен объектов метаданных или массив объектов метаданных, для которых требуется получить структуру таблиц базы данных.
ЗЫ:
Пробовал на 2х конфигурациях. В одной с режимом совместимости «Версия 8.3.6» пустую строку принимает без ошибок. В другой, где режим совместимости «Не использовать», пустая строка уже не прокатывает.
(7) (9), спасибо вам, ребята!
Сделал новую версию.
Нет возможности найти метаданные по названию таблицы в базе.
(11), нужно по двойному клику на корне вывести весь список метаданных, а дальше воспользоваться стандартными возможностями платформы по поиску в таблице формы.
дополнительно можно размеры поюзать и таблицы отчетомhttps://infostart.ru/public/1093355/