Основная страница

Глава 5
Управляющие операторы


Управляющие конструкции

Если

Оператор условного выполнения.

Синтаксис:

Если <Логическое_выражение> Тогда

   //операторы;

[ИначеЕсли <Логическое_выражение> Тогда]

   //операторы;

[Иначе]

   //операторы;

КонецЕсли;

Англоязычный Синтаксис:

If <Логическое_выражение> Then

   //операторы;

[Elsif <Логическое_выражение> Then]

   //операторы;

[Else]

   //операторы;

Endlf;

Параметры:

<Логическое_выражение>

Логическое выражение.

Тогда

Операторы следующие за Тогда выполняются, если результатом логического выражения в конструкции Если является истина.

//операторы

Исполняемый оператор или последовательность таких операторов.

ИначеЕсли

Логическое выражение, следующее за ключевым словом ИначеЕсли вычисляется только тогда, когда условия в Если и всех предшествующих ИначеЕсли оказались ложными. Операторы следующие за конструкцией ИначеЕслиТогда выполняются, если результатом логического выражения в данном ИначеЕсли является истина.

Иначе

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

КонецЕсли

Ключевое слово, которое завершает структуру оператора условного выполнения.

Описание:

Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями

ИначеЕсли — Тогда.

Пример:

Если (РабочаяДата() > '01.01.95') И (Сег = "Понедельник") Тогда

   Сообщить("Сегодня" + " " + Сег + " " + РабочаяДата());

КонецЕсли;

Пока

Оператор выполнения цикла.

Синтаксис:

Пока <Логическое_выражение> Цикл

   //операторы;

КонецЦикла;

Англоязычный Синтаксис:

While <Логическое_выражение> Do

   //операторы;

EndDo;

Параметры:

<Логическое_выражение>

Логическое выражение.

Цикл

Операторы, следующие за ключевым словом Цикл, выполняются, пока результатом логического выражения является истина.

//операторы;

Исполняемый оператор или последовательность таких операторов.

КонецЦикла

Ключевое слово, которое завершает структуру оператора цикла.

Описание:

Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл ... КонецЦикла. Цикл выполняется пока логическое выражение — истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.

Пример:

Док = СоздатьОбъект("Документ.БригадныйНаряд");

// Будем просматривать документы в интервале дат

Док.ВыбратьДокументы('11.01.88', '11.01.99');

// Цикл по всем Документам

Пока (Док.ПолучитьДокумент() = 1) Цикл

   // отобразим Документ в строке состояния

   Состояние(Док.Вид() + " " + Док.НомерДок + " " + Док.ДатаДок);

   Док.ВыбратьСтроки();

   // вложенный цикл по всем строкам Документа

   Пока(Док.ПолучитьСтроку() > 0) Цикл

      Если Док.КодРабот = 104 Тогда

         Сообщить(" " + Док.НомерДок);

      КонецЕсли;

   КонецЦикла;

КонецЦикла;

Для

Оператор выполнения цикла.

Синтаксис:

Для <Имя_переменной> = <Выражение1> По <Выражение2> Цикл

   //Операторы;

КонецЦикла;

Англоязычный Синтаксис:

For <Имя_переменной> = <Выражение1> То <Выражение2> Do

   //Операторы;

EndDo;

Параметры:

<Имя_переменной>

Идентификатор переменной (счетчика цикла), значение которой автоматически увеличивается при каждом повторении цикла.

<Выражение 1>

Числовое выражение, которое задает начальное значение, присваиваемое счетчику цикла при первом проходе цикла.

По

Синтаксическая связка для параметра <Выражение2>.

<Выражение 2>

Максимальное значение счетчика цикла. Когда переменная Имя_переменной становится больше чем <Выражение2>, выполнение оператора цикла Для прекращается. Величина приращения счетчика при каждом выполнении цикла равна 1.

Цикл

Операторы следующие за ключевым словом Цикл выполняются, пока значение переменной Имя_переменной меньше значения <Выражение2>.

//Операторы

Исполняемый оператор или последовательность таких операторов.

КонецЦикла

Ключевое слово, которое завершает структуру оператора цикла.

Описание:

Оператор цикла Для предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл ... КонецЦикла. Перед началом выполнения цикла значение <Выражение1> присваивается переменной <Имя_переменной>. Значение <Имя_переменной> автоматически увеличивается при каждом проходе цикла. Цикл выполняется пока значение переменной <Имя_переменной> меньше или равно значению <Выражение2>. Величина приращения счетчика при каждом выполнении цикла равна 1. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.

Пример:

// Выведем все строки текста

Выв = СоздатьОбъект("Текст");

Выв.Открыть("ТТТ");

