Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-методическое пособие РЭИС.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
3.85 Mб
Скачать

2.5.2. Циклы

Конструкция «Для ... По ... Цикл»

Цикл «Для...По» применяется для записи циклов с известным числом повторений. Например, следующий цикл 12 раз выведет номер месяца в окно служебных сообщений:

Для Месяц = 1 По 12 Цикл

Сообщить(Месяц);

КонецЦикла;

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

Конструкция «Для Каждого ... Из ... Цикл»

В 1С:Предприятии 8.0 была введена новая конструкция «Для Каждого», предназначенная для обхода элементов коллекции. В таких циклах в качестве переменной цикла выступает не число, а объект — элемент коллекции, например, объект СтрокаТаблицыЗначений в следующем примере:

ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка();

Для Каждого СтрокаТЗ Из тзСостав Цикл

//тело цикла

Если СтрокаТЗ.Товар = ПустаяСсылка Тогда

Продолжить; //возьмем следующую строку

Иначе

Если СтрокаТЗ.Товар = ВыбТовар Тогда

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

КонецЕсли;

КонецЕсли;

КонецЦикла;

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

Н = 0;

Для Каждого СтрокаТЗ Из тзСостав Цикл

Н = Н + 1 ;

//действия

КонецЦикла;

Для некоторых коллекций по элементу можно определить его индекс:

Для Каждого СтрокаТЗ Из тзСостав Цикл

ИндексСтроки = тзСостав.Индекс(СтрокаТЗ);

КонецЦикла;

Если элемент не принадлежит данной коллекции, то метод Индекс возвращает -1 (минус единицу).

Конструкция «Пока ... Цикл»

Ключевое слово Пока предназначено для реализации циклов с неизвестным числом повторений. Цикл выполняется до тех пор, пока логическое выражение истинно. Если на очередном витке Цикла оно перестает выполняться (дает значение Ложь), то цикл прекращается. Ниже показан пример реализации цикла Пока:

Н = 0;

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.ПометкаУдаления Тогда

Продолжить; //возьмем следующий элемент

КонецЕсли;

Н = Н + 1;

Если Н > 10 Тогда

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

КонецЕсли;

Сообщить("Товар: " + Выборка.Наименование);

КонецЦикла;

2.5.3. Безусловные переходы

Иногда необходимо принудительно передать управление в определенную точку программы. Это реализуется с помощью метки и оператора Перейти. Метка может быть у любого исполняемого оператора. Она начинается со знака тильды («~»), далее идет имя метки, а затем двоеточие («:»), например:

Н = 0;

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Н = Н + 1;

Если Н <= 10 Тогда

//пропускаем первые 10 элементов справочника

Перейти ~след;

КонецЕсли;

Сообщить(Выборка.Наименование);

~след:

//возьмем следующий элемент

КонецЦикла;

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

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