При разработке и адаптации типовых конфигураций 1С перед программистами часто встает задача изменения существующих встроенных отчетов. Использование расширений конфигурации — это наиболее цивилизованный и удобный способ внесения изменений без снятия конфигурации с поддержки. Однако при попытке кастомизировать схему компоновки данных (СКД) разработчики часто сталкиваются с техническим ограничением: заимствованный макет СКД не открывается для редактирования. В этой статье мы подробно разберем, почему так происходит, и рассмотрим рабочие способы переопределения макета СКД в расширении.
Выясним причину такого поведения платформы. Когда мы нажимаем правой кнопкой мыши на макет схемы компоновки в основной конфигурации и выбираем команду «Добавить в расширение», платформа заимствует исключительно метаданные объекта — его имя, тип и принадлежность. При этом само внутреннее XML-описание схемы (структура таблиц, запросы, настройки, связи наборов данных) в расширение не переносится.
Такое поведение спроектировано разработчиками платформы 1С умышленно. Заимствование макета в исходном виде необходимо только для того, чтобы код расширения мог обращаться к оригинальной схеме по ее имени. Соответственно, при попытке открыть такой макет в конфигураторе расширения, система показывает лишь базовое окно свойств с тремя параметрами: имя макета, тип макета (схема компоновки данных) и статус заимствования. Конструктор СКД при этом не запускается, поскольку редактировать в заимствованном объекте нечего.
Для решения этой задачи нам потребуется пойти обходным путем. Ниже мы разберем два основных метода переопределения схемы: интерактивный (рекомендованный фирмой 1С) и программный.
Этот способ основан на полном замещении стандартной схемы отчета вашей собственной схемой, созданной непосредственно в расширении. Разберем этот процесс по шагам:
Отчет (но не его макет) в расширение конфигурации.ИмяОтчета_СобственнаяСКД.ИмяОтчета_СобственнаяСКД. При этом у данного свойства в расширении установится флаг модифицированности (флажок заимствования окрасится).После выполнения этих шагов платформа при формировании отчета автоматически подставит вашу измененную схему компоновки вместо стандартной схемы из основной конфигурации.
Важное примечание: Если в вашей новой схеме компоновки задействованы новые реквизиты, справочники или документы, которые вы также добавили в расширение, их метаданные должны быть правильно заимствованы в это же расширение. В противном случае конструктор СКД выдаст ошибку о недоступности используемых полей метаданных.
В некоторых случаях статическая замена свойства отчета в конфигураторе не подходит. Например, когда замена схемы должна происходить динамически в зависимости от прав пользователя, выбранной организации или других внешних условий. Проанализируем, как решить эту задачу с помощью программного кода.
Для программной подмены нам потребуется перехватить событие формирования отчета. Выполним следующие действия по шагам:
МояСхемаКомпоновки.ПриКомпоновкеРезультата с помощью директивы &Вместо.
&Вместо("ПриКомпоновкеРезультата")
Процедура Расш_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем макет нашей собственной схемы из расширения
НашаСхема = ЭтотОбъект.ПолучитьМакет("МояСхемаКомпоновки");
// Переопределяем стандартную схему компоновки объекта отчета
ЭтотОбъект.СхемаКомпоновкиДанных = НашаСхема;
// Вызываем оригинальный метод для дальнейшего стандартного вывода результата
ПродолжитьВызов(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
КонецПроцедуры
Данный метод предоставляет разработчику максимальную гибкость. Вы можете не просто заменить схему целиком, но и программно модифицировать ее на лету (например, динамически менять текст запроса в схеме компоновки, добавлять новые отборы или параметры, сохраняя при этом общую структуру отчета).
В современных типовых конфигурациях (таких как ERP, Комплексная автоматизация, Управление торговлей, ЗУП) практически все отчеты функционируют под управлением БСП (подсистема «Варианты отчетов»). Это накладывает дополнительные требования к процессу переопределения схем, о которых необходимо знать заранее:
/ЗапуститьОбновлениеИнформационнойБазы или программно вызвать процедуру обновления вариантов отчетов БСП из кода вашего расширения.ОпределитьНастройкиФормы или НастроитьВариантыОтчетов), чтобы более гибко управлять поведением формы и выводом данных без полной жесткой замены макета СКД.Рассмотрим важные риски, которые следует учитывать при промышленной эксплуатации решений с измененными макетами отчетов:
1. Конфликт нескольких расширений. Если в вашей информационной базе подключено несколько различных расширений, и в каждом из них переопределено свойство «Основная схема компоновки данных» для одного и того же встроенного отчета, возникнет конфликт. Приоритет будет иметь то расширение, которое загружается последним в соответствии с установленным порядком активности. Настройки свойств отчетов из других расширений будут проигнорированы платформой.
2. Проблемы при обновлении конфигурации поставщиком. Когда фирма 1С выпускает очередное обновление типовой конфигурации, она может внести исправления в оригинальный макет СКД отчета (исправить ошибки в запросах, оптимизировать производительность или добавить новые важные поля). Поскольку в вашем расширении установлена жесткая модифицированность свойства «Основная схема компоновки данных» и используется статическая копия старого макета, изменения от поставщика не будут применены к вашему отчету. Это может привести к некорректному расчету данных или к критическим ошибкам выполнения, если логика общего модуля, формирующего отчет, рассчитывает на наличие новых полей в СКД. Поэтому при каждом обновлении конфигурации необходимо вручную сравнивать оригинальную схему с вашей копией в расширении и переносить изменения.