Циклы в языке 1С 8.3, 8.2 (в примерах)

Циклы в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-18T22:10:00+00:00Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

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

Полный синтаксис (нажмите, чтобы раскрыть)

Цикл Для

Описание:

Оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции Цикл – КонецЦикла.

Перед началом выполнения цикла значение Выражение 1 присваивается переменной Имя_переменной. Значение Имя_переменной автоматически увеличивается при каждом проходе цикла. Величина приращения счетчика при каждом выполнении цикла равна 1.

Цикл выполняется, пока значение переменной Имя_переменной меньше или равно значению Выражение 2. Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.

Синтаксис:

Для <Имя_переменной> = <Выражение 1> По <Выражение 2> Цикл
    // Операторы
    [Прервать;]
    // Операторы
    [Продолжить;]
    // Операторы
КонецЦикла;

Параметры:

Имя_переменной Идентификатор переменной (счетчика цикла), значение которой автоматически увеличивается на 1 при каждом повторении цикла. Так называемый счетчик цикла.
Выражение 1 Числовое выражение, которое задает начальное значение, присваиваемое счетчику цикла при первом проходе цикла.
По Синтаксическая связка для параметра Выражение 2.
Выражение 2 Максимальное значение счетчика цикла. Когда переменная Имя_переменной становится больше чем Выражение 2, выполнение оператора цикла Для прекращается.
Цикл Операторы, следующие за ключевым словом Цикл выполняются, пока значение переменной Имя_переменной меньше или равно значения Выражение 2.
// Операторы Исполняемый оператор или последовательность таких операторов.
Прервать Позволяет прервать выполнение цикла в любой точке. После выполнение этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла.
Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются.
КонецЦикла Ключевое слово, которое завершает структуру оператора цикла.

  

Цикл Для Каждого

Описание:

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

Синтаксис:

Для Каждого <Имя_переменной_1> Из <Имя_переменной_2> Цикл
    // Операторы
    [Прервать;]
    // Операторы
    [Продолжить;]
    // Операторы
КонецЦикла;

Параметры:

Имя_переменной_1 Переменная, которой при каждом повторении цикла присваивается значение очередного элемента коллекции.
Из Синтаксическая связка для параметра Имя_переменной_2.
Имя_переменной_2 Переменная или выражение, предоставляющее коллекцию. Элементы этой коллекции будут присваиваться параметру Имя_переменной_1.
Цикл Операторы, следующие за ключевым словом Цикл выполняются для каждого элемента коллекции.
// Операторы Исполняемый оператор или последовательность таких операторов.
Прервать Позволяет прервать выполнение цикла в любой точке. После выполнение этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла.
Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются.
КонецЦикла Ключевое слово, которое завершает структуру оператора цикла.

  

Цикл Пока

Описание:

Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла.

Синтаксис:

Пока <Логическое выражение> Цикл
    // Операторы
    [Прервать;]
    // Операторы
    [Продолжить;]
    // Операторы
КонецЦикла;

Параметры:

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

Оглавление (нажмите, чтобы раскрыть)

&НаКлиенте
Процедура ВыполнитьКод(Команда)
 
    /// Как организовать цикл в 1с 8.3, 8.2
 
    // Для Цикл
    Для Счетчик = 1 По 5 Цикл
        Сообщить(Счетчик); // 1 2 3 4 5
    КонецЦикла;
 
    // Для Каждого Цикл
 
    Дни = Новый Массив();
    Дни.Добавить("Понедельник");
    Дни.Добавить("Вторник");
    Дни.Добавить("Среда");
 
    Для Каждого Элемент Из Дни Цикл
        Сообщить(Элемент); // Понедельник Вторник Среда
    КонецЦикла;
 
    // Пока Цикл
    Счетчик = 0;
    Пока Счетчик < Дни.Количество() Цикл        
        Сообщить(Дни[Счетчик]); // Понедельник Вторник Среда
        Счетчик = Счетчик + 1;     
    КонецЦикла;     
 
    /// Как организовать обратный цикл в 1с 8.3, 8.2     
 
    Счетчик = Дни.Количество() - 1;     
    Пока Счетчик >= 0 Цикл
        Сообщить(Дни[Счетчик]); // Среда Вторник Понедельник
        Счетчик = Счетчик - 1;
    КонецЦикла;
 
    /// Как прервать цикл в 1с 8.3, 8.2
 
    Для Счетчик = 1 По 5 Цикл
        Если Счетчик > 2 Тогда
            Прервать;
        КонецЕсли;
        Сообщить(Счетчик); // 1 2
    КонецЦикла;
 
    /// Как принудительно продолжить цикл в 1с 8.3, 8.2
 
    Для Счетчик = 1 По 5 Цикл
        Если Счетчик <> 3 Тогда
            Продолжить;
        КонецЕсли;
 
        Сообщить(Счетчик); // 3
    КонецЦикла;   
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Циклы в языке 1С 8.3, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

helpme1c.ru

циклы в 1С часть 2

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

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Внутренний язык программирования 1С 8.3 для начинающих программистов: циклы в 1С часть 2

Автор уроков и преподаватель школы: Владимир Милькин

На прошлом занятии мы изучили первый из двух существующих в языке 1С циклов: Цикл Для.

