Как переопределить макет схемы компоновки данных встроенного отчета в расширении 1С?

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

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

Почему заимствованная схема СКД не открывается для редактирования?

Выясним причину такого поведения платформы. Когда мы нажимаем правой кнопкой мыши на макет схемы компоновки в основной конфигурации и выбираем команду «Добавить в расширение», платформа заимствует исключительно метаданные объекта — его имя, тип и принадлежность. При этом само внутреннее XML-описание схемы (структура таблиц, запросы, настройки, связи наборов данных) в расширение не переносится.

Такое поведение спроектировано разработчиками платформы 1С умышленно. Заимствование макета в исходном виде необходимо только для того, чтобы код расширения мог обращаться к оригинальной схеме по ее имени. Соответственно, при попытке открыть такой макет в конфигураторе расширения, система показывает лишь базовое окно свойств с тремя параметрами: имя макета, тип макета (схема компоновки данных) и статус заимствования. Конструктор СКД при этом не запускается, поскольку редактировать в заимствованном объекте нечего.

Для решения этой задачи нам потребуется пойти обходным путем. Ниже мы разберем два основных метода переопределения схемы: интерактивный (рекомендованный фирмой 1С) и программный.

Способ 1. Интерактивная подмена схемы компоновки (Рекомендуемый метод)

Этот способ основан на полном замещении стандартной схемы отчета вашей собственной схемой, созданной непосредственно в расширении. Разберем этот процесс по шагам:

  1. Откройте основную конфигурацию, найдите целевой отчет и перейдите в его макеты. Откройте макет СКД оригинального отчета.
  2. Перейдите на вкладку со свойствами схемы или откройте ее XML-текст и скопируйте схему целиком в буфер обмена (используя комбинацию клавиш Ctrl+C).
  3. Добавьте сам объект Отчет (но не его макет) в расширение конфигурации.
  4. В расширении перейдите к заимствованному отчету, найдите ветку «Макеты», нажмите правую кнопку мыши и выберите команду «Добавить». Создайте новый макет с типом «Схема компоновки данных». Задайте ему уникальное имя, например, ИмяОтчета_СобственнаяСКД.
  5. Вставьте скопированную ранее схему в созданный макет (используя комбинацию клавиш Ctrl+V). Данный макет теперь является полноценным собственным объектом расширения, поэтому он полностью доступен для интерактивного редактирования через стандартный конструктор СКД. Внесите в него все необходимые изменения (исправьте запрос, добавьте новые поля или измените группировки).
  6. Откройте палитру свойств заимствованного отчета в расширении. Найдите свойство «Основная схема компоновки данных». Укажите в качестве значения ваш новый созданный макет ИмяОтчета_СобственнаяСКД. При этом у данного свойства в расширении установится флаг модифицированности (флажок заимствования окрасится).

После выполнения этих шагов платформа при формировании отчета автоматически подставит вашу измененную схему компоновки вместо стандартной схемы из основной конфигурации.

Важное примечание: Если в вашей новой схеме компоновки задействованы новые реквизиты, справочники или документы, которые вы также добавили в расширение, их метаданные должны быть правильно заимствованы в это же расширение. В противном случае конструктор СКД выдаст ошибку о недоступности используемых полей метаданных.

Способ 2. Программное переопределение схемы компоновки данных

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

Для программной подмены нам потребуется перехватить событие формирования отчета. Выполним следующие действия по шагам:

  1. Создайте собственную схему компоновки в расширении (точно так же, как описано в шагах 1-5 предыдущего способа), но не назначайте ее в свойствах отчета. Пусть она просто хранится в макетах под именем МояСхемаКомпоновки.
  2. Заимствуйте модуль объекта вашего отчета в расширение.
  3. Перехватите обработчик события ПриКомпоновкеРезультата с помощью директивы &Вместо.
  4. Напишите код подмены стандартной схемы на ваш макет из расширения перед выполнением компоновки. Посмотрим на пример реализации такого кода:

&Вместо("ПриКомпоновкеРезультата")
Процедура Расш_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Получаем макет нашей собственной схемы из расширения
    НашаСхема = ЭтотОбъект.ПолучитьМакет("МояСхемаКомпоновки");
    
    // Переопределяем стандартную схему компоновки объекта отчета
    ЭтотОбъект.СхемаКомпоновкиДанных = НашаСхема;
    
    // Вызываем оригинальный метод для дальнейшего стандартного вывода результата
    ПродолжитьВызов(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
    
КонецПроцедуры

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

Особенности работы с отчетами на базе БСП (Библиотека Стандартных Подсистем)

В современных типовых конфигурациях (таких как ERP, Комплексная автоматизация, Управление торговлей, ЗУП) практически все отчеты функционируют под управлением БСП (подсистема «Варианты отчетов»). Это накладывает дополнительные требования к процессу переопределения схем, о которых необходимо знать заранее:

Риски обновлений и конфликты расширений

Рассмотрим важные риски, которые следует учитывать при промышленной эксплуатации решений с измененными макетами отчетов:

1. Конфликт нескольких расширений. Если в вашей информационной базе подключено несколько различных расширений, и в каждом из них переопределено свойство «Основная схема компоновки данных» для одного и того же встроенного отчета, возникнет конфликт. Приоритет будет иметь то расширение, которое загружается последним в соответствии с установленным порядком активности. Настройки свойств отчетов из других расширений будут проигнорированы платформой.

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

← На главную