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

- Имя — латинские буквы, цифры и
_, первым символом не цифра: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['Номер'] } |

Правила текстовых полей:
- Если всё поле — одно
{{ … }}без текста вокруг, значение сохраняет свой тип:{{ total }}— число,{{ rows }}— список. Так в ячейку Excelexcel.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.