Как добавить в отчёт 1С свою вычисляемую колонку без программиста
Содержание
Пользовательское поле-выражение создают прямо в настройках варианта отчёта: откройте редактор варианта, перейдите на вкладку «Пользовательские поля», нажмите «Добавить» и выберите «Новое поле выражение». В окне задайте заголовок и две формулы — для детальных и для итоговых записей, например [Сумма] / [Количество] и Сумма([Сумма]) / Сумма([Количество]).
Конфигуратор не нужен, изменения в базе не появляются: поле живёт только в настройках отчёта. Так бухгалтер сам добавляет в отчёт 1С наценку, маржу, долю или признак «просрочено», которых нет в стандартном наборе колонок. Механизм общий для платформы 8.3 и работает во всех отчётах на системе компоновки данных (СКД) — в БП 3.0, ЗУП 3.1, УТ 11.
Что умеет поле-выражение и где его предел
Пользовательское поле — это новая колонка отчёта, которая считается из уже существующих полей. Данные из базы оно не достаёт: если нужного реквизита нет в списке доступных полей, выражение его не «увидит».
Что можно сделать без программиста:
- 🧮 арифметика: цена = сумма / количество, маржа = выручка − себестоимость;
- 📊 доли и проценты от строки или группы;
- 🔀 условные значения: «Крупный клиент», если оборот больше 1 млн;
- 📅 работа с датами: месяц, год, разница в днях между датой документа и оплаты;
- 🔤 обработка строк: часть артикула, склейка двух полей в одно.
Чего поле-выражение не умеет:
- ❌ обращаться к регистрам и справочникам, которых нет в схеме отчёта;
- ❌ вызывать процедуры общих модулей конфигурации;
- ❌ менять данные в базе.
Если упёрлись в эти ограничения, нужен вычисляемый реквизит в схеме компоновки — это уже работа в конфигураторе или расширении (о нём ниже).
Как создать пользовательское поле в отчёте: пошагово
Порядок одинаковый для любого отчёта на СКД. Отличается только то, как открыть редактор варианта.
Шаг 1. Откройте редактор варианта
- Сформируйте нужный отчёт, например «Валовая прибыль» или «Анализ продаж».
- В отчётах на БСП (БП 3.0, ЗУП 3.1, УТ 11) откройте меню «Ещё» и выберите команду «Изменить вариант отчёта». В части релизов эта команда стоит в форме «Настройки», тоже в меню «Ещё».
- Откроется редактор: сверху дерево структуры отчёта, снизу вкладки «Поля», «Отбор», «Сортировка», «Условное оформление» и другие.
Встаньте в дереве на самый верхний узел «Отчёт». Вкладка «Пользовательские поля» видна именно на этом уровне.
Шаг 2. Добавьте поле
- Перейдите на вкладку «Пользовательские поля».
- Нажмите «Добавить» и выберите «Новое поле выражение».
- Заполните «Заголовок» — так поле будет называться в списке и в шапке колонки. Пишите понятно: «Маржа, %», а не «Поле1».
Шаг 3. Напишите выражения
В окне два поля для формулы:
| Поле окна | Когда применяется | Пример |
|---|---|---|
| Выражение детальных записей | в каждой строке первичных данных | [Выручка] - [Себестоимость] |
| Выражение итоговых записей | в строках группировок и общем итоге | Сумма([Выручка]) - Сумма([Себестоимость]) |
Поля вставляйте двойным щелчком из списка доступных полей слева — платформа сама возьмёт имя в квадратные скобки. Вложенные реквизиты пишутся через точку: [Номенклатура.Артикул].
Шаг 4. Выведите поле в отчёт
Созданное поле пока только существует в списке. Его нужно вывести:
- Вернитесь на вкладку «Поля».
- Найдите новое поле в группе «Пользовательские поля» и перетащите его в выбранные.
- Нажмите «Завершить редактирование», затем «Сформировать».
Шаг 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С при выводе — по каждой строке результата. На тысяче строк это незаметно. На миллионе — отчёт заметно тормозит.
Что помогает:
- Сокращайте выборку до расчёта. Узкий период и отборы по организации, складу, контрагенту уменьшают число строк, которые проходят через формулу.
- Не отбирайте по пользовательскому полю на больших объёмах. Такой отбор применяется уже после получения данных: из базы сначала читается всё, потом лишнее отбрасывается.
- Меньше детальных записей. Если нужны итоги по номенклатуре, не выводите детальные строки — тогда работает только итоговое выражение.
- Простые формулы. Длинная цепочка вложенных
ВЫБОРпо десяти условиям считается для каждой строки. Если такая логика нужна постоянно, перенесите её в запрос. - Тяжёлые расчёты — в запрос. Выражение в тексте запроса выполнит СУБД, и отбор по нему тоже уйдёт в базу.
Сравните скорость честно: сформируйте отчёт без нового поля и с ним за один и тот же период. Если разница в разы — пора переносить расчёт в схему или запрос.