Как в СКД сгруппировать несколько строк в одну

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда вместо одной аккуратной строки с данными по объекту (например, по номенклатуре) система выводит несколько строк. Это может происходить из-за различий в детальных данных, неправильной настройки структуры или избыточности в самом запросе. В этой статье мы разберем по шагам, как «схлопнуть» данные и добиться корректной группировки, чтобы отчет выглядел профессионально и был удобен для анализа.

Анализ причины появления лишних строк

Прежде чем приступать к исправлению, давайте проанализируем ситуацию. Почему СКД выводит две строки вместо одной? Как правило, это происходит потому, что в наборе данных присутствуют поля, значения которых различаются. Например, для одной и той же номенклатуры могут быть разные характеристики, склады или разные даты движений. Если эти поля включены в «Детальные записи», система честно выведет каждую уникальную комбинацию.

Разберем основные методы решения этой задачи: от простых настроек интерфейса до модификации самого текста запроса.

Способ 1: Изменение структуры отчета в настройках СКД

Самый простой и правильный путь — это работа с вкладкой Настройки в схеме компоновки данных. Рассмотрим ситуацию, когда у вас в структуре отчета добавлены «Детальные записи».

  1. Перейдем на вкладку Настройки.
  2. Посмотрим на дерево структуры отчета в левой части. Если там указаны «Детальные записи», это означает, что система будет выводить все строки, пришедшие из запроса, без объединения.
  3. Нажмем правой кнопкой мыши на «Отчет» и выберем Новая группировка....
  4. В качестве поля группировки укажем Номенклатура (или другое поле, по которому нужно объединить данные).
  5. Удалим элемент «Детальные записи», если он больше не нужен, или перенесем его внутрь созданной группировки (хотя для «схлопывания» строк его обычно следует заменить на группировку).

Важный нюанс: если вы просто добавили группировку, но в выбранных полях остались реквизиты, которые различаются в исходных строках, СКД может продолжать дробить данные. Чтобы этого избежать, переходим к следующему методу.

Способ 2: Использование ресурсов для агрегации данных

Чтобы данные в группировке «схлопнулись», все числовые и текстовые поля, которые должны отображаться в одной строке, необходимо сделать ресурсами. Выясним, как это работает.

Проанализируем вкладку Ресурсы:

Пример использования функции для объединения строк:

СоединитьСтроки(Разделитель, ТекстовоеПоле)

Это позволит не просто выбрать какое-то одно значение (Максимум или Минимум), а перечислить все значения из разных строк в одной ячейке через запятую или другой символ. Таким образом, вместо двух строк с разными комментариями вы получите одну строку, где в колонке «Комментарий» будут указаны оба значения.

Способ 3: Группировка на уровне запроса

Иногда полезнее решить задачу еще до того, как данные попадут в механизм компоновки. Рассмотрим, как это сделать в конструкторе запроса. Это самый надежный метод, если вы хотите уменьшить объем передаваемых данных и ускорить отчет.

  1. Откроем конструктор запроса в наборе данных.
  2. Перейдем на вкладку Группировка.
  3. Все поля, по которым мы хотим объединить строки (например, Номенклатура, Артикул, ЕдиницаИзмерения), перенесем в левое окно «Группировочные поля».
  4. Все остальные поля (Количество, Остаток, Стоимость) перенесем в правое окно «Суммируемые поля». К ним автоматически применится функция СУММА.

Посмотрим на пример текста запроса после такой настройки:


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    СУММА(Продажи.Количество) КАК Количество,
    СУММА(Продажи.Сумма) КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГРУППИРОВАТЬ ПО
    Продажи.Номенклатура

В этом случае база данных вернет уже сгруппированный результат, и СКД останется только вывести его в отчет.

Способ 4: Настройка ролей полей

Бывают случаи, когда даже при наличии группировок СКД упорно разделяет строки. Проанализируем вкладку Набор данных. Обратите внимание на колонку Роль у полей.

Если у поля установлена роль «Без дублей» или если поле является частью уникального ключа (например, Период или Регистратор), СКД будет считать такие строки уникальными и откажется их объединять. Выясним причину: если вам не нужна детализация до регистратора в отчете, просто снимите все флажки в поле «Роль» для этого измерения или удалите его из запроса.

Способ 5: Настройка расположения группировок

Иногда визуально кажется, что строки не сгруппированы, из-за специфического оформления 1С. Посмотрим на настройку Расположение группировок.

  1. В настройках отчета перейдем на вкладку Другие настройки.
  2. Найдем параметр Расположение группировок.
  3. Попробуем изменить значение с «Авто» или «Отдельно» на Вместе.

Это позволит вывести заголовок группировки и ее значения в одной строке, что часто соответствует «типовому» виду отчетов, к которому привыкли пользователи. Это визуальное объединение делает отчет более компактным и читаемым.

Резюме

Для того чтобы сгруппировать данные в СКД в одну строку, мы рекомендуем придерживаться следующего алгоритма:

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

Следуя этим правилам, вы сможете гибко управлять представлением данных в СКД и формировать отчеты любой сложности без дублирования строк.

← На главную