Создание отчета в 1С:Предприятие 8.3 через конфигуратор — задача, которая пугает многих начинающих разработчиков. Кажется, что для этого нужны годы опыта и глубокие знания встроенного языка. На самом деле основные принципы построения отчетов интуитивно понятны, если разобраться в логике работы системы. Эта статья поможет вам с нуля разработать простой, но функциональный отчет: от добавления объекта в дерево метаданных до настройки макета и программирования алгоритма формирования данных.

Мы не будем рассматривать сложные многоуровневые отчеты с динамическими параметрами — сосредоточимся на базовом функционале, который покрывает 80% практических задач. Вы узнаете, как создать структуру отчета, связать его с данными, настроить вывод в табличный документ и избежать типичных ошибок. Все примеры приведены для актуальной версии платформы 8.3.23, но подходят и для более ранних релизов (начиная с 8.3.10).

Если вы никогда не работали с конфигуратором , перед началом рекомендуем ознакомиться с интерфейсом программы. Откройте свою базу в режиме Конфигуратор (через меню запуска 1С:Предприятие) и убедитесь, что у вас есть права на редактирование метаданных. Без этого создать новый отчет не получится.

📊 С какой целью вы создаете отчет в 1С?
Для внутренней аналитики
По требованию бухгалтерии
Для интеграции с другим ПО
Учебный проект
Другой вариант

1. Подготовка: добавление отчета в дерево метаданных

Первый шаг — создать "заготовку" отчета в структуре конфигурации. Это аналогично добавлению нового документа или справочника, но с другими настройками.

Откройте дерево метаданных в конфигураторе (Файл → Открыть конфигурацию или клавиша F7). Найдите ветку "Отчеты" и кликните правой кнопкой мыши. В контекстном меню выберите Добавить → Отчет. Система предложит ввести имя — используйте осмысленное название (например, "ОтчетПоПродажам"), так как оно будет отображаться в интерфейсе программы.

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

  • 📌 Имя — внутренний идентификатор (латиницей, без пробелов). Пример: SalesReport.
  • 📝 Синоним — отображаемое имя в интерфейсе (можно на русском). Пример: "Отчет по продажам".
  • 🔧 Подсистема — определяет, в каком разделе меню будет доступен отчет. Выберите подходящую (например, "Продажи").

Не оставляйте отчет "голым" — сразу сохраните конфигурацию (Ctrl+S или кнопка на панели инструментов). Это позволит избежать потери изменений при сбое.

💡

Если вы создаете отчет для типовой конфигурации (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11), проверьте, нет ли уже аналогичного отчета в стандартном функционале. Дублирование может привести к конфликтам при обновлении.

2. Настройка структуры отчета: параметры и макет

Теперь перейдем к конструктору отчета. Дважды кликните по созданному отчету в дереве метаданных — откроется окно редактирования. Здесь нас интересуют две вкладки: "Параметры" и "Макеты".

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

  • 🗓️ Период (тип ДатаНачала и ДатаОкончания)
  • 🏷️ Организация (тип СправочникСсылка.Организации)
  • 📦 Номенклатура (тип СправочникСсылка.Номенклатура, с возможностью множественного выбора)

Для добавления параметра нажмите кнопку Добавить и заполните свойства:

  1. Укажите Имя (например, ПериодНачала).
  2. Выберите Тип из выпадающего списка.
  3. В поле Заголовок введите понятное пользователю название (например, "Период с").
  4. При необходимости установите флаг "Множественный выбор" (для справочников).

На вкладке Макеты создается шаблон вывода данных. Кликните Добавить → Табличный документ и назовите макет (например, "ОсновнойМакет"). Здесь можно вручную нарисовать таблицу с заголовками колонок или оставить пустой макет — мы заполним его программно позже.

Что делать, если не видно вкладки "Макеты"?

Если вкладка Макеты отсутствует, проверьте версию платформы. В старых релизах (до 8.3.8) макеты настраивались через отдельное окно. Обновите платформу или используйте альтернативный способ — создание макета через Общие макеты в дереве метаданных.

