Как посмотреть промежуточные данные в СКД перед выводом в отчет?

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

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

Способ 1: Программная выгрузка в таблицу значений

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

Рассмотрим по шагам, как реализовать этот механизм:

  1. Установим свойство СтандартнаяОбработка в значение Ложь, чтобы прервать обычный вывод отчета.
  2. Создадим КомпоновщикМакетаКомпоновкиДанных и сформируем макет, указав тип генератора для коллекции значений.
  3. Инициализируем ПроцессорКомпоновкиДанных.
  4. Используем ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений для получения таблицы.

Проанализируем пример кода:


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

Использование метода ВыбратьСтроку() позволяет быстро визуализировать данные прямо в режиме 1С:Предприятие без создания дополнительных форм. Это отличный способ быстро проверить, не пуста ли выборка на самом деле.

Способ 2: Использование специализированных консолей СКД

Если вы не хотите менять код модуля отчета, наиболее эффективным инструментом будет Консоль системы компоновки данных. Это внешняя обработка, которая позволяет загрузить вашу схему (.xsd) и настройки, а затем выполнить их пошагово.

В чем преимущество консоли перед обычным отчетом?

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

Способ 3: Анализ реального запроса через отладчик

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

Поставим точку останова после строки КомпоновщикМакета.Выполнить(...). В табло отладчика найдем переменную МакетКомпоновки. Внутри нее нас интересует коллекция НаборыДанных. Для каждого набора данных типа «Запрос» там существует свойство Запрос. Внимание: это именно тот текст, который будет исполнен. Попробуйте скопировать его и выполнить в обычной консоли запросов, подставив нужные параметры. Если данных там нет — проблема в логике запроса или некорректных параметрах периодов.

Почему данные могут пропадать? Типичные ошибки

Проанализируем основные причины «пустого» отчета, которые не всегда очевидны при просмотре исходного кода:

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

Особенности налоговых регистров в БП 3.0

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

Подводя итог, скажем: самый быстрый способ понять, где «косяк» — это программная выгрузка в ТЗ через ПриКомпоновкеРезультата. Если ТЗ заполнена, ищите проблему в настройках колонок, группировок и ролей полей СКД. Если ТЗ пустая — анализируйте исполняемый запрос макета компоновки данных.

← На главную