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