3. Программирование алгоритма формирования отчета

Самый ответственный этап — написание кода, который будет извлекать данные из базы и формировать отчет. Перейдите на вкладку "Модуль объекта" в конструкторе отчета. Здесь нам нужно реализовать процедуру Сформировать(), которая вызывается при нажатии кнопки "Сформировать" в интерфейсе пользователя.

Пример базового кода для отчета по продажам:

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

// 1. Получаем параметры из формы

ДатаНачала = Параметры.ПериодНачала;

ДатаОкончания = Параметры.ПериодОкончания;

Организация = Параметры.Организация;

// 2. Формируем запрос к базе данных

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РегистрНакопления.Продажи.Номенклатура КАК Номенклатура,

| СУММА(РегистрНакопления.Продажи.Количество) КАК Количество,

| СУММА(РегистрНакопления.Продажи.Сумма) КАК Сумма

|ИЗ

| РегистрНакопления.Продажи КАК РегистрНакопления.Продажи

|ГДЕ

| РегистрНакопления.Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

| И РегистрНакопления.Продажи.Организация = &Организация

|

|СГРУППИРОВАТЬ ПО

| РегистрНакопления.Продажи.Номенклатура";

// 3. Устанавливаем параметры запроса

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);

Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

Запрос.УстановитьПараметр("Организация", Организация);

// 4. Выполняем запрос и получаем результат

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

// 5. Формируем табличный документ

Таблица = Новый ТабличныйДокумент;

ОбластьЗаголовка = Таблица.Область(0, 0, 0, 2);

ОбластьЗаголовка.Текст = "Отчет по продажам за период с " + ДатаНачала + " по " + ДатаОкончания;

ОбластьЗаголовка.Шрифт = Новый Шрифт(, 12, , , Истина);

// 6. Добавляем шапку таблицы

Таблица.ВывестиСекцию("Шапка|Номенклатура|Количество|Сумма");

// 7. Заполняем данными из выборки

НомерСтроки = 1;

Пока Выборка.Следующий() Цикл

