Свой отчёт на схеме компоновки данных внутри расширения конфигурации

· 10 мин

Содержание

Чтобы добавить СКД в расширение 1С, откройте в Конфигураторе Конфигурация → Расширения конфигурации, выберите расширение и откройте его дерево. В ветке «Отчеты» создайте новый отчёт, на вкладке «Основные» нажмите кнопку открытия основной схемы компоновки данных — платформа создаст макет и запустит конструктор схемы. Дальше всё как в обычном отчёте: набор данных, ресурсы, вариант настроек.

Основную конфигурацию снимать с поддержки не нужно, обновления типовой останутся простыми. Всё описанное относится к платформе 8.3 и общее для любых конфигураций: БП 3.0, ЗУП 3.1, УТ 11, ERP.

Что подготовить в расширении до создания отчёта

Расширения появились в платформе 8.3.6, а собственные отчёты внутри них — в следующих версиях. Если у вас актуальная платформа 8.3.2x, ограничений по этой теме нет.

Перед работой проверьте четыре вещи:

  • 🧩 Есть ли расширение. Если нет — в окне Конфигурация → Расширения конфигурации нажмите «Добавить», задайте имя (например, ОтчетыКомпании) и префикс имён (ок_).
  • 🔤 Префикс. Новые объекты расширения называйте с префиксом: ок_ОстаткиПоСкладам. Так их не спутать с объектами типовой, и после её обновления не будет конфликта имён.
  • 🛡 Безопасный режим. Для отчёта, который только читает данные запросом, безопасный режим не мешает. Снимать его нужно, если отчёт обращается к файлам, COM или внешним ресурсам.
  • ⚙️ Режим совместимости. В свойствах расширения он не должен быть выше режима совместимости основной конфигурации — иначе расширение не применится.

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

Заимствовать объекты основной конфигурации ради одного запроса не обязательно. Текст запроса выполняется в расширенной конфигурации, поэтому из него доступны все регистры и справочники типовой. Заимствование понадобится для интерфейса и прав — об этом ниже.

Три способа подключить отчёт на СКД без правки типовой

Прежде чем создавать объект, решите, где будет жить отчёт. Вариантов три, и выбор зависит от того, кто будет сопровождать доработку.

СпособКогда подходитОграничения
Свой отчёт в расширенииПостоянный отчёт для многих пользователей, нужен в меню разделовНужны права и подсистема, изменения — через Конфигуратор или новую версию .cfe
Внешний отчёт .erf через «Дополнительные отчеты и обработки»Разовые или часто меняющиеся отчёты, разработчик без доступа к Конфигуратору базыДля регистрации в БСП нужна экспортная функция СведенияОВнешнейОбработке в модуле объекта
Изменение заимствованного отчёта типовойНужно поправить поведение уже существующего отчётаСложнее сопровождать после обновлений; часто проще сделать свою копию

Для большинства задач правильный выбор — первая строка. Внешний отчёт удобен как черновик: его можно отладить, показать бухгалтеру, а потом перенести в расширение. Этот путь разобран в следующем разделе.

Перенос СКД из готового внешнего отчёта в расширение

Часто отчёт уже есть в виде .erf: его собирали в консоли или как внешний файл. Переделывать схему с нуля не нужно.

Шаг 1. Сохраните схему в файл

  1. Откройте внешний отчёт в Конфигураторе через Файл → Открыть.
  2. Откройте макет «ОсновнаяСхемаКомпоновкиДанных».
  3. В конструкторе схемы сохраните её в файл XML — команда есть в контекстном меню поля конструктора и в меню действий формы.

Шаг 2. Создайте отчёт в расширении

  1. В дереве расширения откройте ветку «Отчеты», нажмите «Добавить».
  2. Задайте имя с префиксом и синоним, который увидят пользователи.
  3. На вкладке «Основные» нажмите кнопку открытия основной схемы — создастся пустой макет.

Шаг 3. Загрузите схему

