К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как создать пользовательское поле выражение в 1С

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

Пользовательское поле-выражение в 1С — это вычисляемая колонка отчёта, которую пользователь создаёт сам, не изменяя конфигурацию и не привлекая программиста. Механизм доступен во всех отчётах, построенных на системе компоновки данных (СКД), а это практически все типовые отчёты в конфигурациях «1С:Бухгалтерия», «1С:Управление торговлей», «1С:ERP» и других решениях на управляемых формах.

Типичная ситуация: в отчёте по продажам есть колонки «Сумма» и «Себестоимость», а нужна колонка «Маржа в процентах». Или в отчёте по заказам требуется вывести признак «Просрочен» для документов, у которых дата отгрузки прошла. Обе задачи решаются пользовательским полем-выражением за пару минут прямо в режиме «Предприятие».

Поля-выражения бывают двух видов: выражение детальных записей (вычисляется для каждой строки данных) и выражение итоговых записей (вычисляется для группировок и итогов). Понимание разницы между ними — ключ к корректному результату, потому что именно здесь допускается большинство ошибок.

Где находится настройка пользовательских полей

Откройте нужный отчёт и перейдите в настройки: кнопка «Ещё» → «Изменить вариант…» (в некоторых конфигурациях — «Настройки» → «Расширенные»). Перед вами появится форма настроек СКД с вкладками «Отбор», «Сортировка», «Поля», «Пользовательские поля» и другими.

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

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

Создание поля-выражения: пошаговый порядок

После выбора пункта «Новое поле выражение» откроется окно редактирования. В нём два поля формул: «Детальные записи» и «Итоговые записи», а также поля «Заголовок» и «Тип значения».

Заполните заголовок — именно он станет названием колонки в отчёте и именем поля в списке доступных. Используйте осмысленное имя без пробелов в начале, например «ПроцентМаржи» или «Маржа, %». Затем введите формулу для детальных записей, например:

Выбор

Когда Сумма = 0

Тогда 0

Иначе (Сумма - Себестоимость) / Сумма * 100

Конец

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

Выбор

Когда Сумма(Сумма) = 0

Тогда 0

Иначе (Сумма(Сумма) - Сумма(Себестоимость)) / Сумма(Сумма) * 100

Конец

Нажмите «ОК», затем перейдите на вкладку «Поля» (или «Выбранные поля»), найдите новое поле в списке доступных и добавьте его в структуру отчёта. После нажатия «Закрыть и сформировать» колонка появится в результате.

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

Синтаксис языка выражений СКД

Язык выражений компоновки данных похож на встроенный язык 1С, но имеет ограничения: в нём нельзя объявлять переменные, вызывать методы объектов и обращаться к запросам. Доступны арифметические операции, сравнения, логические операторы И/ИЛИ/НЕ, конструкция «Выбор Когда … Тогда … Иначе … Конец» и набор встроенных функций.

К полезным функциям относятся: строковые — Подстрока(), СокрЛ(), СтрДлина(); работа с датами — ДатаВремя(), ТекущаяДата() (в ряде версий — ТекущаяДатаСеанса()), НачалоПериода(), КонецПериода(), РазностьДат(); агрегатные — Сумма(), Количество(), Среднее(), Максимум(), Минимум(). Точный состав функций зависит от версии платформы.

Обращение к полям набора данных выполняется просто по имени: Сумма, Номенклатура.Код. Если имя поля содержит пробелы или специальные символы, оно берётся в квадратные скобки: [Сумма продажи].

1c
Выбор
    Когда РазностьДат(ТекущаяДата(), ДатаОтгрузки, "День") > 7
        Тогда "Просрочен"
    Иначе "В срок"
Конец

Детальные и итоговые записи: в чём разница

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

Классический пример ошибки: поле «Процент маржи» с формулой только в детальных записях. В итоге по группе 1С просуммирует проценты строк, и вы получите, скажем, 350% вместо реальных 28%. Правильный итог считается заново от сумм: (Сумма(Сумма) - Сумма(Себестоимость)) / Сумма(Сумма) * 100.

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

