Создание сторонних отчетов в 1С:Предприятие — одна из самых востребованных задач среди разработчиков и администраторов системы. Такие отчеты позволяют расширить стандартный функционал платформы, адаптировать его под специфические бизнес-процессы компании или автоматизировать рутинные операции. Однако процесс их разработки и внедрения требует не только знания языка , но и понимания архитектуры конфигурации, механизмов обмена данными и правил безопасности.

В этой статье мы разберем весь цикл создания стороннего отчета — от формулировки технического задания до тестирования и внедрения. Особое внимание уделим типичным ошибкам, которые допускают новички, и способам их избежать. Материал будет полезен как программистам , так и IT-специалистам, которые хотят понять, как работают кастомизированные решения в экосистеме 1С:Предприятие 8.3.

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

1. Подготовка: определяем цель и инструменты

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

  • 📊 Какие данные должны отображаться? (например, остатки товаров с разбивкой по складам и партиям)
  • 🔍 Какие фильтры нужны? (период, контрагент, номенклатурная группа)
  • 📈 В каком виде представить результат? (таблица, диаграмма, сводная ведомость)
  • 🔗 Нужна ли интеграция с другими системами? (выгрузка в Excel, отправка по email)

Для разработки внешнего отчета вам потребуется:

  • 💻 1С:Предприятие 8.3 (версия не ниже 8.3.10 — в более ранних могут отсутствовать нужные механизмы)
  • 🛠️ Конфигуратор 1С с правами администратора
  • 📝 Текстовый редактор для работы с кодом (например, Notepad++ или VS Code)
  • 🔧 Отладчик 1С для поиска ошибок
📊 Какой инструмент вы чаще используете для разработки в 1С?
Конфигуратор
Внешние обработки (erf/epf)
1C:Enterprise Development Tools (EDT)
Другой

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

2. Выбор типа отчета: внешний vs встроенный

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

Критерий Внешний отчет (.erf/.epf) Встроенный отчет (в конфигурации)
🔄 Совместимость с обновлениями Не ломается при обновлении конфигурации Может требовать доработок после обновлений
🔒 Безопасность Меньше рисков для целостности базы Ошибки в коде могут повлиять на работу всей системы
🛠️ Сложность разработки Требует знания механизмов внешних обработок Полный доступ к объектам конфигурации
📦 Переносимость Легко копируется между базами Привязан к конкретной конфигурации

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

  • 🔗 Необходимость интеграции с другими объектами конфигурации (например, добавление кнопки вызова отчета в форму документа)
  • 📊 Использование нестандартных механизмов платформы, недоступных во внешних обработках
  • 🔒 Требуется строгий контроль прав доступа на уровне конфигурации
💡

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

3. Разработка внешнего отчета: пошаговый процесс

Создание внешнего отчета состоит из нескольких этапов. Рассмотрим их на примере отчета по остаткам товаров с возможностью фильтрации по складам.

Шаг 1: Создание заготовки

Откройте Конфигуратор 1С и выполните:

  1. Перейдите в Файл → Новый
  2. Выберите Внешняя обработка
  3. Укажите имя файла (например, ОстаткиТоваров.erf)
  4. В открывшемся окне выберите Отчет как основной тип объекта

Шаг 2: Настройка параметров

В модуле объекта (Отчет.МодульОбъекта) определите параметры, которые будет принимать отчет:

Перем ДатаНачала, ДатаОкончания, Склад;

Процедура УстановитьПараметры(Знач Параметры)

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

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

Склад = Параметры.Склад;

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

Шаг 3: Формирование данных

Основная логика отчета реализуется в процедуре Сформировать(). Здесь мы получаем данные из базы и формируем результат:

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

// Получаем остатки товаров

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

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

"ВЫБРАТЬ

| Номенклатура.Наименование КАК Номенклатура,

| Склады.Наименование КАК Склад,

| РегистрыНакопления.ОстаткиТоваров.КоличествоОстаток КАК Остаток

|ИЗ

| РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНачала, &ДатаОкончания) КАК РегистрыНакопления.ОстаткиТоваров

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

