рубрики: Язык программирования 1С | Дата: 8 мая, 2017
В этой статье рассмотрим такую конструкцию языка прогрммирования 1С как Циклы.
Существует три способа организации циклов.
Рассмотрим каждый из этих способов.
Синтаксис:
Для <Переменная> = <НачальноеЗначение> По <КонечноеЗначение> Цикл
КонецЦикла;
При таком способе организации циклов переменной-счетчику присваивается некое начальное значение и выполняется он до тех пор пока значение переменной-счетчика меньше или равно указанного конечного значения.
С каждой итерацией значение счетчика увеличивается на единицу. Вот самый элементарный пример такого цикла:
Для Счетчик = 0 По 1000 Цикл
КонецЦикла;
В отиличие от многих других языков программирования в 1С не предусматривается возможность указания шага в цикле. При необходимости это можно сделать прибавлением к счетчику нужного значения внутри цикла
Для Счетчик = 0 По 1000 Цикл
Счетчик = Счетчик + 10;
КонецЦикла;
Синтаксис:
Пока <ЛогическоеВыражение> Цикл
КонецЦикла;
Пример:
Отказ = Ложь;
ГенераторСЧ = Новый ГенераторСлучайныхЧисел(1);
Пока НЕ Отказ Цикл
СлучайноеЧисло = ГенераторСЧ.СлучайноеЧисло(0, 10);
Если СлучайноеЧисло > 5 Тогда
Отказ = Истина;
КонецЕсли;
КонецЦикла;
То есть цикл будет выполняться до тех пор пока не будет сгенерировано случайное число больше пяти.
В языке программирования 1С существует такое понятие как коллекция. Она представляет собой набор элементов, содержащихся внутри какого-то объекта.
К коллекции мы можем отнести такие объекты как: массив, таблица значений, выборка из результата запроса, метаданные и т.д. Понятие это достаточно условное, но в синтакс-помощнике встречается на каждом шагу. Очень часто встречается задача, когда нам надо последовательно перебрать все элементы коллекции, чтобы совершить над ними какие-то действия. Для этого и существует синтаксическая конструкция:
Для каждого <ЭлементКоллекции> Из <Коллекция> Цикл
КонецЦикла;
Здесь <ЭлементКоллекции> — это переменная в которую последовательно помещаются элементы из коллекции. И внутри цикла она соответствующим образом обрабатывается.
В качестве примера приведу обход в цикле строк таблицы значений. Пусть она называется ТаблицаТовары и выглядит вот таким образом:
Наименование | Цена |
---|---|
Яблоки | 50.00 |
Апельсины | 100.00 |
Обойдем в цикле эту таблицу и для каждой строки выведем сообщение с наименованием и ценой товара:
Для каждого СтрокаТаблицы Из ТаблицаТовары Цикл
Наименование = СтрокаТаблицы.Наименование;
Цена = СтрокаТаблицы.Цена;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Наименование товара: " + Наименование + "; Цена: " + Цена;
Сообщение.Сообщить();
КонецЦикла;
На самом деле то же самое можно проделать и воспользовавшись первым вариантом, т.е в цикле с использованием счетчика:
КоличествоСтрок = ТаблицаТовары.Количество();
Для Счетчик = 0 По КоличествоСтрок - 1 Цикл
СтрокаТаблицы = ТаблицаТовары[Счетчик];
Наименование = СтрокаТаблицы.Наименование;
Цена = СтрокаТаблицы.Цена;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Наименование товара: " + Наименование + "; Цена: " + Цена;
Сообщение.Сообщить();
КонецЦикла;
Но как видим использовать обход элементов коллекции гораздо проще и удобней
Часто встречается ситуация, когда в зависимости от какого-то условия необходимо прервать выполнение цикла, либо перейти с следующей итерации.
Прерывание осуществляется с помощью оператора Прервать. В этом случае выполнение цикла прерывается и управление передается следующей за циклом конструкции языка. Если же нужно перейти к следующей итерации, необходимо использовать оператор Продолжить. Тогда управление передается на начало цикла. Проиллюстрируем небольшим примером:
Для Счетчик = 0 По 100 Цикл
Если Счетчик = 0 Тогда
Продолжить;
КонецЕсли;
Если Счетчик = 4 Тогда
Прервать;
КонецЕсли;
Результат = 1 / Счетчик;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(Результат);
Сообщение.Сообщить();
КонецЦикла;
Ноль пропускаем, т.к. на ноль делить нельзя. И всего цикл выполниться пять раз, для значений переменной Счетчик от 0 до 4
Добавить комментарий