При доработке типовых или создании собственных отчетов на базе Системы компоновки данных (СКД) разработчики часто сталкиваются с неочевидным поведением платформы. Первая типичная проблема — когда новые поля, добавленные в схему в конфигураторе, упорно не желают появляться на экране в пользовательском режиме. Вторая, более сложная техническая задача — исключить дублирование итоговых показателей (ресурсов) на подчиненных уровнях группировки. Например, когда сумма документа должна отображаться только в строке самого документа, но дублируется на уровне номенклатуры, характеристик или складов.
В этой статье мы подробно разберем причины возникновения обеих проблем и рассмотрим несколько практических способов их решения.
---
Представим стандартную ситуацию: мы взяли типовой отчет (например, «Валовая прибыль» в конфигурации «Управление торговлей»), открыли схему компоновки данных в конфигураторе, добавили новые поля в запрос, перенесли их в ресурсы и выбрали на вкладке «Настройки» в списке выбранных полей. Однако после запуска отчета в режиме «1С:Предприятие» добавленных колонок просто нет.
Выясним причину такого поведения системы. Дело в том, что в современных типовых конфигурациях 1С настройки отчетов сохраняются в системном хранилище индивидуально для каждого пользователя. Платформа делает это для того, чтобы пользователь при каждом открытии отчета не настраивал его заново. Когда разработчик вносит изменения в конфигураторе, система видит, что у пользователя уже есть сохраненная версия настроек этого отчета, и применяет именно ее, игнорируя новые «дефолтные» настройки из конфигуратора.
Разберем по шагам, как заставить новые колонки отобразиться:
---
Перейдем ко второй проблеме. Допустим, нам нужно выводить сумму документа строго в строке группировки по этому документу (например, Регистратор). Если мы просто добавим поле в ресурсы, СКД по умолчанию начнет транслировать (наследовать) это значение на все подчиненные группировки (например, на уровень номенклатуры, характеристик, партнеров и т.д.). В итоге мы получим некрасивую картину, когда сумма документа дублируется в каждой строке с номенклатурой, искажая визуальное восприятие отчета.
Многие разработчики пытаются решить это настройкой колонки «Рассчитывать по...» на вкладке «Ресурсы» в конфигураторе, указывая там только группировку Регистратор. Однако это не помогает избавиться от вывода цифр на нижних уровнях, так как СКД считает, что раз ресурс рассчитан для родителя, то его значение доступно и для отображения в подчиненных детальных записях.
Проанализируем три эффективных и правильных способа решения этой задачи.
---
Этот способ является наиболее популярным среди разработчиков, так как он не ломает математику расчета итогов в СКД, а лишь визуально скрывает ненужные цифры на подчиненных уровнях группировки, делая отчет чистым и аккуратным.
Разберем по шагам процесс настройки:
СистемныеПоля.УровеньВГруппировке и укажите вид сравнения «Больше», а в качестве значения укажите 1 (если документ находится на первом уровне группировки).
Альтернативный вариант условия: если под документом выводится номенклатура, можно задать условие Номенклатура Заполнено. Это будет означать: «если мы находимся в строке, где заполнена номенклатура, применить оформление».
В результате СКД корректно рассчитает данные для группировки по документам, но на всех нижестоящих уровнях вместо дублирующихся сумм визуально выведет пустые ячейки.
---
Если вы хотите физически запретить вывод колонок с ресурсами на уровне определенных группировок, можно воспользоваться отключением наследования выбранных полей.
Посмотрим на алгоритм настройки:
Номенклатура или Детальные записи).При таком подходе колонки новых ресурсов будут отображаться в общей таблице отчета, но на строках, относящихся к номенклатуре, эти ячейки физически останутся пустыми, так как для этой группировки они просто не выбраны.
---
Это наиболее изящный способ с точки зрения архитектуры метаданных. Мы решим задачу непосредственно на уровне декларативного описания ресурсов схемы без использования условного оформления.
Выполним следующие действия:
СуммаДокумента). Выражение для самого поля оставляем абсолютно пустым.СуммаДокумента в список ресурсов.
Сумма(СуммаОборот)
Регистратор. Если вам также нужны общие итоги по всему отчету, добавьте в эту же колонку строку ниже и выберите значение ОбщийИтог.Почему этот способ работает идеально? Поскольку само вычисляемое поле не имеет никаких детальных значений (мы оставили его выражение пустым), СКД не сможет отобразить по нему данные в детальных записях. А так как в ресурсах расчет этого поля жестко ограничен только уровнем Регистратор и ОбщийИтог, на всех остальных группировках (номенклатура, склад, партнер) СКД выведет пустые значения, не дублируя и не загромождая отчет лишней информацией.