Как вывести несколько ресурсов в одном столбце в СКД 1С?

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

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

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

Способ 1. Использование вертикальной группировки выбранных полей

Это самый простой и правильный подход, если вам просто нужно визуально разместить ресурсы друг под другом, не меняя структуру данных. Посмотрим, как это настраивается на вкладке Настройки в схеме компоновки данных.

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

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

Способ 2. Группировка с расположением "В одной колонке"

Если вам нужно, чтобы значения выводились прямо в одной ячейке на одной строке (например, через запятую), проанализируем другую настройку. Алгоритм действий аналогичен первому способу, но с небольшим отличием:

  1. Создайте группу выбранных полей.
  2. В свойстве Расположение выберите вариант В одной колонке.
  3. Добавьте ресурсы внутрь группы.

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

Способ 3. Конкатенация ресурсов в вычисляемом поле (через перенос строки)

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

  1. Перейдите на вкладку Вычисляемые поля в схеме СКД.
  2. Создайте новое поле, назовем его ОбъединенныйРесурс.
  3. В колонке Выражение напишите код, который приведет числа к строке и соединит их через символ переноса строки:

Строка(Ресурс1) + Символы.ПС + Строка(Ресурс2)

Важно: Чтобы перенос строки сработал в табличном документе, перейдите на вкладку Условное оформление (или в настройки оформления выбранного поля) и установите параметр Размещение текста в значение Переносить.

Способ 4. Трюк с набором данных-счетчиком и вычисляемым полем

Разберем более продвинутый подход, который упоминался разработчиками на форумах. Если нам нужно физически размножить строки исходной таблицы, чтобы каждый ресурс выводился как отдельная запись (при этом не меняя исходный сложный запрос отчета), мы можем использовать объединение (UNION) или кросс-соединение.

Создадим искусственный набор данных (таблицу-счетчик), который будет содержать две строки (1 и 2). Затем свяжем его с основным набором.

  1. Добавьте новый набор данных типа "Запрос" и напишите следующий текст:

ВЫБРАТЬ 1 КАК Счетчик
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
  1. На вкладке Связи наборов данных свяжите ваш основной набор с этим новым набором так, чтобы каждая строка основного набора умножилась на два (полное соединение или связь без жесткого условия).
  2. Перейдите на вкладку Вычисляемые поля и добавьте новое поле НовыйРесурс.
  3. Задайте ему следующее выражение:

ВЫБОР 
    КОГДА Счетчик = 1 ТОГДА Ресурс1 
    ИНАЧЕ Ресурс2 
КОНЕЦ

Теперь выводите в отчете НовыйРесурс. Для первой "виртуальной" строки выведется первый показатель, для второй — второй. Это мощный прием, позволяющий трансформировать колонки в строки на лету.

Способ 5. Подмена ресурса через "Условное оформление"

Посмотрим на обходной путь. Если логика отчета подразумевает, что вид выводимого ресурса зависит от конкретной группировки (например, для товаров выводим количество, а для услуг — сумму, но в одной и той же колонке), воспользуемся условным оформлением.

  1. Выведите в отчет только один базовый ресурс (например, Ресурс1).
  2. Откройте вкладку Условное оформление.
  3. Добавьте новое правило. В поле Оформление найдите параметр Текст.
  4. Установите значение текста равным полю Ресурс2 (чтобы выбрать поле компоновки данных, нажмите на кнопку выбора и переключитесь на выбор поля).
  5. Настройте Условие, при котором должна происходить подмена.
  6. На вкладке Оформляемые поля выберите ваш Ресурс1.

Способ 6. Собственные макеты СКД

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

  1. Перейдите на вкладку Макеты.
  2. Добавьте Макет поля или Макет группировки.
  3. В нижней части (в редакторе табличного документа) нарисуйте нужную вам структуру. Вы можете объединять ячейки, менять их высоту, располагать параметры (в квадратных скобках) друг под другом:

[Ресурс1]
[Ресурс2]
  1. В свойствах ячеек укажите тип Параметр и свяжите их с соответствующими полями СКД.

Этот способ требует рутинной ручной отрисовки, но дает 100% контроль над внешним видом печатной формы.

Способ 7. Программная постобработка (ПриКомпоновкеРезультата)

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

  1. Откройте модуль объекта отчета.
  2. Добавьте обработчик события ПриКомпоновкеРезультата.
  3. Установите параметр СтандартнаяОбработка = Ложь;.
  4. Программно сформируйте отчет в табличный документ.
  5. Обойдите полученный ТабличныйДокумент в цикле, анализируя текст ячеек.
  6. При необходимости используйте метод Объединить() для ячеек или программно перезаписывайте свойство Текст нужной комбинацией значений.

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

← На главную