Как объединить строки из детальных записей в одно поле в СКД?

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

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

Разбор основной проблемы

Чаще всего ошибка заключается в попытке выполнить агрегацию на уровне детальных записей. Важно помнить: функции СКД, предназначенные для вычислений по массивам данных, работают исключительно в контексте группировок. Если вы не создали группировку в настройках структуры отчета, функции ВычислитьВыражениеСГруппировкойМассив просто «не увидят» данные для склейки.

Решение с помощью функций СКД

Для решения нашей задачи мы воспользуемся комбинацией двух мощных функций СКД: ВычислитьВыражениеСГруппировкойМассив и СоединитьСтроки. Разберем пошагово, что нужно сделать:

  1. Перейдите на вкладку Вычисляемые поля в настройках схемы компоновки данных.
  2. Добавьте новое поле, назовем его, например, ПереченьТТН. В выражении укажите формулу для получения массива значений.
  3. Перейдите на вкладку Ресурсы. Добавьте созданное поле в список ресурсов. В колонке Выражение укажите формулу склейки.

Рассмотрим конкретный пример кода для выражения ресурса:


СоединитьСтроки(
    ВычислитьВыражениеСГруппировкойМассив("ТТН", "ТТН"), 
    ", "
)

Здесь функция ВычислитьВыражениеСГруппировкойМассив("ТТН", "ТТН") собирает все значения поля ТТН из детальных записей в массив, а СоединитьСтроки превращает этот массив в единую текстовую строку с разделителем в виде запятой и пробела.

Важные нюансы настройки

Чтобы всё заработало корректно, обратите внимание на следующие моменты:

Альтернативные подходы

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

Создайте экспортную функцию в модуле отчета:


Функция СклеитьДанные(МассивЗначений) Экспорт
    Результат = "";
    Для Каждого Значение Из МассивЗначений Цикл
        Если ЗначениеЗаполнено(Значение) Тогда
            Результат = Результат + ?(Результат = "", "", ", ") + Строка(Значение);
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Затем в выражении ресурса вызовите эту функцию, передав ей массив значений:

СклеитьДанные(ВычислитьВыражениеСГруппировкойМассив("ТТН", "ТТН"))

Итоги

Подводя черту, отметим: ключ к решению — использование ресурсов и правильная группировка. Если вы видите, что поле пустое или выводится ошибка, проверьте, назначено ли поле как Ресурс и есть ли в структуре отчета соответствующая Группировка. Использование метода ВычислитьВыражениеСГруппировкойМассив в сочетании с СоединитьСтроки — это наиболее быстрый и чистый способ получения строковых списков в СКД без изменения логики самого запроса.

← На главную