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