Как добавить в отчёт 1С свою вычисляемую колонку без программиста

· 9 мин

Содержание

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

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

Что умеет поле-выражение и где его предел

Пользовательское поле — это новая колонка отчёта, которая считается из уже существующих полей. Данные из базы оно не достаёт: если нужного реквизита нет в списке доступных полей, выражение его не «увидит».

Что можно сделать без программиста:

  • 🧮 арифметика: цена = сумма / количество, маржа = выручка − себестоимость;
  • 📊 доли и проценты от строки или группы;
  • 🔀 условные значения: «Крупный клиент», если оборот больше 1 млн;
  • 📅 работа с датами: месяц, год, разница в днях между датой документа и оплаты;
  • 🔤 обработка строк: часть артикула, склейка двух полей в одно.

Чего поле-выражение не умеет:

  • ❌ обращаться к регистрам и справочникам, которых нет в схеме отчёта;
  • ❌ вызывать процедуры общих модулей конфигурации;
  • ❌ менять данные в базе.

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

Как создать пользовательское поле в отчёте: пошагово

Порядок одинаковый для любого отчёта на СКД. Отличается только то, как открыть редактор варианта.

Шаг 1. Откройте редактор варианта

  1. Сформируйте нужный отчёт, например «Валовая прибыль» или «Анализ продаж».
  2. В отчётах на БСП (БП 3.0, ЗУП 3.1, УТ 11) откройте меню «Ещё» и выберите команду «Изменить вариант отчёта». В части релизов эта команда стоит в форме «Настройки», тоже в меню «Ещё».
  3. Откроется редактор: сверху дерево структуры отчёта, снизу вкладки «Поля», «Отбор», «Сортировка», «Условное оформление» и другие.

Встаньте в дереве на самый верхний узел «Отчёт». Вкладка «Пользовательские поля» видна именно на этом уровне.

Шаг 2. Добавьте поле

  1. Перейдите на вкладку «Пользовательские поля».
  2. Нажмите «Добавить» и выберите «Новое поле выражение».
  3. Заполните «Заголовок» — так поле будет называться в списке и в шапке колонки. Пишите понятно: «Маржа, %», а не «Поле1».

Шаг 3. Напишите выражения

В окне два поля для формулы:

Поле окнаКогда применяетсяПример
Выражение детальных записейв каждой строке первичных данных[Выручка] - [Себестоимость]
Выражение итоговых записейв строках группировок и общем итогеСумма([Выручка]) - Сумма([Себестоимость])

Поля вставляйте двойным щелчком из списка доступных полей слева — платформа сама возьмёт имя в квадратные скобки. Вложенные реквизиты пишутся через точку: [Номенклатура.Артикул].

Шаг 4. Выведите поле в отчёт

Созданное поле пока только существует в списке. Его нужно вывести:

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

Шаг 5. Сохраните вариант

Если закрыть отчёт без сохранения, поле пропадёт. Через «Ещё» выберите «Сохранить вариант отчёта» и дайте ему имя. Сохранённым вариантом смогут пользоваться коллеги — если при сохранении разрешить доступ всем пользователям.

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

Когда расчёт нужен всем и всегда, его закладывают в сам отчёт. Есть два места.

Вкладка «Вычисляемые поля» схемы компоновки. В конфигураторе откройте схему отчёта, перейдите на эту вкладку и добавьте строку. Обязательные колонки:

  • «Путь к данным» — внутреннее имя без пробелов: Маржа;
  • «Выражение» — формула через пути к данным, без квадратных скобок: Выручка - Себестоимость;
  • «Заголовок» — что увидит пользователь.

Чтобы поле суммировалось в группировках, добавьте его на вкладку «Ресурсы» и задайте выражение итога, например Сумма(Маржа).

Поле в тексте запроса. В конструкторе запроса на вкладке «Таблицы и поля» в список полей можно добавить произвольное выражение — откроется окно ввода формулы. Расчёт уйдёт на сервер СУБД:

ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.Выручка,
    Продажи.Себестоимость,
    Продажи.Выручка - Продажи.Себестоимость КАК Маржа
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи

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

Как выбрать способ:

СпособКто делаетГде хранитсяКогда подходит
Пользовательское полепользовательв варианте отчётаразовая аналитика, свой взгляд на данные
Вычисляемое поле СКДразработчикв схеме отчётаформула нужна всем, есть сложная логика
Выражение в запросеразработчикв тексте запросабольшие объёмы, нужен отбор по полю

Синтаксис выражений: поля, операторы, функции

Язык выражений компоновки похож на язык запросов, но со своими правилами.

Операторы: +, -, *, /, сравнения =, <>, >, <, >=, <=, логические И, ИЛИ, НЕ. Строки берутся в двойные кавычки и склеиваются плюсом.

Функции, которые нужны чаще всего:

ФункцияЧто делаетПример
Сумма, Количество, Максимум, Минимум, Среднееагрегаты для итоговых записейСумма([Выручка])
ЕстьNULLподменяет пустое значениеЕстьNULL([Скидка], 0)
Подстрокавырезает часть строкиПодстрока([Номенклатура.Артикул], 1, 3)
Год, Месяц, Деньчасти датыМесяц([Период])
НачалоПериодаокругляет дату до периодаНачалоПериода([Период], "Месяц")
РазностьДатразница между датамиРазностьДат([ДатаДокумента], [ДатаОплаты], "День")
ДобавитьКДатесдвигает датуДобавитьКДате([Дата], "День", 30)

