Своё поле в отчёте на СКД: от настройки варианта до правки схемы

· 10 мин

Содержание

Добавить пользовательское поле в отчет 1С 8.3 можно без Конфигуратора: откройте настройки варианта отчёта, перейдите на вкладку «Пользовательские поля» и создайте поле-выражение (формула над имеющимися полями) или поле-выбор (значение по условиям). Конфигуратор нужен, только если нужных данных в отчёте нет вовсе: тогда поле добавляют в схему компоновки данных (СКД) или сначала заводят новый реквизит.

Типичная ситуация: главбух просит в «Оборотно-сальдовой ведомости по счёту» колонку «ИНН контрагента», а продажник — в отчёте по продажам колонку «Наценка, %». Первое решается двумя кликами, второе — формулой. Править схему отчёта нужно куда реже, чем кажется.

Всё описанное относится к отчётам на СКД — а это почти все отчёты в БП 3.0, ЗУП 3.1, УТ 11 и ERP. Механизм общий для платформы, поэтому от конфигурации зависят только названия команд в форме отчёта.

Подготовка: какое поле вам на самом деле нужно

Прежде чем что-то создавать, определите, откуда возьмутся данные. От этого зависит способ и то, кто его выполнит — пользователь или разработчик.

Что нужно в отчётеПримерСпособНужен Конфигуратор
Реквизит объекта, который уже в отчётеИНН контрагента, артикул номенклатурыВыбрать поле «через точку»Нет
Расчёт из полей отчётаНаценка, доля в процентах, сумма без НДСПользовательское поле-выражениеНет
Группировка по условию«Крупный / мелкий клиент» по суммеПользовательское поле-выборНет
Данные есть в базе, но не в наборе отчётаПоле из другого регистраПравка запроса или вычисляемое поле СКДДа
Данных нет в базе вообщеСвой признак «Ответственный юрист»Дополнительный реквизит или новый реквизит + СКДЗависит от способа

Самый частый случай — первая строка. Почти любой ссылочный реквизит в отчёте раскрывается: у поля «Контрагент» есть вложенные «ИНН», «КПП», «Основной договор» и т. д. Сначала проверьте дерево полей, а уже потом пишите формулы.

Где взять данные для нового поля?

Пользовательские поля в настройках отчёта: без Конфигуратора

Это штатный механизм СКД, который работает в режиме «1С:Предприятие» прямо у пользователя.

Как открыть редактор варианта

  1. Сформируйте отчёт хотя бы один раз.
  2. Откройте меню Ещё в форме отчёта и найдите команду изменения варианта (в типовых на БСП она называется «Изменить вариант отчета»). В некоторых отчётах сначала нужно переключить настройки в расширенный вид.
  3. В открывшемся редакторе найдите вкладку «Пользовательские поля».

Поле-выражение

  1. На вкладке «Пользовательские поля» нажмите добавление и выберите «Новое поле-выражение».
  2. Задайте заголовок — так будет называться колонка.
  3. Заполните «Выражение детальных записей» — формула для каждой строки.
  4. Заполните «Выражение итоговых записей» — формула для итогов и группировок.
  5. Нажмите «Завершить редактирование» и добавьте новое поле на вкладке «Выбранные поля».

В выражениях поля пишут в квадратных скобках по их представлению. Пример наценки в процентах:

ВЫБОР
    КОГДА [Себестоимость] = 0 ТОГДА 0
    ИНАЧЕ ([Выручка] - [Себестоимость]) / [Себестоимость] * 100
КОНЕЦ

Для итоговых записей та же формула пишется через агрегатные функции:

ВЫБОР
    КОГДА Сумма([Себестоимость]) = 0 ТОГДА 0
    ИНАЧЕ (Сумма([Выручка]) - Сумма([Себестоимость])) / Сумма([Себестоимость]) * 100
КОНЕЦ

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

Поле-выбор

Поле-выбор нужно для классификации. Вы добавляете список вариантов, и у каждого задаёте значение и отбор, при котором оно срабатывает.

Пример — сегментация покупателей по выручке:

  • 🟢 «Крупный» — отбор Выручка больше или равно 1 000 000;
  • 🟡 «Средний» — Выручка от 100 000 до 999 999,99;
  • ⚪ «Мелкий» — значение без отбора, для всех остальных.

