При разработке отчетов в системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда один и тот же запрос, выполненный в консоли запросов, возвращает данные, а в полноценном отчете — нет. Разберем основные причины этой проблемы на примере работы с регистром бухгалтерии и виртуальной таблицей ОстаткиИОбороты.
Рассмотрим типовой запрос к счету 10.7 «Материалы, переданные в переработку», который может давать пустой результат в СКД:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто3.ДоговорКонтрагента КАК Договор,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Материал,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК ОстатокНаНачало,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Приход,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Расход,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК ОстатокНаКонец
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.МатериалыПереданныеВПереработку), , Субконто1 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты
В данном примере используется жесткая привязка к Субконто1, Субконто2 и Субконто3. Проанализируем, почему такой подход в СКД может привести к отсутствию данных.
В планах счетов 1С (особенно на счете 10.7) состав субконто может определяться не только в конфигураторе, но и настраиваться в режиме «1С:Предприятие» в зависимости от учетной политики или функциональных опций. Если мы обращаемся напрямую к Субконто1, мы полагаемся на то, что «Контрагент» всегда занимает первую позицию.
Решение: Вместо обращения по номеру (Субконто1) лучше использовать универсальный подход. Рассмотрим возможность указания списка субконто в параметрах виртуальной таблицы:
&СписокСубконто.СписокСубконто установим тип «Список значений» и укажем доступные виды субконто (Номенклатура, Контрагенты, Договоры).В СКД механизмы работы с параметрами &НачалоПериода и &КонецПериода отличаются от консоли запросов. Если в схеме включено «Автозаполнение», СКД может перехватывать эти параметры и накладывать свои условия.
Выясним причины возможного конфликта:
СтандартныйПериод, а в запросе ожидаются конкретные даты. Если связь между ними настроена неверно через выражения (например, &СтандартныйПериод.ДатаНачала), виртуальная таблица может получить пустые значения.Проанализируем вкладку «Параметры» и убедимся, что для &НачалоПериода и &КонецПериода правильно указаны выражения, или они связаны с пользовательским полем периода.
Консоль запросов часто запускается пользователем с полными правами (Администратор) или в привилегированном режиме. Отчет же выполняется с учетом текущих прав пользователя. Если настроен RLS (Row Level Security), система может скрывать записи по конкретным контрагентам или организациям.
Проверим права доступа пользователя на чтение регистра бухгалтерии и всех используемых в запросе справочников. Если данных нет только у обычного пользователя, проблема кроется в настройках прав.
СКД анализирует метаданные конфигурации гораздо глубже, чем консоль запросов. Проанализируем следующие моменты:
NULL.Если визуально настройки кажутся верными, но данных все равно нет, выполним следующие шаги:
Счет = &Счет в тексте запроса попробуйте использовать конструкцию Счет В ИЕРАРХИИ (&Счет), чтобы исключить проблемы с группами счетов.Помните, что СКД — это не просто средство выполнения запроса, а мощный построитель, который динамически меняет ваш код. Внимательное отношение к типам параметров и ролям полей — залог корректного вывода данных.