При разработке отчетов на базе Системы Компоновки Данных (СКД) в 1С часто возникает нетривиальная задача: необходимо вывести значения нескольких разных ресурсов (например, Сумма, Количество, Вес) не в отдельных колонках таблицы, а друг под другом или в одной ячейке внутри одного столбца. Разберем по шагам, как можно решить эту задачу, не прибегая к полному переписыванию сложного исходного запроса.
Проанализируем ситуацию: у нас есть измерение (например, Контрагент) и несколько ресурсов. Стандартное поведение СКД — раскидать ресурсы по горизонтали в разные столбцы. Рассмотрим несколько эффективных способов изменения этого поведения, начиная от штатных визуальных настроек и заканчивая программной обработкой.
Это самый простой и правильный подход, если вам просто нужно визуально разместить ресурсы друг под другом, не меняя структуру данных. Посмотрим, как это настраивается на вкладке Настройки в схеме компоновки данных.
Ресурс1 и Ресурс2) внутрь этой созданной группы.В результате при формировании отчета СКД автоматически выведет колонку, внутри которой показатели будут располагаться друг под другом.
Если вам нужно, чтобы значения выводились прямо в одной ячейке на одной строке (например, через запятую), проанализируем другую настройку. Алгоритм действий аналогичен первому способу, но с небольшим отличием:
Этот метод отлично подходит для компактных отчетов, где экономия места по ширине критически важна. Для дополнительной настройки отображения показателей только в нужных столбцах пригодится метод вывода ресурса в одной колонке СКД.
Рассмотрим ситуацию, когда ресурсы не нужно суммировать в общих итогах (например, итоги отключены или не имеют смысла), а требуется лишь их визуальное отображение в одной ячейке в несколько строк. Для этого мы можем использовать вычисляемые поля СКД. Для решения похожей задачи группировки текстовых данных подойдет способ сбора значений колонки из нескольких строк в СКД.
ОбъединенныйРесурс.
Строка(Ресурс1) + Символы.ПС + Строка(Ресурс2)
Важно: Чтобы перенос строки сработал в табличном документе, перейдите на вкладку Условное оформление (или в настройки оформления выбранного поля) и установите параметр Размещение текста в значение Переносить.
Разберем более продвинутый подход, который упоминался разработчиками на форумах. Если нам нужно физически размножить строки исходной таблицы, чтобы каждый ресурс выводился как отдельная запись (при этом не меняя исходный сложный запрос отчета), мы можем использовать объединение (UNION) или кросс-соединение.
Создадим искусственный набор данных (таблицу-счетчик), который будет содержать две строки (1 и 2). Затем свяжем его с основным набором.
ВЫБРАТЬ 1 КАК Счетчик
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
НовыйРесурс.
ВЫБОР
КОГДА Счетчик = 1 ТОГДА Ресурс1
ИНАЧЕ Ресурс2
КОНЕЦ
Теперь выводите в отчете НовыйРесурс. Для первой "виртуальной" строки выведется первый показатель, для второй — второй. Это мощный прием, позволяющий трансформировать колонки в строки на лету.
Посмотрим на обходной путь. Если логика отчета подразумевает, что вид выводимого ресурса зависит от конкретной группировки (например, для товаров выводим количество, а для услуг — сумму, но в одной и той же колонке), воспользуемся условным оформлением.
Ресурс1).Ресурс2 (чтобы выбрать поле компоновки данных, нажмите на кнопку выбора и переключитесь на выбор поля).Ресурс1.Если ни один из стандартных вариантов не дает нужной визуальной картины, обратимся к тяжелой артиллерии — созданию собственного макета в СКД. На вкладке Макеты мы можем переопределить стандартный вывод системы.
[Ресурс1]
[Ресурс2]
Этот способ требует рутинной ручной отрисовки, но дает 100% контроль над внешним видом печатной формы.
Наконец, проанализируем программный метод. Если отчет имеет сложную шапку, которую СКД не может сгенерировать автоматически, мы можем перехватить процесс вывода в модуле объекта отчета.
ПриКомпоновкеРезультата.СтандартнаяОбработка = Ложь;.ТабличныйДокумент в цикле, анализируя текст ячеек.Объединить() для ячеек или программно перезаписывайте свойство Текст нужной комбинацией значений.Подведем итоги: СКД предоставляет огромный арсенал инструментов для гибкой настройки вывода. В большинстве случаев для вывода нескольких ресурсов в один столбец достаточно использовать группы выбранных полей с расположением "Вертикально". Если же требуется изменение логики обхода данных, трюк с набором данных-счетчиком станет элегантным решением без вмешательства в "тяжелый" основной запрос.