d9e5a92d

Глава 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


Содержание раздела