Документация 0.4 Студия

Переменные и выражения

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

Переменные #

Переменные процесса — на вкладке «Переменные»: имя, тип, значение по умолчанию и признак „Аргумент“.

Вкладка «Переменные»: greeting — аргумент процесса, numbers и total — рабочие переменные
Вкладка «Переменные»: greeting — аргумент процесса, numbers и total — рабочие переменные
  • Имя — латинские буквы, цифры и _, первым символом не цифра: total, client_name, rows2. Слова JavaScript (new, class, return …) и имена встроенных функций (now, formatDate, env, flowDir) заняты. Регистр важен: Total и total — разные переменные.
  • Тип — подсказка для студии и для разбора значения по умолчанию: „Текст“, „Число“, „Да/нет“, „Список“ ([1, 2, 3]), „Объект“ ({"a": 1}), „Любой“. Во время работы переменная может получить значение любого типа.
  • По умолчанию — значение в начале запуска; пусто — null.
  • Аргумент — значение можно задать снаружи: в окне запуска студии, параметром --arg имя=значение у tulpar-robot, аргументами задания или расписания в оркестраторе. Так один процесс работает с разными файлами, очередями и режимами.

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

Выходы шагов #

Результат шага — прочитанный текст, строки Excel, найденный элемент очереди — сохраняется в переменную через «Выходы» в свойствах шага: выберите переменную или создайте новую. Значение остаётся своего типа: строки Excel — список объектов, „Найден“ — да/нет, количество — число.

Два вида полей #

Поле Как пишется значение Пример
Текстовые: текст, путь к файлу, селектор страницы, а также число, да/нет и выбор из списка в режиме {{ }} Обычный текст; значение переменной или выражения — в {{ }} Заявка {{ number }} от {{ formatDate(now(), 'dd.MM.yyyy') }}
Выражение: „Значение“ у control.assign, „Условие“, „Элементы“, данные очереди и отчёта JavaScript без {{ }}: переменные — по имени, текст — в кавычках total + n, status === 'Оплачен', { Номер: row['Номер'] }
Поле выражения: значение пишется на JavaScript без {{ }}
Поле выражения: значение пишется на JavaScript без {{ }}

Правила текстовых полей:

  • Если всё поле — одно {{ … }} без текста вокруг, значение сохраняет свой тип: {{ total }} — число, {{ rows }} — список. Так в ячейку Excel excel.writeCell записывается число, а не текст.
  • Если вокруг есть текст, результат — строка: null и undefined становятся пустой строкой, список и объект — JSON, числа пишутся с точкой (12.5).
  • Чтобы написать сами символы {{, поставьте перед ними обратную косую черту: \{{. В путях к файлам это не действует — там \ разделяет папки.
  • У полей чисел, да/нет и выбора из списка есть кнопка «Задать выражением {{ }}»: поле станет текстовым, и значение можно вычислить, например {{ attempt * 2000 }} или {{ headless }}. Назад — «Вернуться к обычному значению».
  • Кнопка «Вставить переменную» рядом с полем вставляет имя переменной; набор {{ в текстовом поле открывает подсказку с переменными.

Студия подсказывает, если поле похоже на ошибку: {{ }} в поле выражения, текст без кавычек, имя переменной без {{ }} в текстовом поле. Кнопка «Исправить» под подсказкой исправляет значение.

Выражения #

Выражение — одно выражение JavaScript, не программа: без ;, let, if. Для условия используйте тернарный оператор a ? b : c, для нескольких действий — несколько шагов.

Задача Выражение
Арифметика total + n, Math.round(sum * 100) / 100
Сравнение и логика count > 0 && !stop, status === 'Новый' \|\| status === 'Ошибка'
Текст 'Заявка ' + number, `Привет, ${userName}!`, fio.trim().toUpperCase(), text.includes('ошибка')
Число из текста Number(text.replace(',', '.')), parseInt(code, 10)
Поле строки Excel row['ФИО'], client['Телефон']
Список rows.length, rows.filter(r => r['Сумма'] > 1000), rows.map(r => r['Номер']), rows.slice(0, 10)
Объект { Номер: row['Номер'], ФИО: row['ФИО'] }, item.payload['ФИО'], JSON.parse(text)
Регулярное выражение /^Z-\d{6}$/.test(requestNumber)

Доступен стандартный JavaScript: String, Number, Math, JSON, Date, методы строк и списков. Одно выражение выполняется не дольше 2 секунд и занимает не больше 64 МБ памяти, глубина рекурсии — до 100; при превышении шаг завершается ошибкой ExpressionError.

В условиях (control.if, control.while) результат понимается по правилам JavaScript: ложны false, 0, пустая строка, null и undefined.

Встроенные функции #

Функция Что возвращает Пример
now() Текущие дату и время компьютера строкой ISO с часовым поясом 2026-11-16T10:30:00.000+06:00
formatDate(значение, шаблон) Дату строкой по шаблону .NET; шаблон по умолчанию dd.MM.yyyy HH:mm, названия месяцев — по-русски formatDate(now(), 'dd.MM.yyyy') → 16.11.2026
env(имя) Переменную окружения Windows или null env('USERNAME'), env('COMPUTERNAME')
flowDir() Папку файла процесса flowDir() + '\\out'

formatDate принимает дату JavaScript (new Date()), число миллисекунд, строку даты (2026-11-16, 2026-11-16T10:30:00Z, значения дат из Excel) или null — тогда берётся текущее время. Частые шаблоны: dd.MM.yyyy, dd.MM.yyyy HH:mm, yyyy-MM-dd, d MMMM yyyy (16 ноября 2026), HH:mm:ss.

Пути к файлам #

Путь без диска в полях путей считается от папки, где сохранён файл процесса: data\clients.xlsx, ..\shared\template.docx. Поэтому процесс вместе с папкой можно переносить и публиковать — пути не ломаются. Исключение — „Программа“ у app.start: имя без папки (notepad.exe) ищется в PATH.