Как собрать и проверить отчёт на СКД в консоли, не трогая конфигурацию

· 10 мин

Содержание

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

Обычный сценарий такой. Отчёт нужен «ещё вчера», доступа к Конфигуратору нет или обновлять базу днём нельзя. В консоли вы за 15–30 минут отлаживаете запрос и отборы, а в отчёт конфигурации переносите уже проверенную схему.

Где взять консоль СКД и как её запустить

Встроенной консоли компоновки в платформе 1С 8.3 нет. Используют один из трёх вариантов:

  • 📦 Консоль из поставки ИТС — файл вида КонсольКомпоновкиДанных.epf. Есть версии для обычного приложения и для управляемых форм.
  • 🧰 Набор «Инструменты разработчика» — бесплатная сторонняя разработка, внутри своя консоль компоновки с расширенной отладкой.
  • 📝 Внешний отчёт из Конфигуратора — пустой отчёт с одной схемой. Строго говоря, это не консоль, но для быстрой проверки схемы подходит.

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

Права и предупреждение безопасности

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

При открытии платформа может показать предупреждение безопасности. Это работает защита от опасных действий: флажок с таким названием есть в карточке пользователя в Конфигураторе (Администрирование → Пользователи). Выключать его ради консоли не обязательно — достаточно подтвердить открытие файла, которому доверяете.

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

Набор данных: запрос, объединение и связи

Работа в консоли начинается с вкладки наборов данных. Типов наборов три:

НаборКогда братьНа что смотреть
Запрос90% задач: данные из регистров, документов, справочниковФлажок «Автозаполнение» и расширения языка запросов СКД
ОбъединениеНужно сложить строки из двух источников в одну колонкуОдинаковые имена полей в подчинённых наборах
ОбъектДанные приходят из кода — таблица значений, переданная во внешний наборРаботает только при программном выводе, в консоли не всегда доступно

Запрос с расширениями СКД

Текст запроса удобнее собирать конструктором. Открывается он из поля текста набора. В конструкторе, запущенном из схемы, есть дополнительная вкладка «Компоновка данных» — на ней задают, по каким полям пользователь сможет отбирать данные.

Отмеченные там поля попадают в текст в фигурных скобках. Это синтаксис СКД, обычный запрос его не понимает:

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

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

Имя регистра в примере условное, подставьте своё.

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

Связи наборов

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

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

Почему не написать один запрос с соединением? Можно, но два набора проще читать и менять. А ещё компоновщик выполняет набор-приёмник только для тех полей, которые реально выбраны в настройках. Не выбрали ни одного поля плана — второй запрос не выполнится вовсе.

Параметры и динамические отборы в консоли СКД

Параметры в тексте запроса пишутся через амперсанд: &КонецПериода. СКД сама заводит их на вкладке «Параметры». Дальше их настраивают.

Период одним полем

Классический приём — один параметр стандартного периода вместо двух дат:

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

Дата окончания стандартного периода уже приходит концом дня. Отдельно добавлять КОНЕЦПЕРИОДА(..., ДЕНЬ) не нужно.

Список значений

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

Отбор или параметр — что выбрать

ЧтоГде работаетКогда лучше
ПараметрВнутри запроса, до выборкиПериод, дата остатков, обязательные условия
Отбор в настройкахПосле или внутри запроса, если поле помечено в {ГДЕ}Произвольные условия, которые пользователь меняет сам
Отбор в параметрах виртуальной таблицыВ условии таблицы регистраСклад, организация, номенклатура на больших регистрах

Отбор в настройках гибче: пользователь может поставить условие «В группе», «Не равно», «Заполнено». Параметр быстрее и предсказуемее. В рабочих отчётах их обычно сочетают.

Настройки вывода: структура, поля и оформление

Вкладка «Настройки» — это то, что потом увидит пользователь. Здесь решают, как выглядит результат.

Структура отчёта

В дерево структуры добавляют элементы трёх видов:

  • 📊 Группировка — строки с итогами по полю (по складу, затем по номенклатуре).
  • 🔲 Таблица — кросс-таблица со строками и колонками (номенклатура по строкам, месяцы по колонкам).
  • 📈 Диаграмма — график по тем же данным.

Группировка без поля называется «Детальные записи». Если её нет в структуре, вы увидите только итоги по группировкам, без отдельных строк. Частая причина вопроса «куда пропали документы».

