Свой отчёт в 1С 8.3: от пустого объекта метаданных до готовой таблицы с итогами
Содержание
Чтобы создать отчёт в 1С с нуля
, откройте конфигуратор, в дереве метаданных правой кнопкой на ветке «Отчеты» выберите Добавить, затем на вкладке «Основные» нажмите Открыть схему компоновки данных. Конструктор создаст макет ОсновнаяСхемаКомпоновкиДанных, вы напишете в нём запрос, настроите структуру на вкладке «Настройки» — и отчёт уже формируется без единой строки кода.
Типичная ситуация: главбух просит «табличку по продажам в разрезе менеджеров с итогом по месяцу», а в типовой такого нет. Ниже — путь начинающего разработчика на платформе 8.3 с интерфейсом «Такси». Он одинаков для любой конфигурации, отличаются только имена справочников и регистров в запросе.
Если база типовая и стоит на поддержке, не правьте основную конфигурацию напрямую. Для своего отчёта подходит внешний отчёт (файл .erf) или расширение конфигурации: так обновления пройдут без ручного сравнения и объединения.
1. Подготовка: добавляем объект «Отчет» в дерево метаданных
Перед стартом сделайте выгрузку базы: Администрирование → Выгрузить информационную базу в конфигураторе. Это файл .dt, к нему можно вернуться, если что-то пойдёт не так.
Дальше выберите, куда класть отчёт:
| Вариант | Где создаётся | Когда подходит |
|---|---|---|
| Отчёт в конфигурации | Ветка «Отчеты» в дереве метаданных | Своя или снятая с поддержки конфигурация |
| Отчёт в расширении | Конфигурация → Расширения конфигурации, ветка «Отчеты» расширения | Типовая база, отчёт нужен всем пользователям |
| Внешний отчёт | Файл → Новый → Внешний отчет | Разовая задача, проба, отчёт для одного отдела |
Для объекта в конфигурации порядок такой:
- Откройте
Конфигурация → Открыть конфигурацию. - В дереве найдите ветку «Отчеты», правой кнопкой —
Добавить. - На вкладке «Основные» задайте Имя латиницей или кириллицей без пробелов (например,
ПродажиПоМенеджерам) и Синоним — так отчёт увидит пользователь. - Нажмите
Открыть схему компоновки данныхи подтвердите создание макета.
💡 Имя объекта потом используется в коде (Отчеты.ПродажиПоМенеджерам). Переименовывать его после того, как на отчёт сослались другие модули, хлопотно: продумайте имя сразу.
2. Схема компоновки: запрос, поля, ресурсы и параметры отчёта
Схема компоновки данных (СКД) — основной способ строить отчёты в 8.3. Она сама собирает итоги, группировки, отборы и даёт пользователю настраивать отчёт без программиста.
Набор данных и запрос
- На вкладке «Наборы данных» нажмите зелёный плюс и выберите «Добавить набор данных — запрос».
- Кнопкой
Конструктор запросавыберите таблицы и поля. Для продаж это обычно регистр накопления или документы реализации вашей конфигурации. - Нажмите
ОК— текст запроса и список полей появятся в наборе.
Пример запроса по документам реализации (имена таблиц замените на свои):
ВЫБРАТЬ
Реализация.Контрагент КАК Контрагент,
Реализация.Ответственный КАК Менеджер,
Реализация.СуммаДокумента КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен
И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Ресурсы
Ресурс — это поле, по которому СКД считает итоги. На вкладке «Ресурсы» перенесите Сумма вправо и оставьте выражение Сумма(Сумма). Без ресурса отчёт выведет строки, но итогов по группировкам не будет.
Параметры
Параметры НачалоПериода и КонецПериода появятся на вкладке «Параметры» автоматически. Чтобы пользователь выбирал период одним полем:
- 📅 добавьте параметр
Периодс типомСтандартныйПериод; - 🔗 в колонке «Выражение» у
НачалоПериодаукажите&Период.ДатаНачала, уКонецПериода—&Период.ДатаОкончания; - 🙈 у двух исходных параметров снимите флаг доступности, чтобы они не мешали в настройках.
Конец периода всегда передавайте через КонецДня или СтандартныйПериод, иначе документы последнего дня с временем позже 00:00:00 не попадут в отчёт.
3. Структура и настройки: что именно увидит пользователь
Схема с запросом — ещё не отчёт. Если открыть его в режиме «Предприятие» сейчас, таблица останется пустой: не задана структура вывода.
Перейдите на вкладку «Настройки»:
- В дереве структуры правой кнопкой —
Добавить → Новая группировка, полеМенеджер. - Внутри неё ещё одна группировка —
Контрагент. - Если нужны отдельные документы, добавьте вложенную группировку без поля — это «Детальные записи».
- На нижней закладке «Выбранные поля» отметьте
Сумма. - На закладке «Параметры» задайте период по умолчанию, например «Этот месяц».
Самый быстрый путь для первого раза — кнопка «Открыть конструктор настроек» на этой же вкладке. Он предлагает тип отчёта (список, таблица, диаграмма) и сам строит структуру.
Классический макет вместо СКД
Иногда нужна жёстко свёрстанная форма: бланк, акт, ведомость с подписями. Тогда отчёт делают на макете табличного документа.
| Подход | Плюсы | Минусы |
|---|---|---|
| СКД | Итоги, отборы, варианты и расшифровка «из коробки» | Сложно добиться пиксельной вёрстки |
| Макет + код | Полный контроль над внешним видом | Итоги, отборы и настройки пишете сами |
Макет создают в ветке «Макеты» отчёта: тип «Табличный документ». Строки выделяют, через контекстное меню Имена → Назначить имя называют области (Шапка, Строка). В ячейках, куда подставляется значение, в свойствах ставят «Заполнение: Параметр» и имя параметра.
4. Программирование вывода: когда стандартной обработки мало
СКД формирует отчёт сама. Код нужен, если перед выводом надо подставить параметры, подмешать данные из внешнего источника или вывести результат нестандартно.
Перехват вывода в модуле объекта
Откройте модуль объекта отчёта (Другое → Модуль объекта) и добавьте обработчик:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Пример: подставляем значение параметра из кода
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Ключевая строка — СтандартнаяОбработка = Ложь. Без неё платформа после вашего кода сформирует отчёт ещё раз своим способом.
💡 Принудительная установка периода в примере перекрывает выбор пользователя. В рабочем отчёте ставьте значение только при пустом параметре или уберите эту строку.
Вывод по макету без СКД
Для отчёта на макете табличного документа на управляемой форме создают реквизит ТабДок с типом ТабличныйДокумент, выводят его на форму и пишут команду «Сформировать»:
&НаКлиенте
Процедура Сформировать(Команда)
СформироватьНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьНаСервере()
ТабДок.Очистить();
Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
|УПОРЯДОЧИТЬ ПО
| Наименование";
Выборка = Запрос.Выполнить().Выбрать();
ТабДок.Вывести(ОбластьШапка);
Пока Выборка.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
КонецПроцедуры
Метод Параметры.Заполнить подставит значения, если имена параметров в ячейках макета совпадают с псевдонимами полей запроса: здесь Код и Наименование.
5. Форма отчёта и пользовательские настройки
Для отчёта на СКД форму можно не создавать: платформа сгенерирует её сама, с кнопкой «Сформировать», полем результата и доступом к настройкам. Свою форму делают, когда нужно убрать лишнее или вынести отбор наверх.
Быстрые настройки над таблицей
Чтобы период и отбор по менеджеру были видны сразу над отчётом:
- На вкладке «Настройки» схемы выделите параметр
Периодили элемент отбора. - Через контекстное меню откройте свойства элемента пользовательских настроек.
- Включите его в пользовательские настройки и выберите режим редактирования «Быстрый доступ».
То же для отбора: добавьте отбор по полю Менеджер, не включая его флажком, и вынесите в быстрые настройки. Пользователь сам выберет значение.
Своя форма
В ветке «Формы» отчёта нажмите Добавить и выберите тип «Форма отчета». В свойствах отчёта на вкладке «Формы» укажите её основной. Конструктор сам добавит поле результата и командную панель, дальше форму правят как любую управляемую.
6. Тестирование и отладка: проверяем отчёт в режиме «Предприятие»
После правок нажмите F7 — «Обновить конфигурацию
базы данных». Без этого «Предприятие» запустится со старой версией, и вы будете искать ошибку там, где её уже нет.
Как проверять:
- 🚀
F5— запуск «Предприятия» в режиме отладки. Отчёт откройте через меню «Все функции», ветка «Отчеты» (пункт включается в параметрах программы), или через подсистему, если уже разместили его. - 🔴 Поставьте точку останова (
F9) в модуле объекта и смотрите значения переменных в табло. - 🔎 Проверяйте запрос отдельно: скопируйте его текст в консоль запросов и сравните итог с типовым отчётом, например оборотно-сальдовой ведомостью по нужному счёту.
- 📏 Прогоните отчёт за пустой период, за один день и за год — так быстро ловятся ошибки с границами дат и производительностью.
В файловой базе отладка работает сразу. В клиент-серверной серверную отладку должен разрешить администратор сервера 1С при запуске агента; без этого точки останова в серверном коде не срабатывают.
7. Группировки, диаграммы и выгрузка в Excel
Многое добавляется в настройках СКД без кода:
- 📊 Диаграмма. В структуре настроек
Добавить → Новая диаграмма. Точки — группировка поМенеджер, серии — по месяцу, значения — ресурсСумма. - 🗂 Таблица-матрица.
Добавить → Новая таблица: строки по менеджерам, колонки по периодам. Для колонок по месяцам добавьте в запрос полеНАЧАЛОПЕРИОДА(Реализация.Дата, МЕСЯЦ) КАК Месяц. - 🎨 Условное оформление. На закладке «Условное оформление» подсветите строки, где
Суммабольше заданного порога. - 🔍 Расшифровка. Работает сама, если в
ПриКомпоновкеРезультатапередаютсяДанныеРасшифровки, как в примере выше. Двойной клик по сумме открывает список документов. - 🧮 Вычисляемые поля. Вкладка «Вычисляемые поля»: например, доля менеджера в общей выручке.
Выгрузка в Excel писать не нужно. Результат отчёта — табличный документ, а его пользователь сохраняет кнопкой с дискетой в командной панели (или Ещё → Сохранить как) в форматы xlsx, pdf, mxl и другие. Программно это делает метод Записать табличного документа с типом файла ТипФайлаТабличногоДокумента.XLSX.
8. Как разместить отчёт в интерфейсе программы и выдать права
Отчёт создан, но пользователь его не видит. Нужно два шага.
Подсистема. Откройте свойства отчёта, вкладку «Подсистемы», отметьте раздел, например «Продажи». Команда отчёта появится в панели этого раздела. Расположение уточняют в редакторе командного интерфейса подсистемы: группа «Отчеты».
Права. Откройте нужную роль в ветке Общие → Роли, найдите отчёт и отметьте права «Использование» и «Просмотр». Без них пользователь не увидит команду, даже если отчёт включён в подсистему. У ролей с полными правами доступ появляется автоматически, поэтому администратор отчёт видит, а бухгалтер — нет.
Для внешнего отчёта процедура другая. Файл .erf открывают через Файл → Открыть, если у пользователя есть право интерактивно открывать внешние отчёты. В типовых конфигурациях на БСП их подключают через раздел Администрирование → Печатные формы, отчеты и обработки: там есть список дополнительных отчётов. Для такой регистрации в модуле отчёта нужна экспортная функция СведенияОВнешнейОбработке.
9. Ошибки при создании отчёта, которые встречаются у новичков
Эти ситуации не видны из пошаговой инструкции, но съедают больше всего времени:
- 🔁 Суммы удвоены. В запросе левое соединение с табличной частью или другой таблицей размножило строки шапки. Берите суммы из одной таблицы или группируйте до соединения во временной таблице.
- 🧾 Поле есть в запросе, но не выводится. Его отключили на вкладке «Наборы данных» в колонке ограничений или не отметили в «Выбранных полях».
- 🐢 Отчёт по остаткам тормозит. Отбор наложен через
ГДЕпосле виртуальной таблицыОстатки, а не в её параметрах. Условие по периоду и измерениям передавайте внутрь виртуальной таблицы. - 🔒 «Нарушение прав доступа» у бухгалтера. Отчёт читает регистр, на который у роли нет права «Чтение». Права на сам отчёт не дают доступа к данным.
- 🧩 После обновления типовой отчёт пропал или сломался. Его создавали в основной конфигурации на поддержке, и при объединении изменения потерялись. Переносите доработки в расширение.
Можно ли создать отчёт без конфигуратора?
Чем отличается вариант отчёта от нового отчёта?
Сколько схем компоновки может быть у одного отчёта?
ПолучитьМакет.Нужно ли знать язык запросов, чтобы сделать отчёт?
Как передать отчёт в другую базу?
.cfe.