Цикл – предназначен для неоднократного повторения программного кода, написанного внутри цикла. В этой статье я расскажу, что такое цикл и приведу пару примеров его использования
Содержание
Цикл «Пока»
Синтаксис цикла «Пока» представлен ниже:
Пока Условие Цикл // Вставить обработку цикла КонецЦикла;
Пока условие равно Истина, код, написанный после ключевого слова Цикл, будет выполняться.
Например, цикл, указанный ниже будет выполняться до тех пор, пока значение в счетчике не станет меньше 1:
//Данный цикл выводит значения в счетчике: 5,4,3,2,1. Счетчик = 5; Пока Счетчик >= 1 Цикл Сообщить ("Значение в счетчике: " + Счетчик); Счетчик = Счетчик - 1; КонецЦикла;
Если в цикле указанном выше отсутствовала бы запись:
«Счетчик = Счетчик — 1;», то цикл длился бы вечно.
Цикл «Для»
Синтаксис цикла «Для» представлен ниже:
Для ИмяПеременной = <Выражение1> По <Выражение2> Цикл // Вставить обработку цикла КонецЦикла;
<Выражение1> — начальное числовое значение, которое мы задаем для счетчика.
<Выражение2> — максимальное числовое значение счетчика, которое нельзя изменить внутри цикла.
По – служит для связки Выражения1 и Выражения2.
В данном случае нам не надо писать в программном коде:
Например, цикл, указанный ниже, будет выполняться до тех пор, пока значение в счетчике не превышает максимальное значение (в данном случае число 5):
//Данный цикл выводит значения в счетчике: 1,2,3,4,5. Для Счетчик = 1 По 5 Цикл Сообщить(Счетчик); КонецЦикла;
Цикл «Для Каждого»
Синтаксис цикла «Для Каждого» представлен ниже:
Для Каждого <ИмяПеременной1> Из <ИмяПеременной2> Цикл // Вставить обработку цикла КонецЦикла;
<ИмяПеременной1> — при каждом повторении цикла, присваивается значение очередного элемента коллекции.
<ИмяПеременной2> — коллекция, из которой мы хотим получить элемент.
Из – служит для связки параметров <ИмяПеременной1> и <ИмяПеременной2>.
Программный код, который написан внутри цикла выполняется для каждого элемента.
Например, цикл, указанный ниже будет выполнятся до тех пор, пока не обойдет всю коллекцию:
//Данный цикл перебирает все элементы массива и выводит их. //На экран пользователя выведется числа: 5,10. МассивЧисел = Новый Массив; МассивЧисел.Добавить(5); МассивЧисел.Добавить(10); Для Каждого ЭлементМассива Из МассивЧисел Цикл Сообщить ("Элемент массива: " + ЭлементМассива); КонецЦикла;
Операторы циклов
Оператор «Прервать»
Данный оператор позволяет прервать выполнение цикла.
Пример:
//Данный цикл счетчика остановиться и выведет на экран число: 1. Для Счетчик = 1 По 5 Цикл Сообщить(Счетчик); Прервать; КонецЦикла;
Операторы циклов
Оператор «Продолжить»
Данный оператор возвращается в начало цикла, где выполняет условие, пока оно является Истина. Программный код, который следует после оператора Продолжить, не исполняется.
Пример:
//Данный цикл выведет числа: 5,4,3,2,1. //Программный код, который написан после оператора Продолжить; не будет исполнен. Счетчик = 5; Операция = 1; Пока Счетчик >= 1 Цикл Сообщить(Счетчик); Счетчик = Счетчик - 1; Продолжить; Сообщить ("Операция в цикле №: " + Операция); Операция = Операция + 1; КонецЦикла;
Примеры использования циклов
Цикл по табличной части документа из формы обработки
Обработка имеет табличную часть товары с реквизитами: Номенклатура и количество, задача сложить все количество в табличной части
КолИтог = 0; Для каждого Стр из Объект.Товары Цикл КолИтог = КолИтог + Стр.Количество; КонецЦикла;
Цикл по документам
Предположим, мы захотели перебрать все документы (с именем Задание) и добавить в комментарий произвольный текст, то это можно сделать так:
ДатаНач = НачалоГода(ТекущаяДата()); //Начало этого года ДатаКон = КонецГода(ТекущаяДата()); //Конец этого года Выборка = Документы.Задание.Выбрать(ДатаНач,ДатаКон); //Выбираем документы за нужный период, период можно не указывать, тогда цикл будет по всем документам Пока Выборка.Следующий() Цикл ДокОбъект = Выборка.ПолучитьОбъект(); //Получаем документ как объект ДокОбъект.Комментарий = ДокОбъект.Комментарий + " Я тут был"; //В Комментарий добавляем текст ДокОбъект.Записать(); //Записываем документ КонецЦикла;
Цикл по дням
Цикл выводит выведет все дни в этом году:
ТекДата = НачалоГода(ТекущаяДата()); КонПериода = КонецГода(ТекДата); Пока ТекДата <= КонПериода Цикл Сообщить(ТекДата); ТекДата = ТекДата + 86400; //86400, это количество секунд в дне КонецЦикла;
Как прервать цикл
Пример цикла на 5 секунд:
КонДата = ТекущаяДата() + 5; Пока Истина Цикл Если ТекущаяДата() > КонДата Тогда Прервать; КонецЕсли; КонецЦикла;
Цикл по всем документам, которые есть в базе
Перебор документов всех типов
Для каждого ТипДок из Метаданные.Документы Цикл Выборка = Документы[ТипДок.Имя].Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла; КонецЦикла;
Цикл по табличному документу
ТабличныйДокумент = ПолучитьМакет("Макет"); Колонка = 1; Для Стр = 1 по ТабличныйДокумент.ВысотаТаблицы Цикл Текст = ТабличныйДокумент.Область(Стр,Колонка,Стр,Колонка).Текст; Сообщить(Текст); КонецЦикла;