Внешние отчеты на базе Системы Компоновки Данных (СКД) — один из самых мощных инструментов в арсенале 1С-разработчика. Они позволяют выгружать данные из базы в гибком формате, настраивать сложные группировки, применять отборы и вычисляемые поля — всё это без модификации типовой конфигурации. Но как правильно создать такой отчет с нуля, чтобы он работал стабильно и соответствовал бизнес-задачам?

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

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

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

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

  • 🖥️ 1С:Предприятие 8.3 (версия не ниже 8.3.10 — в более ранних могут отсутствовать ключевые функции СКД)
  • 🔧 Конфигуратор с правами администратора (для создания внешних обработок)
  • 📁 Пустая папка на диске для сохранения внешних файлов (лучше заранее исключить её из антивирусного сканирования)
  • 📊 Тестовая база с актуальными данными (не работайте на боевой базе!)

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

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

📊 Какой конфигурацией 1С вы чаще всего работаете?
1С:Бухгалтерия 3.0
1С:Управление торговлей 11
1С:Зарплата и управление персоналом
1С:ERP
Другая конфигурация

Создание заготовки внешнего отчета в конфигураторе

Начнём с создания пустой обработки, которая станет основой для нашего отчета. Следуйте шагам:

  1. Откройте конфигуратор и выберите Файл → Новый.
  2. В списке объектов выберите Внешняя обработка и нажмите OK.
  3. В открывшемся окне перейдите на вкладку Основные и заполните поля:
    • Имя: ВнешнийОтчетПоПродажам (пример)
    • Синоним: Отчет по продажам (внешний)
    • Комментарий: краткое описание назначения отчета
  • Сохраните файл в подготовленную папку с расширением .epf (например, ОтчетПоПродажам.epf).
  • Теперь у вас есть заготовка, но она пока не содержит логики отчета. Чтобы добавить СКД, перейдите на вкладку Формы и создайте новую форму с типом Управляемая форма. Именно здесь будет размещаться компонента системы компоновки данных.

    Создана новая внешняя обработка|

    Заполнены основные реквизиты (имя, синоним)|

    Сохранен файл с расширением .epf|

    Создана управляемая форма для СКД-->

    Настройка схемы компоновки данных (СКД)

    Схема компоновки данных — это "сердце" вашего отчета. Она определяет, какие данные будут выгружаться, как они будут группироваться и отображаться. Чтобы её настроить:

    1. На вкладке Формы дважды кликните по созданной форме, чтобы открыть её в редактор.
    2. Добавьте на форму элемент Поле компоновки данных (найдёте его в палитре элементов).
    3. В свойствах поля укажите:
      • Имя: КомпоновщикДанных
      • Тип компоновщика данных: КомпоновщикНастроек
  • Перейдите на вкладку Компоновка данных и нажмите Конструктор схемы компоновки данных.
  • В конструкторе вам предстоит:

    1. Добавить наборы данных (запросы к базе). Например, для отчета по продажам это может быть запрос к документу РеализацияТоваровУслуг с присоединением справочника Номенклатура.
    2. Определить ресурсы (показатели, которые будут рассчитываться: сумма, количество, средняя цена и т.д.).
    3. Настроить параметры (период, организация, ответственный и другие фильтры).
    4. Задать структуру отчета: группировки, сортировки, условное оформление.

    Пример простого запроса для набора данных:

    ВЫБРАТЬ
    

    РеализацияТоваровУслуг.Дата КАК Дата,

    РеализацияТоваровУслуг.Номер КАК Номер,

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

    РеализацияТоваровУслуг.СуммаДокумента КАК Сумма

    ИЗ

    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

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

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

    ГДЕ

    РеализацияТоваровУслуг.Проводен

    ВЫБРАТЬ ...
    

    ПОМЕСТИТЬ ВТ_Данные

    -->

    Добавление параметров и пользовательских настроек

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

    1. В конструкторе схемы компоновки данных перейдите на вкладку Параметры.
    2. Нажмите Добавить и заполните свойства параметра:
      • Имя: ПериодНачала
      • Тип: Дата
      • Заголовок: Период с
      • Значение по умолчанию: НачалоДня(ТекущаяДата())
    3. Аналогично добавьте параметр ПериодОкончания со значением по умолчанию КонецДня(ТекущаяДата()).
    4. В наборе данных модифицируйте запрос, добавив условие по периоду:
      ГДЕ
      

      РеализацияТоваровУслуг.Дата МЕЖДУ &ПериодНачала И &ПериодОкончания

    5. Для удобства пользователей можно сгруппировать параметры на форме. Например, разместить их в отдельной группе с заголовком "Период" или "Фильтры". Также полезно добавить кнопку "Сформировать", которая будет запускать компоновку данных:

      Процедура КнопкаСформироватьНажатие(Элемент)
      

      КомпоновщикДанных.Выполнить();

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

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

      Процедура ПередВыполнениемКомпоновкиДанных(Отказ, ПараметрыКомпоновкиДанных)
      

      Если ПараметрыКомпоновкиДанных.Параметры.ПериодНачала > ПараметрыКомпоновкиДанных.Параметры.ПериодОкончания Тогда

      Сообщить("Дата начала не может быть позже даты окончания!", СтатусСообщения.Важное);

      Отказ = Истина;

      КонецЕсли;

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

      Как добавить выпадающий список для параметра?

      Чтобы параметр отображался как выпадающий список (например, для выбора организации), в свойствах параметра укажите:

      • Тип значения: СправочникСсылка.Организации
      • Форма выбора: Истина
      • Множественный выбор: Ложь (если нужно выбрать одну организацию)

      В коде запроса используйте конструкцию В(&Параметр) для фильтрации.

      Оптимизация производительности отчета

      Одна из самых распространённых проблем при работе с СКД — медленная скорость формирования отчета, особенно при больших объемах данных. Вот ключевые способы оптимизации:

      Проблема Решение Пример кода/настройки
      Долгое выполнение запроса Использовать индексируемые поля в условиях ГДЕ ГДЕ Дата МЕЖДУ &Начало И &Конец (поле Дата должно быть индексировано)
      Слишком много группировок Ограничить количество группировок или использовать иерархию В настройках СКД отключить ненужные группировки на вкладке Структура
      Вычисление ресурсов по большим массивам Перенести расчёты в запрос (например, через СУММА)
      ВЫБРАТЬ
      

      СУММА(СуммаДокумента) КАК Итого

      Медленная компоновка результата Отключить ненужные элементы оформления (цвета, шрифты) На вкладке Другие настройки снять галочку Использовать условное оформление

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

      // Сначала создаём временную таблицу с промежуточными данными
      

      ВЫБРАТЬ

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

      СУММА(РеализацияТоваровУслуг.Количество) КАК Количество

      ИЗ

      Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

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

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

      ГДЕ

      РеализацияТоваровУслуг.Дата МЕЖДУ &ПериодНачала И &ПериодОкончания

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

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

      ПОМЕСТИТЬ ВТ_Продажи

      // Затем используем её в основном запросе

      ВЫБРАТЬ

      ВТ_Продажи.Номенклатура КАК Номенклатура,

      ВТ_Продажи.Количество,

      Номенклатура.Наименование

      ИЗ

      ВТ_Продажи КАК ВТ_Продажи

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

      ПО ВТ_Продажи.Номенклатура = Номенклатура.Ссылка

      💡

      Всегда тестируйте производительность отчета на реальных объемах данных. То, что быстро работает на тестовой базе с 100 документами, может "подвесить" систему на базе с 100 000 записей.

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

      Перед передачей отчета пользователям обязательно проведите тестирование. Начните с проверки:

      • 📅 Корректности работы параметров (например, что отбор по периоду действительно фильтрует данные).
      • 📊 Точности расчётов (сверьте суммы с другими отчётами или регистрами).
      • 🖨️ Вывода на печать (проверьте, что данные не обрезаются и сохраняется форматирование).
      • 🔄 Производительности на больших объёмах данных (имитируйте реальную нагрузку).

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

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

      Типичные ошибки и способы их исправления:

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

      Если отчет работает нестабильно, попробуйте сохранить его в разных форматах:

      • .epf — стандартный формат внешней обработки.
      • .erf — для отчетов (иногда лучше подходит для СКД).
      • .cf — если нужно передать только схему компоновки.
      Сообщить("Начало формирования отчета, параметры: " + ПараметрыКомпоновкиДанных.Параметры.ПериодНачала);
      -->

      Подключение внешнего отчета к базе 1С

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

      1. Через меню "Файл":
        • В пользовательском режиме выберите Файл → Открыть.
        • Укажите путь к файлу .epf или .erf.
        • Отчет откроется в отдельном окне и будет доступен до закрытия сеанса.
    6. Через подключаемые отчеты (для постоянного доступа):
      • В конфигураторе откройте ветку Отчеты.
      • Создайте новый отчет с типом Внешняя обработка.
      • Укажите путь к файлу и сохраните конфигурацию.
    ⚠️ Внимание: При обновлении конфигурации внешние отчеты могут "слететь". Рекомендуется хранить резервную копию файлов и документацию по их подключению.
  • Через расширение конфигурации (для 1С 8.3.14+):
    • Создайте новое расширение (Конфигурация → Поддержка → Расширения конфигурации).
    • Добавьте в него внешний отчет как объект метаданных.
    • Примените расширение к базе.

    Для удобства пользователей можно добавить отчет в панели навигации или рабочий стол. Например, в 1С:Управление торговлей 11 это делается через настройку интерфейса:

    1. Перейдите в Администрирование → Настройка интерфейса.
    2. Выберите роль пользователя (например, Менеджер по продажам).
    3. Добавьте команду для запуска внешнего отчета в раздел Отчеты.
    4. Если отчет должен быть доступен нескольким пользователям, разместите его файл на сетевом диске и настройте права доступа. Альтернатива — встроить отчет непосредственно в конфигурацию (но это потребует модификации типовой базы).

      Как обновить внешний отчет у всех пользователей?

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

      Если отчет подключён через конфигурацию или расширение, потребуется обновление базы.

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

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

      ⚠️ Внимание: Если в отчёте используются ВЫБРАТЬ РАЗЛИЧНЫЕ или ГРУППИРОВКА ПО с большим количеством полей, это может привести к ошибке Переполнение временной памяти. В таких случаях разбейте запрос на части или используйте временные таблицы.
      • 🔄 Зацикливание при компоновке:

        Причина: рекурсивные связи в запросе или бесконечные группировки.

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

      • 📉 Некорректные суммы:

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

        Решение: используйте СУММА непосредственно в запросе, а не в настройках СКД.

      • 🖼️ Искажение макета при печати:

        Причина: неверные настройки страницы или слишком широкие колонки.

        Решение: настройте параметры страницы в схеме компоновки (Формат → Параметры страницы).

      • 🔒 Ошибки доступа:

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

        Решение: проверьте роли и настройки прав в конфигураторе.

      Ещё одна распространённая проблема — несовпадение данных между отчётом и регистрами. Чтобы этого избежать:

      • Всегда указывайте в запросе Проводен = Истина для документов.
      • Используйте те же алгоритмы расчёта, что и в типовых отчётах (например, для СуммаДокумента учитывайте скидки и НДС).
      • Сверяйте результаты с другими источниками (например, с отчётом Ведомость по товарам в УТ 11).

      Если отчет должен работать в тонком клиенте или веб-клиенте, учитывайте их ограничения:

      • Некоторые функции СКД могут быть недоступны в веб-версии.
      • Сложные макеты могут отображаться некорректно.
      • Для печатных форм лучше использовать ТабличныйДокумент вместо ДвоичныеДанные.

      FAQ: Частые вопросы по внешним отчётам СКД

      Можно ли создать внешний отчет СКД без конфигуратора?

      Да, но с ограничениями. Вы можете:

      • Использовать внешние обработки, созданные другими разработчиками (скачанные из интернета или полученные от коллег).
      • Редактировать существующие отчёты в режиме 1С:Предприятие через Все функции → Внешние отчеты (но это не даст полного доступа к коду).

    Однако для создания отчета "с нуля" или глубокой настройки СКД без конфигуратора не обойтись.

    Как передать параметры в внешний отчет из другой обработки?

    Используйте метод УстановитьПараметр перед выполнением компоновки. Пример:

    ВнешнийОтчет = ВнешниеОтчеты.Создать("ПутьКФайлу.epf");
    

    ВнешнийОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьПараметр("ПериодНачала", НачалоДня(ТекущаяДата()));

    ВнешнийОтчет.Сформировать();

    Также можно передавать параметры через Структуру:

    Параметры = Новый Структура();
    

    Параметры.Вставить("ПериодНачала", НачалоДня(ТекущаяДата()));

    ВнешнийОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Загрузить(Параметры);

    Почему внешний отчет не открывается в другой базе?

    Вероятные причины:

    • Разные версии платформы: отчет создан в 1С 8.3.20, а открываете в 8.3.15.
    • Отсутствуют объекты метаданных: в отчёте используются справочники или документы, которых нет в текущей базе.
    • Ошибки в коде: например, обращение к несуществующим реквизитам.
    • Решение: проверьте совместимость версий и структуру метаданных в целевой базе.

    Как экспортировать данные из отчета СКД в Excel?

    Вот универсальный способ:

    1. После формирования отчета получите РезультатКомпоновкиДанных:
    2. Результат = ВнешнийОтчет.КомпоновщикДанных.Выполнить();
    3. Экспортируйте в табличный документ:
    4. Таблица = Результат.Вывести();
      

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

    Для более гибкого экспорта можно использовать ПостроительОтчета:

    Построитель = Новый ПостроительОтчета;
    

    Построитель.Инициализировать(Результат);

    Построитель.ЭкспортироватьВExcel("C:\Отчет.xlsx");

    Можно ли в СКД сделать диаграмму?

    Да, СКД поддерживает визуализацию данных в виде диаграмм. Для этого:

    1. В конструкторе схемы компоновки перейдите на вкладку Другие настройки.
    2. В разделе Диаграммы добавьте новую диаграмму.
    3. Настройте тип диаграммы (например, Гистограмма или Круговая) и укажите данные для отображения.
    4. Пример настройки для гистограммы по продажам:

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

    Ограничение: в тонком клиенте некоторые типы диаграмм могут отображаться некорректно.