Пример: маржинальность в процентах для итоговых строк.

Сумма([Выручка]) - Сумма([Себестоимость])
(Сумма([Выручка]) - Сумма([Себестоимость])) / Сумма([Выручка]) * 100

Проверка на числах: выручка 150 000, себестоимость 120 000. Маржа — 30 000, маржинальность — 30 000 / 150 000 × 100 = 20%.

Формулу «процент от суммы» нельзя складывать. Средний процент по группе считают только через суммы — Сумма(...) / Сумма(...), а не Среднее([Процент]).

Условия в выражении: ВЫБОР КОГДА и поле-выбор

Ветвление пишут конструкцией ВЫБОР. Она обязательна, если в формуле есть деление: защищает от деления на ноль.

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

Сегментация клиентов по обороту:

ВЫБОР
    КОГДА Сумма([Выручка]) >= 1000000 ТОГДА "Крупный"
    КОГДА Сумма([Выручка]) >= 100000 ТОГДА "Средний"
    ИНАЧЕ "Малый"
КОНЕЦ

Условия проверяются сверху вниз: сработает первое подходящее. Поэтому большие пороги ставьте первыми. Клиент с выручкой 1 200 000 попадёт в «Крупный», а не в «Средний».

Признак просрочки по дням:

ВЫБОР КОГДА РазностьДат([ДатаДокумента], [ДатаОплаты], "День") > 30 ТОГДА "Просрочено" ИНАЧЕ "В срок" КОНЕЦ

Поле-выбор вместо формулы

Если писать ВЫБОР не хочется, в той же вкладке есть второй тип — «Новое поле выбор». В нём каждое значение задаётся через обычный отбор мышкой: «Если Контрагент в группе “Розница” — значение “Розница”», иначе — «Опт». Для простых категорий это быстрее и без опечаток.

Поля-выражения в печатных формах и макетах

Тут легко перепутать два разных механизма.

Печать отчёта. Пользовательское поле выводится в табличный документ отчёта как обычная колонка. Значит, оно попадёт в печать, сохранение в Excel и PDF без дополнительных настроек.

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

  • 🧩 в типовых БП 3.0, ЗУП 3.1, УТ 11 макеты печатных форм можно править в режиме предприятия: раздел Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм; так можно поменять оформление и текст, но новую формулу таким способом не добавить;
  • 🛠 расчёт в печатной форме добавляют в расширении: в макете ставят параметр, а его значение вычисляют в модуле менеджера печати;
  • 📄 если нужна колонка «для себя», проще сделать отчёт по документам с пользовательским полем и печатать его.

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

Почему поле пустое или выдаёт ошибку

Большинство проблем видно сразу после «Сформировать». Выберите свой симптом:

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

Ещё две частые ловушки:

  • ⚠️ Склейка строки с числом. "Остаток: " + [Количество] даст ошибку типов. Приводите число к строке функцией Строка([Количество]) или стройте колонку без склейки.
  • ⚠️ NULL в арифметике. Если у части строк поле пустое, результат всей формулы будет пустым. Оборачивайте такие поля в ЕстьNULL([Поле], 0).

Как не замедлить отчёт полем-выражением

Пользовательское поле считается не в СУБД, а сервером 1С при выводе — по каждой строке результата. На тысяче строк это незаметно. На миллионе — отчёт заметно тормозит.

Что помогает:

  1. Сокращайте выборку до расчёта. Узкий период и отборы по организации, складу, контрагенту уменьшают число строк, которые проходят через формулу.
  2. Не отбирайте по пользовательскому полю на больших объёмах. Такой отбор применяется уже после получения данных: из базы сначала читается всё, потом лишнее отбрасывается.
  3. Меньше детальных записей. Если нужны итоги по номенклатуре, не выводите детальные строки — тогда работает только итоговое выражение.
  4. Простые формулы. Длинная цепочка вложенных ВЫБОР по десяти условиям считается для каждой строки. Если такая логика нужна постоянно, перенесите её в запрос.
  5. Тяжёлые расчёты — в запрос. Выражение в тексте запроса выполнит СУБД, и отбор по нему тоже уйдёт в базу.

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

Частые вопросы о пользовательских полях в отчётах

Увидят ли коллеги моё пользовательское поле?
Только если вы сохранили вариант отчёта с доступом для всех пользователей. Поле, добавленное в личные настройки, видно только вам.
Можно ли использовать одно пользовательское поле в другом?
Да. Созданное поле появляется в списке доступных, и его можно вставить в формулу следующего поля. Следите, чтобы не возникла циклическая ссылка.
Переживёт ли поле обновление конфигурации?
Как правило, да: оно хранится в варианте отчёта. Но если в новом релизе переименовали или удалили исходное поле схемы, формула перестанет работать — её придётся поправить.
Можно ли отсортировать или отобрать отчёт по пользовательскому полю?
Да, поле доступно на вкладках «Отбор», «Сортировка» и «Условное оформление». Например, можно подсветить красным строки с маржой ниже 10%.
Чем поле-выражение отличается от поля-выбора?
В поле-выражении вы пишете формулу текстом. В поле-выборе задаёте значения через условия отбора мышкой. Второе удобнее для простых категорий без расчётов.