Свой отчёт в 1С 8.3: от пустого объекта метаданных до готовой таблицы с итогами

· 9 мин

Содержание

Чтобы создать отчёт в 1С с нуля , откройте конфигуратор, в дереве метаданных правой кнопкой на ветке «Отчеты» выберите Добавить, затем на вкладке «Основные» нажмите Открыть схему компоновки данных. Конструктор создаст макет ОсновнаяСхемаКомпоновкиДанных, вы напишете в нём запрос, настроите структуру на вкладке «Настройки» — и отчёт уже формируется без единой строки кода.

Типичная ситуация: главбух просит «табличку по продажам в разрезе менеджеров с итогом по месяцу», а в типовой такого нет. Ниже — путь начинающего разработчика на платформе 8.3 с интерфейсом «Такси». Он одинаков для любой конфигурации, отличаются только имена справочников и регистров в запросе.

Если база типовая и стоит на поддержке, не правьте основную конфигурацию напрямую. Для своего отчёта подходит внешний отчёт (файл .erf) или расширение конфигурации: так обновления пройдут без ручного сравнения и объединения.

1. Подготовка: добавляем объект «Отчет» в дерево метаданных

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

Дальше выберите, куда класть отчёт:

ВариантГде создаётсяКогда подходит
Отчёт в конфигурацииВетка «Отчеты» в дереве метаданныхСвоя или снятая с поддержки конфигурация
Отчёт в расширенииКонфигурация → Расширения конфигурации, ветка «Отчеты» расширенияТиповая база, отчёт нужен всем пользователям
Внешний отчётФайл → Новый → Внешний отчетРазовая задача, проба, отчёт для одного отдела

Для объекта в конфигурации порядок такой:

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

💡 Имя объекта потом используется в коде (Отчеты.ПродажиПоМенеджерам). Переименовывать его после того, как на отчёт сослались другие модули, хлопотно: продумайте имя сразу.

2. Схема компоновки: запрос, поля, ресурсы и параметры отчёта

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

Набор данных и запрос

  1. На вкладке «Наборы данных» нажмите зелёный плюс и выберите «Добавить набор данных — запрос».
  2. Кнопкой Конструктор запроса выберите таблицы и поля. Для продаж это обычно регистр накопления или документы реализации вашей конфигурации.
  3. Нажмите ОК — текст запроса и список полей появятся в наборе.

Пример запроса по документам реализации (имена таблиц замените на свои):

ВЫБРАТЬ
	Реализация.Контрагент КАК Контрагент,
	Реализация.Ответственный КАК Менеджер,
	Реализация.СуммаДокумента КАК Сумма
ИЗ
	Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
	Реализация.Проведен
	И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Ресурсы

Ресурс — это поле, по которому СКД считает итоги. На вкладке «Ресурсы» перенесите Сумма вправо и оставьте выражение Сумма(Сумма). Без ресурса отчёт выведет строки, но итогов по группировкам не будет.

Параметры

Параметры НачалоПериода и КонецПериода появятся на вкладке «Параметры» автоматически. Чтобы пользователь выбирал период одним полем:

  • 📅 добавьте параметр Период с типом СтандартныйПериод;
  • 🔗 в колонке «Выражение» у НачалоПериода укажите &Период.ДатаНачала, у КонецПериода — &Период.ДатаОкончания;
  • 🙈 у двух исходных параметров снимите флаг доступности, чтобы они не мешали в настройках.

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

3. Структура и настройки: что именно увидит пользователь

Схема с запросом — ещё не отчёт. Если открыть его в режиме «Предприятие» сейчас, таблица останется пустой: не задана структура вывода.

Перейдите на вкладку «Настройки»:

  1. В дереве структуры правой кнопкой — Добавить → Новая группировка, поле Менеджер.
  2. Внутри неё ещё одна группировка — Контрагент.
  3. Если нужны отдельные документы, добавьте вложенную группировку без поля — это «Детальные записи».
  4. На нижней закладке «Выбранные поля» отметьте Сумма.
  5. На закладке «Параметры» задайте период по умолчанию, например «Этот месяц».

