Добавление поля в схему компоновки данных: разбор способов

· 9 мин

Содержание

Добавить поле в запрос — это только половина дела. В отчёте на СКД поле живёт сразу в двух местах: сначала попадает в набор данных, а потом его нужно отдельно перетащить в Настройки → Выбранные поля. Пока второй шаг не сделан, колонки в результате не будет, сколько бы раз вы ни перечитывали запрос.

Разберём все рабочие способы: поле из запроса, вычисляемое поле на языке выражений СКД, поле из второго набора данных через объединение и связь, настройку формата вывода. И отдельно — что делать, когда поле добавлено, а в отчёте его всё равно нет.

Схема компоновки данных одинаково устроена и в отдельном макете типа Схема компоновки данных, и в объекте «Отчёт», построенном на СКД. Пути ниже — для платформы 8.3 с интерфейсом «Такси».

Из чего состоит схема и где вообще добавляют поля

Конструктор схемы компоновки открывается двойным кликом по макету СКД. Сверху идут закладки, и у каждой — своя зона ответственности:

  • 📊 Наборы данных — источники строк (запрос, объект или объединение) и список полей, которые из них доступны.
  • 🧮 Вычисляемые поля — поля, которых нет в источнике, но которые считаются по формуле.
  • 📐 Ресурсы — итоги (суммы, количества) по группировкам.
  • 🔧 Параметры — значения, которые подставляются в запрос и отбор.
  • 🔗 Связи наборов данных — как один набор присоединяется к другому.
  • ⚙️ Настройки — то, что реально увидит пользователь: выбранные поля, группировки, отборы, оформление.

Ключевой момент: закладка «Наборы данных» определяет, какие поля в принципе доступны, а закладка «Настройки» — какие из них попадут в результат. Это две разные операции, и путают их чаще всего.

Поле из запроса: как оно попадает в набор данных

Самый частый случай — поле уже есть в таблице базы, нужно просто его показать.

  1. На закладке Наборы данных выделите набор с типом «Запрос» и нажмите Конструктор запроса.
  2. В конструкторе раскройте нужную таблицу слева и перенесите поле в список Поля (средняя колонка). Для реквизита по ссылке раскройте поле-ссылку и возьмите вложенный реквизит — например, Номенклатура.Артикул.
  3. Нажмите ОК. Платформа сама допишет поле в текст запроса и добавит строку в таблицу полей набора данных.

После этого поле появится в нижней таблице набора данных. У каждого поля есть колонки Поле, Путь, Заголовок и роли (Поле, Условие, Порядок, Группировка). Заголовок по умолчанию берётся из синонима реквизита; если нужен свой — впишите его прямо в колонку Заголовок.

Если поле в запросе есть, а в таблице набора данных не появилось — нажмите кнопку Заполнить поля набора данных по запросу (иконка над списком полей). Она синхронизирует список с текстом запроса.

Стоит знать про три служебные колонки в таблице полей. Выражение представления задаёт, что показывать вместо самого значения (например, вывести Представление(Контрагент) вместо ссылки). Выражение упорядочивания управляет сортировкой — полезно, когда сортировать нужно не по видимому тексту, а по скрытому полю (скажем, статусы сортировать по номеру, а не по алфавиту). Ограничение доступа отвечает за роли поля: снимете роль Поле — и колонка перестанет предлагаться для вывода.

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

Вычисляемые поля: считаем прямо в схеме

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

  1. Откройте закладку Вычисляемые поля и добавьте строку кнопкой Добавить.
  2. В колонке Путь данных задайте техническое имя поля латиницей или кириллицей без пробелов, например Сумма или СуммаСоСкидкой.
  3. В колонке Выражение впишите формулу на языке выражений СКД: Количество * Цена.
  4. В Заголовок — то, что увидит пользователь: Сумма, руб.

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

Типовые примеры выражений:

Что нужноВыражение
Сумма строкиКоличество * Цена
Скидка в процентах?(Цена = 0, 0, СуммаСкидки / Цена * 100)
Склеить ФИОФамилия + " " + Имя
Ссылка как строкаПредставление(Контрагент)

Деление всегда защищайте от нуля через ?(Знаменатель = 0, 0, ...). Иначе при пустом значении отчёт упадёт с ошибкой деления на ноль ровно на той строке, где знаменатель обнулился.

Отдельно о вычисляемых полях в группировках. Выражение Количество * Цена корректно считается на уровне детальных записей: там известны и количество, и цена конкретной строки. А вот в строке-группировке (например, по контрагенту) этих значений уже нет — есть набор детальных строк. Если поле нужно и в итоговой строке, применяйте функцию ВычислитьВыражение: запись ВычислитьВыражение("Сумма(Количество * Цена)") посчитает значение в рамках текущей группировки. Без неё вычисляемое поле в группировке останется пустым.

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

Несколько наборов: объединение и связь

Когда данные лежат в разных источниках, одного запроса мало. Есть два принципиально разных механизма.

Объединение — когда строки разных наборов идут в общий список друг под другом. Создайте набор с типом Объединение, внутри него разместите два-три набора-запроса. Условие одно: у объединяемых наборов должны совпадать имена полей. Поле Сумма из первого набора встанет в ту же колонку, что Сумма из второго. Если имена разные — задайте псевдонимы в запросах, чтобы они сошлись.

