При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда в результирующей таблице отображаются только те строки, по которым есть фактические движения (суммы). Если же задача стоит вывести полный справочник статей, например, для план-фактного анализа или просто для наглядности структуры бюджета, стандартное поведение СКД может мешать, «схлопывая» пустые строки. Особенно остро эта проблема проявляется при использовании внешних наборов данных и кросс-таблиц.
Разберем подробно, почему так происходит и какие механизмы в 1С позволяют гарантированно вывести все необходимые аналитики, независимо от наличия данных в ресурсах.
Прежде всего, проанализируем ситуацию: почему СКД «режет» строки, даже если в исходной таблице значений (ТЗ) они присутствуют с нулевыми суммами? Основная причина кроется в оптимизации запросов и алгоритме работы процессора компоновки. Если СКД видит, что поле не является обязательным или что ресурс для данной группировки принимает значение NULL (или 0, который система может интерпретировать как отсутствие данных при определенных настройках), она может исключить эту строку из визуализации для экономии места и ресурсов.
Первым делом проверим настройки ролей полей. Это один из самых эффективных способов заставить систему «заметить» данные. Рассмотрим по шагам:
СтатьяДДС (или ту аналитику, которую нужно вывести полностью).Зачем это нужно? Установка флага «Обязательное» сообщает системе, что данное поле должно всегда присутствовать в выборке процессора компоновки, даже если оно не выбрано пользователем в настройках или если по нему отсутствуют числовые показатели. Это предотвращает исключение поля на этапе оптимизации запроса.
Часто проблема скрыта в том, как мы описываем ресурсы. Посмотрим на типичную ошибку: использование функции Сумма(Поле), когда само поле содержит NULL. Проанализируем правильный подход к написанию выражений на вкладке «Ресурсы».
Вместо простого суммирования, используем проверку на пустое значение прямо в выражении ресурса:
Сумма(ЕстьNull(СуммаОборот, 0))
Также важно обратить внимание на колонку «Рассчитывать по...». Если ваша статья ДДС находится в иерархической группировке, убедитесь, что расчет ресурса не ограничен только детальными записями. Если поле статьи является частью иерархии, расчет должен быть доступен для всех уровней группировок.
Если работа с одним внешним набором данных (ТЗ) не дает стабильного результата, рассмотрим самый надежный «архитектурный» метод — разделение данных на эталонный справочник и фактические обороты. Разберем этот алгоритм:
Статья = Статья.В этом случае СКД сначала возьмет все записи из первого набора (справочника) и «приклеит» к ним суммы из второго. Если сумм нет, ресурс будет NULL, который мы превратим в 0 через ЕСТЬNULL.
Если отчет выводится в формате кросс-таблицы, в игру вступают специфические параметры вывода. Выясним, как заставить кросс-таблицу показывать пустые пересечения строк и столбцов.
Проанализируем настройки в окне «Настройки»:
СтатьяДДС.Да.Иногда мы сами того не замечая, отсекаем пустые строки. Проанализируем типичный кусок кода в модуле, который подготавливает ТЗ для внешнего набора:
// Ошибка: мы заранее убираем строки с нулевой суммой
ТекЗапрос = Новый Запрос;
ТекЗапрос.Текст = "ВЫБРАТЬ Статья, Сумма ИЗ Регистр ГДЕ Сумма <> 0";
Если мы хотим видеть все статьи, запрос должен выглядеть иначе. Мы должны использовать ЛЕВОЕ СОЕДИНЕНИЕ справочника с данными регистра:
ВЫБРАТЬ
СпрСтатьи.Ссылка КАК Статья,
ЕСТЬNULL(Обороты.СуммаОборот, 0) КАК Сумма
ИЗ
Справочник.СтатьиДвиженияДенежныхСредств КАК СпрСтатьи
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&Начало, &Конец) КАК Обороты
ПО
СпрСтатьи.Ссылка = Обороты.СтатьяДДС
После этого, передавая полученную ТЗ в СКД, мы гарантируем наличие всех строк. Но помните: если пользователь в настройках самого отчета (на вкладке «Отбор») установит условие Сумма Не равно 0, СКД применит этот фильтр уже после всех соединений и снова скроет пустые статьи. Чтобы этого избежать, обучайте пользователей использовать отбор не по ресурсу, а по конкретным значениям аналитики.
В редких случаях строки на самом деле присутствуют в отчете, но их не видно. Проанализируем вкладку «Условное оформление». Проверьте, нет ли там правил, которые устанавливают Видимость = Ложь или белый цвет текста для записей, где Сумма = 0. Это частое решение для «подчистки» отчета, которое может быть забыто в общих настройках схемы.
Подводя итог: для вывода всех статей ДДС используйте комбинацию левого соединения в исходных данных, настройки обязательности поля в ролях СКД и включение вывода пустых групп в параметрах кросс-таблицы. Это обеспечит целостность и информативность вашего финансового отчета.