EnotPRO Logo EnotPRO

AddVarLocal

AddVarLocal — изменяет значение локальной переменной, не заменяя его полностью.

📝 Назначение

Используется для накопления данных внутри одного триггера: счётчиков, списков, конкатенации строк. В отличие от SetVarLocal, эта реакция изменяет существующее значение, а не перезаписывает.

🟢 Важно: Если переменная не существует, AddVarLocal создаст её — но не просто запишет значение, а добавит его к нулевому значению выбранного типа. Подробнее — в разделе «Добавление в несуществующую переменную» ниже.

Когда использовать:

  • Подсчёт количества итераций в цикле
  • Накопление суммы в процессе обработки
  • Добавление элементов в массив
  • Конкатенация строк (добавление текста в конец)

🔄 Поведение в зависимости от типа

Что произойдёт, зависит от типа текущего значения переменной:

Текущее значение Что делает Пример
Целое число Прибавляет Было 10, добавить 313
Дробное число Прибавляет Было 10.5, добавить 2.312.8
Строка Добавляет текст в конец Было Привет, добавить , мирПривет, мир
Список Добавляет элемент в конец Было [1,2], добавить 3[1,2,3]
Объект Объединяет по ключам (поверхностно) {"a":1} + {"b":2}{"a":1,"b":2}
Логическое Переключает на противоположное Было true → станет false

⚠️ Особенность логического типа: Добавление к логическому значению — это переключение. Само добавляемое значение при этом не учитывается: и true, и false дадут один и тот же результат — противоположный текущему.

Когда типы не совпадают:

Ситуация Результат
К числу добавляют текст, который является числом (5) Прибавится как число
К числу добавляют текст, который числом не является (abc) Значение будет заменено на этот текст
К целому числу добавляют дробное Дробная часть отбрасывается, прибавляется целая: 10 + 1.811, 10 + -1.89
К строке добавляют число или логическое Допишется текстом: Привет + trueПриветtrue
К списку добавляют объект Объект станет очередным элементом списка
К объекту добавляют не объект Значение будет заменено целиком

⚙️ Параметры

Параметр Тип Обязательный Описание
Название Строка ✅ Да Имя локальной переменной (латиница, кириллица, цифры, _, -). Максимум 256 символов вместе с путём. В пути можно подставлять переменные и макросы — см. Путь из переменной
Значение Любой ❌ Нет Значение для добавления. Можно оставить пустым — получится нулевое значение выбранного типа
Тип данных Выбор ✅ Да Ровно один из восьми: bool, number, float, string, json, yaml, array json, array yaml
Слияние списков Переключатель ❌ Нет Как добавлять список к списку. По умолчанию выключен

🔗 Слияние списков

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

Слияние списков Что делает Пример
Выключено Добавляемый список становится одним элементом [1,2] + [3,4][1,2,[3,4]]
Включено Элементы добавляются подряд [1,2] + [3,4][1,2,3,4]

💡 Совет: Для истории, лога или накопления записей нужен включённый переключатель. Выключенный удобен, когда каждая запись сама по себе список — например, пара «дата, сумма».

⚠️ Важно: На объекты переключатель не влияет: объекты всегда объединяются по ключам. Если нужна полная замена объекта — это уже SetVarLocal.

🆕 Добавление в несуществующую переменную

Если переменной ещё нет (или её значение пустое — например, пришло null из JSON), добавление выполняется к нулевому значению выбранного типа. Результат:

Тип добавляемого значения Что получится
number, float, string Само значение: 0 + 55, пустая строка + ПриветПривет
json, yaml (объект) Сам объект
array json, array yaml при выключенном слиянии Список внутри списка: [] + [1,2][[1,2]]
array json, array yaml при включённом слиянии Список как есть: [] + [1,2][1,2]
bool Всегда true — переключение отсчитывается от false

💡 Совет: Если нужно, чтобы первое добавление списка дало обычный плоский список, включите переключатель «Слияние списков» — тогда и первое, и последующие добавления будут работать одинаково.

📍 Доступ к значению

После выполнения реакции значение доступно по пути:

${var.local.название}

Примеры:

${var.local.counter}      # число (счётчик)
${var.local.items}        # массив
${var.local.log}          # строка (накопленный лог)

🧪 Примеры использования

Пример 1: Счётчик в цикле (через TriggerFolder)

Задача: При каждом нажатии кнопки увеличивать счётчик.

Реакции в триггере:

  1. AddVarLocal → название: clicks, значение: 1, тип: number (если переменной нет, она будет создана)
  2. SendMessage → текст: Количество нажатий: ${var.local.clicks}

