Не заходит в цикл 1с
В платформе 1С 8.3 существует три вида циклов. Это циклы «Для Цикл», «Для каждого Цикл» и «Пока Цикл». При помощи циклов «Для Цикл» и «Пока Цикл» можно осуществлять цикличное повторение произвольных операторов. А цикл «Для каждого Цикл» необходим для обхода коллекций значений (массивов, таблиц значений и т.п.). В этой статье на разберем простые примеры всех трёх видов циклов.
Цикл «Для Цикл»
Разберем самый простой вид цикла. Этот цикл имеет следующий синтаксис.
В этом цикле, переменной НазваниеПерем в самом начале присваивается выражение СчетчНачало, которое имеет числовое значение (целое число). Потом, в каждой итерации цикла переменная НазваниеПерем увеличивается на 1. Цикл будет выполняться пока переменная НазваниеПерем меньше или равно переменной СчетчКонец.
СчетчНачало и СчетчКонец могут быть как числами, так и переменными с типом число.
Причем СчетчНачало может быть меньше нуля.
Чтобы цикл корректно работал СчетчНачало должно быть меньше СчетчКонец.
Такой код будет не корректен!!
С этим циклом удобно работать, когда нам нужно линейно заполнить какие-нибудь величины. Например, заполним массив в 1С цифрами от -3 до 3.
Или когда нужно получить какие-нибудь значения, которые следуют друг за другом. Например, значения того же массива.
Цикл «Пока Цикл»
Если при помощи предыдущего цикла можно было делать линейные обходы от меньшего значения к большему, то этот вид цикла позволяет выполнять практически любые обходы.
Данный цикл имеет следующий синтаксис
ЗначениеВыражения – какое-то логическое выражение. Пока это выражение истинно, то операторы цикла будут выполняться. Если выражение принимает значение Ложь, то цикл прекращается.
При помощи данного цикла можно делать различные нестандартные обходы. Например, выше мы заполнили массив цифрами начиная от -3 до 3, но циклом «Для Цикл» мы не можем заполнить массив цифрами от 3 до -3. Но, мы можем это сделать при помощи цикла «Пока Цикл»
Этот цикл можно также использовать, когда нужно что-то заполнить датами.
В этом коде мы заполняем массив датами, начиная с 1 января и заканчивая 31 января.
Цикл «Для каждого Цикл»
Этот вид цикла предназначен для обхода различных коллекций, например, массивов, таблиц значений, табличных частей и т.д.
Этот цикл имеет следующий синтаксис:
Переменной ЭлементКоллекции присваивает очередное значение элемента коллекции.
Например, если мы напишем вот такой код.
То при первом обходе переменная ЭлМассива будет равна 100, при втором — 45, а при третьем – 1000.
Это массив, у него, по сути, каждый элемент это значение какого-то типа, а если будет обход более сложной коллекции? Например, таблицы значений. В том случае, если будет обход таблицы, значений, то в переменной ЭлементКоллекции будет содержать очередная строка этой таблицы значений. Мы можем получить значение колонок в этой строке через оператор «.».
Пример в этом коде
И результат работы этого кода
Прервать цикл 1С
Иногда возникают такие ситуации, когда нужно из цикла выйти. Сделать это можно при помощи оператора Прервать. Этот оператор применим ко всем тремя видам циклов.
После выполнения этого оператора Прервать все последующие операторы в теле цикла не выполняются, и следующим выполняется оператор после ключевого слова КонецЦикла.
Рассмотрим следующий пример.
В этом примере мы обходим простым циклом ряд чисел от -5 до 5, и делим 1 на обходимое число. Если же переменная счетчика равна 0, то чтобы не происходила исключительная ситуация, то выходим из цикла. Т.е. мы выполним деление только для отрицательных чисел.
Продолжить цикл 1С
А есть ситуации, когда нам не нужно выходить из цикла, но и не нужно продолжать текущую итерацию. Помочь нам в этом может оператор Продолжить. Этот оператор также применим ко всем тремя видам циклов.
Операторы после этого ключевого слова выполняться не будут, и произойдет следующая итерация цикла.
Рассмотрим такой пример.
Это измененный предыдущий пример, только когда счетчик цикла равно 0, то мы не выходим а продолжаем цикл, в этом случае деление будет выполнено как для отрицательных, так и для положительных чисел.
Более подробно и основательно начальные вопросы программирования в 1С есть в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Цикл в программировании — это любая многократно исполняемая последовательность инструкций, организованная любым способом. Именно так описывается цикл во всех языках программирования. По сути циклы в 1С 8.3 не исключение. Но как всегда, каждый язык программирования имеет свою конструкцию, синтаксис, что выражаясь на обычном языке можно описать как правописание. Перейдем к изучении основных понятий и к примерам.
Цикл «Для…»
Оператор цикла Для предназначен для циклического повторения операторов, в конструкции Цикл – КонецЦикла. Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.
- Переменная является счетчиком и при каждом повторении цикла автоматически увеличивается на 1. Иначе говоря, это счетчик цикла.
- Знач1 число, которое задает начальное значение счетчику цикла.
- Знач2 число, которое задает максимальное значение счетчику цикла. Если значение счетчика цикла становится больше чем Знач2 цикл прекращается.
Пример 1 — Простой обход циклом с счетчиком
На данном примере счетчик цикла Сч при каждом входе в цикл увеличится на единицу, и пока не достигнет значению 11, цикл будет продолжаться.
Пример 2 — Обход с увеличением
Но, при решении конкретных задач, автоматическое увеличение значения счетчика цикла на единицу не всегда уместно. Так что же делать, ведь это же автоматическая функция?! Но всегда есть выход.
Рассмотрим конкретный пример в котором попробуем счетчику цикла задать шаг ровной к 5-и:
Пример 3 — С выходом из цикла «Прервать» (проверка на вечный цикл)
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
*Данный пример мы привели во внешней обработке.
Цикл «Для Каждого…»
Оператор цикла Для Каждого предназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции.
- Переменная: при каждом входе в цикл переменной присваивается значение очередного элемента коллекции.
- КоллекцияЗначений: коллекция значений, элементы которой будут присваиваются переменной Переменная.
Пример 1 — Простой обход таблицы значения
Создадим таблицу значений. Как мы помним, делается это на сервере.
И так, мы создали таблицу значений. Вскроем таблицу, для лучшего понимания.
Индекс | Значение элемента | Тип элемента | Автомобиль | Класс | Вес |
0 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «KIA» | «A Класс» | 1 100 |
1 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «Ford» | «B Класс» | 1 300 |
2 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «BMW» | «C Класс» | 1 400 |
Теперь реализуем обход по коллекции с помощью цикла Для Каждого.
*Данный пример мы привели во внешней обработке.
Пример 2 — Обход массива
Создадим еще одну коллекцию. Массив, в отличии от таблиц значений, можно создать на клиенте тоже.
Взглянем на коллекцию:
Индекс | Значение элемента | Тип элемента |
0 | «Арина» | Строка |
1 | «Марина» | Строка |
2 | «Карина» | Строка |
А теперь реализуем обход по коллекции, с помощью цикла Для Каждого:
Пример 3 — Оператор «Продолжить»
Еще один пример, где применим оператор Продолжить:
Индекс | Значение элемента | Тип элемента |
0 | 3 | Число |
1 | 7 | Число |
2 | 8 | Число |
3 | 9 | Число |
Цикл «Пока…»
Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла. (Описание: синтакс-помощник)
Выражение: логическое выражение, в зависимости значения которой будет выполнятся, или не выполнятся цикл.
Пример 1 — Обход массива с счетчиком
Взглянем на коллекцию.
Индекс | Значение элемента | Тип элемента |
0 | «Снегурочка N1» | Строка |
1 | «Баядерка N2» | Строка |
2 | «Синяя птица N3» | Строка |
3 | «Красная Шапочка N4» | Строка |
Как мы знаем, индексы строк в коллекции начинаются с 0-я. Это прекрасно видно на развернутом виде коллекции.
- МоиЛюбимыеКонфеты.Количество() определяет количество срок в коллекции, что в данном случае рано 4-ом.
- МоиЛюбимыеКонфеты[Сч] определяет элемент коллекции по индексу, где Сч играет роль индекса, и при каждом входе в цикл прибавляется на единицу. Тем самим, мы с каждым разом обращаемся к следующей строке коллекции, начиная со строки с индексом 0. И цикл будет продолжаться, пока значение логического выражение Сч < МоиЛюбимыеКонфеты.Количество() не станет ровному Ложь.
*Данный пример мы привели во внешней обработке.
Пример 2 — Обратный цикл с счетчиком
Но можно получить тот же список, но в обратном порядке. Это называется обратный цикл, хотя на самом деле, этот тот же самый цикл Пока.
Обратимся к тому же массиву, но напишем код обратного цикла.
Поясню, что счет индекса начинается с цифры равному количества строк -1, поскольку индекс последней строки ровно 3-ом. После, в каждом цикле, индекс уменьшается на единицу и тем самим мы обходим коллекцию с обратной стороны.
*Данный пример мы привели во внешней обработке.
«Прервать» и «Продолжить» в циклах 1С 8.3
Вы думаю заметили, что в нескольких циклах, мы специально показали действие операторов Прервать и Продолжить. Хотя слова сами говорят о себе, да и в циклах вполне понятны их действия, тем не менее в заключении статьи, поясним и действие этих операторов.
- Прервать: прерывает выполнение цикла в любой точке. После выполнение этого оператора цикл прекращается и управление передается следующему оператору, который находиться после ключевого слова КонецЦикла.
- Продолжить: возвращает управление в начало цикла. Операторы, следующие в теле цикла за оператором Продолжить, не выполняются в текущей итерации обхода.
Видео Школы 1С по теме циклов
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Цикл Для
Оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции Цикл – КонецЦикла .
Перед началом выполнения цикла значение Выражение 1 присваивается переменной Имя_переменной . Значение Имя_переменной автоматически увеличивается при каждом проходе цикла. Величина приращения счетчика при каждом выполнении цикла равна 1.
Цикл выполняется, пока значение переменной Имя_переменной меньше или равно значению Выражение 2 . Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.
Имя_переменной | Идентификатор переменной (счетчика цикла), значение которой автоматически увеличивается на 1 при каждом повторении цикла. Так называемый счетчик цикла. |
Выражение 1 | Числовое выражение, которое задает начальное значение, присваиваемое счетчику цикла при первом проходе цикла. |
По | Синтаксическая связка для параметра Выражение 2 . |
Выражение 2 | Максимальное значение счетчика цикла. Когда переменная Имя_переменной становится больше чем Выражение 2, выполнение оператора цикла Для прекращается. |
Цикл | Операторы, следующие за ключевым словом Цикл выполняются, пока значение переменной Имя_переменной меньше или равно значения Выражение 2 . |
// Операторы | Исполняемый оператор или последовательность таких операторов. |
Прервать | Позволяет прервать выполнение цикла в любой точке. После выполнение этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла . |
Продолжить | Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. |
КонецЦикла | Ключевое слово, которое завершает структуру оператора цикла. |
Цикл Для Каждого
Оператор цикла Для каждого предназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции.
Имя_переменной_1 | Переменная, которой при каждом повторении цикла присваивается значение очередного элемента коллекции. |
Из | Синтаксическая связка для параметра Имя_переменной_2 . |
Имя_переменной_2 | Переменная или выражение, предоставляющее коллекцию. Элементы этой коллекции будут присваиваться параметру Имя_переменной_1 . |
Цикл | Операторы, следующие за ключевым словом Цикл выполняются для каждого элемента коллекции. |
// Операторы | Исполняемый оператор или последовательность таких операторов. |
Прервать | Позволяет прервать выполнение цикла в любой точке. После выполнение этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла . |
Продолжить | Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. |
КонецЦикла | Ключевое слово, которое завершает структуру оператора цикла. |
Цикл Пока
Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла . Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: циклы в 1С часть 1
Автор уроков и преподаватель школы: Владимир Милькин
На прошлом занятии мы познакомились с условной командой Если, позволяющей выполнять или не выполнять набор команд в зависимости от некоторого условия. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Сегодня мы приступаем к изучению циклов.
Циклы в языке 1С
Цикл - это специальная команда компьютеру, которая позволяет повторять выполнение других команд нужное количество раз.
К примеру, пусть нам требуется вывести на экран числа от 1 до 10.
Можно, конечно, решить задачу уже известным нам способом - без применения циклов. Решение будет таким:
Но, согласитесь, это громоздко и неудобно. Чтобы решить такую простую задачу нам понадобилось написать целых 10 строчек кода! К тому же почти одинаковых. Они отличаются лишь параметрами для команды Сообщить.
Вот как раз для таких случаев и были придуманы циклы, которых в языке 1С бывает два вида: Цикл Для и Цикл Пока.
Цикл Для
Конструкция цикла выглядит вот так:
Команды, заключенные между словами Цикл и КонецЦикла называются телом цикла и выполняются столько раз сколько нужно шагов, чтобы НачальноеЧисло стало больше КонечногоЧисла.
При этом Имя программист придумывает сам и с этим именем связывается текущее значение шага. Сейчас разберем на примере и всё станет ясно. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Решение задачи вывода чисел от 1 до 10, с применением только что изученного цикла, будет выглядеть так:
Всего три строчки вместо десяти. И это хорошо, что мы выводим только до десяти!
Компьютер встретив такую конструкцию выполняет её так:
- Компьютер инициализирует имя Шаг значением равным 1.
- Затем сравнивает это значение с 10. Значение 1 меньше 10.
- Выполняет Сообщить(1);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 2 меньше 10.
- Выполняет Сообщить(2);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 3 меньше 10.
- Выполняет Сообщить(3);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 4 меньше 10.
- Выполняет Сообщить(4);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 5 меньше 10.
- Выполняет Сообщить(5);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 6 меньше 10.
- Выполняет Сообщить(6);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 7 меньше 10.
- Выполняет Сообщить(7);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 8 меньше 10.
- Выполняет Сообщить(8);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение 9 меньше 10.
- Выполняет Сообщить(9);
- Увеличивает Шаг на единицу. Сравнивает с 10. Значение равно 10.
- Выполняет Сообщить(10);
- Увеличивает Шаг на единицу. Сравнивает с 10.
- Стоп! 11 больше 10. Прекращает выполнение цикла.
Задание №20. Измените приведенный выше пример, чтобы выводились числа от 10 до 100.
Не торопитесь смотреть ответ! Сначала попробуйте выполнить задание сами.
А как вы думаете сколько раз выполнится тело следующего цикла:
Подумайте сами. Потом выполните этот пример на компьютере. И, наконец, смотрите ответ.
А как насчет такого примера:
Сколько раз выполнится Сообщить("Привет, Мир!")?
Тело цикла (вернее команда Сообщить, которая находится внутри цикла) выполнится один раз. Ведь начальное значение (единица) равно конечному значению (единица) и компьютеру понадобится ровно один шаг, чтобы начальное значение цикла стало больше конечного.
Задание №21. Напишите программу, которая выводит на экран числа от 10 до 1, используя Цикл Для. Программа должна занимать ровно три строчки.
Ниже привожу решение, но рассчитываю, что вы справитесь с задачей самостоятельно.
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: циклы в 1С часть 3
Автор уроков и преподаватель школы: Владимир Милькин
Друзья, вы помните урок, в котором мы рассматривали цикл Для? Тогда я намеренно не стал рассказывать об особой форме этого цикла. Она используется только для обхода коллекций, например, массивов и списков значений.
Теперь, когда мы уже знаем что такое коллекция и для чего она нужна - время пришло.
Цикл Для Каждого
Конструкция цикла выглядит вот так:
Команды, заключенные между словами Цикл и КонецЦикла называются телом цикла и выполняются столько раз, сколько элементов содержит в себе коллекция.
При этом Имя программист придумывает сам и с этим именем связывается значение очередного элемента коллекции. Сейчас разберем на примере и всё станет ясно.
Предположим, что у нас есть такой массив:
И мы хотим написать цикл, который выводит элементы этого массива от первого до последнего.
Сначала давайте напишем такой обход при помощи обычного цикла Для:
Да, этот код хорош, но в нём легко допустить ошибку, например:
- мы можем по ошибке указать в качестве начального значения цикла не 0, а 1
- мы можем забыть отнять 1 от количества для верного определения индекса последнего элемента
И это будет очень коварная ошибка, так как программист (из-за замыливания глаза) сможет долго не замечать и не находить её.
Именно поэтому и был придуман цикл Для Каждого, который используется только для обхода коллекций от первого элемента к последнему.
Вот как будет выглядеть обход нашего массива при помощи цикла Для Каждого:
Вы видите, что для обхода коллекции от первого до последнего элемента запись этого цикла более лаконична и ошибиться здесь очень трудно.
Читайте также: