====== Циклы ======
Циклы в 1С и в любом другом языке программирования используются для повторения заданной последовательности действий. Цикл может выполняться фиксированное количество раз, пока выполняется условие или при обходе элементов [[коллекция|коллекции]].
===== Циклы с фиксированным количеством проходов. =====
Циклы с фиксированным, заранее известным количеством проходов (итераций) имеют следующий синтаксис:
Для сч = 1 По НужноеКоличествоИтераций Цикл
//Какие то действия
КонецЦикла
Цикл выполнится столько раз сколько указано в переменной ''НужноеКоличествоИтераций'' которая должна быть числовой, значение ''сч'' будет увеличиваться на каждой итерации на 1, можно самому в теле цикла указывать содержимое переменной ''сч'' управляя количеством проходом, также нужно иметь ввиду, что на каждом витке цикла содержимое этой переменной будет увеличиваться на 1 в любом случае вне зависимости от ваших действий. Можно просто указать:
Для сч = 1 По 5 Цикл
если нужно что бы цикл просто сделал жестко указанное количество итераций.
===== Циклы по условию. =====
Циклы по условию имеют следующий ситаксис:
Пока А < 100 Цикл
КонецЦикла;
Здесь цикл будет выполняться до тех пор, пока будет выполняться условие. Очень просто организовать бесконечный цикл не допуская увеличения переменной ''А'' больше 99. Такой цикл "повешает" 1С и его разумеется имеет смысл избегать, если вы конечно не используете оператор ''Прервать''.
===== Циклы для обхода коллекций. =====
Любую коллекцию можно обойти в цикле следующим образом:
Для каждого ЭлементКоллекции Из Коллекция Цикл
//в переменной ЭлементКоллекции будет одно из значений коллекции
КонецЦикла
Коллекциями могут быть: строки и колонки табличных частей документов\справочников и таблиц значений, массивы и другие типы данных.
===== Операторы управляющие ходом цикла.=====
==== Продолжить ====
Оператор ''Продолжить'' делает следующий виток цикла передавая управление на начало цикла, таким образом пропуская команды которые идут ниже. Например в следующем случае:
Процедура Команда1(Команда)
Для сч = 1 По 100 Цикл
Если сч / 2 = Цел(сч / 2) Тогда
Продолжить;
КонецЕсли;
а = а + 1;
//и еще какие то действия
КонецЦикла;
КонецПроцедуры
значение переменной а будет увеличиваться только в нечетных проходах цикла, но цикл сделает 100 проходов без исключений.
==== Прервать ====
Оператор ''Прервать'' прерывает выполнение цикла, передавая выполнение на команды которые идут после цикла не рекомендуется его использовать без необходимости, так как он затрудняет анализ кода расположенного в цикле.
===== Использование функций в теле цикла.=====
Использование функций в тебе цикла считается дурным тоном если эта функция будет каждый раз возвращать одно и то же значение. Не имеет смысла каждый раз выполнять один и тот же код если результат его выполнения не изменяется, в таких случаях функцию необходимо выполнить до цикла поместив результат в переменную и далее в цикле использовать эту переменную.
===== Использование запросов в теле цикла.=====
Использование запросов в теле цикла также считается недопустимым. Так как при каждом витке цикла делается запросе к базе данных, а использование запросов подразумевает под собой идеологию "Все нужные данные должны быть получены одним запросом". Если есть возможность, следует проанализировать какие данные будут нужны в цикле, сделать запрос до цикла и в цикле пользоваться уже результатами ранее созданного запроса. //Здесь следует добавить пример.//