Результат:

  • Первое нажатие → переменная создана, значение 1
  • Второе нажатие → было 1, стало 2
  • Третье нажатие → было 2, стало 3

Пример 2: Накопление суммы

Задача: В процессе обработки товаров в корзине накапливать итоговую сумму.

Реакции в триггере (для каждого товара):

  1. AddVarLocal → название: total, значение: ${item_price}, тип: float
  2. (После обработки всех товаров) SendMessageИтого: ${var.local.total} ₽

Результат: Было 0 (переменная создана), добавить 150150, добавить 200350

Пример 3: Добавление элементов в массив

Задача: Собрать список ID товаров, выбранных пользователем.

Реакции в триггере (при добавлении товара):

  1. AddVarLocal → название: selected_ids, значение: ${product_id}, тип: number
  2. (После завершения выбора) SendMessageВыбраны товары: !{json|value: ${var.local.selected_ids}}

Результат:

  • Первый товар (123) → переменной не было, создана со значением 123 (число, а не список!)
  • Второй товар (456) → было 123, стало 579 — числа просто сложились

⚠️ Так делать нельзя. Тип значения описывает то, что добавляют, а не то, что должно получиться. Чтобы собрать именно список, нужен список и включённое слияние:

Правильный вариант:

  1. SetVarLocal → название: selected_ids, значение: пусто (кнопка «Пропустить»), тип: array json
  2. AddVarLocal → название: selected_ids, значение: [${product_id}], тип: array json, слияние списков: включено
  3. (После завершения выбора) SendMessageВыбраны товары: !{json|value: ${var.local.selected_ids}}

Результат:

  • Первый товар (123) → было [], стало [123]
  • Второй товар (456) → стало [123, 456]
  • Третий товар (789) → стало [123, 456, 789]

💡 Совет: Начальный SetVarLocal с пустым значением здесь не обязателен — при включённом слиянии первое добавление и так создаст список [123]. Но с ним понятнее, и переменная существует с самого начала.

Пример 4: Конкатенация строк (лог действий)

Задача: Вести лог действий пользователя в рамках одного сеанса.

Реакции в триггере (при каждом действии):

  1. AddVarLocal → название: action_log, значение: \n!{time|output_format: HH:mm:ss} - Выполнено действие, тип: string
  2. (При завершении) SendMessage → текст: История действий:${var.local.action_log}

Результат:

  • Первое действие → \n14:30:25 - Выполнено действие
  • Второе действие → \n14:30:25 - Выполнено действие\n14:35:10 - Выполнено действие

Пример 5: Объединение JSON-объектов

Задача: Постепенно собирать объект с данными пользователя.

Реакции в триггере:

  1. AddVarLocal → название: profile, значение: {"name": "Иван"}, тип: json
  2. AddVarLocal → название: profile, значение: {"age": 30}, тип: json
  3. AddVarLocal → название: profile, значение: {"city": "Москва"}, тип: json
  4. SendMessage → текст: Данные: !{json|value: ${var.local.profile}}

Результат:

{
  "name": "Иван",
  "age": 30,
  "city": "Москва"
}

⚠️ Важно: Объединение выполняется поверхностно. Вложенные объекты заменяются, а не объединяются.

🔄 Разница между AddVarLocal и SetVarLocal

Операция AddVarLocal SetVarLocal
Число 10, значение 5 (тип number) Будет 15 (прибавит) Будет 5 (заменит)
Строка A, значение B (тип string) Будет AB (допишет в конец) Будет B (заменит)
Список [1,2], значение 3 (тип number) Будет [1,2,3] (добавит элемент) Будет 3 (заменит, список пропадёт)
Список [1,2], значение [3,4] (тип array json) Будет [1,2,[3,4]], а со слиянием — [1,2,3,4] Будет [3,4] (заменит)
Объект {"a":1}, значение {"b":2} (тип json) Будет {"a":1, "b":2} (объединит) Будет {"b":2} (заменит)
Логическое true, значение false (тип bool) Будет false (переключит) Будет false (заменит)

💡 Совет: Используйте AddVarLocal для накопления (счётчики, списки, лог). Используйте SetVarLocal для установки начального значения или полной замены.

🔗 Связанные реакции

Реакция Назначение
SetVarLocal Создать или перезаписать локальную переменную
DelVarLocal Удалить локальную переменную
AddVarCloud Изменить облачную переменную

🔗 Связанные разделы

Раздел Описание
Локальные переменные Общая информация о локальных переменных
Макрос math Вычисления для значений
Макрос list Работа с массивами
© 2025 EnotPRO. Все права защищены.