Правка внешнего отчёта .erf: Конфигуратор, выгрузка в XML, макеты MXL и запуск через COM

· 10 мин

Содержание

Файл ERF редактируют в Конфигураторе: Файл → Открыть, выбрать .erf, внести правки в модуль, форму, схему компоновки или макет и сохранить (Ctrl+S). Если отчёт подключён в базе через «Дополнительные отчёты и обработки», правьте не исходный файл с диска, а выгруженную из карточки копию, потом загрузите её обратно. Для командной работы и Git файл раскладывают в XML-исходники, а печатный макет из ERF можно отдельно сохранить в MXL.

Выбор способа зависит от задачи. Поменять отбор или группировку часто можно прямо в пользовательском режиме, без Конфигуратора. Код, запрос и макет — только Конфигуратор или 1С:EDT. Пакетная выгрузка и автоматический запуск — командная строка и COM-соединение.

Что лежит внутри ERF и почему его не открыть «Блокнотом»

ERF (External Report File) — внешний отчёт 1С:Предприятия 8. По устройству это тот же контейнер, что у внешней обработки .epf и у файла конфигурации .cf: двоичный файл, разбитый на сжатые блоки. В текстовом редакторе вы увидите мусор, а любое сохранение из «Блокнота» испортит структуру, и платформа файл больше не откроет.

Что хранится внутри:

  • 📄 корневой объект с реквизитами и табличными частями;
  • 🧩 модуль объекта и модули форм — код на встроенном языке;
  • 🖼️ формы — основная форма отчёта, форма настроек, форма варианта;
  • 📊 макеты — схема компоновки данных (СКД), табличные документы (те самые макеты в формате MXL), текстовые, HTML и двоичные данные;
  • ⚙️ свойство «Основная схема компоновки данных» — то, что отличает отчёт от обработки.

ERF не хранит данных. В нём только описание: какой запрос выполнить и как вывести результат. Поэтому «прочитать данные из ERF» на деле означает «запустить отчёт на конкретной базе и забрать результат».

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

Что можно поменять без Конфигуратора

Если отчёт построен на СКД, многое настраивается в режиме «1С:Предприятие»:

  1. Откройте отчёт.
  2. Нажмите Настройки… на командной панели формы.
  3. Переключитесь на расширенный вид настроек — появятся вкладки отборов, полей, сортировок и структуры.
  4. Добавьте группировку, уберите колонку, поставьте отбор.
  5. Сохраните как новый вариант отчёта.

Так меняют состав колонок, порядок, условное оформление и группировки. Запрос, вычисляемые поля и код этим способом не трогаются — для них нужен Конфигуратор.

Что нужно изменить в отчёте?

Редактирование ERF в Конфигураторе: модуль, форма, макеты

Базовый сценарий, без которого остальные не работают.

Открыть файл

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

Пароль от базы и права администратора для самого открытия файла не нужны. Нужен только запуск Конфигуратора.

Что где править

Что меняемГде в деревеИнструмент
Запрос, поля, ресурсы, параметрыМакеты → схема компоновкиКонструктор схемы компоновки данных
Логику расчёта, обработчикиКнопка «Модуль объекта» в окне отчётаРедактор модуля
Кнопки и поля на экранеФормы → нужная формаРедактор управляемой формы
Печатный бланк, шапкуМакеты → табличный документТабличный редактор
Название в списке отчётовСвойства корневого объекта: СинонимПалитра свойств

Двойной щелчок по схеме компоновки открывает конструктор. На вкладке «Наборы данных» правится запрос (в нём доступен «Конструктор запроса»), на «Вычисляемые поля» и «Ресурсы» — формулы и итоги, на «Настройки» — вариант по умолчанию.

Табличный макет открывается как обычный табличный документ. Именованные области (Шапка, Строка, Подвал) не переименовывайте, если на них ссылается код: модуль ищет области по имени, и после переименования отчёт упадёт при формировании.

Сохранить и проверить

  1. Файл → Сохранить или Ctrl+S. Чтобы сохранить под другим именем — Файл → Сохранить как….
  2. Проверьте модуль: Отладка → Проверить синтаксис или кнопка проверки модуля на панели редактора.
  3. Запустите отладку (F5), в пользовательском режиме откройте этот же файл через Файл → Открыть и сформируйте отчёт.

Платформа сохраняет ERF в формате своей версии. Если отчёт будут открывать на базе с платформой старше вашей сборки (по номеру — ниже), сохраняйте файл на той же или более ранней сборке, иначе у пользователей возможна ошибка чтения.

