Отчёт на СКД с нуля: от объекта метаданных до запуска в режиме 1С:Предприятие

· 9 мин

Содержание

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

Ниже весь путь на живом примере: отчёт «Продажи по контрагентам» с отбором по периоду. Те же шаги подойдут для любого другого отчёта, меняются только запрос и поля.

Менять конфигурацию типовой поставки без необходимости не стоит: при обновлении возникнут конфликты. Работайте в копии базы, а изменения типовой конфигурации согласуйте с регламентом.

Что понадобится перед началом

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

Перед работой:

  • ✅ сделайте выгрузку базы в файл .dt через Администрирование → Выгрузить информационную базу;
  • ✅ определитесь, откуда берутся данные: регистр накопления, документ, справочник;
  • ✅ подготовьте эскиз итоговой таблицы: какие колонки, какие группировки, какие итоги.

Без эскиза отчёт получается «как вышло», и потом его переделывают.

Перед созданием отчёта
Выполнено: 0 / 4

Создание объекта метаданных «Отчет»

Сам объект ничего не считает: это контейнер для схемы, формы и модуля.

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

Так вы получаете пустую схему. Форму отчёта создавать необязательно: платформа построит стандартную сама, с панелью настроек и кнопкой Сформировать.

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

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

Наборы данных и параметры: откуда берётся информация

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

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

Тип набораКогда использовать
ЗапросОсновной вариант: данные из базы выбираются языком запросов
ОбъектДанные приходят из кода: таблица значений, дерево, массив
ОбъединениеНужно склеить несколько наборов в один

Для нашего примера выбираем Добавить набор данных — запрос. В поле запроса можно писать текст руками или нажать Конструктор запроса... и собрать запрос мышью.

Параметры схемы

Всё, что в запросе написано как &Параметр, платформа сама заведёт на закладке Параметры. Например, для периода:

&НачалоПериода
&КонецПериода

Для каждого параметра можно задать тип (Дата), значение по умолчанию и признак Ограничение доступности. Если снять его, параметр появится в панели настроек отчёта, и пользователь введёт период сам.

Три полезных свойства параметра:

  • 📅 Выражение позволяет вычислить значение автоматически, например начало текущего месяца;
  • 🔒 Использование — всегда не даёт пользователю оставить параметр пустым;
  • 🧾 Доступен пользователю делает его видимым в быстрых настройках.

Запрос и виртуальные таблицы

Рабочий запрос для примера. Допустим, продажи лежат в регистре накопления Продажи с измерением Контрагент и ресурсом Сумма:

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

Имена регистра и полей замените на свои.

Виртуальные таблицы регистров считают итоги на стороне СУБД, и это быстрее, чем перебирать записи руками. Основные:

  • 📊 Остатки — состояние на дату;
  • 📈 Обороты — движение за период;
  • 🔁 ОстаткиИОбороты — начальный остаток, приход, расход и конечный остаток сразу;
  • 🕓 СрезПоследних — для регистров сведений, последнее значение на дату.

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

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

Когда запрос готов, вернитесь в набор данных. Платформа сама создаст поля по тексту запроса. Если поля не появились, нажмите Обновить поля или проверьте синтаксис запроса.

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

Поля, ресурсы и группировки в СКД

Теперь наводим порядок в полях. На закладке Наборы данных у каждого поля есть:

  • Поле и Путь — технические имена;
  • Заголовок — то, что увидит пользователь;
  • Роль — например, Период или Измерение;
  • Ограничение доступности — запрещает использовать поле в отборе или группировке.

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

Ресурсы

На закладке Ресурсы указывается, как складывать числовые поля при группировке. Для суммы продаж выражение будет Сумма(Сумма). Можно выбрать другую агрегатную функцию: Количество, Максимум, Минимум, Среднее. Если поле числовое и вы не добавили его в ресурсы, группировка итоги не посчитает.

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

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

