Разработка отчетов в системе компоновки данных (СКД) — процесс достаточно стандартизированный, однако даже опытные разработчики иногда сталкиваются с ситуацией, когда запрос в консоли возвращает результат, а сам отчет в режиме 1С:Предприятие остается пустым. В данной статье мы подробно разберем, почему так происходит, проанализируем типичные ошибки на примере работы с регистрами накопления в конфигурации Бухгалтерия предприятия 3.0 и научимся правильно настраивать параметры и отборы.
Самая частая причина «исчезновения» данных — это активные, но незаполненные отборы. Рассмотрим механизм работы СКД: если на закладке Настройки в конфигураторе или в пользовательском режиме в списке отборов стоит галочка напротив поля (например, Организация), но само значение не выбрано, система интерпретирует это как жесткое условие фильтрации.
В этом случае запрос СКД неявно преобразуется к виду:
ГДЕ Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
Поскольку в реальных записях регистра организация почти всегда заполнена, отчет не находит ни одной подходящей строки. Решение: необходимо либо снять галочку использования отбора, либо указать конкретное значение. Чтобы пользователь не попадал в эту ловушку, рекомендуется в схеме компоновки данных для таких полей устанавливать свойство Использование в значение Быстрый доступ, но снимать флаг использования по умолчанию.
Проанализируем текст запроса, который часто используют начинающие разработчики. Обращение к физической таблице РегистрНакопления.ДвиженияДляБилетов напрямую — это ошибка с точки зрения архитектуры 1С. Рассмотрим почему:
.Обороты) используют предварительно рассчитанные итоги, что значительно ускоряет получение данных.Если при переходе на таблицу ДвиженияДляБилетовОбороты данные пропадают совсем, это может означать, что для данного регистра **не включено использование итогов** или итоги не рассчитаны за выбранный период. Проверьте это в конфигураторе или через обработку «Управление итогами» в режиме предприятия.
В СКД есть встроенные механизмы работы с периодами. Если вы используете виртуальные таблицы, система автоматически добавляет параметры &НачалоПериода и &КонецПериода. Проблемы возникают в следующих случаях:
ГДЕ Период МЕЖДУ &НачалоПериода И &КонецПериода при использовании виртуальной таблицы. Это избыточно и может привести к конфликту параметров.Рекомендация: Для удобства пользователя в конфигурациях на базе БСП (как Бухгалтерия 3.0) лучше использовать один параметр с типом СтандартныйПериод. В параметрах схемы (закладка Параметры) для НачалоПериода и КонецПериода пропишите выражения для автоматического получения дат:
&ПериодОтчета.ДатаНачала
&ПериодОтчета.ДатаОкончания
При этом сам параметр &ПериодОтчета сделайте доступным для пользователя, а технические параметры начала и конца периода скройте (установите флаг Ограничение доступности).
Выясним еще одну причину: отсутствие ресурсов. Если вы хотите видеть в отчете числовые показатели (Тариф, Такса, Итого), их обязательно нужно добавить на закладку Ресурсы в СКД. В поле «Выражение» обычно указывается функция СУММА(Итого). Если поля не добавлены в ресурсы, СКД может некорректно группировать строки, что иногда приводит к визуальному отсутствию данных в детальных записях.
Также проверьте закладку Набор данных. Если вы используете физическую таблицу, убедитесь, что у поля Дата (или Период) установлена соответствующая Роль — Период. Без этого компоновщик не всегда может правильно сопоставить стандартные настройки периода с данными в таблице.
Часто в процессе разработки программист меняет структуру запроса или состав полей в конфигураторе, а при запуске отчета видит старую картину. Это происходит из-за того, что 1С сохраняет настройки отчета для каждого пользователя индивидуально.
Рассмотрим порядок действий для проверки:
Это сбросит все кэшированные фильтры и группировки к тому виду, который вы настроили в схеме компоновки данных.
Поскольку работа ведется в Бухгалтерии 3.0, не стоит забывать о правах доступа и функциональных опциях. Если ваш новый регистр или отчет не включены в состав подсистем или для них не настроены роли, обычный пользователь (не администратор) увидит пустой отчет из-за механизмов RLS (Record Level Security).
Попробуйте запустить отчет под пользователем с полными правами. Если данные появятся — проблема в правах доступа к новому объекту метаданных. Также проверьте, не привязан ли регистр к Функциональной опции, которая в данный момент выключена в константах программы.
Вместо обращения к физической таблице с ручной фильтрацией по датам, используйте конструкцию через виртуальную таблицу оборотов:
ВЫБРАТЬ
ДвиженияОбороты.Статус,
ДвиженияОбороты.ДатаВылета,
ДвиженияОбороты.Авиакомпания,
ДвиженияОбороты.Маршрут,
ДвиженияОбороты.НомерАвиабилета,
ДвиженияОбороты.Организация,
ДвиженияОбороты.ФИОПассажиров,
ДвиженияОбороты.ТарифОборот КАК Тариф,
ДвиженияОбороты.ИтогоОборот КАК Итого
ИЗ
РегистрНакопления.ДвиженияДляБилетов.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ДвиженияОбороты
Обратите внимание, что параметры в скобках (&НачалоПериода, &КонецПериода) подставятся автоматически, если на закладке Набор данных включен флаг Автозаполнение. Это наиболее надежный и производительный способ получения данных для отчета в системе 1С.