| ПО РегистрыНакопления.ОстаткиТоваров.Номенклатура = Номенклатура.Ссылка

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады

| ПО РегистрыНакопления.ОстаткиТоваров.Склад = Склады.Ссылка

|ГДЕ

| РегистрыНакопления.ОстаткиТоваров.Склад = &Склад";

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

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

Запрос.УстановитьПараметр("Склад", Склад);

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

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

// Формируем таблицу результатов

ТаблицаРезультатов = Новый ТаблицаЗначений;

ТаблицаРезультатов.Колонки.Добавить("Номенклатура");

ТаблицаРезультатов.Колонки.Добавить("Склад");

ТаблицаРезультатов.Колонки.Добавить("Остаток");

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

НоваяСтрока = ТаблицаРезультатов.Добавить();

НоваяСтрока.Номенклатура = Выборка.Номенклатура;

НоваяСтрока.Склад = Выборка.Склад;

НоваяСтрока.Остаток = Выборка.Остаток;

КонецЦикла;

// Возвращаем результат

Возврат ТаблицаРезультатов;

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

Шаг 4: Создание формы отчета

Чтобы пользователь мог взаимодействовать с отчетом, нужна форма с элементами управления:

  1. В дереве объектов конфигуратора найдите Формы → ОсновнаяФорма
  2. Добавьте элементы:
    • 📅 Поле ввода для ДатаНачала и ДатаОкончания (тип ПолеКалендаря)
    • 🏭 Поле выбора для Склад (тип ПолеВводаСправочника)
    • 🖨️ Кнопку Сформировать с обработчиком события
    • 📊 Табличное поле для вывода результата

Данные запрашиваются с учетом прав пользователя|

Все параметры имеют значения по умолчанию|

Обработаны возможные ошибки (например, отсутствие данных)|

Форма адаптирована под разные разрешения экрана-->

4. Подключение и тестирование отчета

Готовый отчет нужно подключить к базе и проверить его работу. Для этого:

  1. Сохраните файл отчета (например, ОстаткиТоваров.erf) в доступном месте
  2. В пользовательском режиме 1С:Предприятия перейдите в Файл → Открыть и выберите ваш файл
  3. Отчет откроется в отдельном окне. Заполните параметры и нажмите Сформировать
  4. Типичные ошибки при тестировании:

    • Ошибка доступа — проверьте, что у пользователя есть права на чтение регистров накопления
    • Пустой результат — убедитесь, что в запросе правильно указаны параметры и связи между таблицами
    • Долгое выполнение — оптимизируйте запрос, добавив индексы или ограничив период выборки
Как ускорить выполнение тяжелых отчетов?

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

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

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

"ВЫБРАТЬ РАЗРЕШЕННЫЕ

| Номенклатура.Ссылка КАК Номенклатура

|ПОМЕСТИТЬ ВТНоменклатура

|ИЗ

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

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Запрос.Выполнить();

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

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

"ВЫБРАТЬ

| ВТНоменклатура.Номенклатура КАК Номенклатура,

| СУММА(Регистр.ОстаткиТоваров.КоличествоОстаток) КАК Остаток

|ИЗ

| ВТНоменклатура КАК ВТНоменклатура

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК Регистр

| ПО ВТНоменклатура.Номенклатура = Регистр.Номенклатура

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

| ВТНоменклатура.Номенклатура";

Это снизит нагрузку на сервер за счет уменьшения объема обрабатываемых данных.

После успешного тестирования можно сохранять отчет в базе для постоянного использования:

  1. В пользовательском режиме откройте отчет через Файл → Открыть
  2. Нажмите Файл → Сохранить как... и выберите Сохранить в базе
  3. Укажите имя (например, "Остатки товаров по складам") и папку для сохранения
💡

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

5. Оптимизация и доработка отчета

