Внешний отчет 1С — это отчёт, который хранится не в конфигурации, а в отдельном файле с расширением .erf. Его открывают через «Файл → Открыть» или загружают в справочник «Дополнительные отчеты и обработки», не меняя типовую конфигурацию. Ниже — как сделать внешний отчет на СКД в 1С 8.3, открыть, хранить и почему он иногда не запускается из-за прав или безопасного режима.
Типичная картина: БП 3.0, УТ 11 или КА 2 стоит на поддержке, а руководителю нужна сводка, которой среди типовых отчётов нет. Новый объект в конфигурации — это включённая возможность изменения и каждое обновление через сравнение и объединение. Файл отчёта обновление не затрагивает, его можно просто переслать заказчику. Внешний вариант хорош, когда:
Прежде чем писать код, проверьте, не решается ли задача настройкой типового или универсального отчета. Все пути собраны в статье «Как сделать отчет в 1С».
| Внешний (.erf) | В конфигурации | В расширении (.cfe) | |
|---|---|---|---|
| Где хранится | Файл на диске или карточка в «Дополнительных отчетах и обработках» | В дереве метаданных конфигурации | В расширении, подключённом к базе |
| Правка типовой | Не нужна | Нужна: включают возможность изменения | Не нужна |
| Обновление типовой | Не мешает; отчёт сломается, только если переименуют таблицы или поля | Каждый релиз — сравнение и объединение | Обычно не мешает; после обновления расширение проверяют |
| Как запускает пользователь | «Файл → Открыть» или команда в разделе (через БСП) | Команда в разделе | Команда в разделе |
| Кто получает доступ | Право на открытие внешних файлов или настройка в карточке | Роли конфигурации | Роли расширения |
| Когда выбирать | Разовые и узкие задачи, проверка идеи | Своя конфигурация без поддержки | Постоянный отчёт в типовой на поддержке |
Отчёт нужен надолго, а типовая на поддержке — делайте его в расширении.
Создание внешнего отчета выполняется в Конфигураторе. Работайте в копии рабочей базы: конструктор запроса показывает таблицы той конфигурации, в которой запущен Конфигуратор, и имена полей совпадут с боевыми.
.erf; у внешней обработки оно другое — .epf.Пример набора данных — проведённые реализации за период. Документ РеализацияТоваровУслуг есть в БП 3.0, УТ 11 и КА 2, но реквизиты в конфигурациях различаются, так что сверьте поля со своей базой.
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
Реализация.Организация КАК Организация,
Реализация.Контрагент КАК Контрагент,
Реализация.СуммаДокумента КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен
И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Группировать в запросе не нужно: суммы по контрагентам посчитает СКД через ресурс Сумма и структуру настроек.
СКД сама создаст параметры НачалоПериода и КонецПериода, но пользователю удобнее выбирать один период. На вкладке «Параметры» добавьте параметр Период с типом «Стандартный период». Для НачалоПериода укажите выражение &Период.ДатаНачала, для КонецПериода — &Период.ДатаОкончания и поставьте обоим «Ограничение доступности». ДатаОкончания указывает на конец дня, поэтому документы последнего числа не потеряются. В «Настройках → Параметры» включите Период в пользовательские настройки — выбор появится на форме отчёта.
Своя форма не нужна: платформа построит её сама, с кнопками «Сформировать» и «Настройки». Подробнее о наборах данных и ресурсах — в статье «СКД 1С: что такое схема компоновки данных». Для проверки запустите отладку (F5) и в клиенте откройте тот же файл через «Файл → Открыть» — точки останова в модуле отчёта сработают.
В интерфейсе «Такси» откройте главное меню, затем «Файл → Открыть» и выберите файл .erf. Отчёт откроется в отдельном окне; в следующем сеансе файл придётся выбирать снова. Если открыть не получается, причин обычно две:
Отчёт, открытый через меню, работает без безопасного режима: его код может то же, что код конфигурации, в пределах прав пользователя.
Файл на сетевом диске — самый простой путь, но через полгода там лежат три копии, и никто не помнит, какая рабочая. В конфигурациях на БСП (БП 3.0, УТ 11, КА 2, ERP, УНФ) есть справочник «Дополнительные отчеты и обработки»: файл загружается в базу, отчёт появляется командой в выбранном разделе, размещение и быстрый доступ настраиваются в карточке. Пользователям не нужно право на интерактивное открытие внешних отчётов: БСП подключает файл программно.
Механизм включается в «Администрирование → Печатные формы, отчеты и обработки» флажком «Дополнительные отчеты и обработки». Чтобы файл приняли, в модуле объекта отчёта нужна экспортная функция СведенияОВнешнейОбработке():
// Модуль объекта внешнего отчета.
// Регистрация в справочнике «Дополнительные отчеты и обработки» (БСП 2.x/3.x).
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = "Реализации по контрагентам";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ПараметрыРегистрации.Информация = "Проведенные реализации за период в разрезе организаций и контрагентов";
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Реализации по контрагентам";
Команда.Идентификатор = "ОткрытьОтчет";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#КонецЕсли
Разбор ключевых строк:
ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1") — функция общего модуля БСП возвращает заготовку структуры. Параметр — версия БСП, под формат которой написан код, а не версия конфигурации. Вызов есть в БСП 2.x и 3.x; в своей базе сверьтесь с модулем.ВидОбработкиДополнительныйОтчет() — глобальный отчёт, его размещают в разделах из карточки. Для отчёта, вызываемого из формы документа, нужен вид ВидОбработкиОтчет() и свойство Назначение.БезопасныйРежим = Истина — запросы работают, а файлы, COM, интернет и привилегированный режим — нет.Версия видна в карточке: увеличивайте её при каждой замене файла.ТипКомандыОткрытиеФормы() — команда просто открывает основную форму отчёта, серверный код при нажатии не вызывается.Новую версию загружайте в ту же карточку, а не создавайте вторую, — размещение и доступ сохранятся. Сохранённые пользователями варианты хранятся в базе, как у типовых отчётов, — см. статью о вариантах отчета.
Иногда отчёт нужно запустить из своей формы — обработки-«лаунчера» или команды расширения. Файл помещается во временное хранилище, на сервере подключается методом ВнешниеОтчеты.Подключить, затем форма открывается по имени объекта.
// Модуль управляемой формы (обработка или команда расширения).
// Команда формы: ОткрытьОтчетИзФайла.
&НаКлиенте
Процедура ОткрытьОтчетИзФайла(Команда)
Оповещение = Новый ОписаниеОповещения("ОткрытьОтчетИзФайлаЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , "", Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОтчетИзФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат; // пользователь закрыл диалог выбора файла
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(НРег(ВыбранноеИмяФайла), ".erf") Тогда
ПоказатьПредупреждение(, "Нужен файл внешнего отчета с расширением .erf");
Возврат;
КонецЕсли;
ИмяОтчета = ПодключитьОтчетНаСервере(Адрес);
ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПодключитьОтчетНаСервере(Адрес)
// Третий параметр - безопасный режим: файлы, COM, сеть
// и привилегированный режим коду отчета недоступны.
Возврат ВнешниеОтчеты.Подключить(Адрес, , Истина);
КонецФункции
НачатьПомещениеФайла — асинхронный метод, работает и без модальных окон. С 8.3.15 для новых разработок есть НачатьПомещениеФайлаНаСервер, а с 8.3.18 — ПоместитьФайлНаСерверАсинх, но и старый вариант продолжает работать.ВнешниеОтчеты.Подключить вызывается на сервере: в тонком и веб-клиенте менеджера внешних отчётов нет. Метод возвращает имя объекта из поля «Имя».Истина, но явная запись не даст кому-то «починить» отчёт заменой на Ложь.".Форма" — основная форма, в том числе сгенерированная автоматически.Программное подключение не требует права на интерактивное открытие, поэтому держите такой код в безопасном режиме и давайте команду только тем, кому она нужна.
Отчёт в безопасном режиме читает данные с правами текущего пользователя и с учётом ограничений на уровне записей. Запрещено то, что выходит за пределы базы:
При такой попытке платформа прерывает выполнение с ошибкой «Установлен безопасный режим. Выполнение операции запрещено». Лучший выход — убрать лишнее: отчёту на СКД файлы и COM почти не нужны. Если без них никак, в регистрационных сведениях ставят БезопасныйРежим = Ложь, а решение о загрузке принимает администратор; при включённых профилях безопасности понадобятся ещё и разрешения.
Период выражением, у периода снят флажок использования или даты не выбраны.Вопрос(), Предупреждение() или ПоместитьФайл(). Замените на ПоказатьВопрос, ПоказатьПредупреждение, НачатьПомещениеФайла.ВнешнийОтчет.Имя), а не к имени файла. Переименовали объект — настройки «потерялись»; два разных отчёта с одинаковым именем делят одни настройки.Отчёт (.erf) заточен под чтение данных: основная схема компоновки, настройки, варианты и готовая форма с кнопкой «Сформировать». Обработка (.epf) нужна для действий — загрузки, групповой правки. Таблицу можно вывести и из обработки, но отборы придётся программировать самому.
Нет, внешний отчёт конфигурацию не меняет. Сломаться он может, только если в новом релизе переименуют или удалят используемые таблицы и поля.
Сам файл сохраняется в Конфигураторе через «Файл → Сохранить как». Отчёт из справочника дополнительных отчётов выгружается на диск из карточки. Сформированную таблицу сохраняют из формы отчёта — в xlsx, pdf, mxl и другие форматы.
Файл .erf двоичный. Начиная с платформы 8.3.8 (и 8.3.7.1759) Конфигуратор раскладывает его в XML ключом командной строки /DumpExternalDataProcessorOrReportToFiles и собирает обратно ключом /LoadExternalDataProcessorOrReportFromFiles. В 1C:EDT внешний отчёт сразу ведётся в исходниках.
Если отчёт собирает данные из нескольких регистров, должен сходиться с типовыми отчётами или переживать обновления без правок, быстрее отдать его программисту — смотрите услугу «Отчеты и обработки 1С». Разместите задачу — оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.