Добавление поля в схему компоновки данных: разбор способов
Содержание
Добавить поле в запрос — это только половина дела. В отчёте на СКД поле живёт сразу в двух местах: сначала попадает в набор данных, а потом его нужно отдельно перетащить в Настройки → Выбранные поля. Пока второй шаг не сделан, колонки в результате не будет, сколько бы раз вы ни перечитывали запрос.
Разберём все рабочие способы: поле из запроса, вычисляемое поле на языке выражений СКД, поле из второго набора данных через объединение и связь, настройку формата вывода. И отдельно — что делать, когда поле добавлено, а в отчёте его всё равно нет.
Схема компоновки данных одинаково устроена и в отдельном макете типа Схема компоновки данных, и в объекте «Отчёт», построенном на СКД. Пути ниже — для платформы 8.3 с интерфейсом «Такси».
Из чего состоит схема и где вообще добавляют поля
Конструктор схемы компоновки открывается двойным кликом по макету СКД. Сверху идут закладки, и у каждой — своя зона ответственности:
- 📊
Наборы данных— источники строк (запрос, объект или объединение) и список полей, которые из них доступны. - 🧮
Вычисляемые поля— поля, которых нет в источнике, но которые считаются по формуле. - 📐
Ресурсы— итоги (суммы, количества) по группировкам. - 🔧
Параметры— значения, которые подставляются в запрос и отбор. - 🔗
Связи наборов данных— как один набор присоединяется к другому. - ⚙️
Настройки— то, что реально увидит пользователь: выбранные поля, группировки, отборы, оформление.
Ключевой момент: закладка «Наборы данных» определяет, какие поля в принципе доступны, а закладка «Настройки» — какие из них попадут в результат. Это две разные операции, и путают их чаще всего.
Поле из запроса: как оно попадает в набор данных
Самый частый случай — поле уже есть в таблице базы, нужно просто его показать.
- На закладке
Наборы данныхвыделите набор с типом «Запрос» и нажмитеКонструктор запроса. - В конструкторе раскройте нужную таблицу слева и перенесите поле в список
Поля(средняя колонка). Для реквизита по ссылке раскройте поле-ссылку и возьмите вложенный реквизит — например,Номенклатура.Артикул. - Нажмите
ОК. Платформа сама допишет поле в текст запроса и добавит строку в таблицу полей набора данных.
После этого поле появится в нижней таблице набора данных. У каждого поля есть колонки Поле, Путь, Заголовок и роли (Поле, Условие, Порядок, Группировка). Заголовок по умолчанию берётся из синонима реквизита; если нужен свой — впишите его прямо в колонку Заголовок.
Если поле в запросе есть, а в таблице набора данных не появилось — нажмите кнопку Заполнить поля набора данных по запросу (иконка над списком полей). Она синхронизирует список с текстом запроса.
Стоит знать про три служебные колонки в таблице полей. Выражение представления задаёт, что показывать вместо самого значения (например, вывести Представление(Контрагент) вместо ссылки). Выражение упорядочивания управляет сортировкой — полезно, когда сортировать нужно не по видимому тексту, а по скрытому полю (скажем, статусы сортировать по номеру, а не по алфавиту). Ограничение доступа отвечает за роли поля: снимете роль Поле — и колонка перестанет предлагаться для вывода.
Теперь главный шаг, из-за которого новички теряют часы: перейдите на закладку Настройки, откройте Выбранные поля и перетащите поле туда из списка доступных слева. Только после этого колонка окажется в отчёте. В настройках поле можно переименовать под конкретный вариант отчёта, не трогая заголовок в наборе данных — это удобно, когда одно и то же поле в разных вариантах называется по-разному.
Вычисляемые поля: считаем прямо в схеме
Если значения нет в базе, но его можно вывести из других полей, не нужно менять запрос — добавьте вычисляемое поле.
- Откройте закладку
Вычисляемые поляи добавьте строку кнопкойДобавить. - В колонке
Путь данныхзадайте техническое имя поля латиницей или кириллицей без пробелов, напримерСуммаилиСуммаСоСкидкой. - В колонке
Выражениевпишите формулу на языке выражений СКД:Количество * Цена. - В
Заголовок— то, что увидит пользователь:Сумма, руб.
Язык выражений СКД похож на встроенный, но не равен ему. Доступны арифметика, ?() вместо условия, строковые функции, Формат(), Представление(). Обращаться можно к любому полю набора данных по его пути.
Типовые примеры выражений:
| Что нужно | Выражение |
|---|---|
| Сумма строки | Количество * Цена |
| Скидка в процентах | ?(Цена = 0, 0, СуммаСкидки / Цена * 100) |
| Склеить ФИО | Фамилия + " " + Имя |
| Ссылка как строка | Представление(Контрагент) |
Деление всегда защищайте от нуля через ?(Знаменатель = 0, 0, ...). Иначе при пустом значении отчёт упадёт с ошибкой деления на ноль ровно на той строке, где знаменатель обнулился.
Отдельно о вычисляемых полях в группировках. Выражение Количество * Цена корректно считается на уровне детальных записей: там известны и количество, и цена конкретной строки. А вот в строке-группировке (например, по контрагенту) этих значений уже нет — есть набор детальных строк. Если поле нужно и в итоговой строке, применяйте функцию ВычислитьВыражение: запись ВычислитьВыражение("Сумма(Количество * Цена)") посчитает значение в рамках текущей группировки. Без неё вычисляемое поле в группировке останется пустым.
Вычисляемое поле точно так же нужно перетащить в Выбранные поля на закладке Настройки — само оно не выведется.
Несколько наборов: объединение и связь
Когда данные лежат в разных источниках, одного запроса мало. Есть два принципиально разных механизма.
Объединение — когда строки разных наборов идут в общий список друг под другом. Создайте набор с типом Объединение, внутри него разместите два-три набора-запроса. Условие одно: у объединяемых наборов должны совпадать имена полей. Поле Сумма из первого набора встанет в ту же колонку, что Сумма из второго. Если имена разные — задайте псевдонимы в запросах, чтобы они сошлись.
Связь наборов — когда к строкам первого набора подтягиваются данные из второго (принцип «главный — подчинённый»). Настраивается на закладке Связи наборов данных:
- Добавьте строку связи.
- В колонке
Источникукажите главный набор, вПриёмник— подчинённый. - В
Выражение источникаиВыражение приёмникавпишите поля, по которым идёт сопоставление, напримерКонтрагентв обоих. - При необходимости задайте
Параметр— имя параметра, через который значение передаётся в запрос приёмника.
После настройки связи поля подчинённого набора появляются в общем списке доступных полей, и их можно вывести как обычно.
Для объединения частая ошибка — несовпадение имён. Если в первом запросе поле называется Сумма, а во втором — СуммаДокумента, в объединённом наборе будут две разные колонки, частично пустые. Задайте в обоих запросах одинаковый псевдоним через КАК Сумма, и строки встанут в одну колонку. Поля, которых нет во втором наборе, заполняйте константой НЕОПРЕДЕЛЕНО КАК ИмяПоля, чтобы структура совпала.
Связь набора данных работает медленнее, чем соединение внутри одного запроса. Если оба источника — запросы к одной базе, почти всегда правильнее сделать СОЕДИНЕНИЕ в тексте запроса, а связь наборов оставить для случаев, когда источники действительно разные (например, запрос плюс внешний набор типа «Объект»).
Формат и оформление поля при выводе
Число без формата выглядит как 1234.5, а дата — с временем 00:00:00. Приводят поле в порядок в его параметрах вывода.
Дважды кликните по полю в наборе данных (или откройте свойства) и найдите группу Параметры вывода. Там задаётся:
- 🔢
Формат— строка форматирования. Для суммы:ЧЦ=15; ЧДЦ=2. Для даты:ДЛФ=D. Для скрытия нулей: добавьтеЧН=(пусто). - 📏
Минимальная ширинаиМаксимальная ширина— ширина колонки. - ↔️
Положение— выравнивание содержимого.
Несколько строк формата, которые нужны почти в каждом отчёте:
| Задача | Строка формата |
|---|---|
| Сумма, 2 знака после запятой | ЧЦ=15; ЧДЦ=2 |
| Скрыть нули | ЧН= |
| Только дата, без времени | ДЛФ=D |
| Дата и время | ДЛФ=DT |
| Процент со знаком % | ЧДЦ=2; ЧП=% |
Формат можно задать и точечно, уже в настройках отчёта: закладка Настройки → Параметры вывода для конкретной группировки. Так удобно, когда одно поле в разных отчётах показывается по-разному.
Для подсветки значений цветом или шрифтом используйте Настройки → Условное оформление: добавьте элемент, в Оформление выберите цвет, в Условие — например СуммаДолга > 0, в Оформляемые поля — колонку. Это не меняет данные, только внешний вид.
Ресурсы, параметры и реквизиты через точку
Три приёма, без которых отчёт редко обходится.
Ресурсы — это итоги. Чтобы в разрезе группировок считалась сумма, вынесите поле на закладку Ресурсы и задайте выражение Сумма(СуммаДокумента). Платформа посчитает итог по каждой группировке и общий итог внизу. Без ресурса поле просто повторится в строках, итогов не будет.
Параметры передают в запрос условия отбора. Объявите параметр в тексте запроса через &ДатаНачала, и он автоматически попадёт на закладку Параметры. Там можно задать заголовок, тип и значение по умолчанию. Параметр Период стандартного типа СтандартныйПериод даёт пользователю удобный выбор интервала.
Разыменование по точке избавляет от лишних соединений. Вместо того чтобы соединять таблицу номенклатуры ради одного артикула, возьмите в конструкторе запроса поле Номенклатура.Артикул — платформа подтянет его через ссылку сама. Цепочку можно продолжать: Номенклатура.ЕдиницаИзмерения.Наименование.
Глубокое разыменование (три-четыре точки) на больших выборках тормозит: каждая точка — это неявное соединение. Для частых отчётов такие реквизиты лучше брать явным соединением или предрасчётом.
Почему поле добавлено, а в отчёте его нет
Самая частая претензия к СКД — «я добавил поле, а оно не выводится». Почти всегда причина в одном из пунктов ниже.
Отдельная история — отбор по вычисляемому полю. Наложить условие в запросе на поле, которого в запросе нет, нельзя. Отбор по вычисляемому полю задают уже в компоновке: Настройки → Отбор, где в списке доступных полей вычисляемое поле присутствует наравне с полями запроса. Если его там нет, проверьте, что у поля в таблице вычисляемых заполнен путь данных и оно не конфликтует по имени с полем набора.
Частые вопросы
Можно ли добавить поле в готовый отчёт, не меняя конфигурацию?
Ещё → Изменить вариант открывается редактор, где можно добавить доступные поля в выбранные. Но добавить поле, которого нет в наборе данных, так нельзя — для этого нужен доступ к схеме в конфигураторе или расширение.Чем вычисляемое поле отличается от ресурса?
Почему в языке выражений СКД нет моей привычной функции?
ВычислитьВыражение, либо обрабатывают в модуле объекта отчёта при компоновке макета.