Своя колонка в отчёте 1С: поле-выбор, поле-выражение и вычисляемые поля СКД

· 9 мин

Содержание

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

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

Что можно вывести в отчет: проверка перед добавлением поля

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

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

Как проверить, что поле доступно:

  1. Откройте отчёт и перейдите в Ещё → Изменить вариант отчета.
  2. На вкладке «Поля» нажмите «Добавить» — откроется список доступных полей.
  3. Раскройте плюсиком ссылочные поля: у «Контрагента» внутри есть его реквизиты, у «Номенклатуры» — свои.

Если нужное значение нашлось в этом дереве, программист не нужен. Если нет — переходите к разделу про конфигуратор.

В некоторых отчётах БП 3.0 своя форма настроек без команды «Изменить вариант отчета» (например, оборотно-сальдовая ведомость). Пользовательских полей там нет. Тогда используйте «Универсальный отчет» из раздела Отчеты — он построен на СКД и даёт полный редактор варианта.

Способ 1. Пользовательское поле в отчете без конфигуратора

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

Поле-выражение: формула из других колонок

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

  1. В форме изменения варианта откройте вкладку «Пользовательские поля».
  2. Нажмите «Добавить» → «Новое поле-выражение».
  3. В поле «Заголовок» напишите Валовая прибыль.
  4. В «Выражении детальных записей» соберите формулу: Выручка - Себестоимость. Поля удобнее переносить двойным щелчком из списка доступных — так не ошибётесь в имени.
  5. В «Выражении итоговых записей» укажите Сумма(Выручка) - Сумма(Себестоимость).
  6. Нажмите «ОК», вернитесь на вкладку «Поля» и добавьте новое поле. Оно лежит в папке «Пользовательские поля».
  7. Сформируйте отчёт и проверьте итоги по группировкам.

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

Наценка в процентах, детальное выражение:

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

Итоговое выражение:

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

Если итоговое выражение оставить пустым, в строке итога будет сумма процентов по строкам. Для трёх товаров с наценкой 20%, 30% и 40% получится 90% — бессмыслица.

Поле-выбор: свои группы значений

Поле-выбор присваивает строке значение по условию. Пример — разделить покупателей по объёму.

  1. «Добавить» → «Новое поле-выбор», заголовок Категория клиента.
  2. Добавьте вариант: значение Крупный, отбор — «Выручка» больше или равно 1 000 000.
  3. Добавьте второй вариант: Средний, отбор — «Выручка» больше или равно 100 000.
  4. Внизу заполните «Значение по умолчанию»: Мелкий.
  5. Добавьте поле в группировки на вкладке «Структура» — так отчёт сгруппирует клиентов по категориям.

Условия проверяются сверху вниз, срабатывает первое подходящее. Поэтому порядок строк важен: если поставить «Средний» первым, крупные клиенты тоже попадут в средние.

Как сохранить результат

Нажмите «Закрыть и сформировать», затем в отчёте Ещё → Сохранить вариант отчета. Дайте варианту своё имя. Если поле должно увидеть отдел, при сохранении отметьте доступность другим пользователям — в типовых конфигурациях такая галочка есть в форме сохранения.

Не правьте предопределённый вариант «под себя». Сохраните копию под своим именем: так поле не потеряется, если кто-то нажмёт «Стандартные настройки».

Способ 2. Добавление поля в схему отчета через конфигуратор

Нужен, когда данных нет в запросе или поле должно стать частью отчёта для всех. Работает только в доработанных или собственных отчётах: типовые лучше не трогать, иначе обновление конфигурации пройдёт через сравнение-объединение.

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

Чем вычисляемое поле схемы отличается от пользовательского:

ПризнакВычисляемое поле схемыПользовательское поле
Где задаётсяКонфигураторРежим «Предприятие»
Кто видитВсе пользователи отчётаТе, кому доступен вариант
Переживает обновлениеТолько при доработанном отчётеДа, это настройки
Можно использовать в отбореДаДа
Новые данные из базыНет, только из полей набораНет

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

Способ 3. Расширение конфигурации вместо правки типового отчета

Расширения появились в платформе 8.3.6 и стали основным способом доработок без снятия типовой конфигурации с поддержки. Для отчётов практичны два варианта.

