Свой отчет на СКД в Конфигураторе 1С 8.3: от объекта метаданных до варианта для пользователей
Содержание
Чтобы создать отчет в Конфигураторе 1С 8.3, откройте дерево конфигурации (Конфигурация → Открыть конфигурацию), щёлкните правой кнопкой по ветке «Отчеты» и выберите «Добавить». Затем на вкладке «Основные» нажмите «Открыть схему компоновки данных»: платформа создаст макет ОсновнаяСхемаКомпоновкиДанных, где вы пишете запрос и собираете вид отчета. Форму и код для простого отчета писать не нужно: платформа строит их сама.
Порядок одинаков для любой конфигурации, потому что схема компоновки данных (СКД) — механизм платформы, а не БП или УТ. Отличаются только имена регистров в запросе. Всё сказанное относится к платформе 8.3 с управляемыми формами и интерфейсом «Такси».
Объект отчета в Конфигураторе: встроенный или внешний
Сначала решите, где будет жить отчет. От этого зависит, придётся ли трогать типовую конфигурацию .
| Вариант | Как создать | Когда подходит |
|---|---|---|
| Встроенный отчет | Ветка «Отчеты» в дереве конфигурации → «Добавить» | Своя конфигурация или снятая с поддержки |
| Отчет в расширении | Конфигурация → Расширения конфигурации, в расширении ветка «Отчеты» | Типовая конфигурация на поддержке |
| Внешний отчет | Файл → Новый → Внешний отчет, сохраняется в файл .erf | Разовая задача, отладка, передача клиенту |
Для типовых БП 3.0, ЗУП 3.1, УТ 11 на поддержке удобнее всего расширение. Основная конфигурация остаётся нетронутой, а обновления встают без ручного сравнения и объединения.
Порядок для встроенного отчета
- Откройте базу в режиме Конфигуратора и дерево конфигурации.
- В ветке «Отчеты» вызовите контекстное меню → «Добавить».
- Задайте Имя латиницей или кириллицей без пробелов, например
АнализПродаж, и Синоним — то, что увидит пользователь. - На вкладке «Основные» нажмите «Открыть схему компоновки данных». Подтвердите создание макета.
- После настройки схемы обновите конфигурацию базы данных клавишей
F7.
Внешний отчет
создаётся так же, только без F7: его достаточно сохранить в файл. В пользовательском режиме он открывается через меню с тремя полосками → Файл → Открыть. Для этого у пользователя должно быть право на интерактивное открытие внешних отчетов и обработок.
Схема компоновки данных: набор данных и запрос
Окно схемы состоит из вкладок: «Наборы данных», «Связи наборов данных», «Вычисляемые поля», «Ресурсы», «Параметры», «Макеты», «Вложенные схемы», «Настройки». Работа начинается с первой.
На вкладке «Наборы данных» нажмите зелёный плюс и выберите тип набора:
- 📄 Набор данных — запрос. Основной вариант: данные берутся запросом к базе.
- 🔗 Набор данных — объединение. Склеивает несколько наборов в один, аналог
ОБЪЕДИНИТЬ ВСЕ. - 🧩 Набор данных — объект. Данные передаются из кода, например таблица значений.
Для набора-запроса нажмите «Конструктор запроса…» и соберите выборку мышкой. Флажок «Автозаполнение» оставьте включённым: тогда СКД сама добавит поля запроса в список доступных.
Пример запроса для отчета о продажах. Здесь Продажи — условный регистр накопления оборотов с измерениями Номенклатура, Контрагент и ресурсами Количество, Сумма, Себестоимость. В вашей конфигурации имя и состав регистра будут свои.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СуммаОборот КАК Сумма,
ПродажиОбороты.СебестоимостьОборот КАК Себестоимость
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты
Слово РАЗРЕШЕННЫЕ нужно, если в базе включены ограничения доступа на уровне записей. Без него пользователь с урезанными правами получит ошибку вместо отчета.
Связи наборов данных
Если данные лежат в двух наборах (например, план из регистра сведений и факт из регистра накопления), не пишите один громоздкий запрос. Сделайте два набора и свяжите их на вкладке «Связи наборов данных» по общему полю. Связь работает как левое соединение: источник — набор, который выводится всегда.
Параметры и отборы в отчете
Параметры &НачалоПериода и &КонецПериода СКД нашла в запросе и сама добавила на вкладку «Параметры». Оставлять их так можно, но пользователю придётся вводить две даты. Удобнее один параметр-период.
Приём со стандартным периодом
- На вкладке «Параметры» добавьте параметр
Периодс типомСтандартныйПериод. - У параметра
НачалоПериодав колонке «Выражение» укажите&Период.ДатаНачала. - У параметра
КонецПериода—&Период.ДатаОкончания. - У обоих дат установите флажок «Ограничение доступности», чтобы пользователь их не видел.
- В настройках варианта включите
Периодв пользовательские настройки (см. ниже).
Теперь в шапке отчета одно поле с выбором «Этот месяц», «Прошлый квартал» и произвольным интервалом.
Колонки параметра, которые стоит знать
| Колонка | Что даёт |
|---|---|
| Тип | Тип значения, для ссылки — конкретный справочник или документ |
| Доступен список значений | Пользователь может выбрать несколько значений, в запросе пишите В (&Параметр) |
| Значение | Значение по умолчанию |
| Ограничение доступности | Параметр скрыт от пользователя, заполняется выражением или кодом |
| Включать в доступные поля | Параметр можно вывести в отчет как поле |
Отборы вместо условий в запросе
Отбор по складу или контрагенту не пишите в запрос через ГДЕ. Добавьте его в настройках схемы на вкладке «Отбор». СКД сама подставит условие в запрос, причём для виртуальных таблиц регистров — в параметры самой таблицы, где это возможно. Так отчет работает быстрее, а отбор пользователь может менять.
Чтобы отбор появился в шапке отчета, выделите его, вызовите контекстное меню → «Свойства элемента пользовательских настроек», установите флажок «Включать в пользовательские настройки» и режим «Быстрый доступ». Режим «Обычный» убирает настройку в окно «Настройки…».
Поля отчета, ресурсы и вычисляемые показатели
На вкладке «Наборы данных» у каждого поля есть свойства. Чаще всего правят три:
- 🏷️ Заголовок — как поле подписано в отчете.
- 🎨 Оформление — формат числа, например
ЧДЦ=2для двух знаков после запятой. - 🚫 Ограничение использования — запрет выводить поле как группировку, ставить на него отбор или сортировку.
Ресурсы: что суммируется в итогах
На вкладке «Ресурсы» перенесите числовые поля Количество, Сумма, Себестоимость. Выражение по умолчанию — Сумма(Поле). Можно выбрать Среднее, Максимум, Минимум, Количество.
Без ресурсов отчет выведет строки, но не посчитает итоги по группировкам. Это самая частая причина вопроса «почему нет итогов».
Вычисляемые поля
Поле, которого нет в запросе, добавляют на вкладке «Вычисляемые поля»: путь к данным, выражение, заголовок. Выражение пишется на языке выражений СКД, он похож на язык запросов.
Пример: валовая прибыль строки.
Сумма - Себестоимость
Процент наценки так считать нельзя. Если сложить проценты по строкам, итог группы будет бессмысленным. Правильный приём — ресурс с выражением от сумм:
ВЫБОР
КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
ИНАЧЕ (Сумма(Сумма) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100
КОНЕЦ
Проверка на числах. Строка 1: сумма 1 200, себестоимость 1 000, наценка 20%. Строка 2: сумма 600, себестоимость 400, наценка 50%. Если сложить проценты, получится 70%. Ресурс даёт (1 800 − 1 400) / 1 400 × 100 ≈ 28,57%. Верно второе.
Структура отчета и макет вывода
Вид отчета задаётся на вкладке «Настройки». Самый быстрый путь — кнопка «Открыть конструктор настроек» (значок с волшебной палочкой). Он спросит тип отчета (список, таблица, диаграмма), поля и группировки и соберёт структуру.
Вручную структура собирается в верхнем дереве:
- Правой кнопкой по корню «Отчет» → «Новая группировка», выберите поле, например
Контрагент. - Внутри неё добавьте вложенную группировку
Номенклатура. - Чтобы видеть строки без свёртки, добавьте группировку без поля — она называется «Детальные записи».
- На вкладке «Выбранные поля» перетащите ресурсы и вычисляемые поля.
- На вкладке «Сортировка» задайте порядок, например
Суммапо убыванию.
Для таблицы-шахматки (контрагенты по строкам, месяцы по колонкам) выберите «Новая таблица» и добавьте отдельно строки и колонки. Для месяцев у поля периода задайте тип дополнения периода и группировку по месяцу.
Оформление и варианты
- 🖌️ Условное оформление — красит строки по условию, например отрицательную прибыль красным.
- ⚙️ Другие настройки — заголовок отчета, вывод параметров и отборов в шапку, расположение итогов.
- 📑 Варианты отчета — на вкладке «Настройки» можно завести несколько вариантов («По контрагентам», «По товарам») с разной структурой на одной схеме.
Вкладка «Макеты»
Обычно не нужна: СКД рисует отчет сама. Макеты пригодятся, когда заказчик требует фиксированную шапку, объединённые ячейки или оформление строки группировки по образцу. Есть макеты полей, группировок, заголовков группировок и ресурсов. Чем больше своих макетов, тем сложнее потом менять структуру, поэтому используйте их точечно.
Вывод отчета из кода
Иногда стандартного формирования мало: данные приходят из файла или нужно подставить параметры программно. Тогда в модуле объекта отчета используют обработчик ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Данные для набора типа «Объект» с именем объекта «Данные»
ВнешниеНаборы = Новый Структура("Данные", ПолучитьТаблицуДанных());
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет, ВнешниеНаборы, ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(Процессор);
КонецПроцедуры
ПолучитьТаблицуДанных() — ваша функция в том же модуле, которая возвращает таблицу значений. Имена её колонок должны совпадать с полями набора «Объект». Если внешних данных нет, строку с ВнешниеНаборы уберите и передайте вторым параметром пустое значение.
Как отчет попадает к пользователю
Отчет, созданный в Конфигураторе, сам в меню не появится. Нужно три вещи:
- Подсистема. В свойствах отчета на вкладке «Подсистемы» отметьте раздел, например «Продажи». В расширении для этого родительскую подсистему сначала заимствуют.
- Права. Откройте роль, которая есть у нужных пользователей, найдите отчет и установите права «Использование» и «Просмотр». В расширении для этого роль тоже заимствуют или создают свою.
- Обновление базы. Нажмите
F7и перезапустите клиент 1С:Предприятия.
В рабочей базе обновление конфигурации с изменением структуры может потребовать завершить сеансы пользователей. Делайте его вне рабочего времени и после резервной копии базы.
В типовых конфигурациях на БСП отчет можно дополнительно подключить к механизму вариантов отчетов, чтобы он был виден в панели «Отчеты» раздела. Для простого случая хватает подсистемы и прав.
Скорость и отладка отчета на СКД
Медленный отчет почти всегда упирается в запрос. Проверяйте в таком порядке.
Где искать тормоза
- 🐢 Условие в
ГДЕпо виртуальной таблице. Перенесите его в параметры виртуальной таблицы или в отбор СКД. Тогда регистр отфильтрует данные до соединений. - 🐢 Обращение через точку к полям составного типа.
Регистратор.ДатаилиРегистратор.Ответственныйразворачивается в соединения со всеми типами документов. ИспользуйтеВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг)или берите поля из самого регистра. - 🐢 Лишние поля при автозаполнении. СКД выбирает только поля, нужные текущей настройке. Но если вы вывели много реквизитов-ссылок, запрос растёт. Уберите лишнее из «Выбранных полей».
- 🐢 Детальные записи на большом периоде. Сто тысяч строк без группировок формируются долго и бесполезны для анализа.
Инструменты проверки
| Инструмент | Где найти | Что показывает |
|---|---|---|
| Отладчик | Отладка → Начать отладку, клавиша F5 | Значения переменных в ПриКомпоновкеРезультата |
| Замер производительности | Панель отладки, кнопка замера, при запущенной отладке | Какие строки кода занимают время |
| Консоль запросов | Внешняя обработка, обычно из комплекта поставки | Время запроса и результат на реальных данных |
| Технологический журнал | Файл logcfg.xml на сервере | Долгие запросы к СУБД, блокировки |
Удобный приём: в отладчике получите текст итогового запроса из Макет.НаборыДанных и вставьте его в консоль. Вы увидите, что именно СКД отправляет в базу после подстановки отборов.