Как выгрузить структуру справочников и их реквизитов из 1С в Excel или текстовый файл?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При проведении аудита базы, проектировании интеграций или составлении технического задания бизнес-аналитикам и разработчикам часто требуется получить полный список справочников системы вместе с их реквизитами, типами данных и описанием. Разберем основные способы решения этой задачи: от использования штатных инструментов конфигуратора до написания собственной компактной обработки.

Способ 1. Использование штатного механизма «Отчет по конфигурации»

В платформе 1С:Предприятие 8 уже встроен инструмент документирования структуры базы данных, который не требует установки дополнительных внешних обработок. Среди начинающих специалистов распространено заблуждение, что данный отчет формирует лишь общий список объектов без детализации полей. Рассмотрим, как правильно настроить данный отчет для получения подробного перечня реквизитов и типов данных:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В главном меню перейдем в раздел Конфигурация и выберем пункт Отчет по конфигурации....
  3. В открывшемся окне настроек снимем флажки со всех объектов метаданных и оставим отметку только на ветке Справочники.
  4. Перейдем к настройке состава выводимых свойств. Отметим флажками параметры: Реквизиты, Стандартные реквизиты, Табличные части, Реквизиты табличных частей, Типы данных и Синонимы / Комментарии.
  5. Нажмем кнопку формирования отчета. Платформа создаст подробный ТабличныйДокумент с полным описанием выбранных объектов.
  6. Сохраним результат: выберем пункт главного меню Файл — Сохранить как... и укажем формат Лист Excel (*.xlsx) или текстовый документ.

Важное ограничение: при формировании отчета по всей конфигурации целиком на крупных типовых решениях (таких как ERP или Комплексная автоматизация) процесс может завершиться аварийно с ошибкой нехватки оперативной памяти (Out of Memory). Рекомендуется всегда снимать флаги с ненужных объектов и формировать отчет точечно по интересующим веткам метаданных.

Способ 2. Выгрузка структуры с помощью обработки из «Конвертации данных»

Проверенным и удобным инструментом выгрузки структуры метаданных является сервисная обработка, входящая в комплект поставки конфигурации «Конвертация данных 2.1» (файл MD83Exp.epf или аналогичный для требуемой версии платформы). Посмотрим на алгоритм работы с ней:

  1. Запустим базу в пользовательском режиме (1С:Предприятие).
  2. Откроем обработку выгрузки метаданных через меню Файл — Открыть....
  3. В интерфейсе обработки снимем отметки со всех объектов, кроме справочников.
  4. Установим флаг выгрузки движений, реквизитов и табличных частей.
  5. Выполним выгрузку в XML-файл. Полученный файл содержит полную XML-структуру конфигурации со всеми типами, свойствами и связями, которую можно загрузить в конфигурацию конвертации данных либо разобрать сторонними скриптами.

Способ 3. Программный обход метаданных через собственную обработку

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

Главный подводный камень здесь заключается в том, что коллекция Реквизиты объекта метаданных хранит только те поля, которые добавлены разработчиком вручную. Системные поля — такие как «Код», «Наименование», «Родитель», «Владелец» — хранятся в отдельной системной коллекции СтандартныеРеквизиты. Чтобы не потерять ключевые поля справочников, необходимо обходить обе коллекции.

Посмотрим на пример процедуры, которая формирует и сразу сохраняет таблицу со структурой в файл формата XLSX:


ТабДок = Новый ТабличныйДокумент;
Секция = Новый ТабличныйДокумент;

НомерСтроки = 1;
Для Каждого МдСправочник Из Метаданные.Справочники Цикл
    ТабДок.Область("R" + НомерСтроки + "C1").Текст = МдСправочник.Имя;
    ТабДок.Область("R" + НомерСтроки + "C2").Текст = "Справочник";
    ТабДок.Область("R" + НомерСтроки + "C3").Текст = МдСправочник.Синоним;
    НомерСтроки = НомерСтроки + 1;
    
    // Обходим стандартные реквизиты (Код, Наименование, Ссылка и т.д.)
    Для Каждого Реквизит Из МдСправочник.СтандартныеРеквизиты Цикл
        ТабДок.Область("R" + НомерСтроки + "C2").Текст = Реквизит.Имя;
        ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Стандартный";
        ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(Реквизит.Тип);
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    
    // Обходим пользовательские реквизиты объекта
    Для Каждого Реквизит Из МдСправочник.Реквизиты Цикл
        ТабДок.Область("R" + НомерСтроки + "C2").Текст = Реквизит.Имя;
        ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Реквизит";
        ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(Реквизит.Тип);
        ТабДок.Область("R" + НомерСтроки + "C5").Текст = Реквизит.Подсказка;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    
    // Обходим табличные части и их состав
    Для Каждого ТЧ Из МдСправочник.ТабличныеЧасти Цикл
        ТабДок.Область("R" + НомерСтроки + "C2").Текст = ТЧ.Имя;
        ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Табличная часть";
        НомерСтроки = НомерСтроки + 1;
        
        Для Каждого РеквизитТЧ Из ТЧ.Реквизиты Цикл
            ТабДок.Область("R" + НомерСтроки + "C3").Текст = РеквизитТЧ.Имя;
            ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(РеквизитТЧ.Тип);
            НомерСтроки = НомерСтроки + 1;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

ТабДок.Записать("C:\Temp\СтруктураСправочников.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Метод Записать с параметром ТипФайлаТабличногоДокумента.XLSX преобразует сформированный документ в файл Excel без необходимости устанавливать пакет MS Office на рабочий компьютер или сервер.

Способ 4. Получение физической структуры таблиц СУБД

В ситуациях, когда выгрузка структуры требуется для построения прямых SQL-запросов к СУБД или организации внешней интеграции на уровне базы данных, информации из дерева метаданных 1С бывает недостаточно. В этом случае выясним реальные физические имена полей с помощью глобальной функции ПолучитьСтруктуруХраненияБазыДанных().

Разберем, как получить и проанализировать эту таблицу:


МассивИмен = Новый Массив;
Для Каждого Спр Из Метаданные.Справочники Цикл
    МассивИмен.Добавить(Спр.ПолноеИмя());
КонецЦикла;

// Получаем таблицу соответствия имен метаданных и физических таблиц СУБД
ТаблицаХранения = ПолучитьСтруктуруХраненияБазыДанных(МассивИмен, Истина);

// Таблицу значений можно выгрузить в табличный документ или обработать циклом
Для Каждого СтрокаТаблицы Из ТаблицаХранения Цикл
    ИмяОбъекта   = СтрокаТаблицы.ИмяТаблицы;
    ИмяВБазеSQL = СтрокаТаблицы.ИмяТаблицыХранения;
    ПоляОбъекта = СтрокаТаблицы.Поля; // Вложенная таблица с именами колонок СУБД
КонецЦикла;

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

Способ 5. Выгрузка конфигурации в XML-файлы

Если требуется полный анализ структуры средствами внешних языков программирования (например, Python), используем команду Конфигуратора Конфигурация — Выгрузить конфигурацию в файлы.... Платформа создаст каталог со структурированными XML-файлами для каждого справочника, где описаны все типы данных, ограничения длины строк, точность чисел и синонимы.

← На главную