Компоненты сценария оперируют аргументами. Аргумент — это объект, значение которого может быть вычислено в любой момент выполнения сценария по запросу активного компонента. Проще говоря, это ответ на вопрос «откуда компонент возьмёт значение для этого свойства».
Окно выбора аргумента открывается, когда объекту назначается свойство типа «Аргумент». В окне несколько вкладок — по одной на каждый вид аргумента; часть вкладок в конкретной ситуации может быть недоступна.
Пять видов аргументов
| Вид | Что это | Где доступен |
|---|---|---|
| Константа | Фиксированное значение, вписанное вручную | Везде |
| Переменная | Переменная сценария, в том числе поле прикреплённой таблицы в строке текущего абонента | Везде |
| Выражение | Арифметические и строковые действия над константами, переменными и функциями от них | Везде |
| Функция | Одна из встроенных функций обработчика сценариев соответствующего типа | Везде |
| SQL-запрос | Запрос в базу данных | Только в диалоговых и web-формах |
Значение аргумента принадлежит к одному из трёх типов: число (целое или десятичное), строка, дата/время.
Когда вычисляется аргумент
Вычисление происходит на сервере, в момент выполнения сценария, когда управление переходит к объекту, чьё свойство определяет данный аргумент. Результат подставляется в качестве значения этого свойства.
Это значит, что аргумент — не заранее посчитанная величина, а формула, которую сервер выполняет каждый раз заново. Один и тот же аргумент в цикле даст на каждой итерации своё значение.
Редактирование переменных из окна аргумента
Внутренние переменные сценария создаются, переименовываются и удаляются прямо на вкладке «Переменные» окна выбора аргумента — отдельного места для этого не нужно. Редактировать можно имя переменной; тип изменению не подлежит — так исключаются некорректные ситуации, когда уже используемая переменная внезапно меняет природу.
Правило включения типов
В операциях с двумя аргументами легко допустить логическую ошибку — сравнить строку с числом. Чтобы такие случаи не приводили к отказу, сервер логики применяет правило включения типов.
Если требуется число или дата/время, обработчик пытается преобразовать значение к нужному типу. Если корректно привести тип невозможно, берётся значение по умолчанию: для числа — 0, для строки — пустая строка, для даты/времени — текущая дата и время.
Ключевое следствие: некорректное преобразование не остановит сценарий и не выдаст ошибку. Оно молча подставит ноль, пустую строку или сегодняшнее число — и сценарий пойдёт дальше по неверной ветке.
Насколько корректны преобразования
| Преобразование | Оценка | Пример |
|---|---|---|
| Целое число → строка | Корректно | 1 → «1» |
| Десятичное число → строка | Корректно | 1,5 → «1.5» |
| Дата/время → строка | Корректно | «25.12.1981 12:30:00» — по настройкам операционной системы |
| Строка → число | Менее корректно | «1» → 1, но в строке могут оказаться нечисловые символы |
| Строка → десятичное число | Менее корректно | «1.5» и «1,5» — разные представления |
| Строка → дата/время | Наименее корректно | Представления дат сильно различаются |
| Число ↔ дата/время | Некорректно | — |
| Строка с лишними символами → число | Некорректно | — |
| Строка, не похожая на дату, → дата/время | Некорректно | Зависит от представления дат в ОС сервера |