Как вывести дополнительные реквизиты в отдельные колонки отчета СКД?

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

При работе с типовыми конфигурациями 1С, такими как ERP, УТ 11 или БП 3.0, разработчики часто сталкиваются с необходимостью вывода дополнительных реквизитов объектов (справочников или документов) в отчет. Основная сложность заключается в том, что в базе данных эти реквизиты хранятся в виде вертикальной таблицы (табличной части), а в отчете их требуется отобразить горизонтально — каждый реквизит в своей колонке. Рассмотрим, как решить эту задачу в Системе компоновки данных (СКД), особенно когда конфигурация находится на поддержке и вносить изменения в метаданные нельзя.

Понимание архитектуры дополнительных реквизитов

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

Способ 1: Использование механизма «Характеристики» в СКД

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

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

  1. Тип объекта: укажем объект, для которого мы выводим реквизиты, например, СправочникСсылка.ДоговорыКонтрагентов.
  2. Источник характеристик: выберем вариант Запрос или Таблица. Обычно используется таблица характеристик самого справочника.
  3. Таблица характеристик: Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты.
  4. Поле ключа: Свойство. Это поле связывает объект с конкретным видом дополнительного реквизита.
  5. Поле имени: Свойство.Наименование. Отсюда система будет брать названия для будущих колонок.
  6. Поле значения: Значение. Здесь хранятся сами данные.

После этой настройки, когда мы перейдем на закладку Настройки и выберем поле Договор, внутри него (в дереве доступных полей) появятся все дополнительные реквизиты. Теперь мы можем просто перетащить их в Выбранные поля, и они отобразятся как отдельные колонки.

Способ 2: Работа через кросс-таблицу (динамические колонки)

Если нам заранее неизвестно количество и состав дополнительных реквизитов, или мы хотим, чтобы они добавлялись в отчет автоматически, нам поможет пользовательская СКД в режиме "1С:Предприятие".

Рассмотрим настройку структуры отчета:

  1. Добавим в структуру элемент Таблица.
  2. В Строки таблицы добавим группировку по объекту, например, Договор.
  3. В Колонки таблицы добавим группировку по полю Свойство (или ДополнительныйРеквизит).
  4. В Выбранные поля для всей таблицы (или для группировки строк) добавим поле Значение.

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

Решение проблемы с нечисловыми значениями в ресурсах

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

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


Максимум(Значение)

Это выражение позволит системе взять единственное значение для конкретной пары "Объект - Свойство" и вывести его в отчет, независимо от типа данных.

Редактирование заголовков колонок

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

  1. Псевдонимы в запросе: Если мы используем первый способ (через характеристики), мы можем в самом запросе прописать конструкцию ВЫБОР КОГДА. Однако, если конфигурацию менять нельзя, этот метод подходит только для внешних отчетов.
  2. Условное оформление: В настройках отчета на закладке Условное оформление можно добавить правило. В области "Оформляемые поля" выбираем наше свойство, а в параметре "Текст" прописываем нужное название.
  3. Пользовательские поля: Мы можем создать пользовательское поле типа "Выбор", где пропишем логику замены названий. Пример логического выражения:

ВЫБОР 
    КОГДА Свойство.Наименование = "СрокДействия_Внутренний_2023" 
    ТОГДА "Срок" 
    ИНАЧЕ Свойство.Наименование 
КОНЕЦ

Фильтрация пустых колонок и оптимизация

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

В настройках группировки колонок (там, где выбрано поле Свойство) перейдем на закладку Отбор и добавим условие:

Значение Заполнено

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

Таким образом, комбинируя механизм Характеристик с кросс-таблицами, мы получаем мощный инструмент вывода любых дополнительных сведений в удобном табличном виде.

← На главную