Пример: поле Наценка с выражением (Выручка - Себестоимость) / Выручка * 100. Если выручка может быть нулевой, оберните выражение в ВЫБОР КОГДА Выручка = 0 ТОГДА 0 ИНАЧЕ ... КОНЕЦ, иначе в итоге будет ошибка деления.

Закладка «Настройки»

Здесь собирается внешний вид отчёта. Порядок такой:

  1. Выделите корень Отчет и нажмите Добавить → Группировка.
  2. В группировке укажите поле Контрагент. Если оставить группировку без полей, получится детальная запись.
  3. Откройте закладку Выбранные поля и добавьте Контрагент и Сумма.
  4. На закладке Отбор добавьте условия, которые пользователь сможет менять.
  5. На закладке Порядок задайте сортировку, например по Сумма, по убыванию.
  6. Для таблицы добавьте не просто группировку, а Таблица и колонки/строки внутри неё.

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

Условное оформление открывается на закладке с таким же названием. Например, красный цвет для отрицательных сумм: условие Сумма < 0, оформление — цвет текста.

Какой элемент структуры выбрать в настройках?

Обработчики событий и программная доработка

Для большинства отчётов кода не требуется. Но если нужно изменить настройки перед формированием или вывести результат по-своему, используют модуль отчёта. Откройте его в редакторе объекта: Модуль объекта.

Главное событие — ПриКомпоновкеРезультата. Оно срабатывает при формировании и позволяет вмешаться в процесс:

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

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

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

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

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

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

Этот код воспроизводит стандартную работу и нужен как заготовка. Перед вызовом Выполнить можно поменять настройки: подставить параметр, добавить отбор, скрыть поле.

Пример: установить период по умолчанию, если пользователь его не задал:

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

Если правок в этом обработчике становится много, это сигнал вынести часть логики в запрос или в настройки схемы.

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

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

Запуск, отладка и оптимизация отчёта

Проверка в режиме пользователя: Отладка → Начать отладку (клавиша F5) или кнопка 1С:Предприятие на панели. Платформа сохранит изменения в базе данных конфигурации и откроет пользовательский режим. Если вы первый раз добавили объект, обновление структуры может запросить монопольный доступ: тогда закройте остальные сеансы.

Откройте раздел с отчётом, нажмите Сформировать и сверьте итоги с данными, которые знаете.

Если отчёт не работает

  1. Поставьте точку останова в модуле отчёта (F9) и запустите отладку. Работает только в обработчиках, которые вы написали.
  2. Если ошибка в запросе, скопируйте текст запроса в консоль запросов и выполните отдельно: так видно, где именно он падает.

Ускорение

Если отчёт формируется долго, идите по порядку от дешёвого к дорогому:

Что сделатьЭффект
Ограничить период в параметрах виртуальной таблицыСамый сильный: СУБД считает меньше
Убрать лишние поля из запросаМеньше данных передаётся
Не соединять таблицы по неиндексируемым полямСоединение работает быстрее
Заменить вложенные запросы временными таблицамиПлатформа не пересчитывает одно и то же
Отключить ненужные вычисляемые поляМеньше работы при выводе

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

Прежде чем править рабочую базу, сделайте копию и согласуйте работу. Изменения конфигурации в рабочей базе применяйте тогда, когда пользователи не работают.

Типичные ошибки при создании отчёта

Здесь только то, чего нет в шагах выше:

  • 🚫 Отчёт есть в конфигурации, но пользователь его не видит: не включён в подсистему или у роли нет права Просмотр.
  • 🚫 Итоги не считаются: числовое поле не добавлено в ресурсы либо в группировке выбрано не то поле.
  • 🚫 Итоги двоятся: запрос соединяет таблицы с несколькими строками на ключ. Проверьте соединение и при необходимости сгруппируйте данные в запросе.
  • 🚫 Заголовки на латинице или с техническими именами: не заполнен Заголовок у поля.

Если ничего не помогло, упростите: оставьте один набор данных и одно поле, убедитесь, что оно выводится, и добавляйте остальное по одному элементу. Так сразу видно, на каком шаге появляется ошибка.

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

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