Выйти из цикла 1с 8.3. Прерывания цикла. объединение условий. Прерывание выполнения нажатием комбинации клавиш

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

Пример. Сообщить значение первой непериодической константы числового типа.

// Процедура, выводящая значение первой непериодической константы числового типа

// Запускается из обработки Проба процедура Выполнить()

// флагВывода

всегоКонстант = Метаданные.Константа(); для ин = 1 по всегоКонстант цикл

если Метаданные.Константа(ин).Периодический = 1 тогда

продолжить; // Передаем управление оператору Для конецЕсли;

если Метаданные.Константа(ин).Тип = "Число" тогда

идеи = Метаданные.Константа(ин).Идентификатор;

Сообщить(иден +" " + Константа.ПолучитьАтрибут(иден)); // БалансДней 1 флагВывода = 1;

прервать; // Досрочный выход из цикла Для

конецЕсли; конецЦикла; // для

если флагВывода = 0 тогда

конецПроцедуры // Выполнить

Замечание. Иногда программисты в цикле Для вместо оператора Прервать прибегают к изменению значения переменной цикла ин. Так, в нашем случае оператор Прервать мог быть заменен оператором

ин = всегоКонстант;

Такие действия, однако, классифицируются как плохой стиль программирования.

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

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

// Процедура, использующая объединение условий и выводящая значение первой

// непериодической константы числового типа. Запускается из обработки Проба процедура Выполнить()

перем всегоКонстант, флагВывода, ин, идеи; ОчиститьОкноСообщений();

// флагВывода примет значение 1, если будет обнаружена

// непериодическая константа числового типа флагВывода = 0;

всегоКонстант = Метаданные.Константа();

ин = 1; // Номер константы пока (ин<= всегоКонстант) и (флагВывода = 0) цикл

если (Метаданные.Константа(ин).Периодический = 0) и (Метаданные.Константа(ин).Тип = "Число") тогда

идеи = Метаданные.Константа(ин).Идентификатор; Сообщить(иден + " " + Константа.ПолучитьАтрибут(иден)); флагВывода = 1;

конецЕсли;

ин = ин + 1; // Не забываем перейти к следующей константе конецЦикла; // для

если флагВывода = 0 тогда

Сообщить("В конфигураторе нет непериодических констант числового типа."); конецЕсли;

конецПроцедуры // Выполнить

В приведенном коде объединение условий использовано при записи ЛВ дважды: (ин <= всегоКонстант) и (флагВывода = 0)

(Метаданные.Константа(ин).Периодический = 0) и (Метаданные.Константа(ин).Тип = "Число") Это позволило нам исключить из процедуры операторы Продолжить и Прервать.

В этой статье рассмотрим такую конструкцию языка прогрммирования 1С как Циклы .

Существует три способа организации циклов.

  1. Циклы с использование логического выражения (выполняются до тех пор пока логическое выражение истинно)
  2. Обход коллекций в цикле

Рассмотрим каждый из этих способов.

Циклы с использованием переменной — счетчика цикла

Синтаксис:

Для < Переменная> = < НачальноеЗначение> По < КонечноеЗначение> Цикл КонецЦикла ;

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

С каждой итерацией значение счетчика увеличивается на единицу. Вот самый элементарный пример такого цикла:

Для Счетчик = 0 По 1000 Цикл КонецЦикла ;

В отиличие от многих других языков программирования в 1С не предусматривается возможность указания шага в цикле. При необходимости это можно сделать прибавлением к счетчику нужного значения внутри цикла

Для Счетчик = 0 По 1000 Цикл Счетчик = Счетчик + 10 ; КонецЦикла ;

Циклы с использование логического выражения

Синтаксис:

Пока < ЛогическоеВыражение> Цикл КонецЦикла ;

Отказ = Ложь ; ГенераторСЧ = Новый ГенераторСлучайныхЧисел(1 ) ; Пока НЕ Отказ Цикл СлучайноеЧисло = ГенераторСЧ. СлучайноеЧисло(0 , 10 ) ; Если СлучайноеЧисло > 5 Тогда Отказ = Истина ; КонецЕсли ; КонецЦикла ;

То есть цикл будет выполняться до тех пор пока не будет сгенерировано случайное число больше пяти.

Обход коллекций в цикле

В языке программирования 1С существует такое понятие как коллекция. Она представляет собой набор элементов, содержащихся внутри какого-то объекта.

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

Для каждого < ЭлементКоллекции> Из < Коллекция> Цикл КонецЦикла ;

Здесь <ЭлементКоллекции> — это переменная в которую последовательно помещаются элементы из коллекции. И внутри цикла она соответствующим образом обрабатывается.
В качестве примера приведу обход в цикле строк таблицы значений. Пусть она называется ТаблицаТовары и выглядит вот таким образом:

Обойдем в цикле эту таблицу и для каждой строки выведем сообщение с наименованием и ценой товара:

Для каждого СтрокаТаблицы Из ТаблицаТовары Цикл Наименование = СтрокаТаблицы. Наименование; Цена = СтрокаТаблицы. Цена; Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Наименование товара: "

На самом деле то же самое можно проделать и воспользовавшись первым вариантом, т.е в цикле с использованием счетчика:

