Синтаксис:
Перем
<Имя_переменной> [[<Размерность>]] [Экспорт];
В языке переменные не обязательно объявлять в явном виде. Неявным определением переменной является первое ее появление в левой части оператора присваивания. Возможно также явное объявление переменной при помощи оператора Перем. Тип переменной определяется типом присвоенного ей значения. Не допускается использование в выражениях переменных с неопределенным значением (то есть переменных, которым никогда не присваивалось значения).
Переменные могут объединяться в одномерные массивы.
Пример:
Перем
А;
Перем
Массив_Для_Хранения[10];
Область использования переменных зависит от места их определения в конфигурации задачи. Существует три области, в которых можно объявить переменные:
· В разделе определения переменных глобального программного модуля. Если переменные определены с ключевым словом Экспорт (см. оператор Перем), то это будут глобальные переменные.
· В разделе определения переменных модуля. Это переменные модуля.
· В процедуре или функции. Это локальные переменные.
Глобальные переменные доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции любого программного модуля конфигурации задачи.
Переменные модуля доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции того программного модуля, в пределах которого они объявлены.
Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены.
Если переменная определена как глобальная переменная, то она видна из всех процедур и функций любого программного модуля конфигурации задачи. Если же переменная определена внутри процедуры, то её областью видимости является данная процедура или функция. Таким образом, если две переменные с одинаковыми именами используются в двух различных процедурах модуля, и имя этой переменной не упоминается как глобальная переменная, то это две различные переменные, локальные для процедур. Если же переменная определена как глобальная переменная, то любое использование имени этой переменной будет приводить к обращению к одной и той же переменной.
Единственный способ создать для процедуры локальную переменную с именем, совпадающим с именем переменной, определенной как глобальная переменная — это объявить ее явно при помощи оператора Перем.
Выражение — это математическая или логическая формула, по которой вычисляется значение. Математическое выражение может стоять справа от знака равенства в операторах присваивания, быть параметром процедур или функций, индексом массива переменных. Логическое выражение может быть условием в управляющих операторах Если, Пока, Для. Выражения состоят из констант, переменных и функций, связанных символами логических и/или арифметических операций.
В языке определены следующие виды арифметических операций:
сложение |
(Оп1 + Оп2) |
вычитание |
(Оп1 - Оп2) |
умножение |
(Оп1 * Оп2) |
деление |
(Оп1 / Оп2) |
остаток от деления |
(Оп1 % Оп2) |
унарный минус |
(-Оп1) |
Арифметические операции имеют один или два операнда, в зависимости от типа которых операция имеет ту или иную семантику. Тот или иной семантический вариант операции определяется по первому операнду. В случае несовпадения типа второго операнда с требуемым, значение преобразуется к требуемому типу в соответствии с правилами преобразования типов. Если тип первого операнда не соответствует ни одному из допустимых типов, то в зависимости от ситуации может производиться преобразование типов или возбуждаться состояние ошибки выполнения.
Сложение определено для следующих типов операндов: |
Число + Число |
|
Дата + Число (к дате прибавляется число дней) |
Вычитание определено для следующих типов операндов: |
Число – Число |
|
Дата – Число (от даты отнимается число дней) |
|
Дата – Дата (результатом является число дней между датами) |
Умножение: |
Число * Число |
Деление: |
Число / Число |
Остаток от деления: |
Число % Число |
Замечание. При выполнении операции % (остаток от деления) оба операнда операции округляются до целого значения.
Операция конкатенации ("+") используется для того, чтобы присоединить одну строку к другой. Длина результирующей строки равна сумме длин соединяемых строк. В случае несовпадения типа данных второго или последующих операндов со строковым типом, их значение преобразуется к строковому типу в соответствии с правилами преобразования типов.
Пример:
· Для того, чтобы удалить ненужные пробелы, используются системные функции СокрЛ и СокрП.
ФИО
= СокрП(Фамилия) + " " + СокрП(Имя) + " " +
СокрП(Отчество);
Логическая операция сравнивает операнды и вырабатывает логическое значение: «истина» или «ложь». Существует два вида логических операций: операции сравнения и булевы операции. В операциях сравнения сравниваются два значения. Булевы операции выполняются над логическими значениями, реализуя булеву алгебру. Символы булевых операций могут комбинироваться, образуя составные операции.
Операции сравнения:
В языке определены следующие виды операций сравнения:
больше |
(Оп1 > Оп2) |
больше или равно |
(Оп1 >= Оп2) |
равно |
(Оп1 = Оп2) |
не равно |
(Оп1 <> Оп2) |
меньше |
(Оп1 < Оп2) |
меньше или равно |
(Оп1 <= Оп2) |
Операции сравнения определены для следующих типов операндов:
Больше |
Число > Число |
|
Строка > Строка |
|
Дата > Дата |
Больше или равно: |
Число >= Число |
|
Строка >= Строка |
|
Дата >= Дата |
Меньше: |
Число < Число |
|
Строка < Строка |
|
Дата < Дата |
Меньше или равно: |
Число <= Число |
|
Строка <= Строка |
|
Дата <= Дата |
Равно: |
Число = Число |
|
Строка = Строка |
|
Дата = Дата |
|
АгрегатныйТип = АгрегатныйТип |
Не равно: |
Число <> Число |
|
Строка <> Строка |
|
Дата <> Дата |
|
АгрегатныйТип <> АгрегатныйТип |
Булевы операции:
В языке определены следующие виды булевых операций: И, ИЛИ, НЕ.
Примеры числовых
констант:
0 123 -15 +24.11 0.245
Примеры констант дат:
'12.04.95' '01.01.1996'
Примеры строковых
констант:
"Ура
заработала"
"Это
самая правильная строка"
" "
Кроме того, допускаются «многострочные» строковые константы. В исходном тексте многострочные константы могут задаваться двумя способами:
Примеры:
1) Между фрагментами, представляющими отдельные строки
многострочной константы, не должно встречаться никаких символов, за
исключением пробелов, переводов строки и строк комментариев.
Стр
= "Первая строка" // пример
строковой константы
"Вторая
строка"
"Третья строка";
2) Каждая отдельная составляющая не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки "|". В этом варианте комментарии между открывающей и закрывающей кавычками не допускаются.
Стр
= "Первая строка
|Вторая строка
|Третья строка";
Примеры строковых
выражений :
Стр
= СокрП("Фамилия" + ", " + Имя + ", " + "
отчество");
Стр1
= "" + Докум.Цена + Валюта.СокрНаим;
То, что выражение является строковым, определяется по первому операнду. В случае несовпадения типа второго и последующих операндов со строковым типом, их значения преобразуются к требуемому типу в соответствии с правилами преобразования типов. Чтобы указать, что выражение является строковым, можно, например, начинать его с пустой строки символов "".
Пример логического выражения:
Если
(а=1) И ((Стр = "пароль") ИЛИ (Стр = "Пароль")) Тогда
Сообщить(Стр);
КонецЕсли;
Синтаксис:
Если
<Логическое_выражение> Тогда
//операторы;
[ИначеЕсли
<Логическое_выражение> Тогда]
//операторы;
[Иначе]
//операторы;
КонецЕсли;
Если
(РабочаяДата() > '01.01.95') И (Сег = "Понедельник") Тогда
Сообщить("Сегодня" + " "
+ Сег + " " + РабочаяДата());
КонецЕсли;
Синтаксис:
Пока
<Логическое_выражение> Цикл
//операторы;
КонецЦикла;
Цикл выполняется пока логическое выражение — истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.
Пример:
Док
= СоздатьОбъект("Документ.БригадныйНаряд");
//
Будем просматривать документы в интервале дат
Док.ВыбратьДокументы('11.01.88',
'11.01.99');
//
Цикл по всем Документам
Пока
(Док.ПолучитьДокумент() = 1) Цикл
// отобразим Документ в строке состояния
Состояние(Док.Вид() + " " +
Док.НомерДок + " " + Док.ДатаДок);
Док.ВыбратьСтроки();
// вложенный цикл по всем строкам Документа
Пока(Док.ПолучитьСтроку() > 0) Цикл
Если Док.КодРабот = 104 Тогда
Сообщить(" " +
Док.НомерДок);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Синтаксис:
Для
<Имя_переменной> = <Выражение1> По <Выражение2> Цикл
//Операторы;
КонецЦикла;
Перед началом выполнения цикла значение <Выражение1> присваивается переменной <Имя_переменной>. Значение <Имя_переменной> автоматически увеличивается при каждом проходе цикла. Цикл выполняется пока значение переменной <Имя_переменной> меньше или равно значению <Выражение2>. Величина приращения счетчика при каждом выполнении цикла равна 1. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.
Пример:
//
Выведем все строки текста
Выв
= СоздатьОбъект("Текст");
Выв.Открыть("ТТТ");
Для
i = l по Выв.КоличествоСтрок() Цикл
Сообщить(Выв.ПолучитьСтроку(i));
КонецЦикла;
Синтаксис:
Попытка
// Некоторые действия;
Исключение
// Обработка исключительной ситуации;
КонецПопытки;
В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля. Не предусмотрено определяемых пользователем исключений.
Если при выполнении последовательности операторов <// Некоторые действия> произошла ошибка времени выполнения, то выполнение оператора, вызвавшего ошибку прерывается и управление передается на первый оператор последовательности операторов <// Обработка исключительной ситуации>. При этом управление будет передано даже в том случае, если ошибку вызвал оператор, находящийся в процедуре или функции, вызванной из <// Некоторые действия>. Если ошибка произошла в вызванной процедуре или функции, то ее выполнение будет прервано, а локальные переменные уничтожены. Это справедливо для любой вложенности вызовов. После выполнения последовательности операторов <// Обработка исключительной ситуации> управление передается на следующий за ключевым словом КонецПопытки оператор. Если же последовательность <// Некоторые действия> выполнилась без ошибок, то последовательность операторов <// Обработка исключительной ситуации> будет пропущена и управление также будет продолжено с оператора, следующего за ключевым словом КонецПопытки.
Конструкции Попытка-Исключение-КонецПопытки могут быть вложенными. При этом, при возникновении исключительной ситуации управление будет передано на самый «внутренний» обработчик, начинающийся с ключевого слова Исключение. Последовательность операторов <// Обработка исключительной ситуации> может содержать оператор ВызватьИсключение (англоязычный синоним Raise). Выполнение данного оператора прекращает выполнение последовательности <// Обработка исключительной ситуации> и производится поиск более «внешнего» обработчика. Если таковой есть, то управление передается на его первый оператор. Если нет, то выполнение модуля прекращается с выдачей сообщения о первоначально возникшей ошибке. Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки.
В выдаче диагностики помощь может оказать встроенная функция ОписаниеОшибки(). Эта функция не имеет параметров, а в качестве значения возвращает описание ошибки, такое же, как было бы выдано в окне сообщений, в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла. Применять данную функцию имеет смысл только при выполнении последовательности операторов <// Обработка исключительной ситуации>, так как в ином случае она вернет пустую строку.
Пример:
Процедура
СформироватьВЕхсеl()
Попытка
//
пытаемся обратиться к программе MS Excel
Табл =
СоздатьОбъект("Excel.Application");
Исключение
Предупреждение(ОписаниеОшибки() +
"; Excel не установлен на
данном компьютере!");
Возврат;
КонецПопытки;
// Формирование отчета
...
КонецПроцедуры