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