Типичные ошибки
01
Формула задана только для детальных записей — итоги по группам показывают сумму процентов или значений вместо корректного расчёта
02
Деление без проверки нуля — при нулевом знаменателе отчёт падает с ошибкой или выводит пустые значения
03
Использование функций встроенного языка 1С, которых нет в языке СКД, — формула не сохраняется или отчёт не формируется
04
Поле создано, но не добавлено в выбранные поля — колонка не появляется в отчёте
05
Вариант отчёта не сохранён — после закрытия настройки пользовательское поле теряется

Практические сценарии использования

Расчёт процента и доли

Наиболее частая задача — доля строки в итоге, маржинальность, процент выполнения плана. Всегда защищайте деление конструкцией «Выбор» с проверкой знаменателя на ноль. Для доли в итоге используйте в итоговом выражении ссылку на итог через агрегаты, например Сумма(Сумма) / Сумма(Сумма) * 100 с поправкой на уровень группировки — для сложных относительных итогов иногда проще использовать встроенный ресурс «Процент в итоге» через настройку ресурсов.

Условные признаки и статусы

Вывод текстовых меток по условию: «Крупный/Средний/Мелкий клиент» по сумме, «Просрочен/В срок» по датам, «Требует внимания» при отрицательном остатке. Такие поля удобно сочетать с условным оформлением: на вкладке «Условное оформление» можно подсветить строки, где ваше поле равно «Просрочен».

Работа со строками и датами

Извлечение части строки (например, первых символов артикула для группировки), вычисление количества дней между датами, определение периода документа. Учтите: функции дат в СКД имеют собственный синтаксис — РазностьДат(Дата1, Дата2, "День"), где третий параметр задаёт единицу измерения.

Если формула получается длинной, сначала проверьте её на простом варианте: создайте поле с одной операцией, убедитесь, что оно выводится, и только потом усложняйте выражение. Так гораздо быстрее найти, на каком шаге СКД выдаёт ошибку.
ПЗ
Практическое замечание

Проверка результата и ограничения механизма

После добавления поля сформируйте отчёт и сверьте несколько значений вручную: возьмите две-три строки, пересчитайте формулу на калькуляторе и сравните с результатом. Отдельно проверьте итоги по группам и общий итог — именно там проявляются ошибки агрегирования.

Проверьте граничные случаи: строки с нулевыми и пустыми (NULL) значениями, отрицательные числа, пустые даты. Значение NULL в арифметике СКД даёт NULL в результате, и колонка будет пустой — при необходимости обработайте это через «Выбор Когда Поле ЕСТЬ NULL Тогда 0 …» или функцию ЕстьNULL(), если она доступна в вашей версии платформы.

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

Контрольные точки

Как проверить результат

Значения в строках
Норма

Совпадают с ручным пересчётом на 2–3 контрольных примерах

Тревожный признак

Пустые значения, ошибка при формировании, расхождение с расчётом

Итоги по группам и общий итог
Норма

Итог пересчитан от сумм, а не просуммирован по строкам

Тревожный признак

Проценты в итоге складываются и дают завышенные значения

Строки с нулями и NULL
Норма

Выводится 0 или заданное значение по умолчанию

Тревожный признак

Пустые ячейки или ошибка деления на ноль

Пользовательское поле против альтернатив

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

Сравнение вариантов

Поле-выбор

Подходит для простых условных значений по готовым полям. Не умеет арифметику и функции

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

Универсальный вариант для пользователя: арифметика, даты, строки, условия. Ограничено данными текущего набора

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

Максимальные возможности и скорость, но требует разработчика и изменения отчёта

Дополнительный отчёт/обработка

Для сложной логики, обращения к нескольким источникам данных и нестандартных алгоритмов

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

Итог

Что важно запомнить

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

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

Почему моё пользовательское поле не видно в списке полей отчёта?

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

Можно ли использовать пользовательское поле в отборе и сортировке?

Да, созданное поле доступно на вкладках «Отбор» и «Сортировка» наравне с обычными полями. Учтите, что отбор по вычисляемому выражению выполняется после получения данных, поэтому на больших отчётах это может замедлить формирование.

Почему в итогах по группе выводится неправильный процент?

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

Сохранится ли поле для других пользователей?

Поле хранится в варианте отчёта. Если сохранить вариант с пометкой «для всех пользователей» (требуются соответствующие права), поле будет доступно коллегам. Личный вариант виден только вам.

Что делать, если формула выдаёт ошибку при сохранении?

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

Можно ли создать такое поле в обычном (не СКД) отчёте?

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