Почему во внешнем отчете СКД вместо данных отображаются уровни группировок р1, р2, р3?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

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

В данной статье мы подробно разберем, почему возникает эта проблема, как она связана с механизмами «Библиотеки стандартных подсистем» (БСП) и какие шаги необходимо предпринять для ее окончательного устранения.

Анализ ситуации: что означают символы р1, р2, р3

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

Основное решение: Создание собственной формы отчета

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

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

  1. Откроем внешний отчет в конфигураторе.
  2. Перейдем на закладку «Формы».
  3. Нажмем на иконку создания новой формы (лупа или кнопка «Добавить»).
  4. В появившемся окне выберем тип «Форма отчета» и назначим ее основной.
  5. Даже если мы оставим форму пустой (сгенерированной платформой по умолчанию), это изменит контекст исполнения отчета.
  6. Сохраним отчет и проверим его работу в рабочей базе.

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

Почему это происходит? Влияние фонового выполнения БСП

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

Однако при работе с внешними отчетами возникают следующие сложности:

Альтернативные методы исправления

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

1. Настройка варианта использования заголовка

Попробуем изменить свойства вывода заголовков полей. В схеме компоновки данных перейдем на вкладку «Настройки», выберем «Другие настройки» и найдем параметр «Вариант использования заголовка». Установим его в значение «Не использовать». Это заставит СКД пересчитать макет вывода.

2. Проверка имен объектов в наборах данных

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

3. Программная инициализация компоновки

Если вы используете модуль объекта для формирования результата, убедитесь, что вы явно инициализируете процессор вывода. Рассмотрим пример кода, который гарантирует корректную передачу макета оформления:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

Использование этого кода в модуле объекта внешнего отчета позволяет полностью контролировать процесс вывода и исключить влияние общей формы БСП.

Влияние функциональных опций и кэша

Выясним еще одну возможную причину. В рабочих базах часто включены ФункциональныеОпции, которые могут быть выключены в демо-базе. Если в вашем отчете используются поля, связанные с выключенными опциями, СКД может исключить их из запроса. Если такое поле является ключевым для построения иерархии группировки, механизм компоновки «ломается», оставляя вместо данных технические метки р1, р2.

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

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

← На главную