КоличествоСтрок = ТаблицаТовары. Количество() ; Для Счетчик = 0 По КоличествоСтрок - 1 Цикл СтрокаТаблицы = ТаблицаТовары[ Счетчик] ; Наименование = СтрокаТаблицы. Наименование; Цена = СтрокаТаблицы. Цена; Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Наименование товара: " + Наименование + "; Цена: " + Цена; Сообщение. Сообщить() ; КонецЦикла ;

Но как видим использовать обход элементов коллекции гораздо проще и удобней

Вспомогательные операторы

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

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

Для Счетчик = 0 По 100 Цикл Если Счетчик = 0 Тогда Продолжить ; КонецЕсли ; Если Счетчик = 4 Тогда Прервать ; КонецЕсли ; Результат = 1 / Счетчик; Сообщение = Новый СообщениеПользователю; Сообщение. Текст = Строка(Результат) ; Сообщение. Сообщить() ; КонецЦикла ;

Ноль пропускаем, т.к. на ноль делить нельзя. И всего цикл выполниться пять раз, для значений переменной Счетчик от 0 до 4

Описание:

Оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции Цикл – КонецЦикла .

Перед началом выполнения цикла значение Выражение 1 присваивается переменной Имя_переменной . Значение Имя_переменной автоматически увеличивается при каждом проходе цикла. Величина приращения счетчика при каждом выполнении цикла равна 1.

Цикл выполняется, пока значение переменной Имя_переменной меньше или равно значению Выражение 2 . Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.

Синтаксис:

Параметры:

Имя_переменной Идентификатор переменной (счетчика цикла), значение которой автоматически увеличивается на 1 при каждом повторении цикла. Так называемый счетчик цикла. Выражение 1 Числовое выражение, которое задает начальное значение, присваиваемое счетчику цикла при первом проходе цикла. По Синтаксическая связка для параметра Выражение 2 . Выражение 2 Максимальное значение счетчика цикла. Когда переменная Имя_переменной становится больше чем Выражение 2, выполнение оператора цикла Для прекращается. Цикл Операторы, следующие за ключевым словом Цикл выполняются, пока значение переменной Имя_переменной меньше или равно значения Выражение 2 .

Цикл Для Каждого

Описание:

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

Синтаксис:

Параметры:

Имя_переменной_1 Переменная, которой при каждом повторении цикла присваивается значение очередного элемента коллекции. Из Синтаксическая связка для параметра Имя_переменной_2 . Имя_переменной_2 Переменная или выражение, предоставляющее коллекцию. Элементы этой коллекции будут присваиваться параметру Имя_переменной_1 . Цикл Операторы, следующие за ключевым словом Цикл выполняются для каждого элемента коллекции. // Операторы Исполняемый оператор или последовательность таких операторов. Прервать Позволяет прервать выполнение цикла в любой точке. После выполнение этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла . Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. КонецЦикла Ключевое слово, которое завершает структуру оператора цикла.

Цикл Пока

Описание:

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

Синтаксис:

Параметры:

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

Внимание! В конце статьи ссылка на видеоурок.
Если Вы раньше не сталкивались с программированием, то вероятно не совсем понятна необходимость использования цикла в программе 1С. В этой статье я расскажу об операторах цикла, а также об их основном назначении.

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

Если бы не было этого оператора, то код находящийся внутри цикла пришлось бы написать столько раз сколько итераций нам нужно. Представляете, если в документе 100 строк и их надо перебрать и, допустим, изменить значение, а если при этом их количество периодически меняется, т.е. они добавляются и удаляются. Это было бы не просто.
Цикл позволяет упростить задачу с выполнением повторяющихся строк кода.
В программе 1С 8.1 существует три конструкции цикла:
«Для.. По.. Цикл» - повторяет количество циклов с начального значения счетчика до конечного указанного значения, прибавляя 1 к переменной счетчика при каждой итерации. Используется когда известно количество итераций.

Цикл 1С Для

Для Счетчик = 1 По 3 Цикл //Тело цикла КонецЦикла;

Цикл 1С Пока

«Пока … Цикл» - выполняется пока вычисляемое значение равно Истина. Может использоваться в случаях, когда переменные для вычисления выражения меняются в теле цикла либо, если перебирается коллекция и у нее есть соответствующий метод возвращающий булево, который вызывается в начале цикла.

Пока Выборка.Следующий() Цикл //Тело цикла КонецЦикла;

Цикл 1С Для каждого

«Для Каждого … Из … Цикл» перебирает коллекцию с первого по последний элемент. Записывая в переменную(в примере: ТекЭлемент ) значение элемента.

Для Каждого ТекЭлемент Из МассивЭлементов Цикл //Тело цикла КонецЦикла;

Обратный цикл 1С

Также существует обратный цикл, который можно использовать для обхода коллекций в обратном порядке т.е. снизу вверх(с конца). Такой способ может понадобиться если нужно удалять элементы коллекции

КоличествоЭлементов = МассивЭлементов.Количество(); Для ОбратныйИндекс = 1 По КоличествоЭлементов Цикл ТекЭлемент = МассивЭлементов[КоличествоЭлементов - ОбратныйИндекс]; КонецЦикла;

Операторы продолжить и прервать рассматриваются в видео, ссылка ниже.