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

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

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

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

Способ 1. Использование системного поля в настройках конкретной группировки

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

Проанализируем правильный алгоритм действий:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. В дереве настроек выберем конкретную Группировку, которую необходимо пронумеровать (например, группировка по полю Контрагент).
  3. Перейдем на вкладку Выбранные поля, которая относится именно к этой группировке (внизу окна настроек).
  4. Развернем папку Системные поля и перетащим поле Номер по порядку в список выбранных полей этой группировки.

Важный момент: если вы добавите это поле именно в настройки группировки, СКД поймет, что счетчик должен применяться к итерации по группам, а не по записям внутри них. Если в отчете несколько уровней вложенности, и вы добавите системное поле в каждую группировку, то на каждом уровне нумерация будет начинаться заново (1, 2, 3...) для каждого нового родительского элемента. При программном формировании таких структур полезно использовать СКДБилдер, который упрощает работу с объектной моделью и сокращает объем кода.

Способ 2. Иерархическая нумерация

Выясним причину, почему обычный номер по порядку не всегда подходит для сложных иерархических структур. Если ваш отчет построен на иерархическом справочнике (например, Номенклатура с группами и элементами) или вы используете тип группировки Иерархия, стандартная нумерация 1, 2, 3 может выглядеть неинформативно.

Для таких случаев в СКД предусмотрено поле Номер по порядку в иерархии. Рассмотрим его особенности:

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

Способ 3. Создание нумерации через вычисляемые поля

Иногда стандартного вывода цифр недостаточно. Например, если заказчик просит выводить номер с префиксом или в специфическом формате (например, «№1»). В этом случае мы можем прибегнуть к механизму Вычисляемых полей.

Разберем по шагам, как создать кастомный номер:

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

Посмотрим на пример выражения, которое добавляет текстовый префикс к системному номеру:


"№ " + Формат(НомерПоПорядку, "ЧГ=0")

Однако стоит помнить, что системное поле НомерПоПорядку внутри выражения вычисляемого поля может вести себя нестабильно, если оно не инициализировано в контексте группировки. Поэтому для сложных расчетов (например, сквозной нумерации вложенных групп без сброса при смене родителя) чаще используют функции общих модулей, куда передается коллекция данных.

Влияние расположения группировок на отображение номера

Проанализируем ситуацию, когда номера выводятся, но отчет выглядит «разваленным». Это напрямую зависит от настройки Расположение группировок на вкладке Другие настройки.

Рассмотрим два варианта:

  1. Расположение «Раздельно»: В этом случае для каждой группировки создается своя колонка. Если вы добавили Номер по порядку для трех разных группировок, в отчете появится три колонки с номерами. Это наиболее чистый способ, если нужно четко разделять уровни.
  2. Расположение «Вместе»: Все группировки выводятся в одной колонке (с отступами). В этом случае номера разных уровней будут выводиться в той же колонке, что и названия групп. Здесь важно следить за тем, чтобы системные поля не перекрывали друг друга.

Нюансы работы с макетами оформления

Если в вашем отчете используются Индивидуальные макеты (созданные вручную на вкладке «Макеты»), системные поля могут перестать выводиться автоматически. Выясним, как это исправить.

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

Для визуально насыщенных отчетов, где в одну ячейку помимо номера требуется вывести дополнительные элементы, может пригодиться техника, описывающая склейку нескольких картинок в одну средствами 1С.

Почему не стоит нумеровать строки в запросе?

Часто новички пытаются вычислить порядковый номер прямо в тексте SQL-запроса (используя переменные или соединения). Проанализируем, почему это плохая практика для 1С:

  1. Пользовательские настройки: Как только пользователь добавит отбор, изменит порядок сортировки или состав группировок в режиме «1С:Предприятие», номера, рассчитанные в запросе, станут неверными.
  2. Производительность: Соединение таблицы самой с собой для подсчета количества записей «сверху» значительно замедляет выполнение отчета на больших объемах данных. Здесь важна общая оптимизация отчетов с набором данных - объект, которая помогает избежать проблем при использовании сложных источников данных.
  3. Механизм компоновки: СКД рассчитывает системные поля после наложения всех фильтров и выполнения итогов, что гарантирует актуальность нумерации в любой конфигурации отчета.

Таким образом, использование системного поля Номер по порядку в настройках выбранных полей конкретной группировки — это наиболее надежный, быстрый и правильный с точки зрения архитектуры платформы способ решения задачи.

Заключение

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

← На главную