Получившееся поле можно ставить в группировку: отчёт сам соберёт строки «Крупный», «Средний», «Мелкий» с итогами.

Как сохранить, чтобы не потерять

Пользовательские поля живут внутри варианта отчёта. Закроете отчёт без сохранения — поле пропадёт.

  • 💾 Сохраните вариант командой сохранения варианта в форме отчёта и дайте ему понятное имя.
  • 👥 Чтобы вариант видели коллеги, при сохранении снимите признак «только для автора» (если такой есть в вашей конфигурации).
  • 🔁 Типовой вариант лучше не переписывать: сохраните копию под своим именем. После обновления конфигурации поставщика ваш вариант останется на месте.

Новое поле в схеме компоновки данных через Конфигуратор

Когда поле должно появиться у всех пользователей и во всех вариантах — правят саму СКД. Для типовых конфигураций на поддержке это лучше делать в расширении (см. ниже), для своих отчётов — прямо в схеме.

Шаг 1. Добавить поле в запрос набора данных

  1. Откройте отчёт в дереве конфигурации, на вкладке «Макеты» — основную схему компоновки данных.
  2. На вкладке «Наборы данных» выберите набор-запрос и откройте конструктор запроса.
  3. Добавьте нужное поле, например Контрагенты.ИНН КАК ИНН, при необходимости соединив новую таблицу.
  4. Проверьте, что у набора включено «Автозаполнение». Тогда поле само появится в списке полей набора.

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

Шаг 2. Настроить свойства поля

В таблице полей набора для нового поля задайте:

  • 📝 «Заголовок» — текст колонки для пользователя;
  • 🔢 «Тип значения» — особенно для полей из ВЫБОР в запросе, иначе отбор по ним работает плохо;
  • 🚫 «Ограничение использования», если поле нельзя выводить в группировки или отборы;
  • 🎨 «Оформление» — формат числа или даты (например, ЧДЦ=2).

Шаг 3. Сделать ресурсом, если поле числовое

Числовое поле само по себе не суммируется в итогах. На вкладке «Ресурсы» добавьте его и укажите выражение, обычно Сумма(ИмяПоля). Для остатков и цен подбирают другие функции: Максимум, Среднее или своё выражение по группировкам.

Шаг 4. Вывести в варианте отчёта

На вкладке «Настройки» откройте вариант и добавьте поле в «Выбранные поля». Пока поле не добавлено в выбранные поля варианта, пользователь его не увидит, хотя в схеме оно уже есть.

После сохранения конфигурации выполните Конфигурация → Обновить конфигурацию базы данных (F7) и проверьте отчёт в режиме «1С:Предприятие».

Вычисляемые поля СКД: формулы без правки запроса

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

Заполняют его на вкладке «Вычисляемые поля»:

КолонкаЧто указатьПример
Путь к даннымИмя поля латиницей или кириллицей без пробеловНаценкаПроцент
ВыражениеФормула через пути к данным полейВЫБОР КОГДА Себестоимость = 0 ТОГДА 0 ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100 КОНЕЦ
ЗаголовокНазвание колонкиНаценка, %
Тип значенияЧисло, длина и точностьЧисло (15, 2)

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

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

