Мы часто сталкиваемся с ситуацией, когда наш запрос в обычной консоли запросов прекрасно возвращает все необходимые данные, но при выводе отчета в Системе Компоновки Данных (СКД) некоторые колонки оказываются пустыми. Это может быть весьма обескураживающим, особенно когда кажется, что все сделано правильно. В этой статье мы подробно разберем, почему такая ситуация возникает и как ее диагностировать и исправить.
Когда данные в запросе присутствуют, но в отчете СКД не отображаются, первое, что мы должны сделать – это обратиться к Консоли СКД. Это специализированный инструмент для анализа работы Системы Компоновки Данных. В отличие от обычной консоли запросов, она позволяет загрузить схему компоновки данных и вариант отчета, чтобы увидеть, какой запрос фактически выполняется СКД после всех ее преобразований (оптимизации, применения настроек, группировок, отборов и т.д.), а также проанализировать процесс компоновки.
Как мы используем Консоль СКД:
Использование Консоли СКД является критически важным шагом, так как она позволяет увидеть "внутреннюю кухню" работы СКД и выявить расхождения между тем, что мы ожидаем, и тем, что фактически происходит.
Одной из самых частых причин "пропажи" данных является встроенный оптимизатор запросов СКД. СКД стремится выполнять запросы максимально эффективно. Если, по ее мнению, какое-то поле из набора данных не используется в результирующей структуре отчета (например, не выведено в колонки, не используется в группировках, отборах или ресурсах), она может самостоятельно исключить его из итогового запроса.
Что мы можем сделать, чтобы этого избежать:
Оптимизатор также может иначе обрабатывать временные таблицы или вложенные запросы, что иногда приводит к потере данных или их некорректной агрегации. Анализ окончательного запроса в Консоли СКД поможет выявить эти изменения и понять, почему данные не доходят до конечного отчета.
Даже если поля присутствуют в запросе, они могут не отображаться, если их роли в СКД настроены неправильно. Правильное определение роли поля крайне важно для корректного отображения данных.
Что мы должны проверить в настройках СКД:
СУММА(), МАКСИМУМ(), МИНИМУМ()) и нет ошибочных выражений, которые могут давать NULL или 0. Если ресурс настроен некорректно, он может возвращать пустое значение.Например, если числовое поле из второго регистра (ПолеЧисло) должно просто выводиться без агрегации, оно не должно быть настроено как ресурс. Если же оно должно суммироваться на определенном уровне группировки, то в ресурсах мы указываем СУММА(ПолеЧисло).
Настройки группировок и отборов могут существенно влиять на видимость данных, иногда неявным образом отсекая строки, содержащие нужные нам значения.
Что мы анализируем в контексте группировок и отборов:
ФизЛицо, и после применения других отборов для какого-то конкретного ФизЛица нет данных из второго регистра, СКД может не отобразить эту строку или связанные с ней колонки. Мы должны убедиться, что группировка не становится "пустой" для тех строк, где мы ожидаем данные из второго регистра.NULL, незаполненными строками или нулями. Например, отбор по условию "Поле из второго регистра Заполнено Истина". Если по какой-то причине в данных, которые СКД получает после всех преобразований, эти поля действительно пустые, строки будут отсечены. Мы должны тщательно проверить, нет ли таких отборов, которые неявно отсекают нужные данные.СКД может не выводить строки, если поле имеет пустое значение, что может быть связано с настройками по умолчанию или спецификой макета. Проверка всех уровней отбора и группировки поможет выявить эту причину.
Параметры отчета, особенно связанные с периодами (НачалоПеда, КонецПериода) или другими динамическими значениями, могут стать причиной расхождений между консолью запросов и отчетом СКД.
Что мы проверяем, анализируя параметры отчета:
НачалоПериода и КонецПериода (или аналогичные) в отчете СКД установлены таким образом, чтобы охватывать нужный диапазон данных. Консоль запросов часто запускается без параметров или с параметрами по умолчанию, которые могут отличаться от параметров, применяемых в отчете СКД. Это частая причина "пропажи" данных за конкретный период.NULL или некорректными для запроса. Например, если ожидается число, а передается строка, запрос может вернуть пустой результат.Некорректно заданные или неинициализированные параметры могут привести к тому, что запрос, который в консоли возвращает данные, в СКД выполняется с другими условиями и, следовательно, возвращает пустой результат.
Иногда проблема может крыться в менее очевидных вещах, которые также влияют на отображение данных.
На что мы обращаем внимание:
Если вышеперечисленные шаги не помогли выявить причину, рекомендуем применить следующие подходы:
NULL значения оказываются в начале или конце отчета, и мы их не замечаем при беглом просмотре, или они вовсе не выводятся из-за особенностей агрегации или группировки. Также, если в связанных регистрах есть пустые ссылки, они могут неявно отфильтровываться СКД, если нет явного указания на их обработку.Ситуация, когда консоль запросов показывает данные, а СКД — нет, всегда указывает на расхождение в интерпретации запроса или данных между этими двумя инструментами. Консоль СКД является ключевым инструментом для выявления этой разницы, помогая нам понять, что именно происходит на каждом этапе обработки данных.