В открывшемся конструкторе выполните загрузку схемы из файла, сохранённого на шаге 1. Наборы данных, поля, ресурсы, параметры и варианты настроек перенесутся целиком.

Шаг 4. Перенесите код

Если во внешнем отчёте был модуль объекта или своя форма — скопируйте их вручную. Проверьте, не обращается ли код к ЭтотОбъект.ИспользуемоеИмяФайла и другим свойствам, которые есть только у внешних отчётов.

Функцию СведенияОВнешнейОбработке в отчёт расширения переносить не нужно. Она нужна только для регистрации внешнего файла в справочнике дополнительных отчётов.

Если загрузка схемы из файла по какой-то причине недоступна, скопируйте текст запроса из набора данных, а ресурсы и вариант настроек соберите заново. Для отчёта средней сложности это 10–15 минут.

Создание отчёта на СКД в расширении с нуля: разбор на примере

Соберём отчёт «Остатки товаров по складам» на регистре накопления. Пример рассчитан на конфигурацию с регистром ТоварыНаСкладах; в вашей базе имя регистра может быть другим — смотрите ветку «Регистры накопления» основной конфигурации.

Набор данных и запрос

  1. В конструкторе схемы на вкладке «Наборы данных» добавьте набор «Запрос».
  2. Вставьте текст запроса или соберите его конструктором:
ВЫБРАТЬ
	Остатки.Склад КАК Склад,
	Остатки.Номенклатура КАК Номенклатура,
	Остатки.КоличествоОстаток КАК Количество
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ) КАК Остатки
  1. Оставьте включённым флаг «Автозаполнение» — поля появятся на вкладке набора автоматически.

Ресурсы и параметры

  • 📊 На вкладке «Ресурсы» добавьте поле Количество с выражением Сумма(Количество).
  • 📅 На вкладке «Параметры» у параметра НаДату задайте тип «Дата» и заголовок «На дату». Виртуальная таблица остатков считает их на указанный момент времени, поэтому дата 31.03 без времени даст остаток на начало дня. Чтобы учесть движения за весь день, передавайте конец дня — в коде это КонецДня(Дата).

Вариант настроек

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

Права и место в интерфейсе

Новый отчёт сразу после создания видят только пользователи с полными правами, и то не в разделах, а через «Все функции». Чтобы он появился у всех, кому нужен:

  1. Права. Заимствуйте роль основной конфигурации, через которую пользователи получают доступ (например, базовую роль бухгалтера), и в ней установите права «Просмотр» и «Использование» на новый отчёт. Второй вариант — создать собственную роль в расширении и назначить её через профили групп доступа.
  2. Подсистема. Заимствуйте подсистему раздела, где должен стоять отчёт, и добавьте его в состав. В БСП-конфигурациях отчёт появится на панели отчётов раздела.

После этого сохраните расширение и обновите его конфигурацию базы данных (Конфигурация → Обновить конфигурацию базы данных при активном окне расширения).

Как ускорить отчёт на СКД в расширении

Отчёт в расширении работает с той же скоростью, что и в основной конфигурации: платформа не добавляет накладных расходов. Тормозит обычно запрос. Вот что даёт реальный эффект:

  • 🎯 Отбор в параметрах виртуальной таблицы. Условие по складу или организации пишите внутри скобок .Остатки(&НаДату, Склад = &Склад), а не в секции ГДЕ. Регистр отфильтрует данные до расчёта остатков.
  • 🧱 Фигурные скобки СКД. Секция {ГДЕ ...} и выражения вида {(&Склад)} позволяют СКД вставлять пользовательские отборы прямо в запрос. Без них отбор накладывается уже на выбранные строки.
  • 🔗 Меньше обращений через точку. Номенклатура.Родитель.Наименование в запросе порождает дополнительные соединения. Если реквизит нужен только для вывода, добавьте его как поле в настройках — СКД получит его сама.
  • 📏 Ограничение полей. На вкладке набора данных снимите доступность служебных полей, которые пользователю не нужны. Список доступных полей станет короче, а риск тяжёлой группировки ниже.
  • 🗂 Временные таблицы с индексом. Если запрос соединяет большую выборку с другой таблицей, поместите её во временную таблицу и проиндексируйте по полю соединения.

