Свой отчет на СКД в Конфигураторе 1С 8.3: от объекта метаданных до варианта для пользователей

· 10 мин

Содержание

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

Порядок одинаков для любой конфигурации, потому что схема компоновки данных (СКД) — механизм платформы, а не БП или УТ. Отличаются только имена регистров в запросе. Всё сказанное относится к платформе 8.3 с управляемыми формами и интерфейсом «Такси».

Объект отчета в Конфигураторе: встроенный или внешний

Сначала решите, где будет жить отчет. От этого зависит, придётся ли трогать типовую конфигурацию .

ВариантКак создатьКогда подходит
Встроенный отчетВетка «Отчеты» в дереве конфигурации → «Добавить»Своя конфигурация или снятая с поддержки
Отчет в расширенииКонфигурация → Расширения конфигурации, в расширении ветка «Отчеты»Типовая конфигурация на поддержке
Внешний отчетФайл → Новый → Внешний отчет, сохраняется в файл .erfРазовая задача, отладка, передача клиенту

Для типовых БП 3.0, ЗУП 3.1, УТ 11 на поддержке удобнее всего расширение. Основная конфигурация остаётся нетронутой, а обновления встают без ручного сравнения и объединения.

Порядок для встроенного отчета

  1. Откройте базу в режиме Конфигуратора и дерево конфигурации.
  2. В ветке «Отчеты» вызовите контекстное меню → «Добавить».
  3. Задайте Имя латиницей или кириллицей без пробелов, например АнализПродаж, и Синоним — то, что увидит пользователь.
  4. На вкладке «Основные» нажмите «Открыть схему компоновки данных». Подтвердите создание макета.
  5. После настройки схемы обновите конфигурацию базы данных клавишей F7.

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

Схема компоновки данных: набор данных и запрос

Окно схемы состоит из вкладок: «Наборы данных», «Связи наборов данных», «Вычисляемые поля», «Ресурсы», «Параметры», «Макеты», «Вложенные схемы», «Настройки». Работа начинается с первой.

На вкладке «Наборы данных» нажмите зелёный плюс и выберите тип набора:

  • 📄 Набор данных — запрос. Основной вариант: данные берутся запросом к базе.
  • 🔗 Набор данных — объединение. Склеивает несколько наборов в один, аналог ОБЪЕДИНИТЬ ВСЕ.
  • 🧩 Набор данных — объект. Данные передаются из кода, например таблица значений.

Для набора-запроса нажмите «Конструктор запроса…» и соберите выборку мышкой. Флажок «Автозаполнение» оставьте включённым: тогда СКД сама добавит поля запроса в список доступных.

Пример запроса для отчета о продажах. Здесь Продажи — условный регистр накопления оборотов с измерениями Номенклатура, Контрагент и ресурсами Количество, Сумма, Себестоимость. В вашей конфигурации имя и состав регистра будут свои.

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Контрагент КАК Контрагент,
	ПродажиОбороты.КоличествоОборот КАК Количество,
	ПродажиОбороты.СуммаОборот КАК Сумма,
	ПродажиОбороты.СебестоимостьОборот КАК Себестоимость
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

Слово РАЗРЕШЕННЫЕ нужно, если в базе включены ограничения доступа на уровне записей. Без него пользователь с урезанными правами получит ошибку вместо отчета.

Связи наборов данных

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

Параметры и отборы в отчете

Параметры &НачалоПериода и &КонецПериода СКД нашла в запросе и сама добавила на вкладку «Параметры». Оставлять их так можно, но пользователю придётся вводить две даты. Удобнее один параметр-период.

Приём со стандартным периодом

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

Теперь в шапке отчета одно поле с выбором «Этот месяц», «Прошлый квартал» и произвольным интервалом.

Колонки параметра, которые стоит знать

КолонкаЧто даёт
ТипТип значения, для ссылки — конкретный справочник или документ
Доступен список значенийПользователь может выбрать несколько значений, в запросе пишите В (&Параметр)
ЗначениеЗначение по умолчанию
Ограничение доступностиПараметр скрыт от пользователя, заполняется выражением или кодом
Включать в доступные поляПараметр можно вывести в отчет как поле

