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