Правка внешнего отчёта .erf: Конфигуратор, выгрузка в XML, макеты MXL и запуск через COM
Содержание
Файл 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С:Предприятие»:
- Откройте отчёт.
- Нажмите
Настройки…на командной панели формы. - Переключитесь на расширенный вид настроек — появятся вкладки отборов, полей, сортировок и структуры.
- Добавьте группировку, уберите колонку, поставьте отбор.
- Сохраните как новый вариант отчёта.
Так меняют состав колонок, порядок, условное оформление и группировки. Запрос, вычисляемые поля и код этим способом не трогаются — для них нужен Конфигуратор.
Редактирование ERF в Конфигураторе: модуль, форма, макеты
Базовый сценарий, без которого остальные не работают.
Открыть файл
- Запустите базу в режиме
Конфигуратор. Подойдёт любая база, но лучше копия рабочей с той же конфигурацией. - Выберите
Файл → Открытьи укажите файл.erf. - Откроется окно внешнего отчёта: слева дерево (реквизиты, табличные части, формы, макеты), справа свойства.
Пароль от базы и права администратора для самого открытия файла не нужны. Нужен только запуск Конфигуратора.
Что где править
| Что меняем | Где в дереве | Инструмент |
|---|---|---|
| Запрос, поля, ресурсы, параметры | Макеты → схема компоновки | Конструктор схемы компоновки данных |
| Логику расчёта, обработчики | Кнопка «Модуль объекта» в окне отчёта | Редактор модуля |
| Кнопки и поля на экране | Формы → нужная форма | Редактор управляемой формы |
| Печатный бланк, шапку | Макеты → табличный документ | Табличный редактор |
| Название в списке отчётов | Свойства корневого объекта: Синоним | Палитра свойств |
Двойной щелчок по схеме компоновки открывает конструктор. На вкладке «Наборы данных» правится запрос (в нём доступен «Конструктор запроса»), на «Вычисляемые поля» и «Ресурсы» — формулы и итоги, на «Настройки» — вариант по умолчанию.
Табличный макет открывается как обычный табличный документ. Именованные области (Шапка, Строка, Подвал) не переименовывайте, если на них ссылается код: модуль ищет области по имени, и после переименования отчёт упадёт при формировании.
Сохранить и проверить
Файл → СохранитьилиCtrl+S. Чтобы сохранить под другим именем —Файл → Сохранить как….- Проверьте модуль:
Отладка → Проверить синтаксисили кнопка проверки модуля на панели редактора. - Запустите отладку (
F5), в пользовательском режиме откройте этот же файл черезФайл → Открытьи сформируйте отчёт.
Платформа сохраняет ERF в формате своей версии. Если отчёт будут открывать на базе с платформой старше вашей сборки (по номеру — ниже), сохраняйте файл на той же или более ранней сборке, иначе у пользователей возможна ошибка чтения.
Отчёт уже зарегистрирован в базе
В типовых конфигурациях на БСП внешний отчёт часто подключён через справочник дополнительных отчётов. Тогда в базе хранится его копия, и правка файла на диске ничего не меняет.
| Конфигурация | Где список |
|---|---|
| Бухгалтерия 3.0 | Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки |
| ЗУП 3.1 | Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки |
| Управление торговлей 11 | НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки |
Порядок:
- Откройте карточку отчёта в списке.
- Командой выгрузки в файл (в меню
Ещёкарточки) сохраните ERF на диск. - Отредактируйте его в Конфигураторе.
- В той же карточке выполните загрузку из файла и нажмите
Записать и закрыть.
Разделы, команды и пользователи, которым назначен отчёт, сохранятся. Сбросятся они, только если вы изменили функцию СведенияОВнешнейОбработке() в модуле объекта: БСП при загрузке перечитывает регистрационные данные.
Не меняйте в СведенияОВнешнейОбработке() вид обработки и идентификаторы команд без нужды. Пользовательские варианты и размещение в разделах могут потеряться, и настраивать их придётся заново.
Конвертация 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-соединение и выполняет отчёт на её стороне.
Подготовка:
- Зарегистрируйте COM-компонент от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.25.1445\bin\comcntr.dll" - Разрядность скрипта должна совпадать с разрядностью платформы: 64-битный Python работает с 64-битным
comcntr.dll. - Заведите в базе отдельного пользователя для автоматического запуска.
Пример на 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 | Результат отчёта, сохранённый для Excel | Excel, LibreOffice | Да |
Практические выводы:
- 🔁 Внешний отчёт можно открыть как обработку и наоборот через Конфигуратор, но тип объекта при этом не меняется. Чтобы превратить EPF в ERF, создают новый внешний отчёт и переносят в него реквизиты, макеты и код.
- 📑 Если нужно поменять только печатный бланк типового документа, ERF не нужен: в БСП есть замена макета печатной формы в пользовательском режиме.
- 🧱 Если правка касается типового отчёта конфигурации, а не внешнего, делайте её через расширение, а не снятием с поддержки. Внешний ERF при этом не участвует.