Как в отчете 1С настроить группировку данных по видам документов

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

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

Использование пользовательских полей для определения типа документа

Проанализируем базовый механизм определения типа данных в СКД. В системе компоновки данных существует стандартная функция ТипЗначения(), которая позволяет получить тип ссылки. Если в вашем распоряжении есть поле Регистратор (или любое другое поле ссылочного типа), мы можем извлечь из него информацию о том, к какому виду метаданных оно относится.

Для настройки группировки без изменения конфигурации (в режиме "1С:Предприятие") выполним следующие шаги:

  1. Откроем настройки отчета и перейдем в раздел Пользовательские поля.
  2. Добавим новое поле типа Поле-выражение.
  3. В колонке "Выражение детальных записей" пропишем конструкцию: ТипЗначения(Регистратор).
  4. В поле "Заголовок" укажем понятное название, например, "Вид документа".

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

Настройка структуры группировок в отчете

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

Разберем классическую схему построения иерархии:

  1. В настройках структуры отчета (вкладка "Настройки" -> "Структура") создадим новую группировку.
  2. В качестве поля группировки выберем наше пользовательское поле Вид документа (которое содержит ТипЗначения(Регистратор)).
  3. Внутри этой группировки (как подчиненный элемент) создадим еще одну группировку по полю Регистратор.

Такой подход позволит нам получить структуру вида: "Начисление зарплаты" (заголовок группы), а внутри — "Начисление зарплаты №1 от 01.01", "Начисление зарплаты №2 от 02.01" и так далее. Посмотрим на результат: отчет станет древовидным, что значительно упрощает навигацию по большим объемам данных.

Улучшение визуального представления данных

Иногда использование простого ТипЗначения() может привести к выводу системных имен. Чтобы гарантированно получить красивое название (синоним) документа, проанализируем использование функции представления. Вместо базового выражения можно использовать:

Представление(ТипЗначения(Регистратор))

Это обеспечит вывод текста "Ведомость в кассу" вместо технического описания типа. Если же перед нами стоит задача вывести тип и документ в одной строке для экономии места, мы можем прибегнуть к "склейке" представлений, хотя это чаще требуется в макетах. Однако для большинства задач стандартной иерархии группировок достаточно.

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

  1. Перейдем на вкладку Дополнительные настройки в СКД.
  2. Найдем параметр Расположение группировок.
  3. Установим значение Вместе.

В этом случае название типа документа и сам документ будут выводиться в одной колонке со смещением (лесенкой), что визуально делает отчет более компактным и аккуратным.

Сортировка по видам документов

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

В пользовательских полях можно создать еще одно выражение, которое будет присваивать числовой код каждому типу:


ВЫБОР 
    КОГДА ТипЗначения(Регистратор) = ТИП(Документ.ПриемНаРаботу) ТОГДА 1 
    КОГДА ТипЗначения(Регистратор) = ТИП(Документ.НачислениеЗарплаты) ТОГДА 2 
    ИНАЧЕ 3 
КОНЕЦ

Добавив это поле в настройки сортировки нашей основной группировки, мы получим строго заданный порядок следования разделов в отчете.

Оптимизация производительности для больших отчетов

Важно помнить, что функция ТипЗначения() вычисляется на стороне платформы 1С при обработке результата запроса. Если отчет строится по миллионам записей, это может замедлить работу. В таких случаях рассмотрим профессиональный подход: доработку схемы компоновки в конфигураторе.

В тексте запроса эффективнее заранее определить категорию документа через оператор ССЫЛКА. Это позволит SQL-серверу быстрее обработать данные:


ВЫБРАТЬ
    Данные.Регистратор,
    ВЫБОР
        КОГДА Данные.Регистратор ССЫЛКА Документ.Отпуск ТОГДА "Отпуска"
        КОГДА Данные.Регистратор ССЫЛКА Документ.НачислениеЗарплаты ТОГДА "Зарплата"
        ИНАЧЕ "Прочее"
    КОНЕЦ КАК ВидДокументаДляГруппировки
ИЗ
    РегистрНакопления.ЗарплатаКВыплате КАК Данные

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

Оформление и выделение групп

Чтобы отчет выглядел профессионально, настроим Условное оформление. Выделим строки с типами документов жирным шрифтом. Для этого:

  1. Перейдем в настройки условного оформления.
  2. Добавим новое правило: шрифт — Жирный.
  3. В условии укажем, что оформление применяется только к группировке Вид документа.

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

← На главную