Циклы в 1С

Цикл — это способ повторить несколько строк программного кода нужное количество раз. Обычно — пока не выполнится нужна условная операция.

Основные циклы в 1С — это «Пока … Цикл» и «Для каждого … из … Цикл». Далее — подробнее про циклы в 1С.


Коллекция значений — это список. Коллекции значений часто возвращают различные методы. Например, таблица – это список строк. Результат запроса – также список строк с данными.

Самый распространенный цикл в 1С позволяет обойти коллекцию «построчно», например:
//Пример с таблицей
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("ИмяКолонки");

Для каждого Строка из Таблица Цикл
     Строка.ИмяКолонки = 1;
КонецЦикла;

//Пример с запросом – выгрузка данных в таблицу
Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура");
Результат = Запрос.Выполнить().Выгрузить();

Для каждого Строка из Результат Цикл
     Сообщить(Строка.Наименование);
КонецЦикла;

Второй по распространенности цикл в 1С позволяет обойти коллекцию пока условие «истинно» (см. условные операции и булево выше):
//Пример с запросом - выборка
Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать(); //выборка – это последовательный доступ

Пока Выборка.Следующий() Цикл //эта функция возвращает Истина, если еще есть строчки
     Сообщить(Выборка.Наименование);
КонецЦикла;

//Пример с таблицей
Сч = 0;
Таблица = Новый ТаблицаЗначений();

Пока Сч < Таблица.Количество() Цикл      Строка = Таблица.Получить(Сч);      Сч = Сч + 1; КонецЦикла;

Выполнение циклов в 1С можно прервать, пример организации «вечного» цикла в 1С:
Сч = 0;
Пока Истина Цикл
     Сч = Сч + 1;
     Если Сч > 100 Тогда
          Прервать;
     КонецЕсли;
КонецЦикла;

Можно пропустить выполнение кода внутри цикла в 1С для некоторых элементов:
[VIP_CONTENT]

Для каждого Строка из Таблица Цикл
     Если Строка.СтоитОтметка = Ложь Тогда
          Продолжить;
     КонецЕсли;
КонецЦикла;


[/VIP_CONTENT]

Менее распространенный цикл в 1С – это цикл на определенное количество проходов:
Для Сч = 1 по 10 Цикл
     //действия…
КонецЦикла;