Самый быстрый путь для первого раза — кнопка «Открыть конструктор настроек» на этой же вкладке. Он предлагает тип отчёта (список, таблица, диаграмма) и сам строит структуру.

Классический макет вместо СКД

Иногда нужна жёстко свёрстанная форма: бланк, акт, ведомость с подписями. Тогда отчёт делают на макете табличного документа.

ПодходПлюсыМинусы
СКДИтоги, отборы, варианты и расшифровка «из коробки»Сложно добиться пиксельной вёрстки
Макет + кодПолный контроль над внешним видомИтоги, отборы и настройки пишете сами

Макет создают в ветке «Макеты» отчёта: тип «Табличный документ». Строки выделяют, через контекстное меню Имена → Назначить имя называют области (Шапка, Строка). В ячейках, куда подставляется значение, в свойствах ставят «Заполнение: Параметр» и имя параметра.

4. Программирование вывода: когда стандартной обработки мало

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

Перехват вывода в модуле объекта

Откройте модуль объекта отчёта (Другое → Модуль объекта) и добавьте обработчик:

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

	СтандартнаяОбработка = Ложь;
	ДокументРезультат.Очистить();

	Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();

	// Пример: подставляем значение параметра из кода
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
		Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц));

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

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

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

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

Ключевая строка — СтандартнаяОбработка = Ложь. Без неё платформа после вашего кода сформирует отчёт ещё раз своим способом.

💡 Принудительная установка периода в примере перекрывает выбор пользователя. В рабочем отчёте ставьте значение только при пустом параметре или уберите эту строку.

Вывод по макету без СКД

Для отчёта на макете табличного документа на управляемой форме создают реквизит ТабДок с типом ТабличныйДокумент, выводят его на форму и пишут команду «Сформировать»:

&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()

	ТабДок.Очистить();
	Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Номенклатура.Код КАК Код,
	|	Номенклатура.Наименование КАК Наименование
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	НЕ Номенклатура.ЭтоГруппа
	|УПОРЯДОЧИТЬ ПО
	|	Наименование";
	Выборка = Запрос.Выполнить().Выбрать();

	ТабДок.Вывести(ОбластьШапка);
	Пока Выборка.Следующий() Цикл
		ОбластьСтрока.Параметры.Заполнить(Выборка);
		ТабДок.Вывести(ОбластьСтрока);
	КонецЦикла;

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

Метод Параметры.Заполнить подставит значения, если имена параметров в ячейках макета совпадают с псевдонимами полей запроса: здесь Код и Наименование.

5. Форма отчёта и пользовательские настройки

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

Быстрые настройки над таблицей

Чтобы период и отбор по менеджеру были видны сразу над отчётом:

  1. На вкладке «Настройки» схемы выделите параметр Период или элемент отбора.
  2. Через контекстное меню откройте свойства элемента пользовательских настроек.
  3. Включите его в пользовательские настройки и выберите режим редактирования «Быстрый доступ».

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

Своя форма

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

6. Тестирование и отладка: проверяем отчёт в режиме «Предприятие»

После правок нажмите F7 — «Обновить конфигурацию базы данных». Без этого «Предприятие» запустится со старой версией, и вы будете искать ошибку там, где её уже нет.

Как проверять:

  1. 🚀 F5 — запуск «Предприятия» в режиме отладки. Отчёт откройте через меню «Все функции», ветка «Отчеты» (пункт включается в параметрах программы), или через подсистему, если уже разместили его.
  2. 🔴 Поставьте точку останова (F9) в модуле объекта и смотрите значения переменных в табло.
  3. 🔎 Проверяйте запрос отдельно: скопируйте его текст в консоль запросов и сравните итог с типовым отчётом, например оборотно-сальдовой ведомостью по нужному счёту.
  4. 📏 Прогоните отчёт за пустой период, за один день и за год — так быстро ловятся ошибки с границами дат и производительностью.

В файловой базе отладка работает сразу. В клиент-серверной серверную отладку должен разрешить администратор сервера 1С при запуске агента; без этого точки останова в серверном коде не срабатывают.

7. Группировки, диаграммы и выгрузка в Excel

