Где найти схему СКД и логику формирования встроенных отчетов в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

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

Почему в отчете отсутствует макет СКД?

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

  1. Сложная визуализация: Если отчет выводит данные не в виде таблицы, а в виде диаграммы Ганта (например, «Диаграмма графика производства заказа»), стандартного вывода СКД недостаточно. Требуется программное заполнение специфического графического объекта.
  2. Динамическое построение запросов: В зависимости от установленных настроек и параметров, текст запроса может собираться «на лету» из различных фрагментов кода. Это позволяет оптимизировать производительность, исключая лишние соединения и таблицы, которые не требуются в текущем контексте.
  3. Использование временных таблиц: Для тяжелых управленческих отчетов часто требуется сложная предварительная подготовка данных во временных таблицах, что проще реализовать программно в модуле объекта, чем в конструкторе СКД.

Шаг 1: Исследование модуля объекта

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


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

Разберем этот фрагмент. Здесь четко указано, что логика формирования находится в экспортной процедуре СформироватьОтчет модуля объекта отчета ДиаграммаПроизводстваЗаказа. Нам необходимо перейти в этот модуль и найти указанную процедуру. Именно в ней будет происходить вся «магия».

Шаг 2: Анализ программного формирования запроса

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


Запрос = Новый Запрос;
ТекстЗапроса = 
"ВЫБРАТЬ
|   ... (здесь основной текст запроса) ...
|ИЗ
|   РегистрНакопления.ГрафикПроизводства КАК График";

// Динамическое добавление условий
Если Параметры.РежимОтображения = ПредопределенноеЗначение("Перечисление.Режимы.Детально") Тогда
    ТекстЗапроса = ТекстЗапроса + " ГДЕ ...";
КонецЕсли;

Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();

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

Шаг 3: Поиск программной схемы СКД

Иногда разработчики все же используют СКД, но не создают макет в дереве метаданных. Схема может создаваться полностью программно. Посмотрим на пример того, как это выглядит в коде:


Схема = Новый СхемаКомпоновкиДанных;
ИсточникДанных = Схема.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";

НаборДанных = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.Запрос = "ВЫБРАТЬ ...";
НаборДанных.ИсточникДанных = "ИсточникДанных1";

Если вы видите в модуле инициализацию объекта Новый СхемаКомпоновкиДанных, значит, конструктор СКД вам не поможет — все поля, связи и настройки описываются программным кодом. Для модификации такого отчета придется программно добавлять нужные поля в коллекцию НаборДанных.Поля или изменять текст НаборДанных.Запрос.

Шаг 4: Событие ПриКомпоновкеРезультата

Проанализируем еще одно важное место — обработчик события ПриКомпоновкеРезультата в модуле объекта. Даже если макет СКД существует (например, под именем «ОсновнаяСхемаКомпоновкиДанных»), разработчики ERP часто перехватывают управление в этом событии.

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

Как правильно модифицировать такие отчеты?

Для внесения изменений в подобные «скрытые» отчеты рекомендуется придерживаться следующего алгоритма:

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

Таким образом, отсутствие визуальной схемы СКД в конфигураторе — это не ошибка, а особенность архитектуры высоконагруженных систем. Вся логика всегда доступна для анализа в программном коде модуля объекта или модуля менеджера отчета. Основные ключевые слова для поиска: СформироватьОтчет, ПриКомпоновкеРезультата, Новый Запрос и Новый СхемаКомпоновкиДанных.

← На главную