Свой отчет без изменения конфигурации: файл .erf, СКД и выгрузка данных
Содержание
Внешний отчет
1С создают в Конфигураторе командой Файл → Новый… → Внешний отчет, собирают на схеме компоновки данных (СКД) и сохраняют отдельным файлом с расширением .erf. Пользователь открывает его в режиме 1С:Предприятие через Главное меню → Файл → Открыть или регистрирует в справочнике дополнительных отчетов. Конфигурацию при этом не трогают, поэтому типовая база остаётся на поддержке и обновляется без слияний.
Простой отчет по продажам за период собирается за 20–30 минут. Ниже — порядок действий для 1С 8.3 с интерфейсом «Такси», пример запроса, код выгрузки и разбор ошибок, на которых спотыкаются чаще всего.
Что такое внешний отчет 1С и когда он лучше встроенного
Внешний отчет — это объект конфигурации, вынесенный в отдельный файл. У него есть модуль объекта, формы, макеты и реквизиты, как у обычного отчета. Разница в том, что живёт он вне базы и подключается по требованию.
Когда внешний отчет — правильный выбор:
- 📊 нужен разовый или узкий отчет для одного отдела, менять ради него конфигурацию нет смысла;
- 🔒 база типовая и стоит на поддержке, а снимать её с поддержки нельзя;
- 🧪 отчет нужно отладить на копии и только потом отдать пользователям;
- 📦 один и тот же файл используют в нескольких базах с одинаковой конфигурацией.
Сравнение с другими способами доработки:
| Способ | Когда подходит | Ограничения |
|---|---|---|
Внешний отчет .erf | Отчеты под конкретную задачу, быстрые правки | Нужно право на открытие внешних файлов; при обновлении конфигурации проверять запрос |
Расширение конфигурации .cfe | Отчет должен быть в меню у всех и вызывать общие модули | Сложнее в разработке, обновляется вместе с базой |
| Изменение основной конфигурации | Собственная нетиповая разработка | Типовая база теряет простое обновление |
Если отчет нужен всем пользователям каждый день, его удобнее зарегистрировать как дополнительный (см. раздел о подключении) или перенести в расширение. Файл .erf, который носят по сетевым папкам, быстро размножается на версии.
Что проверить перед тем, как делать внешний отчет
Подготовка занимает пять минут, но экономит час поиска, почему файл не открывается.
- Доступ к Конфигуратору. Внешний отчет создаётся и редактируется только там. Конфигуратор открывают для любой базы — можно взять пустую или учебную с той же конфигурацией.
- Права пользователя в рабочей базе. Чтобы открыть файл через
Файл → Открыть, нужно право «Интерактивное открытие внешних отчетов и обработок». В типовых конфигурациях оно входит в профиль администратора; обычным пользователям его обычно не дают. - Версия платформы. Делайте отчет в той же версии платформы, на которой работает база, или в версии с меньшим номером. Файл, сохранённый более новой платформой, может не открыться на старой.
- Копия базы для отладки. Сам отчет данные не меняет, но тяжёлый запрос в рабочее время нагружает сервер. Первые прогоны делайте на копии.
- Знание структуры данных. Откройте в Конфигураторе дерево метаданных и найдите регистр или документ, из которого берёте данные. Для бухгалтерских отчетов в БП 3.0 это обычно регистр бухгалтерии
Хозрасчетный.
Пошагово: делаем внешний отчет 1С в Конфигураторе
Разберём пример — отчет «Продажи по контрагентам и номенклатуре» для 1С:Бухгалтерии 3.0 за выбранный период.
Шаг 1. Создайте файл отчета
- Запустите базу в режиме Конфигуратор.
- Выберите
Файл → Новый…, в списке — «Внешний отчет». - В открывшемся окне задайте Имя латиницей или кириллицей без пробелов, например
ПродажиПоКонтрагентам, и Синоним — так отчет будет называться у пользователя.
Шаг 2. Создайте схему компоновки данных
В окне отчета нажмите кнопку «Открыть схему компоновки данных». Платформа предложит создать макет — соглашайтесь. Макет получит имя ОсновнаяСхемаКомпоновкиДанных и сразу станет основной схемой отчета.
Шаг 3. Добавьте набор данных и запрос
На вкладке «Наборы данных» нажмите зелёный плюс и выберите «Добавить набор данных — запрос». Запрос можно собрать конструктором или вставить готовый текст:
ВЫБРАТЬ
РеализацияТовары.Ссылка.Контрагент КАК Контрагент,
РеализацияТовары.Номенклатура КАК Номенклатура,
РеализацияТовары.Количество КАК Количество,
РеализацияТовары.Сумма КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
ГДЕ
РеализацияТовары.Ссылка.Проведен
И РеализацияТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
После ввода запроса СКД сама заполнит список полей и создаст параметры НачалоПериода и КонецПериода.
Шаг 4. Отметьте ресурсы
На вкладке «Ресурсы» перенесите поля Количество и Сумма. Выражение по умолчанию — Сумма(...). Без этого шага итоги по группировкам не посчитаются, а числа будут выводиться только в детальных строках.
Шаг 5. Настройте параметры периода
На вкладке «Параметры» есть приём, который знает каждый, кто хоть раз ловил «потерянный» последний день:
- для
КонецПериодав колонке «Выражение» укажитеКонецПериода(&КонецПериода, "День"); - снимите флажок «Ограничение доступности», чтобы параметр был виден пользователю.
Без выражения для конца периода отчет за 01.01–31.01 не покажет документы за 31 января: пользователь выбирает дату, а платформа подставляет 31.01 00:00:00.
Шаг 6. Соберите вариант отчета
На вкладке «Настройки»:
- Нажмите правой кнопкой на «Отчет» и выберите «Новая группировка», поле —
Контрагент. - Внутри неё добавьте группировку
Номенклатура. - На вкладке «Выбранные поля» внизу отметьте
КоличествоиСумма. - Параметры
НачалоПериодаиКонецПериодана вкладке «Параметры» отметьте и в свойствах элемента пользовательских настроек включите «Включать в пользовательские настройки» — тогда период появится прямо на форме.
Шаг 7. Сохраните и проверьте
Нажмите Ctrl+S и сохраните файл, например D:\Отчеты\ПродажиПоКонтрагентам.erf. Запустите базу в режиме 1С:Предприятие, откройте файл через Главное меню → Файл → Открыть, задайте период и нажмите «Сформировать».
Форму отдельно создавать не нужно: для отчета на СКД платформа строит стандартную форму сама.
Схема компоновки данных во внешнем отчете: что ещё стоит настроить
Пример выше — минимальный каркас. Пользователю обычно нужно больше.
Отборы, которые пользователь меняет сам
На вкладке «Настройки» → «Отбор» добавьте поле Контрагент или Номенклатура и включите его в пользовательские настройки. Отбор появится на форме отчета, и бухгалтер сможет смотреть продажи по одному покупателю, не открывая Конфигуратор.
Вычисляемые поля
Средняя цена продажи в запросе не хранится, но её легко посчитать. На вкладке «Вычисляемые поля» добавьте поле СредняяЦена с выражением ВЫБОР КОГДА Количество = 0 ТОГДА 0 ИНАЧЕ Сумма / Количество КОНЕЦ. На вкладке «Ресурсы» для него задайте выражение ВЫБОР КОГДА Сумма(Количество) = 0 ТОГДА 0 ИНАЧЕ Сумма(Сумма) / Сумма(Количество) КОНЕЦ — тогда в итогах цена будет взвешенной, а не суммой цен.
Несколько вариантов
В одном файле можно держать несколько вариантов: «по контрагентам», «по номенклатуре», «по месяцам». Варианты добавляются на вкладке «Настройки» (список вариантов в левой части), а пользователь переключает их кнопкой выбора варианта на форме.
Условное оформление
На вкладке «Условное оформление» настройте, например, красный шрифт для строк, где Сумма меньше нуля. Это помогает сразу увидеть возвраты и сторно.
Как подключить внешний отчет к базе
Есть два пути, и выбор зависит от того, кто будет им пользоваться.
Разовое открытие файлом
Главное меню → Файл → Открыть и выбор .erf на диске. Подходит администратору и бухгалтеру с правом на открытие внешних файлов. При открытии платформа может показать предупреждение о безопасности — это защита от опасных действий, её можно подтвердить для доверенного файла.
Регистрация как дополнительного отчета
В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) есть справочник дополнительных отчетов и обработок. В БП 3.0 путь: Администрирование → Печатные формы, отчеты и обработки, флажок «Дополнительные отчеты и обработки», затем одноимённая ссылка.
Чтобы файл приняли в справочник, в модуль объекта отчета добавьте экспортную функцию регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
После загрузки в карточке укажите раздел размещения и пользователей. Отчет появится в списке «Дополнительные отчеты» выбранного раздела, а право на открытие внешних файлов пользователям выдавать не придётся.
Если в функции оставить БезопасныйРежим = Истина, код модуля не сможет работать с файлами на диске и COM-объектами. Для выгрузки в файл на сервере режим придётся отключить, и тогда при загрузке программа попросит подтвердить разрешения.
Выгрузка внешнего отчета в Excel, XML и JSON
Excel
Самый простой путь не требует кода. Результат отчета на СКД — табличный документ. На форме отчета есть команда сохранения (значок дискеты или Ещё → Сохранить как), в списке форматов выберите «Лист Excel 2007-…» (.xlsx).
Если выгрузка нужна программно, например по кнопке на собственной форме:
Результат.Записать("D:\Выгрузка\Продажи.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Результат — реквизит формы типа «ТабличныйДокумент».
Данные в таблицу значений
Для XML и JSON нужен не табличный документ, а сами данные. СКД умеет выводить результат в коллекцию значений. Код размещается в модуле объекта отчета:
Функция ПолучитьТаблицуДанных() Экспорт
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Таблица = Новый ТаблицаЗначений;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Вывод.УстановитьОбъект(Таблица);
Вывод.Вывести(Процессор);
Возврат Таблица;
КонецФункции
Так учитываются и отборы, и параметры, которые пользователь выставил на форме.
JSON
Ссылки на справочники и даты напрямую в JSON не пишутся, поэтому их переводим в строку:
Процедура ВыгрузитьВJSON(Таблица, ИмяФайла)
Массив = Новый Массив;
Для Каждого СтрокаТаблицы Из Таблица Цикл
Запись = Новый Структура;
Для Каждого Колонка Из Таблица.Колонки Цикл
Значение = СтрокаТаблицы[Колонка.Имя];
Если ТипЗнч(Значение) = Тип("Число") Или ТипЗнч(Значение) = Тип("Строка") Тогда
Запись.Вставить(Колонка.Имя, Значение);
Иначе
Запись.Вставить(Колонка.Имя, Строка(Значение));
КонецЕсли;
КонецЦикла;
Массив.Добавить(Запись);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(ИмяФайла);
ЗаписатьJSON(ЗаписьJSON, Массив);
ЗаписьJSON.Закрыть();
КонецПроцедуры
Имена колонок должны быть допустимыми ключами структуры — у полей СКД так и есть, если вы не меняли их на имена с пробелами.
XML
Для XML используют объект ЗаписьXML: ОткрытьФайл, затем ЗаписатьНачалоЭлемента, ЗаписатьАтрибут или ЗаписатьТекст, ЗаписатьКонецЭлемента для каждой строки и Закрыть в конце. Логика обхода таблицы та же, что в примере с JSON. Если получатель ждёт строгую схему (XSD), сверяйте имена элементов именно с ней.
Как ускорить медленный внешний отчет
Отчет, который формируется пять минут, пользователи перестают открывать. Основные приёмы:
- ⚡ Условия — в параметры виртуальных таблиц. Для
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет В (&Счета), ...)отбор по счёту и периоду задают в скобках, а не вГДЕ. Тогда платформа не читает лишние записи. - 🔗 Меньше разыменований через точку. Цепочки вида
Документ.Поле.Реквизит.Реквизитпорождают цепочки соединений. Особенно дороги поля составного типа —Регистратор,Субконто1. Если нужно одно поле, используйтеВЫРАЗИТЬ(... КАК Справочник.Контрагенты). - 🧹 Не держите лишние поля «Обязательными». СКД сама выбрасывает из запроса поля, которые не участвуют в настройках варианта. Флажок «Обязательное» на поле отключает эту оптимизацию.
- 🗂 Временные таблицы вместо подзапросов. Тяжёлый подзапрос, который соединяется с основной выборкой, вынесите во временную таблицу с индексом по полю соединения.
- 🚫 Никаких запросов в цикле. Если в модуле отчета для каждой строки результата выполняется отдельный запрос, переделайте его в одно соединение.
- 📅 Ограничение периода по умолчанию. Задайте в параметрах начальное значение — текущий месяц. Иначе первый запуск без периода прочитает всю историю базы.
Найти узкое место помогает замер производительности: в Конфигураторе Отладка → Замер производительности, затем сформируйте отчет. Строка запроса с наибольшим временем видна сразу.
Ошибки при работе с внешним отчетом 1С
Частые вопросы
Можно ли сделать внешний отчет без Конфигуратора?
.erf возможны только в Конфигураторе. Без него можно лишь менять настройки готового отчета на форме: группировки, отборы, поля.Как отладить внешний отчет?
Отладка → Начать отладку, откройте в нём файл отчета и поставьте точку останова в модуле. Затем в запущенном сеансе откройте тот же файл и сформируйте отчет.Работает ли внешний отчет в веб-клиенте и в облаке?
Чем внешний отчет отличается от внешней обработки?
.epf.