Многое добавляется в настройках СКД без кода:

  • 📊 Диаграмма. В структуре настроек Добавить → Новая диаграмма. Точки — группировка по Менеджер, серии — по месяцу, значения — ресурс Сумма.
  • 🗂 Таблица-матрица. Добавить → Новая таблица: строки по менеджерам, колонки по периодам. Для колонок по месяцам добавьте в запрос поле НАЧАЛОПЕРИОДА(Реализация.Дата, МЕСЯЦ) КАК Месяц.
  • 🎨 Условное оформление. На закладке «Условное оформление» подсветите строки, где Сумма больше заданного порога.
  • 🔍 Расшифровка. Работает сама, если в ПриКомпоновкеРезультата передаются ДанныеРасшифровки, как в примере выше. Двойной клик по сумме открывает список документов.
  • 🧮 Вычисляемые поля. Вкладка «Вычисляемые поля»: например, доля менеджера в общей выручке.

Выгрузка в Excel писать не нужно. Результат отчёта — табличный документ, а его пользователь сохраняет кнопкой с дискетой в командной панели (или Ещё → Сохранить как) в форматы xlsx, pdf, mxl и другие. Программно это делает метод Записать табличного документа с типом файла ТипФайлаТабличногоДокумента.XLSX.

8. Как разместить отчёт в интерфейсе программы и выдать права

Отчёт создан, но пользователь его не видит. Нужно два шага.

Подсистема. Откройте свойства отчёта, вкладку «Подсистемы», отметьте раздел, например «Продажи». Команда отчёта появится в панели этого раздела. Расположение уточняют в редакторе командного интерфейса подсистемы: группа «Отчеты».

Права. Откройте нужную роль в ветке Общие → Роли, найдите отчёт и отметьте права «Использование» и «Просмотр». Без них пользователь не увидит команду, даже если отчёт включён в подсистему. У ролей с полными правами доступ появляется автоматически, поэтому администратор отчёт видит, а бухгалтер — нет.

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

Отчёт готов к передаче пользователям
Выполнено: 0 / 6

9. Ошибки при создании отчёта, которые встречаются у новичков

Эти ситуации не видны из пошаговой инструкции, но съедают больше всего времени:

  • 🔁 Суммы удвоены. В запросе левое соединение с табличной частью или другой таблицей размножило строки шапки. Берите суммы из одной таблицы или группируйте до соединения во временной таблице.
  • 🧾 Поле есть в запросе, но не выводится. Его отключили на вкладке «Наборы данных» в колонке ограничений или не отметили в «Выбранных полях».
  • 🐢 Отчёт по остаткам тормозит. Отбор наложен через ГДЕ после виртуальной таблицы Остатки, а не в её параметрах. Условие по периоду и измерениям передавайте внутрь виртуальной таблицы.
  • 🔒 «Нарушение прав доступа» у бухгалтера. Отчёт читает регистр, на который у роли нет права «Чтение». Права на сам отчёт не дают доступа к данным.
  • 🧩 После обновления типовой отчёт пропал или сломался. Его создавали в основной конфигурации на поддержке, и при объединении изменения потерялись. Переносите доработки в расширение.
Можно ли создать отчёт без конфигуратора?
Да. Пользователь с правами может собрать отчёт в режиме «Предприятие» через универсальный отчёт или настройку вариантов типовых отчётов. Новый объект метаданных создаётся только в конфигураторе.
Чем отличается вариант отчёта от нового отчёта?
Вариант — это сохранённые настройки того же отчёта: другая группировка, отборы, поля. Схема и запрос общие. Новый отчёт нужен, когда меняются сами данные.
Сколько схем компоновки может быть у одного отчёта?
Несколько: каждая хранится отдельным макетом. Основная указывается в свойствах отчёта, остальные подключают кодом через ПолучитьМакет.
Нужно ли знать язык запросов, чтобы сделать отчёт?
Для простого отчёта хватит конструктора запроса. Но соединения, временные таблицы и виртуальные таблицы регистров без понимания языка запросов дают неверные суммы.
Как передать отчёт в другую базу?
Сохраните его как внешний отчёт: в конфигураторе щёлкните по отчёту в дереве метаданных правой кнопкой и выберите сохранение во внешнюю обработку или отчёт. Либо переносите расширение целиком в файле .cfe.