Как написать отчет СКД при использовании расширения в 1С:Бухгалтерия 3.0

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

Разработка отчетов на системе компоновки данных (СКД), которые должны использовать объекты из расширений конфигурации, часто превращается в проблему для разработчика. Основная сложность заключается в том, что Конфигуратор в режиме дизайна внешнего отчета или даже отчета внутри расширения часто «не видит» метаданные, добавленные или заимствованные в расширении. В результате конструктор запросов выдает ошибки, а визуальная настройка полей становится невозможной.

В этой статье мы подробно рассмотрим проверенные способы обхода этих ограничений, разберем причины возникновения ошибок и научимся сохранять сложные настройки отчета, такие как ресурсы и группировки, даже если платформа пытается их «сбросить».

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

Прежде чем перейти к решениям, проанализируем ситуацию. Когда мы создаем внешний отчет (файл .erf), он существует автономно. Конфигуратор, открывая его, ориентируется на основную конфигурацию базы. Объекты расширения (новые справочники, документы или добавленные реквизиты) в этот момент для конструктора запросов являются «несуществующими», так как они не входят в состав основной конфигурации. Аналогичная проблема часто возникает и с виртуальными таблицами (например, Хозрасчетный.ОборотыДтКт), если в расширение не были добавлены все измерения и типы данных, участвующие в работе этой таблицы.

Способ 1. Использование консоли СКД и перенос схемы через XML

Это самый популярный и наглядный метод, который позволяет использовать визуальный конструктор, но не в Конфигураторе, а непосредственно в режиме 1С:Предприятие. Рассмотрим этот процесс по шагам:

  1. Запустим базу в режиме 1С:Предприятие. Убедимся, что расширение активно и все нужные объекты (справочники, реквизиты) видны в интерфейсе.
  2. Воспользуемся инструментом «Консоль системы компоновки данных» (ее можно скачать с ИТС или других ресурсов сообщества).
  3. В консоли создадим новый отчет. В режиме Предприятия конструктор запросов отлично видит все объекты расширения. Настроим запрос, выберем поля, определим ресурсы и структуру отчета (группировки, детальные записи).
  4. После того как отчет настроен и проверен, нажмем кнопку «Сохранить схему в файл». Мы получим XML-файл, содержащий полное описание нашей схемы компоновки.
  5. Вернемся в Конфигуратор, создадим новый внешний отчет или отчет в расширении. Откроем его основную схему компоновки данных.
  6. В окне схемы нажмем кнопку «Загрузить схему из файла» и выберем наш XML. Платформа может выдать предупреждение о неизвестных полях, но схема будет загружена.

Важный нюанс: при таком импорте часто «затираются» настройки ресурсов в колонке «Рассчитывать по...». Если это произошло, настройки придется восстановить вручную или воспользоваться четвертым способом, описанным ниже.

Способ 2. Программная подмена текста запроса

Если нам нужно сохранить возможность редактирования настроек в Конфигураторе, но запрос к объектам расширения блокирует работу, мы можем прибегнуть к «хитрости» с фиктивным запросом. Разберем, как это реализовать:

В схеме СКД напишем «фиктивный» запрос к объектам основной конфигурации, который будет возвращать поля с теми же именами и типами, которые мы ожидаем получить из расширения. Например, если нам нужен Справочник.Расш_НовыйСправочник, мы можем временно выбрать данные из Справочник.Номенклатура, переименовав поля с помощью псевдонимов КАК.

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


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	// Получаем схему из макета
	СхемаКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	// Устанавливаем реальный текст запроса, который видит объекты расширения
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	Т.Ссылка КАК Ссылка,
	|	Т.Расш_НовыйРеквизит КАК НовыйРеквизит
	|ИЗ
	|	Справочник.Номенклатура КАК Т";
	
	СхемаКД.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса;
	
	// Далее выполняем стандартную инициализацию компоновщика
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКД, Настройки, ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Этот метод позволяет гибко управлять запросом в коде, где объекты расширения всегда доступны для обращения по именам.

Способ 3. Создание «Конфигурации-пустышки»

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

Способ 4. Продвинутый метод: правка файлов расширения

Если вы столкнулись с проблемой потери настроек ресурсов при импорте XML (как упоминалось в способе 1), существует способ «хирургического» вмешательства. Выясним причину: при загрузке XML во внешний отчет Конфигуратор пытается валидировать схему и удаляет то, что не может проверить. Чтобы этого избежать, мы можем вставить схему напрямую в расширение, минуя механизм импорта внешнего файла.

  1. Добавим наш отчет в состав расширения.
  2. В Конфигураторе выгрузим расширение в файлы (Меню Конфигурация -> Разработка конфигурации -> Выгрузить конфигурацию в файлы).
  3. Найдем в папке выгрузки файл схемы нашего отчета. Обычно он находится по пути: Reports\ИмяОтчета\Templates\ОсновнаяСхемаКомпоновкиДанных\Ext\Template.xml.
  4. Заменим этот файл тем XML-файлом, который мы сохранили из Консоли СКД в режиме Предприятия.
  5. Загрузим расширение обратно (Загрузить конфигурацию из файлов).

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

Особенности работы с виртуальными таблицами

Если ваш отчет использует виртуальные таблицы регистров (Обороты, Остатки), и вы получаете ошибку «Таблица не найдена», проанализируем состав расширения. Для корректной работы виртуальных таблиц в расширении должны присутствовать:

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

← На главную