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