Для i = l по Выв.КоличествоСтрок() Цикл

   Сообщить(Выв.ПолучитьСтроку(i));

КонецЦикла;

Попытка

Обработка исключительных ситуаций.

Синтаксис:

Попытка

   // Некоторые действия;

Исключение

   // Обработка исключительной ситуации;

КонецПопытки;

Англоязычный Синтаксис:

Try

   // Некоторые действия;

Except

   // Обработка исключительной ситуации;

EndTry;

Параметры:

// Некоторые действия

Исполняемый оператор или последовательность таких операторов.

// Обработка исключительной ситуации

Исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию.

Исключение

Операторы, следующие за ключевым словом Исключение выполняются, если при выполнении последовательности операторов <// Некоторые действия> произошла ошибка времени выполнения.

КонецПопытки

Ключевое слово, которое завершает структуру оператора обработки исключительных ситуаций.

Описание:

Оператор Попытка управляет выполнением программы, основываясь на возникающие при выполнении модуля ошибочные (исключительные) ситуации и определяет обработку этих ситуаций.

В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля. Не предусмотрено определяемых пользователем исключений.

Если при выполнении последовательности операторов <// Некоторые действия> произошла ошибка времени выполнения, то выполнение оператора, вызвавшего ошибку прерывается и управление передается на первый оператор последовательности операторов <// Обработка исключительной ситуации>. При этом управление будет передано даже в том случае, если ошибку вызвал оператор, находящийся в процедуре или функции, вызванной из <// Некоторые действия>. Если ошибка произошла в вызванной процедуре или функции, то ее выполнение будет прервано, а локальные переменные уничтожены. Это справедливо для любой вложенности вызовов. После выполнения последовательности операторов <// Обработка исключительной ситуации> управление передается на следующий за ключевым словом КонецПопытки оператор. Если же последовательность <// Некоторые действия> выполнилась без ошибок, то последовательность операторов <// Обработка исключительной ситуации> будет пропущена и управление также будет продолжено с оператора, следующего за ключевым словом КонецПопытки.

Конструкции Попытка-Исключение-КонецПопытки могут быть вложенными. При этом, при возникновении исключительной ситуации управление будет передано на самый «внутренний» обработчик, начинающийся с ключевого слова Исключение. Последовательность операторов <// Обработка исключительной ситуации> может содержать оператор ВызватьИсключение (англоязычный синоним Raise). Выполнение данного оператора прекращает выполнение последовательности <// Обработка исключительной ситуации> и производится поиск более «внешнего» обработчика. Если таковой есть, то управление передается на его первый оператор. Если нет, то выполнение модуля прекращается с выдачей сообщения о первоначально возникшей ошибке. Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки.

В выдаче диагностики помощь может оказать встроенная функция ОписаниеОшибки() (англоязычный синоним GetErrorDescription). Эта функция не имеет параметров, а в качестве значения возвращает описание ошибки, такое же, как было бы выдано в окне сообщений, в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла. Применять данную функцию имеет смысл только при выполнении последовательности операторов <// Обработка исключительной ситуации>, так как в ином случае она вернет пустую строку.

Пример:

Процедура СформироватьВЕхсеl()

   Попытка

      // пытаемся обратиться к программе MS Excel

      Табл = СоздатьОбъект("Excel.Application");

   Исключение

      Предупреждение(ОписаниеОшибки() +

           "; Excel не установлен на данном компьютере!");

      Возврат;

   КонецПопытки;

   // Формирование отчета

   ...

КонецПроцедуры

Управляющие операторы

Перейти

Безусловная передача управления на другой оператор программы.

Синтаксис:

Перейти <Метка>;

Англоязычный синоним:

Goto

Параметры:

<Метка>

Метка другого исполняемого оператора в программе.

Описание:

Безусловная передача управления на другой оператор программы. Оператор Перейти передает управление от одного оператора к другому. <Метка> в этом операторе не должна быть меткой перехода на оператор Процедура или Функция.

Область действия оператора Перейти ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.

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

Пример:

     // Выведем строки текста

     Выв = СоздатьОбъект("Текст");

     Выв.Открыть("ТТТ");

     Для i = l По Выв.КоличествоСтрок() Цикл

        Если i = 10 Тогда

           Перейти ~М1;

        КонецЕсли;

        Сообщить(Выв.ПолучитьСтроку(i));

        Перейти ~М2;

~М1:    Сообщить("Это десятая строка");

~М2: КонецЦикла;

Продолжить

Передача управления в начало цикла.

Синтаксис:

Продолжить;

Англоязычный синоним:

Continue;

Описание:

Передает управление в начало цикла. Оператор Продолжить немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Оператор Продолжить может использоваться только внутри конструкций операторов цикла Пока и Для.

