При работе с типовыми конфигурациями 1С, такими как ERP, УТ 11 или БП 3.0, разработчики часто сталкиваются с необходимостью вывода дополнительных реквизитов объектов (справочников или документов) в отчет. Основная сложность заключается в том, что в базе данных эти реквизиты хранятся в виде вертикальной таблицы (табличной части), а в отчете их требуется отобразить горизонтально — каждый реквизит в своей колонке. Рассмотрим, как решить эту задачу в Системе компоновки данных (СКД), особенно когда конфигурация находится на поддержке и вносить изменения в метаданные нельзя.
Прежде всего, проанализируем, как устроены дополнительные реквизиты. С точки зрения платформы 1С, это механизм характеристик. Для справочника, например, Справочник.ДоговорыКонтрагентов, дополнительные реквизиты хранятся в табличной части ДополнительныеРеквизиты. Каждый реквизит описывается парой: Свойство (ссылка на План видов характеристик) и Значение (произвольный тип данных). Наша задача — "развернуть" эту таблицу в колонки.
Это наиболее корректный и производительный способ. Он позволяет системе автоматически подтягивать дополнительные реквизиты так, будто они являются реальными реквизитами объекта. Разберем по шагам, как настроить этот механизм во внешнем отчете.
В конструкторе схемы компоновки данных (СКД) перейдем на закладку Настройки (или непосредственно в описании набора данных, если мы используем запрос) — для этого пригодятся инструменты разработчика 1С с консолью СКД. Нам нужно нажать кнопку Характеристики (она находится в верхней части окна конструктора запроса или на уровне набора данных в последних версиях платформы). В открывшемся окне добавим новую строку и заполним следующие параметры:
СправочникСсылка.ДоговорыКонтрагентов.Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты.Свойство. Это поле связывает объект с конкретным видом дополнительного реквизита.Свойство.Наименование. Отсюда система будет брать названия для будущих колонок.Значение. Здесь хранятся сами данные.После этой настройки, когда мы перейдем на закладку Настройки и выберем поле Договор, внутри него (в дереве доступных полей) появятся все дополнительные реквизиты. Теперь мы можем просто перетащить их в Выбранные поля, и они отобразятся как отдельные колонки.
Если нам заранее неизвестно количество и состав дополнительных реквизитов, или мы хотим, чтобы они добавлялись в отчет автоматически, нам поможет пользовательская СКД в режиме "1С:Предприятие".
Рассмотрим настройку структуры отчета:
Договор.Свойство (или ДополнительныйРеквизит).Значение.Важный нюанс: чтобы значения выводились в ячейках на пересечении строк и колонок, поле Значение обязательно должно быть описано как Ресурс (так же настраиваются итоги по колонке через вычисляемые поля).
Часто программисты сталкиваются с тем, что в ресурсах СКД по умолчанию предлагается функция Сумма. Если дополнительный реквизит имеет тип Строка, Булево или является ссылкой, функция суммы работать не будет, и колонка в отчете останется пустой.
Выясним причину: СКД пытается математически сложить текстовые данные. Чтобы корректно отобразить строковые или ссылочные дополнительные реквизиты, в выражении ресурса на закладке Ресурсы необходимо использовать агрегатную функцию Максимум или Минимум. Проанализируем пример выражения для поля Значение:
Максимум(Значение)
Это выражение позволит системе взять единственное значение для конкретной пары "Объект - Свойство" и вывести его в отчет, независимо от типа данных.
Если названия дополнительных реквизитов, заданные пользователями, кажутся слишком длинными или неудобными для печати, мы можем их переименовать. Рассмотрим три варианта решения этой задачи:
ВЫБОР КОГДА. Однако, если конфигурацию менять нельзя, этот метод подходит только для внешних отчетов.
ВЫБОР
КОГДА Свойство.Наименование = "СрокДействия_Внутренний_2023"
ТОГДА "Срок"
ИНАЧЕ Свойство.Наименование
КОНЕЦ
При использовании кросс-таблицы может возникнуть ситуация, когда в отчет попадает слишком много пустых колонок (например, реквизит заполнен только у одного договора из тысячи). Чтобы отчет выглядел компактно, проанализируем ситуацию и добавим фильтр.
В настройках группировки колонок (там, где выбрано поле Свойство) перейдем на закладку Отбор и добавим условие:
Значение Заполнено
Это гарантирует, что в отчет попадут только те колонки дополнительных реквизитов, которые имеют хотя бы одно заполненное значение в рамках текущего набора данных. Также полезно в параметрах вывода установить флаг Расположение группировок в значение Нет для колонок, чтобы убрать лишние технические заголовки над названиями реквизитов.
Таким образом, комбинируя механизм Характеристик с кросс-таблицами, мы получаем мощный инструмент вывода любых дополнительных сведений в удобном табличном виде.