Поля, ресурсы и вычисляемые поля

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

Несколько вариантов в одной схеме

Одна схема может хранить несколько вариантов настроек: «Остатки по складам», «Остатки по группам товаров», «Кросс-таблица по месяцам». Запрос общий, различается только структура и набор полей. Варианты добавляют в списке вариантов над деревом настроек. В готовом отчёте пользователь переключает их без разработчика.

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

Оформление и пользовательские настройки

«Условное оформление» красит строки по условию: отрицательный остаток — красным, просрочка больше 30 дней — жирным. На вкладке «Другие настройки» задают заголовок, расположение итогов, макет оформления.

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

Отладка схемы и анализ скорости

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

Шаг 1. Отдельно проверить запрос

Скопируйте текст запроса в консоль запросов и выполните с теми же параметрами. Фигурные скобки уберите — обычный запрос их не примет. Если цифры неверные уже здесь, дело не в настройках компоновки.

Шаг 2. Посмотреть итоговый запрос после компоновки

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

Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию);
Для Каждого Набор Из Макет.НаборыДанных Цикл
    Сообщить(Набор.Запрос);
КонецЦикла;

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

Шаг 3. Вывести результат в таблицу значений

Табличный документ с оформлением мешает увидеть сырые данные. Выведите результат в коллекцию значений и посмотрите строки:

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Результат = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
ПроцессорВывода.Вывести(Процессор);

Где обычно теряется скорость

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

Для точного замера откройте консоль в Конфигураторе как внешнюю обработку, запустите отладку и включите Отладка → Замер производительности. Замер покажет, сколько времени ушло на выполнение запроса и сколько — на вывод.

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

Перенос схемы из консоли в отчёт конфигурации

Готовую схему из консоли переносят одним из двух способов.

Внешний отчёт

  1. В Конфигураторе: Файл → Новый → Внешний отчет.
  2. Нажмите «Открыть схему компоновки данных» — платформа создаст макет основной схемы.
  3. Загрузите схему из файла, сохранённого консолью (обычно XML). Если ваша консоль не сохраняет схему в файл, перенесите текст запроса, параметры, ресурсы и настройки вручную — это 10–15 минут на средний отчёт.
  4. Сохраните файл .erf.

В БП 3.0, ЗУП 3.1 и других конфигурациях на БСП отчёт подключают через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Для подключения в отчёт добавляют экспортную функцию СведенияОВнешнейОбработке() в модуле объекта — без неё БСП файл не примет как дополнительный отчёт.

Расширение конфигурации

Если отчёт должен жить в составе конфигурации и не теряться при обновлении, создайте расширение (Конфигурация → Расширения конфигурации), добавьте в него новый отчёт и перенесите схему туда. Расширения доступны начиная с платформы 8.3.6. Типовую конфигурацию при этом не снимают с поддержки.

Правку схемы прямо в типовом отчёте основной конфигурации делайте только при включённой возможности изменения — иначе следующее обновление сотрёт ваши изменения или потребует ручного сравнения.

Программный вывод готовой схемы

Если отчёт формируется из кода (кнопка в обработке, рассылка), минимальный вывод в табличный документ такой:

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

Значения параметров перед компоновкой задают через Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", ЗначениеПериода).

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

Можно ли консолью СКД менять данные в базе?
Нет. Консоль только читает данные запросом. Записать что-то она может лишь в том случае, если в саму обработку добавлен такой код.
Чем консоль СКД отличается от консоли запросов?
Консоль запросов выполняет один запрос и показывает таблицу. Консоль СКД добавляет параметры, пользовательские отборы, группировки с итогами, кросс-таблицы и оформление — то есть готовый отчёт.
Работает ли консоль СКД в файловой базе?
Да. Режим работы базы не важен, нужны только права на открытие внешних обработок.
Почему настройки, сделанные в консоли, не сохраняются после закрытия?
Консоль хранит схему в своей форме. Перед закрытием сохраните схему в файл, иначе при следующем открытии начнёте с пустой.
Можно ли открыть в консоли схему типового отчёта?
Да, если сохранить её из Конфигуратора в файл и загрузить в консоль. Так удобно разбирать, как устроен типовой отчёт, не трогая конфигурацию.