Инструменты пользователя

Инструменты сайта


1c:база:циклы

Циклы

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

Циклы с фиксированным количеством проходов.

Циклы с фиксированным, заранее известным количеством проходов (итераций) имеют следующий синтаксис:

Для сч = 1 По НужноеКоличествоИтераций Цикл
    //Какие то действия
КонецЦикла

Цикл выполнится столько раз сколько указано в переменной НужноеКоличествоИтераций которая должна быть числовой, значение сч будет увеличиваться на каждой итерации на 1, можно самому в теле цикла указывать содержимое переменной сч управляя количеством проходом, также нужно иметь ввиду, что на каждом витке цикла содержимое этой переменной будет увеличиваться на 1 в любом случае вне зависимости от ваших действий. Можно просто указать:

Для сч = 1 По 5 Цикл

если нужно что бы цикл просто сделал жестко указанное количество итераций.

Циклы по условию.

Циклы по условию имеют следующий ситаксис:

Пока А < 100 Цикл
КонецЦикла;

Здесь цикл будет выполняться до тех пор, пока будет выполняться условие. Очень просто организовать бесконечный цикл не допуская увеличения переменной А больше 99. Такой цикл "повешает" 1С и его разумеется имеет смысл избегать, если вы конечно не используете оператор Прервать.

Циклы для обхода коллекций.

Любую коллекцию можно обойти в цикле следующим образом:

Для каждого ЭлементКоллекции Из Коллекция Цикл
	//в переменной ЭлементКоллекции будет одно из значений коллекции 
КонецЦикла

Коллекциями могут быть: строки и колонки табличных частей документов\справочников и таблиц значений, массивы и другие типы данных.

Операторы управляющие ходом цикла.

Продолжить

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

Процедура Команда1(Команда)
    Для сч = 1 По 100 Цикл
        Если сч / 2 = Цел(сч / 2) Тогда
            Продолжить;
	КонецЕсли;
 
	а = а + 1;
	//и еще какие то действия				
    КонецЦикла;	
КонецПроцедуры

значение переменной а будет увеличиваться только в нечетных проходах цикла, но цикл сделает 100 проходов без исключений.

Прервать

Оператор Прервать прерывает выполнение цикла, передавая выполнение на команды которые идут после цикла не рекомендуется его использовать без необходимости, так как он затрудняет анализ кода расположенного в цикле.

Использование функций в теле цикла.

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

Использование запросов в теле цикла.

Использование запросов в теле цикла также считается недопустимым. Так как при каждом витке цикла делается запросе к базе данных, а использование запросов подразумевает под собой идеологию "Все нужные данные должны быть получены одним запросом". Если есть возможность, следует проанализировать какие данные будут нужны в цикле, сделать запрос до цикла и в цикле пользоваться уже результатами ранее созданного запроса. Здесь следует добавить пример.

Только авторизованные участники могут оставлять комментарии.
1c/база/циклы.txt · Последнее изменение: 2014/06/14 17:26 (внешнее изменение)