Как вывести список подчиненных записей под документом в одной колонке СКД без смещения вправо?

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

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

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

Способ 1: Использование ресурсов и функции агрегации

Самый быстрый и изящный способ избавиться от группировочной «лесенки» — перевести подчиненные данные в разряд ресурсов. Выясним причину: СКД умеет сворачивать ресурсы по группировкам, а современные функции языка выражений позволяют собирать строки.

На закладке Ресурсы в СКД можно использовать агрегатные функции для текстовых полей. В обсуждениях часто предлагают использовать функцию Массив. Выглядит это так:

Массив(Причина)

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

В поле Выражение для ресурса напишем:

СоединитьСтроки(ТаблицаЗначений.Причина, ", ", " ")

Что мы здесь делаем? Мы берем все значения поля Причина в рамках текущего документа и соединяем их в одну текстовую строку. В качестве разделителя можно указать запятую или даже символ переноса строки (через функцию Символы.ПС). Таким образом, все причины выведутся в одной ячейке аккуратным списком.

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

Способ 2: Настройка расположения группировок

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

Перейдем на вкладку Другие настройки на уровне всего отчета или конкретной группировки. Найдем параметр Расположение группировок.

  1. Изменим его значение на В одной колонке.
  2. В этом случае СКД перестанет сдвигать каждую новую вложенную группировку вправо.
  3. Документ и подчиненные ему Причины выстроятся строго вертикально друг под другом в первой колонке отчета.

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

Способ 3: Вложенные детальные записи с отключенным оформлением

Рассмотрим еще один хитрый прием. Мы можем визуально «приклеить» причины к документу, используя детальные записи.

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

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

Способ 4: Создание собственного макета группировки

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

Посмотрим на пример использования закладки Макеты:

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

Этот способ является самым трудозатратным, так как требует ручной отрисовки границ, шрифтов и цветов, но он дает 100% контроль над тем, как будет выглядеть каждая ячейка вашего отчета. Никаких случайных смещений вправо больше не произойдет.

Способ 5: Вертикальное расположение полей

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

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

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

← На главную