Получить консультацию

Циклы в языке 1С 8. Примеры работы

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

Содержание

Общий синтаксис

Все циклы представляют собой конструкции вида
Цикл
// Операторы
[Прервать;][Продолжить;]КонецЦикла;

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

Цикл Для

Оператор цикла Для используется для выполнения некоторого кода заданное количество повторений. Для этого используется счетчик. Синтаксис цикла выглядит так:
Для Итератор = Выражение1 по Выражение2 Цикл
КонецЦикла;

Итератор – это переменная, которая принимает значения в диапазоне чисел Выражение1 Выражение2. Каждый обход цикла значение счетчика автоматически увеличивается на единицу.
Выражение1 – это начальное значение счетчика, которое присваивается при первой итерации цикла.
Выражение2 – это максимальное значение счетчика.
Выражение1 и Выражение2 могут быть заданы как непосредственно числами, так и переменными, или результатом выполнения функции. Оба выражения вычисляются только один раз – при первом проходе цикла

// Выведем табличный документ
// у которого в первой колонке заполнены первые 10 строк цифрами 1...10
ТабДок = Новый ТабличныйДокумент;
Для СчетчикСтрок = 1 По 10 Цикл
	ТабДок.Область(СчетчикСтрок,1).Текст = СчетчикСтрок;
КонецЦикла;
ТабДок.Показать();

Цикл Для удобно использовать для выполнения кода нужное количество раз. Например, выполнить код столько раз, сколько колонок (или строк) содержится в табличном документе.

Цикл Пока

Данный тип цикла предназначен для циклического выполнения тела цикла до тех пор, пока выполняется условие.
Синтаксис цикла выглядит так:
Пока Условие Цикл
КонецЦикла;

Условием может быть любое выражение на встроенном языке, которое может быть приведено к типу Булево.

//Посчитаем, за сколько итераций дойдем до нужной суммы
НакопленныйИтог = 0;
КолвоШагов = 0;
ДлинаШага = 22;
Пока НакопленныйИтог <= 1000 Цикл
	НакопленныйИтог	= НакопленныйИтог + ДлинаШага;
	КолвоШагов = КолвоШагов + 1;
КонецЦикла;
Сообщить(СтрШаблон("Дошли до 1000 с шагом %2 за %1 шагов", КолвоШагов, ДлинаШага));

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

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

//Обработаем каждый элемент структуры и выведем сообщение
КоллекцияДляОбработки = Новый Структура("Иванов, Петров, Сидоров");
Для Каждого ЭлементКоллекции Из КоллекцияДляОбработки Цикл
	КоллекцияДляОбработки[ЭлементКоллекции.Ключ] = СтрЗаменить(ЭлементКоллекции.Ключ,"ов","");
	Сообщить(СтрШаблон("%1 %2", ЭлементКоллекции.Ключ, КоллекцияДляОбработки[ЭлементКоллекции.Ключ]));
КонецЦикла

Вложенные циклы

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

//Выведем табличный документ с заполненной сеткой ячеек 10 на 10
ТабДок = Новый ТабличныйДокумент;
ИтоговыйСчетчик = 1;
Для СчетчикСтрок = 1 По 10 Цикл
	Для СчетчикКолонок = 1 По 10 Цикл
		ТабДок.Область(СчетчикСтрок, СчетчикКолонок).Текст = ИтоговыйСчетчик;
		ИтоговыйСчетчик = ИтоговыйСчетчик + 1;
	КонецЦикла;
КонецЦикла;
ТабДок.Показать();

Бесконечные циклы

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

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

2. Ожидается, что в теле цикла будет вызван оператор Прервать при выполнении каких-то условий

//Ждем пока пользователь не прервет цикл, но не дольше 1000000 повторений
КонтрольныйСчетчик = 1000000;
Сч = 0;
Пока Истина Цикл
	ОбработкаПрерыванияПользователя();
	Если Сч >= КонтрольныйСчетчик Тогда
		Сообщить("не дождались пользователя, прерываем!");
		Прервать;
	КонецЕсли;
	Сч = Сч + 1;
КонецЦикла;

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

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

Массив = Новый Массив;
Массив.Добавить("это");
Массив.Добавить("говорит");
Массив.Добавить("Йода");
Счетчик = Массив.ВГраница();
Пока Счетчик >= 0 Цикл
	Сообщить(Массив[Счетчик]); // Йода говорит это
	Счетчик = Счетчик - 1;
КонецЦикла;

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

19 + семнадцать =

К НАЧАЛУ