Таблицы, формулы и расчёты

Дополнение к справочнику типов полей для администратора платформы.


Табличные части (секции)

Табличная часть — это таблица строк внутри документа. Типичные примеры: список товаров в накладной, перечень услуг в заказе, список работ в смете.

Как создать табличную часть

Табличная часть создаётся не отдельным шагом — она появляется автоматически когда вы назначаете полю секцию.

Порядок действий:

  1. Откройте настройку сущности (документа) → вкладка «Поля»
  2. Создайте или откройте поле
  3. В поле «Табличная часть (секция)» введите системное имя — латинскими буквами, например positions
  4. Сохраните. Поле теперь является колонкой таблицы, а не полем шапки

Все поля с одинаковым именем секции объединяются в одну таблицу. Порядок колонок определяется порядком полей.

Пример: чтобы создать таблицу «Товары» с колонками «Наименование», «Количество», «Цена», «Сумма»:

Поле Тип Секция
Наименование Текст positions
Количество Число positions
Цена Число positions
Сумма Формула positions

Какие типы полей работают в таблице

В строках таблицы работают:

✅ Текст, Многострочный текст, Число
✅ Дата, Дата и время
✅ Выпадающий список (один и несколько вариантов)
✅ Радио кнопки
✅ Цветные статусы
✅ Выбор цвета
✅ Связь с сущностью
✅ Чекбокс (только тумблер да/нет)
✅ Формула (readonly — вычисляется автоматически по другим ячейкам строки)
✅ Сумма с НДС (как числовое поле ввода)

❌ Файл, Изображение — только в шапке
❌ Агрегат — только в шапке
❌ Автономер — только в шапке
❌ Пользователь — только в шапке

Как выглядит таблица в документе

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


Формула

Поле типа «Формула» вычисляет числовое значение автоматически. Вы пишете выражение, система считает результат.

Где можно использовать

В шапке документа — формула обращается к другим полям шапки.
В строке таблицы — формула обращается к другим ячейкам той же строки.

Нельзя из шапки обратиться к строкам таблицы — для этого используется «Агрегат».
Нельзя из строки обратиться к шапке — только к полям той же строки.

Как писать выражение

В выражении используются системные имена полей (то что вы задавали при создании поля). Доступны стандартные математические операции.

Базовый синтаксис:

Что нужно Как написать
Сложение price + tax
Вычитание total - discount
Умножение price * qty
Деление amount / days
Скобки (price + fee) * qty
Константа price * 1.2

Примеры готовых выражений:

Сумма строки:
  qty * price
Сумма с НДС 20%:
  qty * price * 1.2
Сумма со скидкой:
  qty * price * (1 - discount / 100)
Наценка в рублях:
  cost * margin / 100
Вес всего (кг в тонны):
  qty * weight / 1000

Условия в формуле

Формула поддерживает условную логику через тернарный оператор:

условие ? значение_если_да : значение_если_нет

Это позволяет менять расчёт в зависимости от значений других полей.

Синтаксис условий:

Оператор Смысл
> больше
< меньше
>= больше или равно
<= меньше или равно
== равно
!= не равно

Простое условие — одна ветка:

Цена со скидкой 10% если количество больше 10, иначе обычная цена:
  qty > 10 ? price * 0.9 : price
НДС только если флаг включён (1 = да, 0 = нет):
  vat ? amount * 1.2 : amount
Минимальная сумма заказа 500₽:
  amount < 500 ? 500 : amount

Несколько условий — цепочка (else if):

Условия можно объединять в цепочку — второй тернарник ставится в ветку «нет»:

условие1 ? значение1 : условие2 ? значение2 : значение3
Скидка зависит от объёма — три градации:
  qty >= 100 ? price * 0.8 : qty >= 50 ? price * 0.9 : price
  Читать как:
  — если qty ≥ 100 → скидка 20%
  — иначе если qty ≥ 50 → скидка 10%
  — иначе → без скидки
Коэффициент срочности по количеству дней:
  days <= 1 ? base * 2 : days <= 3 ? base * 1.5 : base
  Читать как:
  — до 1 дня → двойная цена
  — до 3 дней → полтора коэффициента
  — остальное → обычная цена
Категория по сумме (закодирована числом):
  amount >= 10000 ? 3 : amount >= 5000 ? 2 : 1

Условие со сложным выражением в ветке:

Сумма со скидкой только если скидка задана:
  discount > 0 ? qty * price * (1 - discount / 100) : qty * price
Итог с учётом НДС и скидки одновременно:
  vat ? qty * price * (1 - discount / 100) * 1.2 : qty * price * (1 - discount / 100)

Условие на основе суммы нескольких полей:

Бонус если сумма двух показателей превышает план:
  (actual + bonus) > plan ? (actual + bonus - plan) * 0.1 : 0

Важные особенности


Агрегат (сумма колонки)

Агрегат считает итог по числовой колонке таблицы. Располагается только в шапке документа.

Как настроить

При создании поля типа «Агрегат (сумма колонки)» укажите:

Функция Что считает
SUM Сумму всех значений
COUNT Количество строк
AVG Среднее значение
MIN Минимальное значение
MAX Максимальное значение

Работает ли агрегат с колонкой-формулой?

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

Это значит типичная схема полностью работает:

Колонка «Сумма» (формула):  qty * price
Поле шапки «Итого» (агрегат): SUM колонки «Сумма»

Агрегат посчитает правильно.

Типичный сценарий

Документ «Заказ» содержит таблицу товаров (positions) с колонками: название, количество, цена, сумма (формула).

В шапке документа создаётся поле «Итого»:

Итого автоматически обновляется при каждом изменении таблицы.


Сумма с НДС

Показывает разбивку суммы на три строки: база без НДС → НДС → итого. Не редактируется — только отображение.

Где берёт данные

Источником может быть:

Поле из шапки — любое числовое поле или формула в шапке документа.
Колонка таблицы — в этом случае агрегируется SUM по всей колонке.

Настройка

Настройка Что значит
Поле-источник Системное имя числового поля шапки, например amount
Секция таблицы Если источник — колонка таблицы, укажите имя секции
Ставка НДС 0, 10 или 20 процентов
Тип расчёта Сверху — НДС добавляется к сумме. В т.ч. — НДС уже внутри суммы

Сверху (on_top): база 1000₽ → НДС 200₽ → итого 1200₽
В т.ч. (included): итого 1200₽ → в т.ч. НДС 200₽ → без НДС 1000₽

Расположение

Только в шапке документа. Нельзя разместить в строке таблицы.


Текст с проверкой (Regex)

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

Как работает проверка

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

Готовые шаблоны для типовых задач

Поле Шаблон Сообщение об ошибке
ИНН физлица (12 цифр) ^\d{12}$ Введите 12 цифр
ИНН юрлица (10 цифр) ^\d{10}$ Введите 10 цифр
ИНН (10 или 12 цифр) ^\d{10}(\d{2})?$ Введите 10 или 12 цифр
ОГРН (13 цифр) ^\d{13}$ Введите 13 цифр
КПП (9 цифр) ^\d{9}$ Введите 9 цифр
СНИЛС ^\d{3}-\d{3}-\d{3} \d{2}$ Формат: 000-000-000 00
Почтовый индекс ^\d{6}$ Введите 6 цифр
Год (4 цифры) ^\d{4}$ Введите 4-значный год
Артикул (буквы и цифры) ^[A-Za-z0-9-]+$ Только латиница, цифры и дефис

Полезные символы шаблонов

Символ Смысл Пример
\d Любая цифра \d\d — две любые цифры
{N} Ровно N раз \d{6} — ровно 6 цифр
{N,M} От N до M раз \d{10,12} — от 10 до 12 цифр
^ Начало строки Шаблон должен начинаться с ^
$ Конец строки Шаблон должен заканчиваться на $
[A-Z] Буква A до Z [A-Za-z] — любая латинская буква

Совет: для большинства задач достаточно шаблонов из таблицы выше — копируйте и используйте.


Практический пример: документ «Заказ на услуги»

Чтобы показать как всё работает вместе — полный пример настройки документа.

Шапка документа:

Поле Тип Примечание
Номер Автономер Префикс ЗАК-, 5 знаков
Клиент Связь с сущностью Справочник «Клиенты»
Телефон клиента Подстановка Берёт телефон из карточки клиента
Дата Дата
Статус Цветные статусы Новый, В работе, Готов, Отменён
Ответственный Пользователь Редактируемый
Создал Пользователь Только автоподстановка
Итого (без НДС) Агрегат SUM колонки amount секции positions
Итого с НДС Сумма с НДС Источник: поле «Итого», ставка 20%, сверху
Примечание Многострочный текст 3 строки

Таблица услуг (секция positions):

Колонка Тип Примечание
Наименование Текст
Количество Число Минимум 1
Единица Выпадающий список шт, кг, м, час
Цена Число С валютой
Скидка % Число От 0 до 100
Сумма Формула qty * price * (1 - discount / 100)

Платформа Уни · v0.9.9.8