Циклы в 1С 8.3

В платформе 1С 8.3 существует три вида циклов. Это циклы «Для Цикл», «Для каждого Цикл» и «Пока Цикл». При помощи циклов «Для Цикл» и «Пока Цикл» можно осуществлять цикличное повторение произвольных операторов. А цикл «Для каждого Цикл» необходим для обхода коллекций значений (массивов, таблиц значений и т.п.). В этой статье на разберем простые примеры всех трёх видов циклов.

Цикл «Для Цикл»

Разберем самый простой вид цикла. Этот цикл имеет следующий синтаксис.

Для НазваниеПерем = СчетчНачало по СчетчКонец Цикл

    <Операторы>

КонецЦикла;

В этом цикле, переменной НазваниеПерем в самом начале присваивается выражение СчетчНачало, которое имеет числовое значение (целое число). Потом, в каждой итерации цикла переменная   НазваниеПерем увеличивается на 1. Цикл будет выполняться пока переменная  НазваниеПерем  меньше или равно переменной СчетчКонец.

СчетчНачало и СчетчКонец могут быть как числами, так и переменными с типом число.

Для н = 1 по 100 Цикл
    <Операторы>
КонецЦикла;

Или

Нач = 1;
Кон = 100;
Для н = Нач по Кон Цикл
    <Операторы>
КонецЦикла;

Причем СчетчНачало может быть меньше нуля.

Для н = -100 по 100 Цикл
    <Операторы>
КонецЦикла;

Чтобы цикл корректно работал СчетчНачало должно быть меньше СчетчКонец.

Такой код будет не корректен!!

Для н = 100 по  -100 Цикл
    <Операторы>
КонецЦикла;

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

массивЦифр = Новый Массив;
Для н = -3 до 3 Цикл
    массивЦифр.Добавить(н);
КонецЦикла;

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

Для н = 0 по массивЦифр.ВГраница() Цикл
    ЭлементМассива = массивЦифр[н];
КонецЦикла;

Цикл «Пока Цикл»

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

Данный цикл имеет следующий синтаксис

Пока ЗначениеВыражения Цикл
     <Операторы>;
КонецЦикла;

ЗначениеВыражения – какое-то логическое выражение. Пока это выражение истинно, то операторы цикла будут выполняться.  Если выражение принимает значение Ложь,  то цикл прекращается.

При помощи данного цикла можно делать различные нестандартные обходы. Например, выше мы заполнили массив цифрами начиная от -3 до 3, но циклом «Для Цикл» мы не можем заполнить массив цифрами от 3 до -3.  Но, мы можем это сделать  при помощи цикла «Пока Цикл»

Массив = Новый Массив;
НачЗначение = 3;
КонЗначение = - 3;
ТекЗнач = НачЗначение;
Пока ТекЗнач >= КонЗначение Цикл
    Массив.Добавить(ТекЗнач);
    ТекЗнач = ТекЗнач - 1;
КонецЦикла;

Этот цикл можно также использовать, когда нужно что-то заполнить датами.

Массив = Новый Массив;
НачЗначение = '20100101';
КонЗначение = '20100131';
ТекЗнач = НачЗначение;
Пока ТекЗнач <= КонЗначение Цикл
    Массив.Добавить(ТекЗнач);
    ТекЗнач = ТекЗнач + 24*3600;
КонецЦикла;

В этом коде мы заполняем массив датами, начиная с 1 января и заканчивая 31 января.

Цикл «Для каждого Цикл»

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

Этот цикл имеет следующий синтаксис:

Для Каждого ЭлементКоллеции из КакаяТоКоллекция цикл
    <Операторы>
КонецЦикла

Переменной ЭлементКоллекции присваивает очередное значение элемента коллекции.

Например, если мы напишем вот такой код.

Массив1 = Новый Массив;
Массив1.Добавить(100);
Массив1.Добавить(45);
Массив1.Добавить(1000);

Для Каждого элМассива из Массив1 Цикл

КонецЦикла;


То при первом обходе переменная ЭлМассива будет равна 100, при втором — 45, а при третьем – 1000.

Это массив, у него, по сути, каждый элемент это значение какого-то типа, а если будет обход более сложной коллекции?  Например, таблицы значений. В том случае, если будет обход таблицы, значений, то в переменной ЭлементКоллекции будет содержать очередная строка этой таблицы значений. Мы можем получить значение колонок в этой строке через оператор «.».

Пример в этом коде

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("НазваниеУслуги");
ТЗ.Колонки.Добавить("Сумма");

СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.НазваниеУслуги = "За ремонт";
СтрокаТЗ.Сумма    = 100;

СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.НазваниеУслуги = "Транспортные";
СтрокаТЗ.Сумма    = 1000;

Для Каждого стрТЗ из ТЗ Цикл
    Сообщить("------------");
    Сообщить("Название услуги: " + стрТЗ.НазваниеУслуги);
    Сообщить("Сумма: " + стрТЗ.Сумма);
КонецЦикла

И результат работы этого кода

Обход циклом Для каждого цикл

Прервать цикл 1С

Иногда возникают такие ситуации, когда нужно из цикла выйти. Сделать это можно при помощи оператора Прервать. Этот оператор применим ко всем тремя видам циклов.

 Для НазваниеПерем = СчетчНачало по СчетчКонец Цикл

    <Операторы>
    Прервать;
   <Операторы>

КонецЦикла;

КонецЦикла;

После выполнения этого оператора Прервать все последующие операторы в  теле цикла не выполняются, и следующим выполняется оператор после ключевого слова КонецЦикла.

Рассмотрим следующий пример.

Для Счетчик = - 5 по 5 Цикл

    Если Счетчик = 0 Тогда
        Прервать;
    КонецЕсли;

    Х = 1/Счетчик;

КонецЦикла;


В этом примере мы обходим  простым  циклом ряд чисел от -5 до 5, и делим  1 на обходимое число. Если же переменная счетчика равна 0, то чтобы не происходила исключительная ситуация, то выходим из цикла. Т.е. мы выполним деление только для отрицательных чисел.

Продолжить цикл 1С

А есть ситуации, когда нам не нужно выходить из цикла, но и не нужно продолжать текущую итерацию. Помочь нам в этом может оператор Продолжить. Этот оператор также применим ко всем тремя видам циклов.

Для НазваниеПерем = СчетчНачало по СчетчКонец Цикл

    <Операторы>
    Продолжить;
   <Операторы>

КонецЦикла;


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

Рассмотрим такой пример.

Для Счетчик = - 5 по 5 Цикл

    Если Счетчик = 0 Тогда
        Продолжить;
    КонецЕсли;

    Х = 1/Счетчик;

КонецЦикла;

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

Более подробно и основательно начальные вопросы программирования в 1С есть в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

One Reply to “Циклы в 1С 8.3”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *