Создание отчета в 1С:Предприятие 8.3 через конфигуратор — задача, которая пугает многих начинающих разработчиков. Кажется, что для этого нужны годы опыта и глубокие знания встроенного языка. На самом деле основные принципы построения отчетов интуитивно понятны, если разобраться в логике работы системы. Эта статья поможет вам с нуля разработать простой, но функциональный отчет: от добавления объекта в дерево метаданных до настройки макета и программирования алгоритма формирования данных.
Мы не будем рассматривать сложные многоуровневые отчеты с динамическими параметрами — сосредоточимся на базовом функционале, который покрывает 80% практических задач. Вы узнаете, как создать структуру отчета, связать его с данными, настроить вывод в табличный документ и избежать типичных ошибок. Все примеры приведены для актуальной версии платформы 8.3.23, но подходят и для более ранних релизов (начиная с 8.3.10).
Если вы никогда не работали с конфигуратором 1С, перед началом рекомендуем ознакомиться с интерфейсом программы. Откройте свою базу в режиме Конфигуратор (через меню запуска 1С:Предприятие) и убедитесь, что у вас есть права на редактирование метаданных. Без этого создать новый отчет не получится.
1. Подготовка: добавление отчета в дерево метаданных
Первый шаг — создать "заготовку" отчета в структуре конфигурации. Это аналогично добавлению нового документа или справочника, но с другими настройками.
Откройте дерево метаданных в конфигураторе (Файл → Открыть конфигурацию или клавиша F7). Найдите ветку "Отчеты" и кликните правой кнопкой мыши. В контекстном меню выберите Добавить → Отчет. Система предложит ввести имя — используйте осмысленное название (например, "ОтчетПоПродажам"), так как оно будет отображаться в интерфейсе программы.
После создания откроется окно свойств отчета. Здесь важно обратить внимание на три ключевых параметра:
- 📌 Имя — внутренний идентификатор (латиницей, без пробелов). Пример:
SalesReport. - 📝 Синоним — отображаемое имя в интерфейсе (можно на русском). Пример:
"Отчет по продажам". - 🔧 Подсистема — определяет, в каком разделе меню будет доступен отчет. Выберите подходящую (например,
"Продажи").
Не оставляйте отчет "голым" — сразу сохраните конфигурацию (Ctrl+S или кнопка на панели инструментов). Это позволит избежать потери изменений при сбое.
Если вы создаете отчет для типовой конфигурации (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11), проверьте, нет ли уже аналогичного отчета в стандартном функционале. Дублирование может привести к конфликтам при обновлении.
2. Настройка структуры отчета: параметры и макет
Теперь перейдем к конструктору отчета. Дважды кликните по созданному отчету в дереве метаданных — откроется окно редактирования. Здесь нас интересуют две вкладки: "Параметры" и "Макеты".
На вкладке Параметры определяются входные данные, которые пользователь будет указывать при формировании отчета. Например, для отчета по продажам логично добавить параметры:
- 🗓️ Период (тип
ДатаНачалаиДатаОкончания) - 🏷️ Организация (тип
СправочникСсылка.Организации) - 📦 Номенклатура (тип
СправочникСсылка.Номенклатура, с возможностью множественного выбора)
Для добавления параметра нажмите кнопку Добавить и заполните свойства:
- Укажите Имя (например,
ПериодНачала). - Выберите Тип из выпадающего списка.
- В поле Заголовок введите понятное пользователю название (например,
"Период с"). - При необходимости установите флаг
"Множественный выбор"(для справочников).
На вкладке Если вкладка Макеты создается шаблон вывода данных. Кликните Добавить → Табличный документ и назовите макет (например, "ОсновнойМакет"). Здесь можно вручную нарисовать таблицу с заголовками колонок или оставить пустой макет — мы заполним его программно позже.
Что делать, если не видно вкладки "Макеты"?
Макеты отсутствует, проверьте версию платформы. В старых релизах (до 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), чтобы протестировать отчет. Если форма не открывается, проверьте:
- Правильно ли указано имя формы в свойствах отчета.
- Нет ли ошибок в модуле формы (вкладка
"Модуль"). - Сохранена ли конфигурация перед запуском.
5. Тестирование и отладка отчета
Первый запуск отчета редко проходит без ошибок. Типичные проблемы и способы их решения:
| Ошибка | Возможная причина | Решение |
|---|---|---|
Ошибка при выполнении запроса: Поле не найдено |
Опечатка в имени поля или регистра | Проверьте синтаксис запроса и названия реквизитов в конфигураторе |
Не удалось преобразовать значение к типу Дата |
Параметр даты передан в неверном формате | Используйте функции НачалоДня() или КонецДня() |
| Отчет формируется слишком долго | Запрос обрабатывает большой объем данных | Добавьте дополнительные условия в секцию ГДЕ или разбейте отчет на части |
| Пустой результат при наличии данных | Неверные параметры отбора или права доступа | Проверьте значения параметров и права пользователя на чтение регистров |
Для отладки используйте точки останова в коде. Поставьте брейкпоинт на строке с выполнением запроса (РезультатЗапроса = Запрос.Выполнить()) и проверьте:
- 🔍 Передаются ли корректные параметры в запрос.
- 📊 Совпадает ли текст запроса с тем, что вы ожидаете.
- 👤 Достаточно ли прав у текущего пользователя для выполнения операции.
Если отчет работает, но данные отображаются некорректно, проверьте форматирование в табличном документе. Например, для числовых значений используйте функцию Формат() с указанием точности:
Формат(Выборка.Сумма, "ЧЦ=10; ЧДЦ=2") // 10 знаков всего, 2 после запятой
Всегда тестируйте отчет на реальных данных, а не только на тестовых записях. Это поможет выявить проблемы с производительностью и корректностью отображения больших объемов информации.
6. Дополнительные возможности: группировки, диаграммы, экспорт
Базовый отчет готов, но его можно улучшить. Рассмотрим несколько полезных доработок:
Группировка данных. Если нужно сгруппировать строки по какому-либо признаку (например, по категориям номенклатуры), модифицируйте запрос:
Запрос.Текст =
"ВЫБРАТЬ
| РегистрНакопления.Продажи.Номенклатура.Родитель КАК Категория,
| РегистрНакопления.Продажи.Номенклатура КАК Номенклатура,
| СУММА(РегистрНакопления.Продажи.Количество) КАК Количество
|ИЗ
| РегистрНакопления.Продажи КАК РегистрНакопления.Продажи
|ГДЕ ...
|СГРУППИРОВАТЬ ПО
| РегистрНакопления.Продажи.Номенклатура.Родитель,
| РегистрНакопления.Продажи.Номенклатура";
Добавление диаграммы. В макет табличного документа можно вставить график:
Диаграмма = Таблица.Диаграммы.Добавить(ТипДиаграммы.Гистограмма);
Диаграмма.Данные.Установить(Выборка);
Экспорт в Excel. Чтобы пользователи могли сохранять отчет в удобном формате, добавьте кнопку экспорта:
Процедура ЭкспортироватьВExcel(Команда)
Таблица.Записать("C:\Temp\ОтчетПоПродажам.xlsx", ТипФайлаТабличногоДокумента.Excel);
КонецПроцедуры
Для сложных отчетов имеет смысл вынести логику формирования данных в отдельные функции или даже в общий модуль. Это упростит поддержку кода и позволит повторно использовать алгоритмы в других отчетах.
Если отчет выполняется дольше 30 секунд, рассмотрите следующие оптимизации:
1. Используйте временные таблицы для промежуточных расчетов. 2. Разбейте сложный запрос на несколько простых. 3. Настройте индексы для полей, используемых в условиях 4. Ограничьте период выборки (например, не более 1 года за раз).Как ускорить формирование отчета?
ГДЕ.
7. Размещение отчета в интерфейсе программы
Отчет создан, но пользователи не увидят его, пока он не будет добавлен в командный интерфейс. Откройте дерево метаданных, найдите ветку "Подсистемы" и выберите ту, к которой относится ваш отчет (например, "Продажи").
В свойствах подсистемы перейдите на вкладку "Командный интерфейс" и добавьте новую команду:
- 📌 Имя команды:
ОтчетПоПродажам. - 📝 Заголовок:
"Отчет по продажам". - 🔗 Действие: выберите созданный отчет из списка.
- 🖼️ Картинка: укажите иконку (например,
Отчет).
Затем добавьте команду в нужное меню или панель действий. Например, для размещения в разделе "Отчеты":
- Найдите в дереве
"ОбщаяФорма.ОсновнаяФорма"(или другую форму, где нужно отобразить отчет). - Откройте ее в редактировании и добавьте кнопку на панель инструментов.
- Свяжите кнопку с созданной командой.
После размещения сохраните конфигурацию и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных). Теперь отчет будет доступен пользователям в интерфейсе программы.
Если отчет предназначен для ограниченного круга пользователей, настройте права доступа. Для этого в конфигураторе откройте Администрирование → Пользователи и установите разрешения на чтение/выполнение для нужных ролей.
8. Типичные ошибки и как их избежать
Даже опытные разработчики сталкиваются с проблемами при создании отчетов. Вот наиболее распространенные ловушки:
1. Игнорирование транзакций. Если отчет не только читает, но и записывает данные (например, сохраняет результаты в регистр), оберните операции в транзакцию:
НачатьТранзакцию();
Попытка
// Код записи данных
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
2. Жесткое кодирование имен. Никогда не используйте в коде прямые ссылки на объекты (например, "Справочник.Номенклатура"). Вместо этого применяйте:
Справочники.Номенклатура // или
Метаданные.Справочники.Номенклатура.ПолноеИмя()
3. Отсутствие обработки пустых данных. Всегда проверяйте, что выборка не пустая, прежде чем формировать таблицу:
Если НЕ Выборка.Следующий() Тогда
Таблица.ВывестиСекцию("Строка|Нет данных за указанный период");
КонецЕсли;
4. Неоптимизированные запросы. Избегайте конструкций вроде ВЫБРАТЬ РАЗЛИЧНЫЕ или ВЫБРАТЬ ПЕРВЫЕ 1000 без ограничений. Они могут существенно замедлить работу.
5. Пренебрежение правами доступа. Перед развертыванием отчета в рабочей базе проверьте, что у пользователей есть права на:
- Чтение данных из используемых регистров/справочников.
- Выполнение отчета (право
"Интерактивное открытие"). - Экспорт данных (если предусмотрен).
Для отладки прав доступа временно назначьте себе роль "Полные права" в конфигураторе (Администрирование → Пользователи). После тестирования верните исходные настройки.
FAQ: Ответы на частые вопросы
Можно ли создать отчет без использования конфигуратора?
Да, но с ограничениями. В режиме 1С:Предприятие можно создать внешний отчет через меню Файл → Новый → Внешний отчет. Однако такой отчет не будет интегрирован в интерфейс программы и потребует ручного запуска каждый раз. Для постоянного использования лучше создавать отчеты через конфигуратор.
Как сделать отчет с динамическими колонками (количество колонок зависит от параметров)?summary>
Для динамических колонок используйте программное формирование макета. В модуле отчета:
- Создайте пустой табличный документ.
- Добавьте заголовки колонок через
Таблица.Область() в цикле.
- Заполните данные, учитывая переменное количество колонок.
Пример кода для добавления колонок:
Для Каждого Колонка Из СписокКолонок Цикл
Таблица.Область(0, Индекс).Текст = Колонка.Заголовок;
Индекс = Индекс + 1;
КонецЦикла;
Таблица.Область() в цикле.Для Каждого Колонка Из СписокКолонок Цикл
Таблица.Область(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С с нуля — задача, которая требует внимания к деталям, но вполне посильна даже для начинающих разработчиков. Следуя этой инструкции, вы получите рабочий инструмент, который можно дорабатывать под специфические нужды бизнеса. Начните с простого отчета на основе одного регистра, а затем постепенно усложняйте его, добавляя параметры, группировки и визуализацию.
Если отчет планируется использовать регулярно, документируйте его структуру и логику работы. Это упростит поддержку и модификацию в будущем. Например, добавьте комментарии в код или создайте отдельный файл с описанием алгоритма формирования данных.
Для углубленного изучения рекомендуем официальную документацию по 1С:Предприятие 8.3, особенно разделы про систему компоновки данных (СКД) и встроенный язык. СКД позволяет создавать более гибкие и настраиваемые отчеты без глубокого программирования.