Автоматизация

Формулы и калькулятор в amoCRM

Виджет автоматизирует вычисления в amoCRM по заданным формулам

Возможности

Автоматизация расчётов
Простые и сложные формулы
Работа с датами и товарами
Логические условия
Расчёт маржинальности

Инструкция по установке и настройке

Подробное руководство по работе с виджетом "Формулы и калькулятор в amoCRM"

Настройка виджета

После установки виджета откройте раздел Настройки → Формулы.

Важно:

  • Названия полей необходимо указывать строго в том же регистре, как они указаны в сущностях amoCRM.
  • Поля, участвующие в вычислениях, должны иметь отключённое свойство «Заполнение по API», иначе формулы будут работать некорректно.

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

Вставьте формулу в соответствующее поле.

Формула должна состоять из:

  • ключевого слова (например, lead),
  • названия поля, из которого берётся значение для расчёта.

📌 Пример:
lead['Цена товара'] - lead['Себестоимость товара']

Проверка работы формулы

  1. Перейдите в сделку.
  2. Заполните поля, которые участвуют в формуле (например, «Цена товара» и «Себестоимость товара»).
  3. После заполнения последнего поля результат автоматически появится в указанном поле.

⚠ Если результат не отобразился:

  • перезайдите в сделку, чтобы обновить данные.

Математические операции

В формулах можно использовать любые математические операции:

  • сложение (+)
  • вычитание (-)
  • умножение (*)
  • деление (/)

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

Постоянные значения

Если в формулах необходимо использовать постоянное значение, его можно задать через триггер:

  1. Перейдите в бота с формулами.
  2. Нажмите Настройка переменных.

Важно при работе с переменными:

  • Если переменная не является числом, преобразуйте её в числовой тип: chislo(lead['Название поля с типом текст'])
  • Если переменная не является текстом, преобразуйте её в текстовый тип: text(lead['Название поля с типом число'])
  • Это необходимо для корректной работы формул и предотвращения ошибок при вычислениях.

После этого переменную можно использовать в формулах наравне с полями amoCRM.

Подсказки в формулах

В поле ввода формулы доступны подсказки с названиями полей, которые можно использовать в вычислениях.

Чтобы вызвать подсказку, введите символ "[". После этого появится выпадающий список доступных полей.

Корректная работа с числами

Иногда amoCRM воспринимает значения как текст, из-за чего вместо сложения получается «склейка» (например: 10+14+5 = 10145).

Чтобы этого избежать, каждое значение нужно оборачивать в parseInt().

Пример:
parseInt(lead['Сумма в договоре']) - parseInt(lead['Бюджет'])

Логические условия

Создание логических условий (if-else в одну строку)

Пример:
lead['поле1'] == 'успех' ? 'да' : 'нет'

Здесь:

  • если поле1 = «успех» → результат «да»
  • иначе → результат «нет»

Поддерживаются разные операторы сравнения:

  • >= — больше или равно
  • <= — меньше или равно
  • > — больше
  • < — меньше
  • !== — не равно

Пример с условиями:
lead['Расстояние до заказчика (в км)'] <= '50' ? '300р.' : '250р.'

Можно проверять значения полей и возвращать разные результаты.

Вложенные условия

Этот пример показывает вложенное условие (тернарный оператор) — когда внутри одного условия используется ещё одно.

🔹 Разбор формулы:
lead['Расстояние до заказчика (в км)'] <= '10' ? '300р.' : (lead['Расстояние до заказчика (в км)'] <= '30' ? '1000' : '2000')

  1. Проверяется условие: если расстояние ≤ 10 км → результат «300р.»
  2. Если первое условие не выполнено, проверяется второе: если расстояние ≤ 30 км → результат «1000».
  3. Если оба условия не выполнены: результат по умолчанию → «2000».

По сути, это аналог «если – иначе если – иначе»:

  • До 10 км → 300р.
  • От 11 до 30 км → 1000
  • Больше 30 км → 2000

Ограничение знаков после запятой

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

x — это число знаков после запятой, которое должно остаться.

Пример:
(lead['Сумма'] / lead['Количество']).toFixed(2)

Если сумма = 105, количество = 7, то результат будет 15.00 (2 знака после запятой).

