Циклы в 1С (12 из 100 дней)
Понятие циклов
Цикл - это многократное выполнение одних и тех же операторов встроенного языка.
Циклы используются, например, чтобы:
- Подсчитать итог
- Найти значение в списке
- Сопоставить списки
- Обработать все элементы списка и т.д.
Если какое-то действие нужно выполнить несколько раз - создаем цикл
- Сами действия называют телом цикла. Тело цикла очень похоже на тело блока условий
- Это тоже операторы, которые программа выполнить несколько раз
Итерация - это один проход цикла
Способы организации циклов
Во встроенном языке есть три хороших способа организации циклов:
- Цикл "Пока"
- Цикл "Для"
- Цикл "Для Каждого"
И есть один плохой способ:
- Цикл через "Перейти" (На практике он никогда не используется)
Цикл "Для"/Цикл с заданным числом повторений
Цикл с заданным числом повторений используется, если известно, сколько раз нужно повторить действие
- Выглядит как цикл "Для .... По"
- В цикл задается переменная, которая будет увеличиваться на единицу в каждый проход
Общий вид цикла
- Переменная "Счетчик" числовая. Автоматически увеличивается при достижении конца тела цикла
- Цикл вращается до тех пор, пока "Счетчик" не достигнет значения "Верхняя граница"
Общий синтаксис цикла:
Пример. Цикл выведет все числа от 1 до 10 (включительно):
Изучим подробнее на примере:
1. Создадим новую обработку "РаботаСЦиклом", создадим команду "ЦиклДля" и также реквизит "Строка"
2. Пропишем следующий код, который выведет нам каждый символ по отдельности из строки и укажет нам его "код символа"
3. Проверим его работу
Именование счетчика
- Имя переменной-счетчика произвольное, его придумывает программист
- Имя переменной-счетчика можно сокращать (Стандарты разработки допускают это)
- Распространены имена:
Цикл "Пока"/Цикл с условием
Цикл с условием используется, когда цикл должен выполняться пока справедливо какое-то условие, но неизвестно точное количество раз цикла.
Пример:
- Пока есть строчки в файле
- Пока не вставили бумагу в принтер - показывать просьбу её вставить
- Пока не заполнен грузовик - подавать груз на транспортер
Много ситуаций, когда цикл работает не по счетчику, а "столько, сколько нужно"
- Цикл с условием начинается с ключевого слова "Пока", за которым следует логическое выражение
- Если выражение истинно - цикл начнется и будет работать, пока выражение не станет ложным
Синтаксис:
Зацикливание
- Возможно ситуации, когда цикл будет вечным
- Если выражение никогда не принимает значение "Ложь", цикл никогда не закончится. С виду программу будет "висеть", а внутри будет вечно вращать цикл
Пример с подсчетом рабочих дней в интервале дат ДатаНач-ДатаКон:
Давайте на практике разберемся с циклом "Пока"
1. В нашем же обработчике создадим команду "ЦиклПока" и два реквизита "ДатаНачало" и "ДатаКонец"
2. Пропишем следующий код, чтобы вычислять кол-во рабочих дней (важно увеличивать наш счетчик на сутки, прибавляя 86400 секунд)
3. Посмотрим, как работает алгоритм - увидим, что вызывается побочный эффект, что ДатаНачало меняется на ДатуКонец
4. Давайте исправим этом с добавлением дополнительной переменной
5. Теперь все выводится корректно
Цикл "Для Каждого"
Коллекции - это наборы структурированных элементов, данных, с которыми можно проводить определенные операции
Циклы по коллекции значений
- К коллекциям можно отнести массив подстрок, получаемый при помощи функции СтрРазделить, или, например, таблицу формы
- Цикл по коллекции, или совместный цикл, используется для перебора коллекций и выполнения операций над элементами коллекции
- Цикл по коллекции похож на цикл "Для", но используется для обхода не чисел в диапазоне, а элементов коллекции
- Обобщено цикл записывается так:
Пример. Код разбивает текст на слова и выводит их одно за другим:
- Упорядоченные коллекции обходятся по порядку
- СтрРазделить() из примера возвращает строки в порядке их следования в исходной строке, и слова выведены по порядку
Реализуем это:
1. В нашем обработчике создадим новую команду "ЦиклДляКаждого", а также новый реквизит "Текст"
2. Пропишем следующий код в команде
3. Посмотрим, как происходит выполнение
Рассмотрим также такую задачу - "Поиск самого длина слова в тексте"
1. Пропишем следующий код
2. Посмотрим на результат
Помимо работы с массивами, цикл "Для Каждого" можно использовать с таблицами
1. Создадим на форме реквизит "ТабличныеЗначения" и создадим две колонки
2. Перенесем всю таблицу на форму и пропишем следующую логику для команду "ЦиклДляКаждого"
3. Запустим обработку и увидим, что все выводится корректно
Причем система проходится сначала по одной строке, потом переходит к другой
Вложенность и управляющие слова
Вложенный цикл
Организован в теле внешнего цикла и выполняются при каждой итерации данного цикла
Пример (Поиск первых ста простых чисел):
Давайте рассмотрим этом пример на практике:
1. Создадим новую команду "ВложенныйЦикл" в нашей обработке
2. Пропишем следующий код (Простое число - это число, которое делится на себя и на 1):
- Первый цикл нам нужен, чтобы найти 100 первых чисел
- Второй цикл работает так, что мы будем увеличивать делитель до тех пор, пока он не достигнет верхней границы самого числа (Для 5, делитель будет = 2, потом 3, потом 4, каждое из этих чисел не будет равно нулю, а значит число точно простое)
3. Запустим код и увидим, что нам вывелись все наши простые числа
Но стоит понимать, что выполнение такого кода в 1С трудоемко, но я показал самый простой способ поиска простого числа, поэтому как раз следует использовать управляющие слова.
Прерывание и продолжение
Внутри цикла возможно использование двух управляющих слов:
- Прервать (Используется, чтобы немедленно завершить текущий цикл, даже если он ещё не закончился, возвращает нас в конец цикла)
- Продолжить (Используется, когда нет необходимости продолжать текущую итерацию и надо немедленно перейти к следующей и возвращает нас в начало цикла)
Они позволяют управлять течением любого цикла отдельно от условия или счетчика.
Встретимся с вами уже завтра с универсальными коллекциями