Отборы вместо условий в запросе

Отбор по складу или контрагенту не пишите в запрос через ГДЕ. Добавьте его в настройках схемы на вкладке «Отбор». СКД сама подставит условие в запрос, причём для виртуальных таблиц регистров — в параметры самой таблицы, где это возможно. Так отчет работает быстрее, а отбор пользователь может менять.

Чтобы отбор появился в шапке отчета, выделите его, вызовите контекстное меню → «Свойства элемента пользовательских настроек», установите флажок «Включать в пользовательские настройки» и режим «Быстрый доступ». Режим «Обычный» убирает настройку в окно «Настройки…».

Поля отчета, ресурсы и вычисляемые показатели

На вкладке «Наборы данных» у каждого поля есть свойства. Чаще всего правят три:

  • 🏷️ Заголовок — как поле подписано в отчете.
  • 🎨 Оформление — формат числа, например ЧДЦ=2 для двух знаков после запятой.
  • 🚫 Ограничение использования — запрет выводить поле как группировку, ставить на него отбор или сортировку.

Ресурсы: что суммируется в итогах

На вкладке «Ресурсы» перенесите числовые поля Количество, Сумма, Себестоимость. Выражение по умолчанию — Сумма(Поле). Можно выбрать Среднее, Максимум, Минимум, Количество.

Без ресурсов отчет выведет строки, но не посчитает итоги по группировкам. Это самая частая причина вопроса «почему нет итогов».

Вычисляемые поля

Поле, которого нет в запросе, добавляют на вкладке «Вычисляемые поля»: путь к данным, выражение, заголовок. Выражение пишется на языке выражений СКД, он похож на язык запросов.

Пример: валовая прибыль строки.

Сумма - Себестоимость

Процент наценки так считать нельзя. Если сложить проценты по строкам, итог группы будет бессмысленным. Правильный приём — ресурс с выражением от сумм:

ВЫБОР
	КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
	ИНАЧЕ (Сумма(Сумма) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100
КОНЕЦ

Проверка на числах. Строка 1: сумма 1 200, себестоимость 1 000, наценка 20%. Строка 2: сумма 600, себестоимость 400, наценка 50%. Если сложить проценты, получится 70%. Ресурс даёт (1 800 − 1 400) / 1 400 × 100 ≈ 28,57%. Верно второе.

Структура отчета и макет вывода

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

Вручную структура собирается в верхнем дереве:

  1. Правой кнопкой по корню «Отчет» → «Новая группировка», выберите поле, например Контрагент.
  2. Внутри неё добавьте вложенную группировку Номенклатура.
  3. Чтобы видеть строки без свёртки, добавьте группировку без поля — она называется «Детальные записи».
  4. На вкладке «Выбранные поля» перетащите ресурсы и вычисляемые поля.
  5. На вкладке «Сортировка» задайте порядок, например Сумма по убыванию.

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

Оформление и варианты

  • 🖌️ Условное оформление — красит строки по условию, например отрицательную прибыль красным.
  • ⚙️ Другие настройки — заголовок отчета, вывод параметров и отборов в шапку, расположение итогов.
  • 📑 Варианты отчета — на вкладке «Настройки» можно завести несколько вариантов («По контрагентам», «По товарам») с разной структурой на одной схеме.

Вкладка «Макеты»

Обычно не нужна: СКД рисует отчет сама. Макеты пригодятся, когда заказчик требует фиксированную шапку, объединённые ячейки или оформление строки группировки по образцу. Есть макеты полей, группировок, заголовков группировок и ресурсов. Чем больше своих макетов, тем сложнее потом менять структуру, поэтому используйте их точечно.

Вывод отчета из кода

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

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

	СтандартнаяОбработка = Ложь;
	ДокументРезультат.Очистить();

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

	// Данные для набора типа «Объект» с именем объекта «Данные»
	ВнешниеНаборы = Новый Структура("Данные", ПолучитьТаблицуДанных());

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

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

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

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

ПолучитьТаблицуДанных() — ваша функция в том же модуле, которая возвращает таблицу значений. Имена её колонок должны совпадать с полями набора «Объект». Если внешних данных нет, строку с ВнешниеНаборы уберите и передайте вторым параметром пустое значение.

Как отчет попадает к пользователю

Отчет, созданный в Конфигураторе, сам в меню не появится. Нужно три вещи:

  1. Подсистема. В свойствах отчета на вкладке «Подсистемы» отметьте раздел, например «Продажи». В расширении для этого родительскую подсистему сначала заимствуют.
  2. Права. Откройте роль, которая есть у нужных пользователей, найдите отчет и установите права «Использование» и «Просмотр». В расширении для этого роль тоже заимствуют или создают свою.
  3. Обновление базы. Нажмите F7 и перезапустите клиент 1С:Предприятия.

В рабочей базе обновление конфигурации с изменением структуры может потребовать завершить сеансы пользователей. Делайте его вне рабочего времени и после резервной копии базы.

В типовых конфигурациях на БСП отчет можно дополнительно подключить к механизму вариантов отчетов, чтобы он был виден в панели «Отчеты» раздела. Для простого случая хватает подсистемы и прав.

Скорость и отладка отчета на СКД

Медленный отчет почти всегда упирается в запрос. Проверяйте в таком порядке.

Где искать тормоза

  • 🐢 Условие в ГДЕ по виртуальной таблице. Перенесите его в параметры виртуальной таблицы или в отбор СКД. Тогда регистр отфильтрует данные до соединений.
  • 🐢 Обращение через точку к полям составного типа. Регистратор.Дата или Регистратор.Ответственный разворачивается в соединения со всеми типами документов. Используйте ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг) или берите поля из самого регистра.
  • 🐢 Лишние поля при автозаполнении. СКД выбирает только поля, нужные текущей настройке. Но если вы вывели много реквизитов-ссылок, запрос растёт. Уберите лишнее из «Выбранных полей».
  • 🐢 Детальные записи на большом периоде. Сто тысяч строк без группировок формируются долго и бесполезны для анализа.

