Как преобразовать внешнюю обработку (.epf) во внешний отчет (.erf) в 1С:Предприятие 8

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему простое переименование файла не работает?

Разберем ситуацию: многие новички пытаются просто сменить расширение файла с .epf на .erf через проводник Windows. Однако в 1С:Предприятие 8 файлы внешних объектов — это не просто переименованные контейнеры. При попытке открыть такой файл система выдаст ошибку или откроет пустой объект без модулей, форм и реквизитов. Это происходит потому, что внутренняя структура метаданных (заголовки и идентификаторы типов) жестко определяет, является ли объект обработкой или отчетом. Рассмотрим правильные способы конвертации.

Способ 1. Использование конфигурации как промежуточного звена

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

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Откроем дерево метаданных (основную конфигурацию).
  3. Найдем ветку Отчеты. Нажмем правую кнопку мыши и выберем пункт "Вставить внешнюю обработку/отчет".
  4. Выберем наш файл .epf. Обработка появится в дереве метаданных как новый отчет.
  5. Теперь нажмем на этот новый объект правой кнопкой мыши и выберем "Сохранить как внешний отчет, обработку...".
  6. Укажем имя файла и расширение .erf.

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

Способ 2. Ручное создание отчета и копирование объектов

Рассмотрим случай, когда обработка простая и не содержит сложных связей. Мы можем создать файл отчета "с нуля" и перенести в него содержимое.

  1. В конфигураторе выберем меню Файл — Новый — Внешний отчет.
  2. Откроем нашу внешнюю обработку параллельно в этом же конфигураторе.
  3. Перенесем реквизиты: выделим все реквизиты обработки и перетащим их мышкой в окно нового отчета.
  4. Перенесем формы и макеты аналогичным способом.
  5. Скопируем содержимое модуля объекта и модуля формы (CTRL+A, CTRL+C -> CTRL+V).

Важно: При таком подходе часто возникает проблема с основным реквизитом формы. Выясним причину: в обработке основной реквизит формы имеет тип ВнешняяОбработкаОбъект.Имя, а в отчете он должен быть ВнешнийОтчетОбъект.Имя.

Исправление типов в формах

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

  1. Откроем форму уже в новом внешнем отчете.
  2. Перейдем на закладку Реквизиты (в правой части редактора формы).
  3. Найдем основной реквизит (он выделен жирным шрифтом).
  4. В колонке "Тип" нажмем кнопку выбора и вручную укажем ВнешнийОтчетОбъект.ИмяВашегоОтчета.
  5. Посмотрим на список элементов формы: если какие-то поля подчеркнуты красным пунктиром, значит связь с данными потеряна. Нужно в свойствах этих элементов заново выбрать путь к данным.

Корректировка программного кода

При переносе кода необходимо учитывать, что в 1С для отчетов и обработок используются разные менеджеры. Если в вашем коде были вызовы других обработок или обращения к текущему объекту по типу, их нужно заменить. Посмотрим на пример:


// Было во внешней обработке:
ОбъектОбработки = ВнешниеОбработки.Создать(ПутьКФайлу);

// Стало во внешнем отчете:
ОбъектОтчета = ВнешниеОтчеты.Создать(ПутьКФайлу);

Также, если вы используете проверку типов, замените Тип("ВнешняяОбработкаОбъект.Имя") на Тип("ВнешнийОтчетОбъект.Имя"). Несоблюдение этого правила приведет к ошибкам в момент выполнения кода (Runtime errors).

Особенности для конфигураций на базе БСП

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    // Для обработки было:
    // ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОбработки();
    
    // Для отчета должно быть:
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительногоОтчета();
    
    // ... остальной код
    Возврат ПараметрыРегистрации;
КонецФункции

Без этого изменения система не позволит зарегистрировать файл в справочнике "Дополнительные отчеты и обработки" как отчет.

Добавление СКД для работы вариантов

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

Создайте новый макет с типом "Схема компоновки данных", назовите его ОсновнаяСхемаКомпоновкиДанных и укажите его в свойствах отчета на вкладке "Основные". После этого в режиме "1С:Предприятие" у объекта появится кнопка "Изменить вариант" и возможность сохранения пользовательских настроек.

Таким образом, мы рассмотрели полный цикл преобразования обработки в отчет: от манипуляций с файлами до тонкой настройки программного кода и интерфейса.

← На главную