Отчёт уже зарегистрирован в базе

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

КонфигурацияГде список
Бухгалтерия 3.0Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
ЗУП 3.1Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
Управление торговлей 11НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки

Порядок:

  1. Откройте карточку отчёта в списке.
  2. Командой выгрузки в файл (в меню Ещё карточки) сохраните ERF на диск.
  3. Отредактируйте его в Конфигураторе.
  4. В той же карточке выполните загрузку из файла и нажмите Записать и закрыть.

Разделы, команды и пользователи, которым назначен отчёт, сохранятся. Сбросятся они, только если вы изменили функцию СведенияОВнешнейОбработке() в модуле объекта: БСП при загрузке перечитывает регистрационные данные.

Не меняйте в СведенияОВнешнейОбработке() вид обработки и идентификаторы команд без нужды. Пользовательские варианты и размещение в разделах могут потеряться, и настраивать их придётся заново.

Конвертация ERF в XML и макетов — в MXL

ERF → набор XML-файлов

Двоичный контейнер неудобен для Git: в истории видно только «файл изменён». Поэтому отчёт раскладывают на исходники — XML-описания, модули .bsl и файлы макетов.

Интерактивно: в окне открытого внешнего отчёта щёлкните правой кнопкой по корневому элементу дерева и выберите Выгрузить в файлы…. Обратная операция — Загрузить из файлов… в том же меню.

Пакетно — из командной строки Конфигуратора:

"C:\Program Files\1cv8\8.3.25.1445\bin\1cv8.exe" DESIGNER /F "C:\Bases\Copy" /N "Admin" /P "" ^
  /DumpExternalDataProcessorOrReportToFiles "C:\src\Ostatki\Ostatki.xml" "C:\erf\Ostatki.erf" ^
  /Out "C:\logs\dump.log"

Сборка обратно:

"C:\Program Files\1cv8\8.3.25.1445\bin\1cv8.exe" DESIGNER /F "C:\Bases\Copy" /N "Admin" /P "" ^
  /LoadExternalDataProcessorOrReportFromFiles "C:\src\Ostatki\Ostatki.xml" "C:\erf\Ostatki.erf" ^
  /Out "C:\logs\load.log"

Первый путь — корневой XML-файл выгрузки, второй — сам ERF. Номер платформы в пути подставьте свой. Ошибки пишутся в файл из ключа /Out, на экран ничего не выводится.

В 1С:EDT внешний отчёт импортируется в проект и правится как исходники, без промежуточной выгрузки. Это удобно, если над отчётом работают несколько человек.

Макет из ERF → отдельный MXL

Табличный макет внутри ERF — это табличный документ. Достать его можно двумя способами.

Вручную: откройте макет двойным щелчком в Конфигураторе, сделайте его окно активным и через меню Файл сохраните копию на диск, выбрав тип «Табличный документ (*.mxl)». Другой путь: выделите все ячейки макета, скопируйте и вставьте в новый табличный документ (Файл → Новый → Табличный документ), затем сохраните его.

Программно — если макетов много или нужна регулярная выгрузка. Код выполняется на сервере или в толстом клиенте, в тонком клиенте ВнешниеОтчеты.Создать недоступен:

// Выгрузка всех табличных макетов внешнего отчёта в MXL
Отчет = ВнешниеОтчеты.Создать("C:\erf\Ostatki.erf", Ложь);

