В типовых конфигурациях 1С (таких как 1С:Управление торговлей 11, 1С:Комплексная автоматизация и 1С:ERP) разработчики часто сталкиваются с ситуацией, когда требуется доработать только один конкретный вариант типового отчета. При сохранении исходного отчета в виде внешнего файла (.erf) выясняется, что внутри схемы компоновки данных (СКД) доступен лишь один базовый вариант, а остальные варианты, отображаемые в пользовательском режиме, отсутствуют.
Выясним причину такого поведения платформы и разберем по шагам, как правильно извлечь настройки нужного варианта и создать на их основе независимый внешний отчет.
Проанализируем архитектуру работы отчетов в современных типовых решениях. В типовых конфигурациях используется подсистема Варианты отчетов из Библиотеки стандартных подсистем (БСП). Это накладывает следующие особенности:
ВариантыОтчетов.Рассмотрим самый простой и надежный способ переноса нужного варианта из режима 1С:Предприятие в схему внешнего отчета в Конфигураторе.
Разберем по шагам процесс сохранения структуры:
ДебиторскаяЗадолженность), откроем его основную схему СКД и сохраним ее в отдельный файл через меню Действия → Сохранить схему в файл...Если интерфейсный доступ к изменению варианта ограничен правами или особенностями формы, выгрузить текущие настройки открытого варианта можно программно.
Посмотрим на пример кода, с помощью которого можно получить настройки текущего компоновщика и сохранить их в файл:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\VariantSettings.xml");
НастройкиОтчета = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, НастройкиОтчета);
ЗаписьXML.Закрыть();
Полученный файл точно так же загружается на вкладку Настройки в схеме СКД внешнего отчета.
При переносе типового отчета во внешний файл необходимо учитывать логику работы модулей исходного объекта. Проанализируем ключевые моменты, без которых внешний отчет может работать некорректно:
ПриКомпоновкеРезультата: В типовых конфигурациях заполнение параметров (например, границ периодов, валют, программных фильтров) выполняется в обработчике ПриКомпоновкеРезультата. Обязательно перенесите этот код из модуля объекта типового отчета в модуль объекта внешнего отчета.СведенияОВнешнейОбработке():
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Просроченная задолженность покупателей (внешний)";
Команда.Идентификатор = "ПросроченнаяЗадолженностьПокупателей";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Если нет жесткого требования использовать именно отдельный файл .erf, наиболее удобным современным решением является добавление отчета в Расширение конфигурации (.cfe). Заимствование типового отчета в расширение позволяет редактировать схему СКД и добавлять любые варианты отчетов без снятия основной конфигурации с поддержки и без потери связей с типовыми общими модулями БСП.