Таблица.ВывестиСекцию("Строка|

" + Выборка.Номенклатура.Наименование + "|

" + Формат(Выборка.Количество, "ЧЦ=10; ЧДЦ=2") + "|

" + Формат(Выборка.Сумма, "ЧЦ=10; ЧДЦ=2"));

НомерСтроки = НомерСтроки + 1;

КонецЦикла;

// 8. Выводим результат

Отчет.Вывести(Таблица);

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

Критическая особенность: если в запросе используются виртуальные таблицы регистров накопления (как в примере выше), убедитесь, что период выборки не превышает 3 лет. В противном случае запрос может выполняться чрезвычайно долго или приводить к ошибке переполнения памяти.

Указаны все параметры запроса|Правильно настроены типы данных в параметрах|Запрос содержит GROUP BY для агрегатных функций|Табличный документ инициализирован|Обработаны все возможные исключения (пустая выборка, ошибки запроса)-->

4. Настройка формы отчета для пользователя

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

Откройте созданную форму в режиме редактирования (Форма → Редактировать форму). Здесь можно:

  • 🎨 Изменить расположение элементов (перетащить поля мышью).
  • 📏 Настроить ширину полей (например, для дат достаточно 100 пикселей).
  • 🔒 Добавить проверку заполнения обязательных параметров (через свойство "Обязательное").
  • 📅 Для полей дат установить значения по умолчанию (например, НачалоДня(ТекущаяДата()) для начала периода).

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

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

  1. Правильно ли указано имя формы в свойствах отчета.
  2. Нет ли ошибок в модуле формы (вкладка "Модуль").
  3. Сохранена ли конфигурация перед запуском.

5. Тестирование и отладка отчета

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

Ошибка Возможная причина Решение
Ошибка при выполнении запроса: Поле не найдено Опечатка в имени поля или регистра Проверьте синтаксис запроса и названия реквизитов в конфигураторе
Не удалось преобразовать значение к типу Дата Параметр даты передан в неверном формате Используйте функции НачалоДня() или КонецДня()
Отчет формируется слишком долго Запрос обрабатывает большой объем данных Добавьте дополнительные условия в секцию ГДЕ или разбейте отчет на части
Пустой результат при наличии данных Неверные параметры отбора или права доступа Проверьте значения параметров и права пользователя на чтение регистров

Для отладки используйте точки останова в коде. Поставьте брейкпоинт на строке с выполнением запроса (РезультатЗапроса = Запрос.Выполнить()) и проверьте:

  • 🔍 Передаются ли корректные параметры в запрос.
  • 📊 Совпадает ли текст запроса с тем, что вы ожидаете.
  • 👤 Достаточно ли прав у текущего пользователя для выполнения операции.

Если отчет работает, но данные отображаются некорректно, проверьте форматирование в табличном документе. Например, для числовых значений используйте функцию Формат() с указанием точности:

Формат(Выборка.Сумма, "ЧЦ=10; ЧДЦ=2")  // 10 знаков всего, 2 после запятой
💡

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

6. Дополнительные возможности: группировки, диаграммы, экспорт

Базовый отчет готов, но его можно улучшить. Рассмотрим несколько полезных доработок:

Группировка данных. Если нужно сгруппировать строки по какому-либо признаку (например, по категориям номенклатуры), модифицируйте запрос:

Запрос.Текст =

"ВЫБРАТЬ

| РегистрНакопления.Продажи.Номенклатура.Родитель КАК Категория,

| РегистрНакопления.Продажи.Номенклатура КАК Номенклатура,

| СУММА(РегистрНакопления.Продажи.Количество) КАК Количество

|ИЗ

| РегистрНакопления.Продажи КАК РегистрНакопления.Продажи

|ГДЕ ...

|СГРУППИРОВАТЬ ПО

| РегистрНакопления.Продажи.Номенклатура.Родитель,

| РегистрНакопления.Продажи.Номенклатура";

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

Диаграмма = Таблица.Диаграммы.Добавить(ТипДиаграммы.Гистограмма);

Диаграмма.Данные.Установить(Выборка);

Экспорт в Excel. Чтобы пользователи могли сохранять отчет в удобном формате, добавьте кнопку экспорта:

Процедура ЭкспортироватьВExcel(Команда)

Таблица.Записать("C:\Temp\ОтчетПоПродажам.xlsx", ТипФайлаТабличногоДокумента.Excel);

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

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

Как ускорить формирование отчета?

Если отчет выполняется дольше 30 секунд, рассмотрите следующие оптимизации:

1. Используйте временные таблицы для промежуточных расчетов.

2. Разбейте сложный запрос на несколько простых.

3. Настройте индексы для полей, используемых в условиях ГДЕ.

4. Ограничьте период выборки (например, не более 1 года за раз).

7. Размещение отчета в интерфейсе программы

Отчет создан, но пользователи не увидят его, пока он не будет добавлен в командный интерфейс. Откройте дерево метаданных, найдите ветку "Подсистемы" и выберите ту, к которой относится ваш отчет (например, "Продажи").

В свойствах подсистемы перейдите на вкладку "Командный интерфейс" и добавьте новую команду:

  • 📌 Имя команды: ОтчетПоПродажам.
  • 📝 Заголовок: "Отчет по продажам".
  • 🔗 Действие: выберите созданный отчет из списка.
  • 🖼️ Картинка: укажите иконку (например, Отчет).

Затем добавьте команду в нужное меню или панель действий. Например, для размещения в разделе "Отчеты":

  1. Найдите в дереве "ОбщаяФорма.ОсновнаяФорма" (или другую форму, где нужно отобразить отчет).
  2. Откройте ее в редактировании и добавьте кнопку на панель инструментов.
  3. Свяжите кнопку с созданной командой.

После размещения сохраните конфигурацию и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных). Теперь отчет будет доступен пользователям в интерфейсе программы.

💡

Если отчет предназначен для ограниченного круга пользователей, настройте права доступа. Для этого в конфигураторе откройте Администрирование → Пользователи и установите разрешения на чтение/выполнение для нужных ролей.

