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