Инструменты проверки

ИнструментГде найтиЧто показывает
ОтладчикОтладка → Начать отладку, клавиша F5Значения переменных в ПриКомпоновкеРезультата
Замер производительностиПанель отладки, кнопка замера, при запущенной отладкеКакие строки кода занимают время
Консоль запросовВнешняя обработка, обычно из комплекта поставкиВремя запроса и результат на реальных данных
Технологический журналФайл logcfg.xml на сервереДолгие запросы к СУБД, блокировки

Удобный приём: в отладчике получите текст итогового запроса из Макет.НаборыДанных и вставьте его в консоль. Вы увидите, что именно СКД отправляет в базу после подстановки отборов.

Ошибки при создании отчета и что делать

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

Частые вопросы

Можно ли сделать отчет без СКД?
Можно: запрос в модуле и вывод через макет табличного документа с областями. Но отборы, сортировки, варианты и расшифровку придётся писать вручную, поэтому для новых отчетов берут СКД.
Как перенести внешний отчет внутрь конфигурации?
Создайте встроенный отчет или отчет в расширении с тем же именем макета и перенесите в его схему наборы данных, параметры, ресурсы и настройки. Запрос и код модуля переносятся копированием текста. После переноса сформируйте оба отчета на одних данных и сравните итоги.
Где хранятся настройки, которые пользователь сохранил для отчета?
В хранилище пользовательских настроек отчетов информационной базы. Схема при этом не меняется, поэтому доработка отчета разработчиком не стирает сохранённые варианты, пока не удалены поля, на которые они ссылаются.
Можно ли открыть внешний отчет в базе, где запрещены внешние файлы?
Нет. Если у пользователя нет права на интерактивное открытие внешних отчетов, остаётся встроить отчет в расширение или в конфигурацию, либо подключить его как дополнительный отчет через механизм БСП, если администратор это разрешил.
Нужно ли пересоздавать отчет при обновлении типовой конфигурации?
Отчет в расширении обычно продолжает работать. Ломается он, если в новом релизе переименовали регистр или поле, на которые ссылается запрос. После обновления сформируйте отчет на копии базы: ошибка в запросе сразу покажет, какое поле пропало.