8. Типичные ошибки и как их избежать

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

1. Игнорирование транзакций. Если отчет не только читает, но и записывает данные (например, сохраняет результаты в регистр), оберните операции в транзакцию:

НачатьТранзакцию();

Попытка

// Код записи данных

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

ВызватьИсключение;

КонецПопытки;

2. Жесткое кодирование имен. Никогда не используйте в коде прямые ссылки на объекты (например, "Справочник.Номенклатура"). Вместо этого применяйте:

Справочники.Номенклатура  // или

Метаданные.Справочники.Номенклатура.ПолноеИмя()

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

Если НЕ Выборка.Следующий() Тогда

Таблица.ВывестиСекцию("Строка|Нет данных за указанный период");

КонецЕсли;

4. Неоптимизированные запросы. Избегайте конструкций вроде ВЫБРАТЬ РАЗЛИЧНЫЕ или ВЫБРАТЬ ПЕРВЫЕ 1000 без ограничений. Они могут существенно замедлить работу.

5. Пренебрежение правами доступа. Перед развертыванием отчета в рабочей базе проверьте, что у пользователей есть права на:

  • Чтение данных из используемых регистров/справочников.
  • Выполнение отчета (право "Интерактивное открытие").
  • Экспорт данных (если предусмотрен).
💡

Для отладки прав доступа временно назначьте себе роль "Полные права" в конфигураторе (Администрирование → Пользователи). После тестирования верните исходные настройки.

FAQ: Ответы на частые вопросы

Можно ли создать отчет без использования конфигуратора?

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

Как сделать отчет с динамическими колонками (количество колонок зависит от параметров)?summary>

Для динамических колонок используйте программное формирование макета. В модуле отчета:

  1. Создайте пустой табличный документ.
  2. Добавьте заголовки колонок через Таблица.Область() в цикле.
  3. Заполните данные, учитывая переменное количество колонок.

Пример кода для добавления колонок:

Для Каждого Колонка Из СписокКолонок Цикл

Таблица.Область(0, Индекс).Текст = Колонка.Заголовок;

Индекс = Индекс + 1;

КонецЦикла;

Почему отчет работает в конфигураторе, но не открывается в режиме предприятия?

Чаще всего это связано с:

  • 🔐 Недостаточными правами у пользователя.
  • 🔄 Необновленной конфигурацией базы данных (забыли нажать Обновить после изменений).
  • 🖥️ Ошибками в модуле формы, которые не проявляются в конфигураторе.

Проверьте журнал регистрации (Администрирование → Журнал регистрации) на наличие ошибок.

Как сделать отчет с возможностью детализации (расшифровки) по строкам?

Для расшифровки используйте параметр ДанныеРасшифровки в процедуре Сформировать():

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

// ...

ДанныеРасшифровки.УстановитьДанные(Выборка.Номенклатура, "Справочник.Номенклатура.ФормаЭлемента");

// ...

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

Это позволит пользователю кликать по строкам отчета и открывать карточку номенклатуры или документ-основание.

Можно ли в отчете использовать данные из внешних источников (Excel, XML, API)?

Да, но для этого потребуется:

  • 📥 Для Excel: использовать ЧтениеXML или ЧтениеJSON (предварительно экспортировав данные из Excel в эти форматы).
  • 🌐 Для API: написать обработку HTTP-запросов с помощью HTTPСоединение или HTTPЗапрос.
  • 🔄 Для XML: использовать ЧтениеXML и XDTO.

Пример чтения XML:

Чтение = Новый ЧтениеXML;

Чтение.ОткрытьФайл("C:\Data\import.xml");

Данные = XDTOФабрика.ПрочитатьXML(Чтение, , Истина);

Учтите, что работа с внешними источниками может замедлить формирование отчета и требует обработки ошибок подключения.

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

Если отчет планируется использовать регулярно, документируйте его структуру и логику работы. Это упростит поддержку и модификацию в будущем. Например, добавьте комментарии в код или создайте отдельный файл с описанием алгоритма формирования данных.

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