Своё поле в отчёте на СКД: от настройки варианта до правки схемы
Содержание
Добавить пользовательское поле в отчет 1С 8.3 можно без Конфигуратора: откройте настройки варианта отчёта, перейдите на вкладку «Пользовательские поля» и создайте поле-выражение (формула над имеющимися полями) или поле-выбор (значение по условиям). Конфигуратор нужен, только если нужных данных в отчёте нет вовсе: тогда поле добавляют в схему компоновки данных (СКД) или сначала заводят новый реквизит.
Типичная ситуация: главбух просит в «Оборотно-сальдовой ведомости по счёту» колонку «ИНН контрагента», а продажник — в отчёте по продажам колонку «Наценка, %». Первое решается двумя кликами, второе — формулой. Править схему отчёта нужно куда реже, чем кажется.
Всё описанное относится к отчётам на СКД — а это почти все отчёты в БП 3.0, ЗУП 3.1, УТ 11 и ERP. Механизм общий для платформы, поэтому от конфигурации зависят только названия команд в форме отчёта.
Подготовка: какое поле вам на самом деле нужно
Прежде чем что-то создавать, определите, откуда возьмутся данные. От этого зависит способ и то, кто его выполнит — пользователь или разработчик.
| Что нужно в отчёте | Пример | Способ | Нужен Конфигуратор |
|---|---|---|---|
| Реквизит объекта, который уже в отчёте | ИНН контрагента, артикул номенклатуры | Выбрать поле «через точку» | Нет |
| Расчёт из полей отчёта | Наценка, доля в процентах, сумма без НДС | Пользовательское поле-выражение | Нет |
| Группировка по условию | «Крупный / мелкий клиент» по сумме | Пользовательское поле-выбор | Нет |
| Данные есть в базе, но не в наборе отчёта | Поле из другого регистра | Правка запроса или вычисляемое поле СКД | Да |
| Данных нет в базе вообще | Свой признак «Ответственный юрист» | Дополнительный реквизит или новый реквизит + СКД | Зависит от способа |
Самый частый случай — первая строка. Почти любой ссылочный реквизит в отчёте раскрывается: у поля «Контрагент» есть вложенные «ИНН», «КПП», «Основной договор» и т. д. Сначала проверьте дерево полей, а уже потом пишите формулы.
Пользовательские поля в настройках отчёта: без Конфигуратора
Это штатный механизм СКД, который работает в режиме «1С:Предприятие» прямо у пользователя.
Как открыть редактор варианта
- Сформируйте отчёт хотя бы один раз.
- Откройте меню
Ещёв форме отчёта и найдите команду изменения варианта (в типовых на БСП она называется «Изменить вариант отчета»). В некоторых отчётах сначала нужно переключить настройки в расширенный вид. - В открывшемся редакторе найдите вкладку «Пользовательские поля».
Поле-выражение
- На вкладке «Пользовательские поля» нажмите добавление и выберите «Новое поле-выражение».
- Задайте заголовок — так будет называться колонка.
- Заполните «Выражение детальных записей» — формула для каждой строки.
- Заполните «Выражение итоговых записей» — формула для итогов и группировок.
- Нажмите «Завершить редактирование» и добавьте новое поле на вкладке «Выбранные поля».
В выражениях поля пишут в квадратных скобках по их представлению. Пример наценки в процентах:
ВЫБОР
КОГДА [Себестоимость] = 0 ТОГДА 0
ИНАЧЕ ([Выручка] - [Себестоимость]) / [Себестоимость] * 100
КОНЕЦ
Для итоговых записей та же формула пишется через агрегатные функции:
ВЫБОР
КОГДА Сумма([Себестоимость]) = 0 ТОГДА 0
ИНАЧЕ (Сумма([Выручка]) - Сумма([Себестоимость])) / Сумма([Себестоимость]) * 100
КОНЕЦ
Если оставить выражение итоговых записей пустым, в строках групп и в общем итоге колонка будет пустой. Сумма процентов по строкам — тоже ошибка: процент итога считают от сумм, а не складывают.
Поле-выбор
Поле-выбор нужно для классификации. Вы добавляете список вариантов, и у каждого задаёте значение и отбор, при котором оно срабатывает.
Пример — сегментация покупателей по выручке:
- 🟢 «Крупный» — отбор
Выручкабольше или равно 1 000 000; - 🟡 «Средний» —
Выручкаот 100 000 до 999 999,99; - ⚪ «Мелкий» — значение без отбора, для всех остальных.
Получившееся поле можно ставить в группировку: отчёт сам соберёт строки «Крупный», «Средний», «Мелкий» с итогами.
Как сохранить, чтобы не потерять
Пользовательские поля живут внутри варианта отчёта. Закроете отчёт без сохранения — поле пропадёт.
- 💾 Сохраните вариант командой сохранения варианта в форме отчёта и дайте ему понятное имя.
- 👥 Чтобы вариант видели коллеги, при сохранении снимите признак «только для автора» (если такой есть в вашей конфигурации).
- 🔁 Типовой вариант лучше не переписывать: сохраните копию под своим именем. После обновления конфигурации поставщика ваш вариант останется на месте.
Новое поле в схеме компоновки данных через Конфигуратор
Когда поле должно появиться у всех пользователей и во всех вариантах — правят саму СКД. Для типовых конфигураций на поддержке это лучше делать в расширении (см. ниже), для своих отчётов — прямо в схеме.
Шаг 1. Добавить поле в запрос набора данных
- Откройте отчёт в дереве конфигурации, на вкладке «Макеты» — основную схему компоновки данных.
- На вкладке «Наборы данных» выберите набор-запрос и откройте конструктор запроса.
- Добавьте нужное поле, например
Контрагенты.ИНН КАК ИНН, при необходимости соединив новую таблицу. - Проверьте, что у набора включено «Автозаполнение». Тогда поле само появится в списке полей набора.
Если автозаполнение выключено, добавьте поле в таблицу полей набора вручную: путь к данным должен совпадать с псевдонимом из запроса.
Шаг 2. Настроить свойства поля
В таблице полей набора для нового поля задайте:
- 📝 «Заголовок» — текст колонки для пользователя;
- 🔢 «Тип значения» — особенно для полей из
ВЫБОРв запросе, иначе отбор по ним работает плохо; - 🚫 «Ограничение использования», если поле нельзя выводить в группировки или отборы;
- 🎨 «Оформление» — формат числа или даты (например,
ЧДЦ=2).
Шаг 3. Сделать ресурсом, если поле числовое
Числовое поле само по себе не суммируется в итогах. На вкладке «Ресурсы» добавьте его и укажите выражение, обычно Сумма(ИмяПоля). Для остатков и цен подбирают другие функции: Максимум, Среднее или своё выражение по группировкам.
Шаг 4. Вывести в варианте отчёта
На вкладке «Настройки» откройте вариант и добавьте поле в «Выбранные поля». Пока поле не добавлено в выбранные поля варианта, пользователь его не увидит, хотя в схеме оно уже есть.
После сохранения конфигурации выполните Конфигурация → Обновить конфигурацию базы данных (F7) и проверьте отчёт в режиме «1С:Предприятие».
Вычисляемые поля СКД: формулы без правки запроса
Вычисляемое поле — это формула на уровне схемы. Запрос его не видит: значение считается после получения данных, на языке выражений СКД.
Заполняют его на вкладке «Вычисляемые поля»:
| Колонка | Что указать | Пример |
|---|---|---|
| Путь к данным | Имя поля латиницей или кириллицей без пробелов | НаценкаПроцент |
| Выражение | Формула через пути к данным полей | ВЫБОР КОГДА Себестоимость = 0 ТОГДА 0 ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100 КОНЕЦ |
| Заголовок | Название колонки | Наценка, % |
| Тип значения | Число, длина и точность | Число (15, 2) |
В отличие от пользовательских полей, здесь поля пишут по пути к данным, без квадратных скобок.
Для итогов вычисляемого поля добавьте ресурс с выражением через суммы исходных полей:
ВЫБОР
КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
ИНАЧЕ (Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100
КОНЕЦ
Полезные функции языка выражений:
- 🔤
Формат(Значение, "ЧДЦ=2")— строка с нужным форматом; - 🧮
ВычислитьВыражение("Сумма(Выручка)", , "ОбщийИтог")— доля строки в общем итоге; - 📅
НачалоПериода(Дата, "Месяц")— группировка по месяцу без правки запроса; - 🔀
ЕстьNull(Поле, 0)— защита от пустых значений в формулах.
Доля строки в процентах от общего итога выглядит так:
Сумма(Выручка) / ВычислитьВыражение("Сумма(Выручка)", , "ОбщийИтог") * 100
Такое выражение ставят в ресурс, а не в вычисляемое поле: агрегатные функции работают только на уровне ресурсов и итоговых выражений.
Добавить поле программно
Иногда поле нужно добавить в настройки кодом — например, в обработчике формы отчёта. Добавление поля в выбранные:
НовоеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("Контрагент.ИНН");
НовоеПоле.Использование = Истина;
Добавление вычисляемого поля в схему перед компоновкой:
ВычПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
ВычПоле.ПутьКДанным = "НаценкаПроцент";
ВычПоле.Выражение = "ВЫБОР КОГДА Себестоимость = 0 ТОГДА 0 ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100 КОНЕЦ";
ВычПоле.Заголовок = "Наценка, %";
Если данных нет в базе: новый реквизит и дополнительные реквизиты
Когда хранить значение негде, сначала создают место для него.
Дополнительные реквизиты (без Конфигуратора). В типовых конфигурациях на БСП свой реквизит можно добавить справочнику или документу в режиме «1С:Предприятие», если в общих настройках включено использование дополнительных реквизитов и сведений. В отчётах на СКД такие реквизиты обычно появляются в дереве полей у соответствующего объекта — проверьте, раскрыв, например, поле «Номенклатура».
Реквизит в Конфигураторе. Для своих конфигураций:
- Добавьте реквизит в справочник или документ, задайте тип.
- Если по полю часто отбирают отчёты — установите свойство «Индексировать».
- Обновите конфигурацию базы данных.
- Заполните значения у объектов.
- В отчёте поле станет доступно «через точку» от ссылки на объект.
Если реквизит добавлен в справочник, а отчёт строится по регистру, править запрос часто не нужно: реквизит достаётся разыменованием, как Номенклатура.НовыйРеквизит.
Типовой отчёт на поддержке: расширение или внешний отчёт
Снимать типовую конфигурацию с поддержки ради одной колонки — плохая идея: каждое обновление превратится в сравнение и объединение.
| Способ | Когда подходит | Минусы |
|---|---|---|
| Пользовательское поле в варианте | Формула или классификация из имеющихся полей | Живёт только в сохранённом варианте |
| Расширение конфигурации | Нужна правка схемы типового отчёта | Заимствованный макет после обновления типовой надо сверять вручную |
| Внешний отчёт (копия) | Разовая задача, своя версия отчёта | Не обновляется вместе с конфигурацией, подключается отдельно |
| Снятие с поддержки | Почти никогда | Тяжёлые обновления |
Порядок в расширении:
- В Конфигураторе создайте расширение (
Конфигурация → Расширения конфигурации). - Заимствуйте отчёт и его макет со схемой компоновки данных.
- Внесите в заимствованную схему нужное поле — по шагам из раздела про Конфигуратор.
- Сохраните расширение и проверьте отчёт.
Заимствованный макет заменяет типовой целиком. Когда поставщик в следующем релизе исправит схему отчёта, ваше расширение продолжит подставлять старую версию. После каждого обновления сравнивайте макет расширения с типовым.
Альтернатива для разового случая — внешний отчёт. Создайте новый внешний отчёт, скопируйте в него схему компоновки данных типового, добавьте поле и подключите файл через «Дополнительные отчёты и обработки». Учтите: если типовой отчёт использует процедуры своего модуля объекта, их тоже придётся перенести.
Скорость отчёта после добавления полей
Новая колонка может заметно замедлить отчёт. Что влияет сильнее всего:
- 🐢 Разыменование через несколько точек.
Контрагент.ГоловнойКонтрагент.ОсновнойДоговор.Валюта— это цепочка соединений в итоговом запросе. Если такое поле нужно постоянно, вынесите соединение в запрос набора явно. - 🐢 Составной тип. Поле «Регистратор» или «Субконто» ссылается на десятки таблиц. Обращение к его реквизиту через точку соединяет их все. Используйте
ВЫРАЗИТЬ(Субконто1 КАК Справочник.Контрагенты).ИННв запросе. - 🐢 ВычислитьВыражение в каждой строке. На отчётах с десятками тысяч строк такие ресурсы считаются ощутимо дольше. Используйте их только там, где нужна доля или нарастающий итог.
- 🐢 Отбор по неиндексированному реквизиту. Если отчёт часто фильтруют по новому реквизиту, включите для него индексирование.
Поля, которые пользователь не вывел в отчёт, СКД в итоговый запрос не включает. Поэтому лишнее поле в схеме почти ничего не стоит, а вот лишнее поле в выбранных — стоит.
Если отчёт замедлился, сравните время формирования с новым полем и без него на одном и том же периоде. Так проще всего понять, виновата ли именно новая колонка.