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