Про циклы в 1С:Предприятие 8 с примерами

Про циклы в 1С:Предприятие 8 с примерами

Цикл – предназначен для неоднократного повторения программного кода, написанного внутри цикла. В этой статье я расскажу, что такое цикл и приведу пару примеров его использования

Содержание

Цикл «Пока»

Синтаксис цикла «Пока» представлен ниже:

Пока Условие Цикл 
	// Вставить обработку цикла
КонецЦикла;

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

Например, цикл, указанный ниже будет выполняться до тех пор, пока значение в счетчике не станет меньше 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; 
КонецЦикла;

Примеры использования циклов

Цикл по табличной части документа из формы обработки

Про циклы в 1С:Предприятие 8 с примерами

Обработка имеет табличную часть товары с реквизитами: Номенклатура и количество, задача сложить все количество в табличной части

КолИтог = 0; 
Для каждого Стр из Объект.Товары Цикл 
	КолИтог = КолИтог + Стр.Количество; 
КонецЦикла;

Цикл по документам

Предположим, мы захотели перебрать все документы (с именем Задание) и добавить в комментарий произвольный текст, то это можно сделать так:

ДатаНач = НачалоГода(ТекущаяДата());  //Начало этого года 
ДатаКон = КонецГода(ТекущаяДата()); //Конец этого года 
Выборка = Документы.Задание.Выбрать(ДатаНач,ДатаКон); //Выбираем документы за нужный период, период можно не указывать, тогда цикл будет по всем документам 
Пока Выборка.Следующий() Цикл 
	ДокОбъект = Выборка.ПолучитьОбъект(); //Получаем документ как объект 
	ДокОбъект.Комментарий = ДокОбъект.Комментарий + " Я тут был"; //В Комментарий добавляем текст 
	ДокОбъект.Записать(); //Записываем документ 
КонецЦикла;

Цикл по дням

Цикл выводит выведет все дни в этом году:

ТекДата = НачалоГода(ТекущаяДата()); 
КонПериода = КонецГода(ТекДата); 
Пока ТекДата <= КонПериода Цикл 
	Сообщить(ТекДата); 
	ТекДата = ТекДата + 86400; //86400, это количество секунд в дне 
КонецЦикла;

Как прервать цикл

Пример цикла на 5 секунд:

КонДата = ТекущаяДата() + 5;
Пока Истина Цикл
	Если ТекущаяДата() > КонДата Тогда		
		 Прервать;		
	КонецЕсли;
КонецЦикла;

Цикл по всем документам, которые есть в базе

Перебор документов всех типов

Для каждого ТипДок из Метаданные.Документы Цикл
	Выборка = Документы[ТипДок.Имя].Выбрать();
	Пока Выборка.Следующий() Цикл
		Сообщить(Выборка.Ссылка);	
	КонецЦикла;
КонецЦикла;

Цикл по табличному документу

Про циклы в 1С:Предприятие 8 с примерами
ТабличныйДокумент = ПолучитьМакет("Макет");	
Колонка = 1;
Для Стр = 1 по ТабличныйДокумент.ВысотаТаблицы Цикл
	Текст = ТабличныйДокумент.Область(Стр,Колонка,Стр,Колонка).Текст; 	
	Сообщить(Текст);		
КонецЦикла;	

Подписаться
Уведомить о
guest