Как сохранить нужный вариант типового отчета СКД в виде внешнего отчета в 1С?

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

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

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

Почему во внешнем отчете отсутствуют типовые варианты?

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

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

Способ 1. Перенос настроек варианта через экспорт и импорт XML

Рассмотрим самый простой и надежный способ переноса нужного варианта из режима 1С:Предприятие в схему внешнего отчета в Конфигураторе.

Разберем по шагам процесс сохранения структуры:

  1. Экспорт схемы компоновки данных: Откроем конфигурацию в Конфигураторе, найдем требуемый типовой отчет (например, ДебиторскаяЗадолженность), откроем его основную схему СКД и сохраним ее в отдельный файл через меню Действия → Сохранить схему в файл...
  2. Создание внешнего отчета: Создадим новый внешний отчет через меню Файл → Новый → Внешний отчет, добавим в него новую схему компоновки данных и загрузим в нее ранее сохраненный XML-файл схемы.
  3. Выгрузка настроек нужного варианта из предприятия: Запустим 1С:Предприятие, откроем типовой отчет и выберем в списке вариантов требуемый (например, «Просроченная задолженность покупателей»).
  4. Сохранение структуры варианта: В форме отчета нажмем Еще → Прочее → Изменить вариант... (или Настройка структуры). В открывшемся окне настройки структуры выберем Еще → Сохранить настройки... и сохраним XML-файл с настройками конкретного варианта на диск.
  5. Загрузка настроек в СКД внешнего отчета: Вернемся в Конфигуратор к нашему внешнему отчету, перейдем на закладку Настройки в конструкторе СКД, нажмем кнопку Загрузить настройки... и выберем сохраненный XML-файл. После этого переименуем вариант отчета в нужное наименование.

Способ 2. Программная выгрузка настроек через СериализаторXDTO

Если интерфейсный доступ к изменению варианта ограничен правами или особенностями формы, выгрузить текущие настройки открытого варианта можно программно.

Посмотрим на пример кода, с помощью которого можно получить настройки текущего компоновщика и сохранить их в файл:


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\VariantSettings.xml");

НастройкиОтчета = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, НастройкиОтчета);

ЗаписьXML.Закрыть();

Полученный файл точно так же загружается на вкладку Настройки в схеме СКД внешнего отчета.

Важные нюансы и перенос программного кода

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

  1. Модуль объекта и событие ПриКомпоновкеРезультата: В типовых конфигурациях заполнение параметров (например, границ периодов, валют, программных фильтров) выполняется в обработчике ПриКомпоновкеРезультата. Обязательно перенесите этот код из модуля объекта типового отчета в модуль объекта внешнего отчета.
  2. Модуль менеджера: У внешних отчетов отсутствует модуль менеджера. Если в исходном отчете в модуле менеджера были процедуры формирования или инициализации, их необходимо перенести в модуль объекта внешнего отчета или во внешнюю форму.
  3. Регистрация для подсистемы БСП: Чтобы внешний отчет корректно открывался через справочник Дополнительные отчеты и обработки, добавим в модуль объекта экспортную функцию СведенияОВнешнейОбработке():

Функция СведенияОВнешнейОбработке() Экспорт

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

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

КонецФункции

Альтернативное решение: Использование расширения конфигурации

Если нет жесткого требования использовать именно отдельный файл .erf, наиболее удобным современным решением является добавление отчета в Расширение конфигурации (.cfe). Заимствование типового отчета в расширение позволяет редактировать схему СКД и добавлять любые варианты отчетов без снятия основной конфигурации с поддержки и без потери связей с типовыми общими модулями БСП.

← На главную