Свой отчет на СКД в Конфигураторе 1С 8.3: от объекта метаданных до прав пользователей
Содержание
Чтобы сделать отчет в Конфигураторе 1С 8.3, добавьте в дереве метаданных объект «Отчеты», создайте для него основную схему компоновки данных (СКД), напишите запрос в наборе данных и соберите на вкладке «Настройки» хотя бы одну группировку. Затем обновите конфигурацию базы данных (F7), добавьте отчет в подсистему и выдайте пользователям роль с правами на него.
Типичная ситуация: главбух просит «продажи по контрагентам за период с разбивкой по менеджерам», а в типовых отчетах такого среза нет. Ниже — порядок, которым это делают на практике в любой конфигурации на платформе 8.3. Пути и названия даны для интерфейса Конфигуратора платформы 8.3.2x.
В типовую конфигурацию на поддержке новый отчет лучше не добавлять напрямую. Иначе вы снимаете объект с поддержки или включаете возможность изменения, и каждое обновление превращается в ручное сравнение. Правильный путь для типовых — расширение конфигурации или внешний отчет.
Где создавать отчет и как добавить объект метаданных
Сначала решите, куда положить отчет. От этого зависит, как он будет обновляться и кто сможет его открыть.
| Вариант | Когда подходит | Риски и ограничения |
|---|---|---|
| Объект в основной конфигурации | Своя, нетиповая конфигурация или снятая с поддержки | В типовой ломает обновления |
Объект в расширении (.cfe) | Типовая на поддержке, отчет нужен постоянно | Нужно следить за совместимостью расширения после обновлений |
Внешний отчет (.erf) | Разовая задача, обмен с коллегами, база в облаке | Файл живёт отдельно, права настраиваются иначе |
Добавление в основную конфигурацию
- Откройте Конфигуратор и выполните
Конфигурация → Открыть конфигурацию. - В дереве метаданных найдите ветку «Отчеты», щёлкните правой кнопкой и выберите «Добавить».
- Задайте «Имя» латиницей или кириллицей без пробелов, например
ПродажиПоМенеджерам. «Синоним» — то, что увидит пользователь: «Продажи по менеджерам». - На вкладке «Основные» нажмите кнопку «Открыть схему компоновки данных». Платформа предложит создать макет с именем
ОсновнаяСхемаКомпоновкиДанных— согласитесь.
Добавление в расширение
- Выполните
Конфигурация → Расширения конфигурации, нажмите «Добавить», задайте имя и префикс (например,рсш_). - Откройте конфигурацию расширения. В ветке «Отчеты» добавьте новый объект — он станет собственным объектом расширения.
- Дальше всё как в основной конфигурации: схема, запрос, настройки.
- Сохраните расширение и выполните
Конфигурация → Обновить конфигурацию базы данныхв окне расширения.
💡 Префикс расширения автоматически подставится к именам новых объектов. Это защищает от конфликта имён, если в следующем релизе типовой появится отчет с тем же именем.
Наборы данных: запрос и источники информации
Набор данных — это ответ на вопрос «откуда отчет берёт цифры». В редакторе СКД на вкладке «Наборы данных» нажмите зелёный плюс. Типов три:
- 🔎 Набор данных — запрос. Основной вариант: данные из регистров, документов и справочников.
- 🧩 Набор данных — объект. Данные готовит код: например, таблица значений, собранная из внешнего файла или веб-сервиса.
- 🔗 Набор данных — объединение. Склеивает несколько наборов в одну таблицу, как
ОБЪЕДИНИТЬ ВСЕв запросе.
Для набора-запроса нажмите «Конструктор запроса». Выберите таблицы, поля, условия — конструктор сгенерирует текст. Пример для продаж по документам реализации:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
Реализация.Дата КАК Дата,
Реализация.Контрагент КАК Контрагент,
Реализация.Ответственный КАК Менеджер,
Реализация.СуммаДокумента КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен
И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Если между набором-запросом и набором-объектом нужна связь, её задают на вкладке «Связи наборов данных»: источник, приёмник, выражение связи.
Для оборотов и остатков берите виртуальные таблицы регистров (.Обороты, .Остатки, .ОстаткиИОбороты) с параметрами периода, а не фильтруйте реальную таблицу движений. На базе с несколькими годами учёта разница в скорости измеряется минутами.
Фигурные скобки в запросе СКД
Приём, который сильно упрощает жизнь: необязательные условия заключают в фигурные скобки.
ГДЕ
Реализация.Проведен
{И Реализация.Контрагент = &Контрагент}
Если пользователь не заполнил параметр Контрагент, СКД просто выкинет это условие из запроса. Без скобок пустой параметр отфильтрует всё и отчет окажется пустым.
Поля, ресурсы и параметры отчета
После того как запрос сохранён, поля появятся в таблице набора данных. Для каждого можно задать заголовок, ограничения использования и роль.
Ресурсы
На вкладке «Ресурсы» перечисляются поля, которые суммируются по группировкам. Двойной щелчок по полю Сумма переносит его в ресурсы с выражением Сумма(Сумма). Без этого шага итоги по менеджерам и контрагентам не посчитаются.
Доступные функции агрегирования: Сумма, Количество, Минимум, Максимум, Среднее. Для количества документов используйте Количество(Различные Документ) — поле ссылки на документ из запроса.
Вычисляемые поля
Вкладка «Вычисляемые поля» нужна, когда показатель считается из других полей. Пример — средний чек:
| Путь к данным | Выражение |
|---|---|
СреднийЧек | Сумма (значение в строке — сумма одного документа) |
Чтобы итог считался верно, в ресурсах задайте для СреднийЧек выражение Сумма(Сумма) / Количество(Различные Документ), а не сумму средних. Чтобы не получить деление на ноль, оберните выражение в ВЫБОР КОГДА Количество(Различные Документ) > 0 ТОГДА ... ИНАЧЕ 0 КОНЕЦ.
Параметры
Параметры &НачалоПериода и &КонецПериода из запроса появятся на вкладке «Параметры» автоматически. Удобная схема для пользователя — один параметр периода вместо двух дат:
- Добавьте параметр
Периодс типомСтандартныйПериод. - Для
НачалоПериодав колонке «Выражение» укажите&Период.ДатаНачала, дляКонецПериода—&Период.ДатаОкончания. - У параметров
НачалоПериодаиКонецПериодаустановите ограничение доступности, чтобы пользователь видел толькоПериод.
ДатаОкончания стандартного периода возвращает конец дня, поэтому документы последнего числа не теряются. Если же вы передаёте простую дату, оберните её в КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) прямо в запросе.
Настройки и варианты отчета
Без настроек отчет ничего не выведет, даже с правильным запросом. Перейдите на вкладку «Настройки».
- В верхнем окне структуры щёлкните правой кнопкой «Отчет» и выберите «Новая группировка». Поле группировки —
Менеджер. - Внутри неё добавьте вложенную группировку по полю
Контрагент. - Если нужны строки документов, добавьте ещё одну группировку без поля — это «Детальные записи».
- На нижних вкладках задайте «Выбранные поля» (ресурс
Суммавыберите обязательно), «Отбор», «Сортировку».
Быстрее всего начать с кнопки «Открыть конструктор настроек»: он предложит тип отчета (список, таблица, диаграмма) и соберёт структуру за 4-5 шагов. Потом поправите руками.
Варианты
Один отчет может иметь несколько вариантов: «Свод по менеджерам», «Детально по документам», «Диаграмма по месяцам». Варианты добавляются в верхней части редактора СКД, в списке вариантов. Каждый вариант — своя структура, свои отборы и оформление при одном и том же запросе.
Быстрые и пользовательские настройки
Чтобы бухгалтер мог менять отбор прямо на форме отчета, у элемента отбора или параметра откройте свойства пользовательской настройки и включите «Включать в пользовательские настройки». Режим редактирования «Быстрый доступ» выводит поле в шапку формы, «Обычный» — в окно «Настройки».
Оформление: макеты и внешний вид вывода
Внешний вид результата СКД задаётся тремя способами.
- 🎨 Условное оформление в настройках варианта. Например, красить строку красным, если
Суммаменьше нуля. Задаётся на нижней вкладке «Условное оформление». - 🖌️ Макет оформления на вкладке «Другие настройки». Там же заголовок отчета, вывод параметров и отборов, расположение итогов.
- 📐 Макеты на вкладке «Макеты» схемы. Позволяют заменить стандартный вывод группировки или поля своим фрагментом табличного документа: например, шапку с логотипом и подписями.
Формат чисел и дат задают в свойстве «Оформление» поля набора данных: параметр «Формат», например ЧДЦ=2 для двух знаков после запятой или ДФ=dd.MM.yyyy для даты.
💡 Если отчет должен выглядеть как печатная форма с фиксированными рамками и подписями, СКД со своими макетами быстро становится неудобной. В таком случае проще вывести данные в табличный документ кодом по обычному макету — об этом в следующем разделе.
Программная доработка в модуле объекта
Пока СКД справляется сама, в модуль отчета писать ничего не нужно. Код понадобится в трёх случаях: подставить значения параметров перед формированием, передать в схему внешние наборы данных или полностью перехватить вывод.
Откройте модуль объекта отчета (вкладка «Прочее» → «Модуль объекта») и выберите событие ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Пример: если период не задан, берём текущий месяц
ПараметрПериод = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Период"));
Если ПараметрПериод <> Неопределено
И Не ЗначениеЗаполнено(ПараметрПериод.Значение.ДатаНачала) Тогда
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
Новый СтандартныйПериод(НачалоМесяца(ТекущаяДатаСеанса()),
КонецМесяца(ТекущаяДатаСеанса())));
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(Процессор);
КонецПроцедуры
Обратите внимание на порядок: сначала СтандартнаяОбработка = Ложь, иначе платформа после вашего кода сформирует отчет второй раз своими средствами. Четвёртый параметр Истина в Инициализировать разрешает расшифровку: по двойному щелчку на сумме пользователь откроет документ.
Внешние наборы данных
Если в схеме есть «Набор данных — объект», его имя (например, ТаблицаДанных) передают вторым параметром:
ВнешниеНаборы = Новый Структура("ТаблицаДанных", ТаблицаЗначений);
Процессор.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки, Истина);
Колонки таблицы значений должны совпадать по именам с полями набора, а их типы лучше задавать явно через ОписаниеТипов — без типов СКД не сможет группировать и отбирать по ссылкам.
Своя форма отчета
Если нужна нестандартная форма (кнопки, свои поля), создайте её на вкладке «Формы» и назначьте основной. В форме обязательно должен остаться реквизит Отчет и элемент табличного документа для результата — иначе отчет не будет формироваться. Для большинства задач стандартной формы хватает.
Публикация отчета и права пользователей
Отчет создан, но пользователи его пока не видят. Нужно три шага.
1. Проверка и обновление конфигурации
- Нажмите
F7илиКонфигурация → Обновить конфигурацию базы данных. Добавление отчета не меняет структуру таблиц, поэтому обычно оно проходит без монопольного режима (динамическое обновление), но пользователи увидят отчет только после перезапуска сеанса. - Запустите отладку
F5, откройте отчет через меню «Все функции» (включается в параметрах:Сервис и настройки → Параметры → Отображать команду «Все функции») и проверьте цифры на коротком периоде.
Перед обновлением рабочей базы сделайте резервную копию (Администрирование → Выгрузить информационную базу в Конфигураторе или копию каталога/бэкап СУБД).
2. Место в интерфейсе
Откройте свойства отчета, вкладку «Подсистемы», и отметьте раздел, где он должен появиться (например, «Продажи» или «Отчеты»). Команда отчета попадёт в панель действий раздела. Видимость по ролям и порядок в группе настраиваются в командном интерфейсе подсистемы.
В типовых конфигурациях на БСП свои отчеты дополнительно показываются в панели «Отчеты» раздела. Для этого в свойствах отчета обычно указывают «Хранилище вариантов» = ХранилищеВариантовОтчетов, чтобы пользовательские варианты сохранялись так же, как у типовых отчетов.
3. Роль и права доступа
Без отдельной роли отчет увидят только пользователи с полными правами. Для остальных:
- В ветке «Общие → Роли» добавьте роль, например
ОтчетПродажиПоМенеджерам(в расширении — в самом расширении). - На объекте отчета установите права «Использование» и «Просмотр».
- Проверьте, что у пользователей есть право «Чтение» на таблицы из запроса: документ, регистр, справочники. В типовых это обычно уже выдано профилями.
- В режиме 1С:Предприятие добавьте роль в профиль группы доступа:
Администрирование → Настройки пользователей и прав → Профили групп доступа.
Внешний отчет: как отдать файл
Внешний отчет создают через Файл → Новый → Внешний отчет и сохраняют в файл .erf. Открыть его можно через Файл → Открыть в режиме 1С:Предприятие. Для постоянного доступа в типовых его регистрируют в справочнике дополнительных отчетов (Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки). Для регистрации в модуле внешнего отчета должна быть экспортная функция СведенияОВнешнейОбработке() по требованиям БСП — без неё справочник файл не примет.
Открытие внешних файлов из меню «Файл» в базах с включённой защитой от опасных действий требует подтверждения, а у пользователя должно быть право на интерактивное открытие внешних отчетов. Выдавайте его осознанно: внешний отчет выполняет произвольный код с правами пользователя.
Если отчет пустой, медленный или считает не то
Ошибки при создании отчета на СКД почти всегда одни и те же. Быстрая диагностика: