CRM роботы 2.0 + AI (300+ роботов)

Распределить общую скидку между позициями

Робот «Распределить общую скидку между позициями» распределяет переданную скидку по разрешённым позициям и проверяет точное сохранение итогов.

Настройки робота «Распределить общую скидку между позициями» в Битрикс24

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

Для кого и какую задачу решает

Руководителю продаж и администратору, который распределяет согласованную общую скидку между разрешёнными позициями.

Скидку на весь заказ нужно разнести так, чтобы сумма копеек сохранилась, а исключённые товары не получили скидку. Робот использует подготовленные полные суммы строк и признак eligible. Он возвращает расчёт новых сумм без записи товарных строк.

Параметры и подготовка

Поле Как заполнить
Единая валюта, код из трех латинских букв (CURRENCY) Обязательное поле
Число дробных знаков: 0–6 (SCALE) Обязательное поле
Политика распределения (ALLOCATION) Обязательное поле. Пропорционально весам, затем наибольшие остатки (largest_remainders)
Равные остатки (TIE_BREAK) Обязательное поле. По возрастанию ID как строки (id_asc)
Позиции JSON (LINES) Обязательное поле
Тип скидки (DISCOUNT_KIND) Обязательное поле. Сумма (amount); Процент разрешенной базы (percent)
Сумма скидки или процент (DISCOUNT) Обязательное поле
Округление суммы из процента (ROUNDING) Необязательное поле. Только точная сумма (exact); Ближайшее, половина вверх (half_up); Вниз (down); Вверх (up)

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

Как использовать

  1. Передайте LINES с уникальными id, amount и currency. Amount означает уже рассчитанную полную сумму строки, а не цену одной единицы.
  2. Для исключённых позиций задайте eligible=false. По умолчанию строка разрешена; используйте именно JSON true/false.
  3. Выберите DISCOUNT_KIND amount или percent и задайте DISCOUNT. Для процента явно выберите ROUNDING; готовая денежная скидка должна точно соответствовать SCALE.
  4. Выберите largest_remainders и id_asc. После выполнения сверьте gross, eligibleBase, discount и net, затем отдельно согласуйте применение расчёта к товарам.

Как заполнить JSON-поля

Позиции JSON (LINES)

[
  {
    "id": "A",
    "amount": "100.00",
    "currency": "RUB",
    "eligible": true
  },
  {
    "id": "B",
    "amount": "50.00",
    "currency": "RUB",
    "eligible": false
  }
]

До 1000 позиций с уникальными id. amount полная сумма строки, currency обязателен. eligible необязательный JSON boolean, по умолчанию true. [] допустим при нулевой скидке.

Это массив: внешние квадратные скобки обязательны. Пустой массив [] отличается от объекта {}; возможность пустого списка определяется правилами этого поля, описанными ниже.

Учебный пример и ожидаемый результат

LINES=[{"id":"A","amount":"100.00","currency":"RUB","eligible":true},{"id":"B","amount":"50.00","currency":"RUB","eligible":false}]. CURRENCY=RUB, SCALE=2, DISCOUNT_KIND=amount, DISCOUNT=10.00, ALLOCATION=largest_remainders, TIE_BREAK=id_asc. Ожидается скидка 10.00 только для A, итог A 90.00, B 50.00, общий net 140.00.

Пример показывает подготовленные учебные данные. Фактический результат зависит от переданных значений и доступных данных вашего процесса.

Что возвращает и как продолжить процесс

  • «Распределенная скидка и итог по строкам JSON» (linesJson).
  • «Исходная сумма» (gross).
  • «Разрешенная база» (eligibleBase).
  • «Общая скидка» (discount).
  • «Итог после скидки» (net).
  • «Валюта» (currency).
  • «Дробных знаков» (scale).

linesJson содержит исходную сумму каждой строки, распределённую скидку и netAmount. Разрешённая база может быть меньше общей суммы заказа. Именно с ней сравнивается ограничение скидки; исключённые строки не расширяют базу.

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

Ограничения и разбор ошибок

LINES: [{"id":"A","amount":"100.00","currency":"RUB","eligible":true}]. amount: уже рассчитанная полная сумма строки; количество и налоги не выводятся автоматически. eligible по умолчанию true; false исключает строку из базы скидки и распределения. DISCOUNT_KIND=amount задает денежную сумму, percent: процент от разрешенной базы от 0 до 100. Для процента обязателен ROUNDING: exact/half_up/down/up; готовые суммы всегда должны точно соответствовать SCALE. Правила largest_remainders и id_asc выбираются явно; распределение пропорционально разрешенным суммам строк. Скидка не может превышать разрешенную базу; пустые строки и нулевая скидка дают валидный ноль. Возвращает новые суммы как расчет, не изменяя товары CRM. Денежные суммы неотрицательные, каждая меньше 10^24; до 36 значащих и 18 дробных цифр. Все строки обязаны содержать currency, совпадающую с выбранной. Код валюты проверяется по форме, не по внешнему справочнику. SCALE задается явно от 0 до 6; готовые денежные суммы должны точно соответствовать ему. До 1000 строк в каждом массиве; ID внутри массива: уникальная строка от 1 до 100 символов без крайних пробелов. Входные JSON и каждый строковый результат ограничены 1 МБ.

Процент задаётся от 0 до 100. Нельзя распределить скидку больше разрешённой базы. Количества, налоги и правила применимости скидки робот не выводит из товарных ID; они должны быть учтены до подготовки amount.