Свой отчёт в расширении. Создайте в расширении новый отчёт, скопируйте в него схему исходного отчёта и добавьте поля как в способе 2. Типовой отчёт остаётся нетронутым, а пользователи получают отдельный пункт в разделе.

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

Порядок подключения расширения:

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

Для готового расширения в виде файла .cfe загрузка и обновление конфигурации базы данных — два отдельных шага. Загрузили файл, но не обновили — расширение не заработает.

Сравнение способов:

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

Способ 4. Программное добавление полей в отчет на СКД

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

Вычисляемое поле в схеме. Код для модуля отчёта или обработчика в расширении, где доступна переменная СхемаКомпоновкиДанных:

НовоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
НовоеПоле.ПутьКДанным = "ВаловаяПрибыль";
НовоеПоле.Выражение   = "Выручка - Себестоимость";
НовоеПоле.Заголовок   = "Валовая прибыль";

Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "ВаловаяПрибыль";
Ресурс.Выражение   = "Сумма(ВаловаяПрибыль)";

Пользовательское поле в настройках и вывод его в отчёт:

Настройки = КомпоновщикНастроек.Настройки;

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

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

Путь к данным пользовательского поля платформа присваивает сама, поэтому в выбранные поля его передают через ПолеВыр.ПутьКДанным, а не строкой вручную.

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

Оформление пользовательских полей: формат, заголовок, цвет

Поле добавлено, но выводится как 12345,6789 и встаёт в конец таблицы. Исправляется в той же форме изменения варианта.

  • 🔢 Формат числа. Вкладка «Условное оформление» → «Добавить», в оформлении выберите «Формат» и задайте две цифры после запятой. В полях оформления укажите только новое поле. Строка формата для того же результата — ЧДЦ=2.
  • 📍 Порядок колонок. На вкладке «Поля» перетащите поле мышью или переместите стрелками.
  • 🏷 Заголовок колонки. Задаётся в свойстве «Заголовок» самого поля. Короткий заголовок не растягивает таблицу.
  • 🎨 Подсветка значений. Там же, в условном оформлении: условие «Наценка, % меньше 10» → цвет текста красный. Убыточные позиции видно сразу.
  • 📊 Сортировка. По пользовательскому полю можно сортировать — добавьте его на вкладке «Сортировка», например по убыванию прибыли.

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

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

Скорость отчета с дополнительными полями

Пользовательские и вычисляемые поля считаются после выполнения запроса, на стороне компоновки. Пара формул на скорость почти не влияет. Тормозит отчёт другое.

  • 🐢 Поля через точку. Каждый реквизит связанного объекта (Контрагент.ИНН, Номенклатура.Вид) добавляет соединение в запрос. Десяток таких полей на большой базе заметно замедляют формирование.
  • 🐢 Детальные записи. Вариант, где в структуре стоят «Детальные записи», выводит каждую строку движения. На периоде в год это десятки тысяч строк. Уберите детальные записи или сократите период.
  • 🐢 Отбор по вычисляемому полю. Отбор по нему накладывается после получения данных, а не в запросе. Сначала сузьте отчёт отбором по обычному полю: организация, период, склад.
  • 🐢 Лишние соединения в доработанной схеме. Если для одного поля в запрос добавили целую таблицу, проверьте, нужен ли там левый, а не полный набор данных.

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

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

Можно ли добавить пользовательское поле в обычную форму 8.2?
В отчётах на СКД — да, через настройки варианта, механизм тот же. В отчётах без СКД пользовательских полей нет, нужна доработка формы.
Видят ли другие пользователи моё поле?
Только если вы сохранили вариант с доступом для других. По умолчанию вариант личный.
Можно ли использовать пользовательское поле в другом пользовательском поле?
Да, созданное поле доступно в списке при составлении следующего выражения. Следите, чтобы поля не ссылались друг на друга по кругу.
Как перенести поле в другую базу?
Надёжнее всего повторить поле вручную: скопируйте текст выражений в блокнот и вставьте в той же форме в другой базе. Это пара минут.
Нужны ли права администратора?
Нет. Достаточно права на изменение вариантов отчётов. Если команда «Изменить вариант отчета» недоступна, попросите администратора выдать это право.