Сегодня нас ждет второй вид цикла: Цикл Пока.

Цикл Пока

Конструкция цикла выглядит так:

Пока ЛогическоеВыражение Цикл
  Команда1();
  Команда2();
  ...
КонецЦикла;

Команды, заключенные между словами Цикл и КонецЦикла выполняются пока ЛогическоеВыражение равно Истине.

В качестве логического выражения может быть любое условие. Пока это условие верно (то есть равно Истина) выполнение команд в цикле повторяется снова и снова, как только условие перестало быть верным команды перестают выполняться.

Решение задачи вывода чисел от 1 до 10, с применением только что изученного цикла, будет выглядеть так:

Шаг = 1;
Пока Шаг <= 10 Цикл
    Сообщить(Шаг);
    Шаг = Шаг + 1;
КонецЦикла;

Компьютер встретив такую конструкцию выполняет её так:

Порядок выполнения цикла компьютером

  • Первой командой компьютер сопоставит имени Шаг значение равное 1.
  • Так как имя Шаг на данном этапе равно единице — условие цикла верно (Шаг <= 10) — компьютер выводит единицу и увеличивает имя Шаг до 2.
  • Имя Шаг равно 2, но условие цикла по-прежнему верно, поэтому компьютер выводит 2 и увеличивает имя Шаг до 3.
  • Имя Шаг равно 10, условие цикла всё ещё верно — компьютер выводит 10 и увеличивает имя Шаг до 11.
  • Стоп! Условие цикла перестало выполняться, теперь Шаг (вернее его значение 11) больше 10. Команды цикла больше не выполняются.

Задание №23. Измените приведенный выше пример, чтобы выводились числа от 10 до 100.

Не торопитесь смотреть ответ! Сначала попробуйте выполнить задание сами.

Ответ

Шаг = 10;
Пока Шаг <= 100 Цикл
    Сообщить(Шаг);
    Шаг = Шаг + 1;
КонецЦикла;

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

А как вы думаете сколько раз выполнятся следующие циклы:

Не торопитесь выполнять эти примеры на компьютере! Ведь это, так называемые, бесконечные циклы. Которые начав выполняться — никогда не закончатся, потому что их логическое условие всегда равно Истина.

А вот следующие примеры можно смело пробовать на компьютере:

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

Задание №24. Напишите программу, которая выводит на экран числа от 10 до 1, используя Цикл Пока. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Программа должна занимать ровно пять строк.

Ниже привожу решение, но рассчитываю, что вы справитесь с задачей самостоятельно.

helpme1c.ru

Циклы в 1С

Алгоритмы многих программ зачастую предполагают циклическое повторение определённых действий. 1С в этом случае не является исключением. Циклы в 1С позволяют:

  • Перебрать элементы справочника;
  • Заполнить области макета;
  • Выполнить определенные действия с выборкой документов;
  • И многое многое другое.

Типы циклов

В 1С принято различать три типа циклов в зависимости от набора слов, входящих в конструкцию:

  1. Для каждого «Переменная» из «Коллекция значений»;
  2. Для «Переменная» = «Нач. значение» По «Кон. Значение»;
  3. Пока «Выражение».

Рассмотрим их подробнее.

Для каждого из

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

  • Переменная, определяющая текущий элемент коллекции;
  • Определение коллекции значений.

Наиболее часто возникающая ошибка в этом случае показана на рис.1

Рис.1

Чаще всего она возникает, когда программист не до конца понимает разницу между объектом (документом, справочником) и коллекцией (выборкой) значений, получаемой с помощью оператора Выбрать().

Для  по

В качестве параметров, передаваемых в строку, в этом случае выступают:

  1. Имя переменной – итератора;
  2. Начальное значение переменной;
  3. Конечное значение переменной.

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

Такая конструкция очень часто используется при обходе табличных частей.

При использовании данного обходчика важно различать количество строк табличной части и индекс отдельной взятой строки. В первом случае начальное значение будет равно 1, конечное можно получить с помощью оператора Количество(). Индексы начинаются с 0 и заканчиваются Количество()-1. В противном случае можно получить ошибку (Рис.2).

Рис.2

Пока

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

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

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

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

Прерывание выполнения нажатием комбинации клавиш

Если в теле цикла прописать процедуру ОбработкаПрерыванияПользователя(), то в любой момент его выполнения, нажав комбинацию клавиш Ctrl+PauseBreakможно остановить его работу. В этом случае в окне сообщений будет выведена строка (Рис.3).

Рис.3

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

Прерывание по условию

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

Правильно записанный в код программы этот оператор выделяется красным цветом.

Перескакивание некоторых операций цикла

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

  • В первом способе мы ставим условие и внутри конструкции Если Тогда КонецЕсли прописываем исполняемый код, если условие не выполнено, код соответственно выполняться не будет. Очевидным минусом такого подхода является то, что она достаточно громоздка и в случае большого количества условий легко ошибиться, где берется начало одного «Если» и где заканчивается другое;
  • Гораздо правильнее использовать конструкцию, где вместо утверждения условия берется его отрицание (вместо равно, берется неравно и т.д.) и помещение внутри конструкции оператора Продолжить;

Оператор «Продолжить» в теле кода выделяется красным цветом и переносит выполнение цикла в его начало.

blog.it-terminal.ru