Сравнивайте время до и после правки на одних и тех же параметрах. Удобный способ — замер производительности в режиме отладки: он покажет, какая строка модуля и какой запрос съедают время.

Программная настройка СКД в модуле отчёта

Иногда схемы и варианта настроек мало: нужно подставить параметры по умолчанию, добавить отбор по коду или передать в схему данные, которых нет в базе. Для этого в модуле объекта отчёта переопределяют событие ПриКомпоновкеРезультата.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;

	Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();

	// Параметр по умолчанию, если пользователь его не задал
	Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаДату"));
	Если Параметр <> Неопределено И НЕ ЗначениеЗаполнено(Параметр.Значение) Тогда
		Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НаДату", ТекущаяДатаСеанса());
	КонецЕсли;

	// Отбор, добавленный кодом
	Отбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
	Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
	Отбор.ПравоеЗначение = 0;
	Отбор.Использование = Истина;

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Что здесь происходит:

  1. СтандартнаяОбработка = Ложь отключает штатное формирование — дальше отчёт собирается кодом.
  2. Настройки берутся из компоновщика, то есть с учётом того, что пользователь выбрал на форме.
  3. Компоновщик макета превращает схему и настройки в макет, процессор компоновки выполняет запрос, процессор вывода рисует табличный документ.

Внешний набор данных

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

ВнешниеНаборы = Новый Структура("ВнешниеДанные", ТаблицаДанных);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки, Истина);

Имена колонок таблицы значений должны совпадать с именами полей набора.

Проверка и отладка отчёта на СКД в расширении

Отладка отчёта из расширения ничем не отличается от отладки типового. Порядок такой:

  1. Сохраните расширение и обновите его конфигурацию базы данных.
  2. Запустите отладку из Конфигуратора (Отладка → Начать отладку, клавиша F5) — клиент откроется с уже применённым расширением.
  3. Поставьте точку останова в ПриКомпоновкеРезультата и проверьте значения настроек и параметров.

Чтобы увидеть итоговый запрос, который СКД собрала с учётом отборов, посмотрите в отладчике выражение МакетКомпоновки.НаборыДанных[0].Запрос. Его можно скопировать в консоль запросов и проверить отдельно — так быстрее понять, почему отчёт пустой или долго формируется.

Отлаживайте на копии рабочей базы. Новая версия расширения применяется ко всем пользователям после перезапуска их сеансов, и недоделанный отчёт увидят все, у кого есть права.

Перед выкладкой отчёта в рабочую базу
Выполнено: 0 / 6

Ошибки при добавлении СКД в расширение и как их снять

Диагностика: выберите симптом

Вопросы по отчётам на СКД в расширениях

Можно ли отредактировать СКД расширения в пользовательском режиме?
Схему — нет, её меняют в Конфигураторе. Пользователь может только менять настройки варианта отчёта на форме и сохранять свои варианты.
Сохранится ли отчёт после обновления типовой конфигурации?
Да. Расширение хранится отдельно и после обновления применяется снова. Проверить стоит только запросы: если в релизе переименовали поля, отчёт сообщит об ошибке.
Нужно ли снимать основную конфигурацию с поддержки?
Нет. В этом и смысл расширения: типовая остаётся на поддержке и обновляется автоматически.
Как передать отчёт в другую базу?
Выгрузите расширение в файл .cfe из окна «Расширения конфигурации» и загрузите его в другой базе, затем обновите конфигурацию базы данных. В БСП-конфигурациях подключить файл можно и в пользовательском режиме, в разделе администрирования, в группе настроек печатных форм, отчётов и обработок.
Работают ли варианты отчётов БСП для отчёта из расширения?
Отчёт будет работать с вариантами из своей схемы. Чтобы он полноценно встроился в механизм вариантов БСП (описание, размещение в разделах, пользовательские варианты), его регистрируют в переопределяемом модуле вариантов отчётов через заимствование.