Инструкция объявления переменной

Вы можете использовать несколько способов объявления переменных:
  1. С указанием типа.
    модификатор имя-переменной: имя-типа
  2. С указанием значения.
    модификатор имя-переменной = выражение-инициализации
  3. Переменные составного типа.
    модификатор имя-переменной: имя-типа[|имя-типа ...][|имя-типа = выражение-инициализации]
модификатор
модификатор описывает вид переменной:
  • пер (от английского variable — переменная) — переменная, доступная для записи и для чтения
    пер Переменная1: Строка
  • знч (от английского value — значение) — переменная, доступная только для чтения
    знч Исполняемый = Ложь // тип файла
  • исп (от английского use — использование) — переменная, тип которой является потомком типа Закрываемое (подробнее). Такая переменная доступна только для чтения. При выходе из области видимости для такой переменной будет автоматически вызван метод Закрыть()
    исп ВременныйПотокЗаписи = ВременныйФайл.ОткрытьПотокЗаписи()
  • конст (от английского constant — константа) — позволяет определить именованное значение, которое синтаксически выглядит как переменная, но его нельзя изменить после объявления. Константа быть объявлена только на уровне модуля. При объявлении константы обязательно должно присутствовать значение инициализации, вычисление которого гарантировано происходит во время компиляции модуля. При инициализации константы литералом коллекции, значение коллекции является неизменяемым. Правила вычислимости выражения приведены здесь
    конст ИМЯ_АРХИВА = "myZip.zip"
имя-переменной
Имя определяемой переменной. Правила формирования имени переменной см. Переменные.
имя-типа
Имя типа.
выражение-инициализации
Выражение, которое описывает начальное значение определяемой переменной. Если выражение инициализации указывается для константы (используется модификатор конст), то это выражение должно быть вычислимо во время компиляции. Выражение является вычислимым на этапе компиляции, если оно удовлетворяет следующим критериям:
  • Литералы (включая литералы коллекций) являются вычислимыми.
  • Обращения к константам модулей являются вычислимыми.
  • Операции над вычислимыми являются вычислимыми, кроме следующих исключений:
    • Вызовы методов и обращения к свойствам.
    • Вызовы конструкторов.
    • Операции сложения значения типа Строка со значением другого типа.
Если выражение не указано, то переменная инициализируется значением по умолчанию для типа переменной. Если для выбранного типа нет значения по умолчанию или в составном типе отсутствует тип Неопределено, то во время компиляции возникает ошибка инициализации переменной.
Если в качестве типа переменной указан тип неизвестно или тип, включающий тип Неопределено, то переменная инициализируется значением Неопределено.
Если при определении переменной указано только выражение, то типом переменной будет тип результата выражения. В этом случае можно говорить о кратком объявлении переменной.

Переменные составного типа

Если определение типа переменной содержит несколько типов, разделенных символом |, то происходит описание переменной составного типа. Если в составном типе отсутствует тип Неопределено, то выражение инициализации переменной должно быть указано.
пер Переменная1: Строка|Число|Булево = 0
Если в составном типе присутствует тип Неопределено, то в списке типов он явно не указывается, вместо него используется сокращение ?, которое мы рекомендуем писать:
  • слитно с предыдущим типом, если типов всего два;
  • через символ |, если типов больше двух.

пер Переменная1: Строка?
пер Переменная1: Строка|Число|?

В этом случае переменная инициализируется значением Неопределено.

Если нужно объявить переменную произвольного типа, то следует указать для нее тип Объект?.

Общие рекомендации

Объявляя типизированную переменную надо понимать, что во время компиляции модуля «1С:Шина» будет проверять совместимость типов в выражении. Другими словами, если переменная объявлена как числовая, а ей пытаются присвоить строковое значение - это приведет к ошибке. Но если переменная объявлена с типом неизвестно, то во время компиляции модуля контроль совместимости типов выполняться не будет. Однако проверки времени исполнения будут выполняться в любом случае.

Объявление переменной может располагаться в любом месте метода. При объявлении переменной следует помнить о следующих особенностях и ограничениях:
  • Не поддерживается объявление нескольких переменных в одной инструкции.
  • Переменная не может быть объявлена дважды в одной области видимости. Допускается объявлять переменную или описывать параметр метода так, что имя переменной или параметра будет совпадать с константой или именем свойства глобального контекста.
  • Имя переменной не может совпадать с именем параметра метода.
  • Переменная не может быть использована без предварительного объявления.
  • Переменная не может быть использована в собственном инициализаторе.
  • Не поддерживается объявление переменной без указания типа или явного значения инициализации.
  • Если при объявлении переменной не указан тип, то тип будет вычислен из значения инициализации.

Пример

метод Скрипт()
    // Допустимые объявления переменных
    пер А: неизвестно // Неопределено
    пер Б: Число // 0
    пер В: Строка // пустая строка
    пер Г: Строка? // Неопределено
    пер Д: Строка|Число = 5 // 5
    конст К = "myZip.zip"
    
    // Недопустимы объявления переменных
    пер Е: Строка|Число // не указано значение инициализации
    пер Ж: Строка = [1, 2] // данные инициализации не совпадают с указанным типом
;