Пример:

// Выведем строки текста начиная с 5

Выв = СоздатьОбъект("Текст");

Выв.Открыть("ТТТ");

Для i = 1 По Выв.КоличествоСтрок() Цикл

   Если i < 5 Тогда

      Продолжить;

   КонецЕсли;

   Сообщить(Выв.ПолучитьСтроку(i));

КонецЦикла;

Прервать

Прерывает выполнение цикла.

Синтаксис:

Прервать

Англоязычный синоним:

Break

Описание:

Прерывает выполнение цикла. Оператор Прервать приводит к немедленному прекращению выполнения цикла и передает управление первому оператору, следующему за конструкцией оператора Пока или Для. Оператор Прервать может использоваться только внутри конструкций операторов цикла Пока и Для.

Пример:

// Выведем строки текста с 1 по 10

Выв = СоздатьОбъект("Текст");

Выв.Открыть("ТТТ");

Для i = l По Выв.КоличествоСтрок() Цикл

   Сообщить(Выв.ПолучитьСтроку(i));

   Если i=10 Тогда

      Прервать;

   КонецЕсли;

КонецЦикла;

Возврат

Завершение процедуры или функции.

Синтаксис:

Возврат [<Выражение>]

Англоязычный синоним:

Return

Параметры:

<Выражение>

Выражение, значение которого содержит результат обращения к функции. Этот параметр обязателен для оператора Возврат в теле описания функции, но не может использоваться в процедуре.

Описание:

Оператор Возврат завершает выполнение процедуры или функции и передает управление в вызвавшую точку программы. Оператор Возврат обязателен в функции и необязателен в процедуре. Если в процедуре не используется оператор Возврат, то его неявное выполнение происходит вслед за последним исполняемым оператором процедуры. Данный оператор может применяться только в теле описания процедуры или функции, причем <Выражение> может задаваться только в случае использования оператора в контексте функции.

Пример:

Функция ДеньНедели(Номер)

   Если Номер =1 Тогда

      Return "понедельник";

   ИначеЕсли Номер =2 Тогда

      Возврат "вторник";

   ИначеЕсли Номер =3 Тогда

      Возврат "среда";

   ИначеЕсли Номер =4 Тогда

      Возврат "четверг";

   ИначеЕсли Номер =5 Тогда

      Возврат "пятница";

   ИначеЕсли Номер =6 Тогда

      Возврат "суббота";

   ИначеЕсли Номер =7 Тогда

      Возврат "воскресенье";

   Иначе

      Возврат "ошибка";

   КонецЕсли;

КонецФункции

Специальные конструкции языка

#ЗагрузитьИзФайла

Переключение загрузки программного модуля на загрузку из текстового файла.

Синтаксис:

#ЗагрузитьИзФайла <ИмяФайла>

Англоязычный синоним:

ftLoadFromFile

Параметры:

<ИмяФайла>

Имя файла, содержащего исходный текст программного модуля (записывается без кавычек и скобок).

Описание:

Данная конструкция переключает загрузку программного модуля на загрузку из указанного файла. Специальная конструкция #ЗагрузитьИзФайла должна записываться в первой строке программного модуля с первой позиции. Ее использование рекомендуется для отладки, чтобы быстро отлаживать код какого-либо программного модуля без промежуточного сохранения всей конфигурации. Данная конструкция переключает загрузку программного модуля конфигурации на загрузку из указанного файла. Содержимое программного модуля конфигурации при этом игнорируется.

Для редактирования собственно файла, откуда загружается текст программного модуля, можно использовать встроенный текстовый редактор системы 1С:Предприятие , открывая его через главное меню «Файл» — «Открыть». Далее, если выбрать в главном меню «Действия» — «Текст модуля», то это позволит при редактировании использовать свойства контекстного выделения цветом синтаксических конструкций языка и установленную для программных модулей ширину табуляции.

Данную возможность можно использовать для отладки любых программных модулей. Считывание текста файла и его компиляция происходит в момент открытия окна формы (документа, отчета и т. д.). Таким образом, в режиме исполнения, после внесения изменений и записи файла, содержащего текст модуля, следует просто закрыть и открыть окно формы заново. Внесенные в текст файла изменения сразу сработают, что позволяет отлаживать систему без промежуточного сохранения всей конфигурации.

После окончания отладки текста программного модуля в файле, следует перенести текст из файла в программный модуль конфигурации.

Замечание: #ЗагрузитьИзФайла является не оператором, а специальной конструкцией, поэтому не должна заканчиваться точкой с запятой.

Пример:

#ЗагрузитьИзФайла NEW_MOD.TXT







Перейти  к оглавлению: Описание встроенного языка