Как выгрузить иерархию папок из 1С:ERP: подробное руководство

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

В процессе работы с крупными информационными системами, такими как 1С:ERP, часто возникает необходимость проанализировать структуру справочников, которая формировалась годами. Одной из наиболее частых задач является экспорт иерархии папок (групп) для визуализации в Excel или переноса в другую базу. Разберем детально, как это сделать правильно, учитывая специфику платформы 1С.

Постановка задачи и выбор инструмента

Рассмотрим ситуацию: нам нужно выгрузить структуру папок справочника Номенклатура. При этом важно сохранить подчиненность «родитель — ребенок», выгрузить коды каждой папки и иметь возможность представить это дерево визуально. Мы проанализируем три основных способа решения: использование запросов 1С, стандартные универсальные отчеты и специализированные обработки выгрузки.

Способ 1: Использование языка запросов 1С

Для тех, кто привык работать с SQL, важно понимать отличие: в 1С нет необходимости писать сложные рекурсивные выражения (CTE), так как механизмы работы с иерархией встроены в ядро платформы. Проанализируем базовый запрос, который позволит вытащить все папки справочника.

Для получения списка всех групп справочника достаточно использовать условие по полю ЭтоГруппа. Составим запрос:


ВЫБРАТЬ
    Номенклатура.Код КАК Код,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Родитель КАК Родитель,
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ИСТИНА
УПОРЯДОЧИТЬ ПО
    Ссылка ИЕРАРХИЯ

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

  1. ЭтоГруппа = ИСТИНА: Это критически важное условие. В 1С справочники могут содержать и элементы, и группы. Если нам нужны только «папки», мы фильтруем результат по этому булеву признаку.
  2. УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ: Это уникальная конструкция 1С. Она автоматически выстраивает результат запроса в виде дерева. Сначала идет папка верхнего уровня, затем все ее дочерние подпапки, затем следующая папка верхнего уровня. Это избавляет от необходимости вручную собирать дерево в Excel или коде.
  3. Родитель: Ссылка на вышестоящую папку. Это поле необходимо, если вы планируете загружать данные в другую систему и восстанавливать связи программно.

Способ 2: Работа с параметрами и фильтрация иерархии

Иногда требуется выгрузить не весь справочник, а только определенную ветку (например, только папку «Запчасти» со всеми вложенными элементами). Для этого в языке запросов используется оператор В ИЕРАРХИИ. Посмотрим на пример кода с использованием параметров:


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    Номенклатура.Код КАК Код
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ(&Родитель)
    И Номенклатура.ЭтоГруппа = ИСТИНА

Проанализируем технический нюанс: чтобы этот запрос сработал, программе нужно передать значение параметра &Родитель. Если вы пишете код на языке 1С, это выглядит так:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Ссылка В ИЕРАРХИИ(&Родитель) ...";
// Указываем конкретную папку, от которой начинаем выгрузку
Запрос.УстановитьПараметр("Родитель", Справочники.Номенклатура.НайтиПоНаименованию("Сырье"));
Результат = Запрос.Выполнить();

Способ 3: Визуализация структуры в Excel через Универсальный отчет

Если задача стоит «посмотреть глазами» и сохранить структуру в Excel без программирования, лучше всего воспользоваться встроенным инструментом «Универсальный отчет». В 1С:ERP он находится в разделе НСИ и администрирование — Печатные формы, отчеты и обработки.

Выполним следующие шаги:

  1. В типе объекта выберем Справочник, в имени объекта — Номенклатура.
  2. Перейдем в настройки отчета (кнопка «Настройки»).
  3. На вкладке Группировки добавим поле Ссылка.
  4. Важный момент: В колонке «Тип группы» для поля «Ссылка» выберем значение Иерархия.
  5. На вкладке «Отбор» добавим условие Это группа Равно Да.

После формирования такого отчета 1С построит дерево. При нажатии на кнопку Сохранить результат в файл (Excel), программа передаст группировки строк. В самом Excel слева появятся кнопки управления («плюсики» и «минусики»), которые позволят сворачивать и разворачивать уровни вложенности папок. Для выгрузки данных и реквизитов без ручной настройки типового отчета можно использовать обработку для экспорта справочников в Excel с фильтрами.

Технические тонкости: GUID и уникальность

Выясним причину, почему при экспорте иерархии для интеграций недостаточно выгружать только Код или Наименование. В 1С коды могут дублироваться (если настроена периодичность или префиксы), а наименования папок часто совпадают (например, папка «Прочее» может быть в каждом разделе).

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


Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Идентификатор = Строка(Выборка.Ссылка.УникальныйИдентификатор());
    // Теперь этот GUID можно использовать как надежный ключ связи
КонецЦикла;

Способ 4: Обработка «Выгрузка и загрузка данных XML»

Рассмотрим ситуацию, когда иерархию нужно перенести в идентичную базу 1С. Для этого лучше не использовать Excel или ручные запросы, а применить стандартную обработку «Выгрузка и загрузка данных XML». Она входит в состав инструментов разработчика и часто поставляется на дисках ИТС.

Преимущество этого метода в том, что обработка автоматически сохраняет все внутренние связи. Если вы выбираете конкретную папку для выгрузки, она сама выгрузит всех ее «родителей», чтобы в базе-приемнике структура воссоздалась в точности такой же, какой была в источнике.

Резюмируем: для быстрого анализа используем «Универсальный отчет» с типом группировки «Иерархия». Для программной выгрузки — консоль запросов с конструкцией УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ. Для переноса данных между базами — XML-выгрузку. А для обратной загрузки выгруженной структуры в базу подойдёт обработка для загрузки номенклатуры из Excel с автоматическим созданием групп.

← На главную