Аргументы и типы значений

Компоненты сценария оперируют аргументами. Аргумент — это объект, значение которого может быть вычислено в любой момент выполнения сценария по запросу активного компонента. Проще говоря, это ответ на вопрос «откуда компонент возьмёт значение для этого свойства».

Окно выбора аргумента открывается, когда объекту назначается свойство типа «Аргумент». В окне несколько вкладок — по одной на каждый вид аргумента; часть вкладок в конкретной ситуации может быть недоступна.

Пять видов аргументов

ВидЧто этоГде доступен
КонстантаФиксированное значение, вписанное вручнуюВезде
ПеременнаяПеременная сценария, в том числе поле прикреплённой таблицы в строке текущего абонентаВезде
ВыражениеАрифметические и строковые действия над константами, переменными и функциями от нихВезде
ФункцияОдна из встроенных функций обработчика сценариев соответствующего типаВезде
SQL-запросЗапрос в базу данныхТолько в диалоговых и web-формах

Значение аргумента принадлежит к одному из трёх типов: число (целое или десятичное), строка, дата/время.

Когда вычисляется аргумент

Вычисление происходит на сервере, в момент выполнения сценария, когда управление переходит к объекту, чьё свойство определяет данный аргумент. Результат подставляется в качестве значения этого свойства.

Это значит, что аргумент — не заранее посчитанная величина, а формула, которую сервер выполняет каждый раз заново. Один и тот же аргумент в цикле даст на каждой итерации своё значение.

Редактирование переменных из окна аргумента

Внутренние переменные сценария создаются, переименовываются и удаляются прямо на вкладке «Переменные» окна выбора аргумента — отдельного места для этого не нужно. Редактировать можно имя переменной; тип изменению не подлежит — так исключаются некорректные ситуации, когда уже используемая переменная внезапно меняет природу.

Правило включения типов

В операциях с двумя аргументами легко допустить логическую ошибку — сравнить строку с числом. Чтобы такие случаи не приводили к отказу, сервер логики применяет правило включения типов.

Правило Если на выходе требуется строка, значение переводится в строку без потерь.
Если требуется число или дата/время, обработчик пытается преобразовать значение к нужному типу. Если корректно привести тип невозможно, берётся значение по умолчанию: для числа — 0, для строки — пустая строка, для даты/времени — текущая дата и время.

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

Насколько корректны преобразования

ПреобразованиеОценкаПример
Целое число → строкаКорректно1 → «1»
Десятичное число → строкаКорректно1,5 → «1.5»
Дата/время → строкаКорректно«25.12.1981 12:30:00» — по настройкам операционной системы
Строка → числоМенее корректно«1» → 1, но в строке могут оказаться нечисловые символы
Строка → десятичное числоМенее корректно«1.5» и «1,5» — разные представления
Строка → дата/времяНаименее корректноПредставления дат сильно различаются
Число ↔ дата/времяНекорректно
Строка с лишними символами → числоНекорректно
Строка, не похожая на дату, → дата/времяНекорректноЗависит от представления дат в ОС сервера
Не смешивайте типы без нужды Использование разных типов в одной операции приводит к последствиям, которых создатель сценария не ожидал. Исключения, когда это оправданно: формат хранения данных в базе диктует тип, и преобразование в число символов, набранных абонентом с клавиатуры телефона.