Наличие нескольких групп папок в справочнике (сложная структура родителей) довольно часто можно встретить для таких справочников как номенклатура, контрагенты, статьи затрат и многих других на предприятиях с хорошо продуманной архитектурой отчетов и грамотным ведением бухгалтерского учета.
Откройте обработку в режиме работы "1С:Предприятие 8.1", укажите исходный справочник как показано на рисунке:
Составной реквизит "Отбор по родителю" при выборе справочника автоматически приводится к типу справочника для удобства последующего выбора нужной группы справочника (Инициализируется пустой ссылкой, см. рис.):
До выбора справочника:
После выбора папки справочника для отбора:
В результате выполнения обработки будет создан файл в формате Microsoft Excel примерно следующего вида:
Графически такая структура данных справочника номенклатура из стандартной конфигурации "1С:Бухгалтерия 8" выглядит следующим образом:
Жирным шрифтом выделены группы элементов для последующего создания такой же структуры родителей в базе данных назначения. Красным цветом отделен признак ЭтоГруппа, который удобно будет использовать в последующих обработках при выборочном переносе определенных данных между различными конфигурациями 1С.
Общий код обработки был рассмотрен в общем разделе конфигурирования платформы, сейчас остановимся на проведенных модернизациях исходного кода, а именно добавлению нового запроса, сформированного от имени метаданных справочника с учетом иерархии групп и элементов:
1. Добавлен новый реквизит обработки:
"пРодитель", составной тип СправочникСсылка
2. В процедуру ВыборСправочникаПриИзменении формирования реквизитов для выгрузки было добавлено:
// Добавим реквизит родитель для справочников с установленным видом Иерархии
Если Строка(КоллекцияРеквизитов.ВидИерархии) = "ИерархияГруппИЭлементов" Тогда
стр = ТП.Добавить();
стр.НазваниеРеквизита = "Родитель";
стр = ТП.Добавить();
стр.НазваниеРеквизита = "ЭтоГруппа";
КонецЕсли;
3. В основную форму обработки было добавлено два элемента - надпись и поле ввода для реквизита Родитель
4. В процедура ОсновныеДействияФормыЭкспорт, обеспечивающую запись данных справочника в файл, были внесены следующие изменения:
// Выгрузить данные справочника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ *
| ИЗ
| Справочник." + ИмяСправочника + " КАК " + ИмяСправочника;
// Если указан родитель справочника добавить отбор по иерархии
Если пРодитель неопределено и не пРодитель.Пустая() Тогда
Запрос.Текст = Запрос.Текст + " ГДЕ " + ИмяСправочника + ".Родитель В ИЕРАРХИИ(&пРодитель) ";
Запрос.УстановитьПараметр("пРодитель",пРодитель);
КонецЕсли;
// Если для справочника используется иерархия групп и элементов, установим сортировку в иерархии
Если ТП.Найти("ЭтоГруппа","НазваниеРеквизита") Неопределено Тогда
Запрос.Текст = Запрос.Текст + " УПОРЯДОЧИТЬ ПО " + ИмяСправочника + ".ЭтоГруппа ИЕРАРХИЯ УБЫВ";
КонецЕсли;
// Выполняет запрос и записывает результат в свойство Результат.
// Формирует выборку записей из результата запроса.
выборка = Запрос.Выполнить().Выбрать();