Как вывести список номенклатуры и все связанные с ней штрихкоды в одну строку или таблицу?

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

При разработке отчетов в 1С часто возникает задача вывода связанных данных, например, штрихкодов, для одного элемента номенклатуры. Новички часто сталкиваются с тем, что стандартный SQL-запрос выдает «дубли» строк для каждого штрихкода, а попытка создать динамическое количество колонок (Штрихкод 1, Штрихкод 2...) вызывает затруднения. Рассмотрим, как решить эту задачу правильно с помощью Системы Компоновки Данных (СКД).

Метод 1: Объединение штрихкодов в одну строку

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

  1. Создайте новый отчет на базе СКД.
  2. В наборе данных «Запрос» выберите поля Номенклатура и Штрихкод.
  3. Перейдите на вкладку «Ресурсы». В поле «Ресурсы» выберите Штрихкод, а в качестве выражения используйте функцию Массив(Штрихкод).
  4. Система автоматически соберет все штрихкоды для каждой номенклатуры в массив. 1С умеет отображать массивы в виде строки, разделенной запятыми, без дополнительных настроек.

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

Метод 2: Использование ресурсов с функцией СоединитьСтроки

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

Для этого в настройках СКД на вкладке «Вычисляемые поля» или непосредственно в выражении ресурса пропишите следующее:

СоединитьСтроки(Массив(Штрихкод), "; ", "")

Здесь Массив(Штрихкод) собирает все значения в список, а СоединитьСтроки преобразует их в единую текстовую строку, используя указанный вами разделитель. Это решение выглядит профессионально и легко читается пользователями.

Почему не стоит пытаться создать «динамические колонки» в запросе?

Важно помнить, что архитектура баз данных 1С и SQL в целом ориентирована на вертикальное представление данных. Попытка принудительно развернуть данные в горизонтальные колонки («Штрихкод 1», «Штрихкод 2»...) на уровне запроса приводит к следующим проблемам:

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

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

← На главную