Связь наборов — когда к строкам первого набора подтягиваются данные из второго (принцип «главный — подчинённый»). Настраивается на закладке Связи наборов данных:

  1. Добавьте строку связи.
  2. В колонке Источник укажите главный набор, в Приёмник — подчинённый.
  3. В Выражение источника и Выражение приёмника впишите поля, по которым идёт сопоставление, например Контрагент в обоих.
  4. При необходимости задайте Параметр — имя параметра, через который значение передаётся в запрос приёмника.

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

Для объединения частая ошибка — несовпадение имён. Если в первом запросе поле называется Сумма, а во втором — СуммаДокумента, в объединённом наборе будут две разные колонки, частично пустые. Задайте в обоих запросах одинаковый псевдоним через КАК Сумма, и строки встанут в одну колонку. Поля, которых нет во втором наборе, заполняйте константой НЕОПРЕДЕЛЕНО КАК ИмяПоля, чтобы структура совпала.

Связь набора данных работает медленнее, чем соединение внутри одного запроса. Если оба источника — запросы к одной базе, почти всегда правильнее сделать СОЕДИНЕНИЕ в тексте запроса, а связь наборов оставить для случаев, когда источники действительно разные (например, запрос плюс внешний набор типа «Объект»).

Формат и оформление поля при выводе

Число без формата выглядит как 1234.5, а дата — с временем 00:00:00. Приводят поле в порядок в его параметрах вывода.

Дважды кликните по полю в наборе данных (или откройте свойства) и найдите группу Параметры вывода. Там задаётся:

  • 🔢 Формат — строка форматирования. Для суммы: ЧЦ=15; ЧДЦ=2. Для даты: ДЛФ=D. Для скрытия нулей: добавьте ЧН= (пусто).
  • 📏 Минимальная ширина и Максимальная ширина — ширина колонки.
  • ↔️ Положение — выравнивание содержимого.

Несколько строк формата, которые нужны почти в каждом отчёте:

ЗадачаСтрока формата
Сумма, 2 знака после запятойЧЦ=15; ЧДЦ=2
Скрыть нулиЧН=
Только дата, без времениДЛФ=D
Дата и времяДЛФ=DT
Процент со знаком %ЧДЦ=2; ЧП=%

Формат можно задать и точечно, уже в настройках отчёта: закладка Настройки → Параметры вывода для конкретной группировки. Так удобно, когда одно поле в разных отчётах показывается по-разному.

Для подсветки значений цветом или шрифтом используйте Настройки → Условное оформление: добавьте элемент, в Оформление выберите цвет, в Условие — например СуммаДолга > 0, в Оформляемые поля — колонку. Это не меняет данные, только внешний вид.

Ресурсы, параметры и реквизиты через точку

Три приёма, без которых отчёт редко обходится.

Ресурсы — это итоги. Чтобы в разрезе группировок считалась сумма, вынесите поле на закладку Ресурсы и задайте выражение Сумма(СуммаДокумента). Платформа посчитает итог по каждой группировке и общий итог внизу. Без ресурса поле просто повторится в строках, итогов не будет.

Параметры передают в запрос условия отбора. Объявите параметр в тексте запроса через &ДатаНачала, и он автоматически попадёт на закладку Параметры. Там можно задать заголовок, тип и значение по умолчанию. Параметр Период стандартного типа СтандартныйПериод даёт пользователю удобный выбор интервала.

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

Глубокое разыменование (три-четыре точки) на больших выборках тормозит: каждая точка — это неявное соединение. Для частых отчётов такие реквизиты лучше брать явным соединением или предрасчётом.

Почему поле добавлено, а в отчёте его нет

Самая частая претензия к СКД — «я добавил поле, а оно не выводится». Почти всегда причина в одном из пунктов ниже.

Диагностика: выберите симптом

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

Частые вопросы

Можно ли добавить поле в готовый отчёт, не меняя конфигурацию?
Да, если отчёт разрешает пользовательские настройки. Через Ещё → Изменить вариант открывается редактор, где можно добавить доступные поля в выбранные. Но добавить поле, которого нет в наборе данных, так нельзя — для этого нужен доступ к схеме в конфигураторе или расширение.
Чем вычисляемое поле отличается от ресурса?
Вычисляемое поле считается в каждой строке по своей формуле. Ресурс — это итог по группировке (сумма, количество, максимум). Одно поле часто сначала делают вычисляемым, а потом выносят в ресурсы, чтобы получить итоги.
Почему в языке выражений СКД нет моей привычной функции?
Язык выражений компоновки — подмножество встроенного языка, и часть функций в нём недоступна. Сложную логику выносят либо в запрос, либо в вычисляемое поле через ВычислитьВыражение, либо обрабатывают в модуле объекта отчёта при компоновке макета.
Как вывести поле с картинкой или ссылкой?
Для изображения заведите поле с типом «хранилище значения» или макет оформления и в параметрах вывода укажите, что это картинка. Для гиперссылки в параметрах вывода поля включите свойство, отвечающее за гиперссылку, а значением подставьте навигационную ссылку объекта.
Добавил реквизит через точку, отчёт стал медленным — что делать?
Каждая точка в пути — это неявное соединение таблиц. Если таких реквизитов много или выборка большая, перенесите их в текст запроса явным соединением либо уберите лишние уровни разыменования.