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