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