Момент расчёта по формулам

В какой момент происходит расчёт по формулам?

При открытии сделки и при изменении полей в ней, когда сделка открыта у пользователя. Считаются по очереди сверху вниз.

Ключи полей

Сделки (lead):

  • lead['ID'] — ID сделки
  • lead['Название'] — Название сделки
  • lead['Бюджет'] — Бюджет
  • lead['status_id'] — ID статуса
  • lead['pipeline_id'] — ID воронки
  • lead['status_name'] — Название статуса
  • lead['pipeline_name'] — Название воронки
  • lead['Ответственный'] — ФИО ответственного
  • lead['Поле'] — Дополнительное поле сделки

Контакт (contact):

  • contact['ID'] — ID контакта
  • contact['ФИО'] — ФИО контакта
  • contact['Имя'] — Имя
  • contact['Фамилия'] — Фамилия
  • contact['Ответственный'] — ФИО ответственного
  • contact['Поле'] — Дополнительное поле контакта

Компания (company):

  • company['ID'] — ID компании
  • company['Название'] — Название компании
  • company['Ответственный'] — ФИО ответственного
  • company['Поле'] — Дополнительное поле компании

Операции с полями

Числовые:

  • lead['Поле1'] + lead['Поле2'] — сложение чисел
  • lead['Поле1'] - lead['Поле2'] — вычитание
  • lead['Поле1'] * lead['Поле2'] — умножение
  • lead['Поле1'] / lead['Поле2'] — деление
  • numToRuWords(lead['Поле']) — преобразование числа в слова

Текстовые:

  • lead['Поле1'] + lead['Поле2'] — объединение строк
  • lead['Поле1'] + ' ' + lead['Поле2'] — объединение с пробелом
  • addDivider(lead['Поле'], '.', 3) — разделение строки на блоки по 3 символа

Флаги:

Значение: 'Да' (если отмечено) или пусто (если не отмечено).

Списки:

Чтение и запись как текст.

Мультисписки:

Значения считываются как текст, несколько значений разделяются ;

Работа с товарами

  • lead['list_sum'] — сумма по всем спискам (тип Цена)
  • lead['list_sums'][ID] — сумма по конкретному списку
  • lead['list_sum_ID'] — значение поля с ценой по ключу (пример: lead['list_sum_123'])
  • lead['e_IDсписка_1_Название'] — ключ по названию поля из списка

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

  • (dateToTime(lead['Поле1']) - dateToTime(lead['Поле2']))/3600/24 — разница дат (в днях)
  • (Math.floor(Date.now()/1000) - dateToTime(lead['Поле']))/3600/24 — разница текущей даты и даты из поля
  • datePlusSeconds(lead['Поле'], 3600*24*7) — прибавить 7 дней
  • updateDate(lead['Поле'], 1, 'd') — обновление даты +1 день / d - дни, M - месяцы, y - года
  • new Date(Date.now()).toISOString().split('T')[0] — текущая дата
  • new Date(Date.now() + 7 * 86400000) — текущая дата + 7 дней

Изменение типов

  • chislo(lead['Поле']) — текст → число
  • text(lead['Поле']) — число → текст

Падежи для ФИО

namePad(contact['ФИО'], 'родительный') — ФИО в нужном падеже

Сложные формулы

Операции со скобками:

lead['Поле1'] * (lead['Поле2'] - lead['Поле3'])

Условия:

  • (lead['Поле'] > 10) ? 1 : 0 — если >10, то 1, иначе 0
  • (lead['Поле'] == 'тип 1') ? 'Если условие выполнено' : 'Если условие не выполнено' — проверка на равенство

С текстом:

(lead['Поле'] === 'Текст') ? 'Если условие выполнено' : 'Если условие не выполнено'

С вариантами:

((lead['Поле']=='1')?'Вариант1':'')) + ((lead['Поле']=='2')?'Вариант2':'')) + ((lead['Поле']=='3')?'Вариант3':''))

Настройка через бота

При переходе сделки на этап бота, бот автоматически заполнит поле по результатам расчёта.

Настройка бота в воронке:

При необходимости добавить следующие шаги и завершить работу бота. Далее сохранить бота и настройки воронки.