ВЫБОР
    КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
    ИНАЧЕ (Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100
КОНЕЦ

Полезные функции языка выражений:

  • 🔤 Формат(Значение, "ЧДЦ=2") — строка с нужным форматом;
  • 🧮 ВычислитьВыражение("Сумма(Выручка)", , "ОбщийИтог") — доля строки в общем итоге;
  • 📅 НачалоПериода(Дата, "Месяц") — группировка по месяцу без правки запроса;
  • 🔀 ЕстьNull(Поле, 0) — защита от пустых значений в формулах.

Доля строки в процентах от общего итога выглядит так:

Сумма(Выручка) / ВычислитьВыражение("Сумма(Выручка)", , "ОбщийИтог") * 100

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

Добавить поле программно

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

НовоеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("Контрагент.ИНН");
НовоеПоле.Использование = Истина;

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

ВычПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
ВычПоле.ПутьКДанным = "НаценкаПроцент";
ВычПоле.Выражение = "ВЫБОР КОГДА Себестоимость = 0 ТОГДА 0 ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100 КОНЕЦ";
ВычПоле.Заголовок = "Наценка, %";

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

Когда хранить значение негде, сначала создают место для него.

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

Реквизит в Конфигураторе. Для своих конфигураций:

  1. Добавьте реквизит в справочник или документ, задайте тип.
  2. Если по полю часто отбирают отчёты — установите свойство «Индексировать».
  3. Обновите конфигурацию базы данных.
  4. Заполните значения у объектов.
  5. В отчёте поле станет доступно «через точку» от ссылки на объект.

Если реквизит добавлен в справочник, а отчёт строится по регистру, править запрос часто не нужно: реквизит достаётся разыменованием, как Номенклатура.НовыйРеквизит.

Типовой отчёт на поддержке: расширение или внешний отчёт

Снимать типовую конфигурацию с поддержки ради одной колонки — плохая идея: каждое обновление превратится в сравнение и объединение.

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

Порядок в расширении:

  1. В Конфигураторе создайте расширение (Конфигурация → Расширения конфигурации).
  2. Заимствуйте отчёт и его макет со схемой компоновки данных.
  3. Внесите в заимствованную схему нужное поле — по шагам из раздела про Конфигуратор.
  4. Сохраните расширение и проверьте отчёт.

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

Альтернатива для разового случая — внешний отчёт. Создайте новый внешний отчёт, скопируйте в него схему компоновки данных типового, добавьте поле и подключите файл через «Дополнительные отчёты и обработки». Учтите: если типовой отчёт использует процедуры своего модуля объекта, их тоже придётся перенести.

Скорость отчёта после добавления полей

Новая колонка может заметно замедлить отчёт. Что влияет сильнее всего:

  • 🐢 Разыменование через несколько точек. Контрагент.ГоловнойКонтрагент.ОсновнойДоговор.Валюта — это цепочка соединений в итоговом запросе. Если такое поле нужно постоянно, вынесите соединение в запрос набора явно.
  • 🐢 Составной тип. Поле «Регистратор» или «Субконто» ссылается на десятки таблиц. Обращение к его реквизиту через точку соединяет их все. Используйте ВЫРАЗИТЬ(Субконто1 КАК Справочник.Контрагенты).ИНН в запросе.
  • 🐢 ВычислитьВыражение в каждой строке. На отчётах с десятками тысяч строк такие ресурсы считаются ощутимо дольше. Используйте их только там, где нужна доля или нарастающий итог.
  • 🐢 Отбор по неиндексированному реквизиту. Если отчёт часто фильтруют по новому реквизиту, включите для него индексирование.

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

Если отчёт замедлился, сравните время формирования с новым полем и без него на одном и том же периоде. Так проще всего понять, виновата ли именно новая колонка.

Почему поле не появилось или считается неверно

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

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

Можно ли добавить пользовательское поле в отчет без прав администратора?
Да, если у пользователя есть право сохранять варианты отчётов. Поле-выражение и поле-выбор создаются в настройках варианта, Конфигуратор для этого не нужен.
Чем пользовательское поле отличается от вычисляемого поля СКД?
Пользовательское поле создаёт пользователь в своём варианте отчёта. Вычисляемое поле задаёт разработчик в схеме, и оно доступно во всех вариантах у всех пользователей.
Можно ли в выражении пользовательского поля использовать функции встроенного языка?
Нет, только язык выражений СКД: арифметика, ВЫБОР, агрегатные и встроенные функции СКД. Если нужна логика на встроенном языке, это задача разработчика: её реализуют в схеме отчёта или в его модуле.
Сохранится ли моё поле после обновления конфигурации?
Пользовательское поле в своём сохранённом варианте сохранится. Если типовой вариант был изменён без сохранения под своим именем, после обновления он может вернуться к поставщику.
Как добавить поле в печатную форму, а не в отчёт?
Это другая задача: печатные формы строятся по табличным макетам, а не по СКД. Там правят макет и процедуру заполнения, обычно через расширение.