Как внедрить макет СКД в расширение конфигурации 1С?

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

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

Решение для отчетов

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

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

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

Решение для обработок

Работа с обработками сложнее, так как у них зачастую отсутствует жесткая привязка к свойству «Основная схема компоновки данных». В подобных случаях инициализация схемы происходит программно в модулях объекта или формы. Для успешного внедрения изменений проанализируем следующий алгоритм:

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

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


// В коде расширения используем контекст текущего расширения
Схема = ПолучитьМакет("ИмяВашегоМакетаВСхемойРасширения");
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));

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

При работе с расширениями необходимо учитывать режим совместимости платформы. На старых версиях (ниже 8.3.10) возможности работы с макетами были ограничены. Убедитесь, что ваша база обновлена до актуального релиза.

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

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

Заключение

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

← На главную