Первая версия отчета редко бывает идеальной. После тестирования обычно требуется:

  • Оптимизация производительности:
    • Добавьте индексы для полей, используемых в условиях ГДЕ
    • Ограничьте период выборки (например, последние 3 месяца вместо "все время")
    • Используйте РАЗРЕШЕННЫЕ и ПОМЕСТИТЬ для сложных запросов
  • 🎨 Улучшение юзабилити:
    • Добавьте подсказки к полям ввода
    • Реализуйте сохранение последних параметров
    • Добавьте возможность экспорта в Excel/PDF
  • 🔒 Безопасность:
    • Проверяйте права пользователя перед выполнением критичных операций
    • Ограничьте доступ к конфиденциальным данным (например, себестоимости)

Пример оптимизированного запроса с учетом прав пользователя:

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

// Проверяем права

Если НЕ Пользователь.Профиль.РазрешеноПросматриватьОстатки Тогда

Предупреждение("У вас недостаточно прав для просмотра этого отчета!");

Возврат;

КонецЕсли;

// Используем временные таблицы для ускорения

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

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

"ВЫБРАТЬ РАЗРЕШЕННЫЕ

| Номенклатура.Ссылка КАК Номенклатура

|ПОМЕСТИТЬ ВТНоменклатура

|ИЗ

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

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления

| И Номенклатура.ЭтотУзел.ПометкаУдаления = ЛОЖЬ";

Запрос.Выполнить();

// Основной запрос с ограничением по дате

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

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

"ВЫБРАТЬ

| ВТНоменклатура.Номенклатура КАК Номенклатура,

| Склады.Наименование КАК Склад,

| СУММА(Регистр.КоличествоОстаток) КАК Остаток

|ИЗ

| ВТНоменклатура КАК ВТНоменклатура

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНачала, &ДатаОкончания) КАК Регистр

| ПО ВТНоменклатура.Номенклатура = Регистр.Номенклатура

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады

| ПО Регистр.Склад = Склады.Ссылка

|ГДЕ

| Регистр.Склад = &Склад

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

| ВТНоменклатура.Номенклатура,

| Склады.Наименование";

// Устанавливаем параметры с проверкой

Если ДатаНачала > ДатаОкончания Тогда

Предупреждение("Дата начала не может быть позже даты окончания!");

Возврат;

КонецЕсли;

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

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

Запрос.УстановитьПараметр("Склад", Склад);

// ... остальной код формирования результата

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

6. Внедрение отчета в рабочую базу