Для Каждого ОписаниеМакета Из Отчет.Метаданные().Макеты Цикл
    Если ОписаниеМакета.ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТабличныйДокумент Тогда
        Продолжить;
    КонецЕсли;
    Макет = Отчет.ПолучитьМакет(ОписаниеМакета.Имя);
    Макет.Записать("C:\mxl\" + ОписаниеМакета.Имя + ".mxl", ТипФайлаТабличногоДокумента.MXL);
КонецЦикла;

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

Обратный путь «MXL → ERF» не существует как конвертация. MXL вставляется в отчёт новым макетом: в дереве Макеты → Добавить, тип «Табличный документ», затем содержимое копируется из открытого MXL.

Как запустить ERF через COM и забрать результат

Задача из практики: каждое утро формировать внешний отчёт и класть результат в папку или отправлять почтой. Для этого внешний скрипт подключается к базе через COM-соединение и выполняет отчёт на её стороне.

Подготовка:

  1. Зарегистрируйте COM-компонент от имени администратора:
    regsvr32 "C:\Program Files\1cv8\8.3.25.1445\bin\comcntr.dll"
    
  2. Разрядность скрипта должна совпадать с разрядностью платформы: 64-битный Python работает с 64-битным comcntr.dll.
  3. Заведите в базе отдельного пользователя для автоматического запуска.

Пример на Python (нужен пакет pywin32). Имена методов в COM доступны в английском варианте:

import win32com.client

connector = win32com.client.Dispatch("V83.COMConnector")
base = connector.Connect('File="C:\\Bases\\Buh";Usr="Robot";Pwd="secret"')

report = base.ExternalReports.Create(r"C:\erf\Ostatki.erf", False)
doc = base.NewObject("SpreadsheetDocument")
report.ComposeResult(doc)          # отчёт на СКД с настройками по умолчанию
doc.Write(r"C:\out\ostatki.xlsx", base.SpreadsheetDocumentFileType.XLSX)

ComposeResult (СкомпоноватьРезультат) работает для отчётов с основной схемой компоновки. Если отчёт формирует таблицу собственным кодом, вызывайте экспортную процедуру его модуля, которую предусмотрел разработчик.

COM-соединение исполняет код на стороне сервера 1С. В клиент-серверной базе путь к ERF и папка для результата должны быть доступны процессу сервера 1С и его учётной записи, а не только вашему компьютеру.

Каждое COM-подключение занимает лицензию, как обычный сеанс. Закрывайте соединение после работы: в Python достаточно обнулить переменные report, doc, base и завершить скрипт.

Ошибки при открытии и сохранении ERF

Диагностика: выберите симптом

Если ERF не открывается совсем — «файл повреждён» или пустое окно — проверьте размер файла. Ноль байт или несколько килобайт у отчёта с макетами означают, что файл обрезан при копировании. Восстановить такой контейнер штатно нельзя. Ищите предыдущую копию: в карточке дополнительного отчёта, в почте, в Git, в резервной копии базы, если отчёт был зарегистрирован.

ERF, EPF, MXL и макет конфигурации: чем отличаются

Путаница между форматами — частая причина вопроса «как открыть». Сравнение:

ФорматЧто этоЧем открыть и правитьХранит данные
.erfВнешний отчёт: код, СКД, формы, макетыКонфигуратор, 1С:EDTНет
.epfВнешняя обработка: то же, но без основной схемы компоновкиКонфигуратор, 1С:EDTНет
.mxlТабличный документ: готовая таблица или бланк1С:Предприятие, Конфигуратор, бесплатная программа «1С:Предприятие — Работа с файлами»Да, то, что в него выведено
Макет в конфигурацииТабличный документ внутри .cf или расширенияКонфигуратор; часть типовых макетов — в пользовательском режиме через «Макеты печатных форм»Нет
.xlsxРезультат отчёта, сохранённый для ExcelExcel, LibreOfficeДа

Практические выводы:

  • 🔁 Внешний отчёт можно открыть как обработку и наоборот через Конфигуратор, но тип объекта при этом не меняется. Чтобы превратить EPF в ERF, создают новый внешний отчёт и переносят в него реквизиты, макеты и код.
  • 📑 Если нужно поменять только печатный бланк типового документа, ERF не нужен: в БСП есть замена макета печатной формы в пользовательском режиме.
  • 🧱 Если правка касается типового отчёта конфигурации, а не внешнего, делайте её через расширение, а не снятием с поддержки. Внешний ERF при этом не участвует.

Частые вопросы

Можно ли редактировать ERF без Конфигуратора?
Код, запрос и макеты — нет, нужен Конфигуратор или 1С:EDT. Колонки, отборы и группировки отчёта на СКД меняются в режиме «1С:Предприятие» через настройки и сохраняются вариантом.
Нужна ли для правки ERF рабочая база?
Нет. Подойдёт копия с той же конфигурацией. В рабочей базе удобнее только проверять результат на реальных данных.
Как узнать, в какой базе зарегистрирован отчёт?
Откройте список дополнительных отчётов и обработок и найдите отчёт по наименованию. Если его там нет, пользователи открывают файл с диска.
Как сравнить две версии одного ERF?
Выгрузите обе версии в XML-файлы и сравните папки любой программой сравнения или через Git. Модули окажутся в обычных текстовых файлах, разница будет видна построчно.
Почему отчёт через COM работает, а у пользователя нет?
COM-скрипт обычно запускается под пользователем с полными правами и на стороне сервера. У рядового пользователя может не хватать прав на объекты из запроса или на открытие внешних отчётов.