Перед внедрением в рабочую систему выполните следующие шаги:

  1. 📋 Документирование:
    • Создайте инструкцию для пользователей (где найти отчет, как им пользоваться)
    • Опишите параметры отчета и их влияние на результат
    • Укажите возможные ошибки и способы их устранения
  2. 🔄 Тестирование на продуктивных данных:
    • Проверьте работу отчета на полной копии рабочей базы
    • Убедитесь, что отчет не конфликтует с другими обработками
    • Протестируйте производительность при большом объеме данных
  • 📦 Развертывание:
    • Сохраните отчет в базе под понятным именем
    • Настройте права доступа для пользователей
    • Добавьте ссылку на отчет в панели навигации (если нужно)

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

    • Используйте транзакции только там, где это необходимо
    • Минимизируйте время блокировки данных
    • Тестируйте работу отчета при параллельном доступе
    💡

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

    7. Типичные ошибки и их решение

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

    Ошибка Причина Решение
    Отчет не открывается Несовместимая версия платформы или поврежденный файл .erf Проверьте версию 1С и пересохраните файл отчета
    Данные не обновляются Кэширование результатов или ошибка в датах Добавьте Запрос.УстановитьПараметр("ИгнорироватьКэш", Истина);
    Медленная работа Слишком широкий период выборки или отсутствие индексов Ограничьте период и оптимизируйте запрос (см. раздел 5)
    Ошибка доступа Недостаточно прав у пользователя Проверьте роли пользователя в конфигураторе
    Неверные данные Ошибка в логике запроса или неверные связи между таблицами Пошагово проверьте каждый блок запроса в отладчике

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

    • Разбивайте сложные отчеты на несколько более простых
    • Используйте механизм фоновых заданий для длительных операций
    • Ограничивайте глубину истории (например, не более 1 года)
    💡

    Если отчет должен работать с большими объемами данных (более 100 000 строк), рассмотрите возможность использования механизма ПакетныйЗапрос или выгрузки данных в промежуточную базу.

    8. Альтернативные способы создания отчетов

    Помимо классического подхода с использованием 1С:Предприятие, есть и другие способы создания отчетов:

    • 📊 Система компоновки данных (СКД):

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

      Преимущества: быстрота разработки, встроенные возможности группировки и сортировки.

      Недостатки: ограниченная функциональность для нестандартных задач.

    • 🌐 Внешние системы (Power BI, Tableau):

      Интеграция с внешними BI-инструментами через ODBC или REST API.

      Преимущества: мощные возможности визуализации, работа с большими данными.

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

    • 🤖 Генераторы отчетов (FastReport, Stimulsoft):

      Специализированные инструменты для создания отчетов с последующей интеграцией в .

      Преимущества: гибкость дизайна, поддержка сложных визуальных элементов.

      Недостатки: дополнительные затраты на лицензии, необходимость обучения.

    Выбор инструмента зависит от задачи:

    • Для простых отчетов по остаткам или оборотам хватит СКД или стандартного внешнего отчета
    • Для аналитики с визуализацией лучше подойдет Power BI
    • Для документов со сложным дизайном (например, договоров) удобнее FastReport
    Когда стоит использовать СКД вместо программного кода?

    Система компоновки данных (СКД) оптимальна в следующих случаях:

    • Нужно быстро создать простой отчет без программирования
    • Требуется гибкая настройка группировок и сортировок пользователем
    • Отчет строится на основе стандартных регистров (например, обороты по счетам)
    • Нужна возможность сохранять пользовательские настройки отчета

    Однако СКД имеет ограничения:

    • Сложно реализовать нестандартную логику (например, расчеты по алгоритму)
    • Ограниченные возможности по работе с внешними данными
    • Меньшая производительность по сравнению с оптимизированными запросами

    FAQ: Частые вопросы по созданию отчетов в 1С

    ❓ Как сделать отчет с диаграммой?

    Для добавления диаграммы в отчет:

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

    Пример кода для настройки диаграммы:

    Диаграмма = ЭлементыФормы.Диаграмма1;
    

    Диаграмма.ИмяГрафика = "Гистограмма";

    Диаграмма.Заголовок = "Остатки по складам";

    Диаграмма.ИсточникДанных = Новый ИсточникДанныхДиаграммы(ТаблицаРезультатов);

    Диаграмма.Серии.Очистить();

    Серия = Диаграмма.Серии.Добавить();

    Серия.Имя = "Остаток";

    Серия.Значение = Новый ПолеИсточникДанныхДиаграммы("Остаток");

    Серия.Аргумент = Новый ПолеИсточникДанныхДиаграммы("Склад");

    ❓ Можно ли сделать отчет, который будет отправлять данные по email?

    Да, для этого:

    1. Добавьте в форму отчета кнопку "Отправить по email"
    2. Используйте объект Почта для отправки:
    Процедура ОтправитьПоEmail(Команда)
    

    Почта = Новый Почта;

    Сообщение = Почта.СоздатьСообщение();

    Сообщение.Текст = "Отчет по остаткам на " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

    // Прикрепляем отчет в Excel

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

    ТабличныйДокумент.Вывести(ТаблицаРезультатов);

    Вложение = Новый ВложениеФайла(ТабличныйДокумент.СохранитьВФайл(), "Остатки.xlsx");

    Сообщение.Вложения.Добавить(Вложение);

    Сообщение.Адресаты.Добавить("director@company.ru");

    Почта.Отправить(Сообщение);

    Сообщить("Отчет отправлен!");

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

    Внимание: для работы почты нужно настроить параметры SMTP-сервера в (раздел "Администрирование → Настройки почты").

    ❓ Как сделать отчет, который будет работать в веб-клиенте?

    Для совместимости с веб-клиентом:

    • Используйте управляемые формы (обычные формы в веб-клиенте не работают)