1с цикл по дням периода

Циклы в программировании 1С 8.3

Цикл в программировании — это любая многократно исполняемая последовательность инструкций, организованная любым способом. Именно так описывается цикл во всех языках программирования. По сути циклы в 1С 8.3 не исключение. Но как всегда, каждый язык программирования имеет свою конструкцию, синтаксис, что выражаясь на обычном языке можно описать как правописание. Перейдем к изучении основных понятий и к примерам.

1с цикл по дням периода

Цикл «Для…»

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

Пример 1 — Простой обход циклом с счетчиком

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

Пример 2 — Обход с увеличением

Но, при решении конкретных задач, автоматическое увеличение значения счетчика цикла на единицу не всегда уместно. Так что же делать, ведь это же автоматическая функция?! Но всегда есть выход.

Рассмотрим конкретный пример в котором попробуем счетчику цикла задать шаг ровной к 5-и:

Пример 3 — С выходом из цикла «Прервать» (проверка на вечный цикл)

Приведем пример, где Сч, Счетчик, Сдвиг, Шаг, КоличествоСообщений являются переменными. Во избежание вхождения программы в вечный цикл, проводиться проверка и при необходимости цикл прерывается:

*Данный пример мы привели во внешней обработке.

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

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

Пример 1 — Простой обход таблицы значения

Создадим таблицу значений. Как мы помним, делается это на сервере.

И так, мы создали таблицу значений. Вскроем таблицу, для лучшего понимания.

ИндексЗначение элементаТип элементаАвтомобильКлассВес
0СтрокаТаблицыЗначенийСтрокаТаблицыЗначений«KIA»«A Класс»1 100
1СтрокаТаблицыЗначенийСтрокаТаблицыЗначений«Ford»«B Класс»1 300
2СтрокаТаблицыЗначенийСтрокаТаблицыЗначений«BMW»«C Класс»1 400

Теперь реализуем обход по коллекции с помощью цикла Для Каждого.

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

*Данный пример мы привели во внешней обработке.

Пример 2 — Обход массива

Создадим еще одну коллекцию. Массив, в отличии от таблиц значений, можно создать на клиенте тоже.

Взглянем на коллекцию:

ИндексЗначение элементаТип элемента
0«Арина»Строка
1«Марина»Строка
2«Карина»Строка

А теперь реализуем обход по коллекции, с помощью цикла Для Каждого:

Пример 3 — Оператор «Продолжить»

Еще один пример, где применим оператор Продолжить:

ИндексЗначение элементаТип элемента
03Число
17Число
28Число
39Число

Цикл «Пока…»

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

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

Пример 1 — Обход массива с счетчиком

Взглянем на коллекцию.

ИндексЗначение элементаТип элемента
0«Снегурочка N1»Строка
1«Баядерка N2»Строка
2«Синяя птица N3»Строка
3«Красная Шапочка N4»Строка

Как мы знаем, индексы строк в коллекции начинаются с 0-я. Это прекрасно видно на развернутом виде коллекции.

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

Обратимся к тому же массиву, но напишем код обратного цикла.

*Данный пример мы привели во внешней обработке.

«Прервать» и «Продолжить» в циклах 1С 8.3

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

Видео Школы 1С по теме циклов

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Циклы 1с 8 — описание с примерами

В статье будут описаны циклы 1с 8: их разновидности, назначение и применение. А также рассмотрены примеры их использования для конкретных задач. Цикл в 1с, как и в других языках программирования, предназначен для многократного повторения операторов, находящихся внутри него.

В 1с существует три вида циклов:

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

Цикл Пока

Данный цикл предназначен для осуществления повторений, пока выполняется условие. Синтаксис цикла выглядит так:

Для выполнения очередного повторения Логическое выражение должно возвращать значение Истина. Это работает следующим образом:

Пример 1. При помощи сообщения вывести пользователю цифры от 1 до 10.

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

Пример 2. А теперь только не четные, в интервале от 1 до 100, в обратном порядке.

В примере используется операция %. Она получает остаток от деления одного числа на другое.

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

Также цикл Пока часто используется для обхода выборки из результата запроса. У выборки для этого есть специальный метод Следующий(). Он осуществляет переход на следующую строку и возвращает Истина, если такая строка есть. Если же следующая строка отсутствует в выборке, метод возвращает Ложь. Нельзя забывать, что работу с запросом можно осуществлять только в серверной процедуре (или функции).

Пример 4. При помощи запроса выбрать всех пользователей, кроме недействительных. Обойти выборку циклом Пока.

Цикл Для

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

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

Пример 5. Воспользуемся заданием из первого примера и выведем числа от 1 до 10.

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

Пример 6. Вывести посимвольно строку «Привет мир!».

То есть при помощи цикла Для мы обходим номера символов строки. А внутри цикла получаем символ по его номеру.

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

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

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

Пример 7. Получить сумму элементов числового массива.

В переменной ЭлементМассива при каждом повторении цикла содержится число. Сложив их все, получаем: 101,4.

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

Пример 8. При помощи запроса выбрать всех пользователей. Выгрузить результат в таблицу значений, обойти ее и вывести пользователей с заполненным физическим лицом.

В примере видно, что переменная СтрокаТаблицы на каждом проходе цикла, содержит очередную строку таблицы. Доступ к ее полям осуществляется через «точку».

Специальные операторы циклов

Циклы 1с могут использовать специальные операторы Продолжить и Прервать. Они предназначены для предварительного завершения итерации и всего цикла соответственно.

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

Пример 9. Немного модифицируем код из предыдущего примера, и напишем его с использованием оператора Продолжить.

Завершаем проход цикла, если физическое лицо не заполнено. Метод Сообщить будет выполняться, только при условии наличия физлица.

С оператором Прервать все еще проще, он завершает выполнение цикла. Вне зависимости от того, сколько повторений еще должно было выполниться.

Пример 10. Рассмотрим задачу из самого первого примера. Выведем числа от 1 до 10 циклом Пока. Но при этом модифицируем программный код.

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

Также вы можете скачать обработку со всеми рассмотренными примерами Циклы 1с — примеры. Обработка написана под управляемое приложение, в качестве конфигурации для запросов использовалась демо-база БСП 3.1.

Источник

Циклы применяются для выполнения каких либо повторяющихся действий, возможные варианты перебора в цикле:

Перебираем строки с помощью цикла Для каждого

Перебираем строки с помощью цикла Пока

Перебираем строки с помощью цикла Для

Еще вариант, но советую его использовать только в без выходных ситуациях, Если

Примеры циклов

А какой цикл работает быстрее?

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

Первый вид цикла, назовем его условно «Для По» выглядит так:

Второй вид «Для Каждого»:

Третий «Пока»:

Далее вспомнил ассемблерную молодость & цикл «Если»:

Ну и напоследок «Рекурсия»

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

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

Ну что ж, поехали. В качестве тела цикла использовалось чтение из заранее заполненного массива.

или, при использовании цикла «Для Каждого»

Тестирование проводилось на платформе 8.3.5.1231 для трех видов интерфейса (Обычное приложение, Управляемое приложение и Такси).

Результаты для 8.3.5.1231

ИнтерфейсДляПоДляКаждогоПокаЕсли
Обычное приложение5734,24680,47235,47263,0
Управляемое приложение5962,44882,67497,47553,6
Такси5937,24854,67500,87513,0

Числа это время в миллисекундах полученное с помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах(), которую я вызывал до цикла и после его завершения. Числа дробные, потому что я использовал среднее арифметическое пяти замеров. Почему я не использовал Замер производительности? У меня не было цели замерить скорость каждой строчки кода, только скорость циклов с одинаковым результатом работы.

Казалось бы и все, но & тестировать так тестировать!

Результаты для 8.2.19.106

ИнтерфейсДляПоДляКаждогоПокаЕсли
Обычное приложение4411,83497,25432,05454,0
Управляемое приложение4470,83584,85522,65541,0

В среднем платформа 8.2 на 25% быстрее, чем 8.3. Я немножко не ожидал такой разницы и решил провести тест на другой машине. Скажу только, что там 8.2 была быстрее процентов на 20.

Почему? Не знаю, дезасемблировать ядро в мои планы не входило, но в замер производительности я все же заглянул. Оказалось, что сами циклические операции в 8.3 проходят несколько быстрее, чем в 8.2. Но на строке

то есть при считывании элемента коллекции в переменную происходит значительное снижение производительность.

Для себя я сделал несколько выводов:

1. Если есть возможность использовать специализированный цикл & «Для Каждого», то лучше использовать его. Кстати, сам по себе он отрабатывает дольше чем другие циклы, но скорость доступа к элементу коллекции у него на много выше.

2. Если заранее знаешь количество итераций & используй «Для По». «Пока» отработает медленнее.

3. Если использовать цикл «Если» & другие программисты тебя явно не поймут.

В статье использованы материалы с хабра и хелпме

Источник

1с цикл по дням периода

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

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

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

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

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

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

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

При этом Имя программист придумывает сам и с этим именем связывается значение очередного элемента коллекции. Сейчас разберем на примере и всё станет ясно.

Предположим, что у нас есть такой массив:

И мы хотим написать цикл, который выводит элементы этого массива от первого до последнего.

Сначала давайте напишем такой обход при помощи обычного цикла Для:

Да, этот код хорош, но в нём легко допустить ошибку, например:

И это будет очень коварная ошибка, так как программист (из-за замыливания глаза) сможет долго не замечать и не находить её.

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

Вот как будет выглядеть обход нашего массива при помощи цикла Для Каждого:

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

Источник

Программирование в 1С для всех

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1с цикл по дням периода

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

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

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

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

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

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

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

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

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

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

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

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

1с цикл по дням периода

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

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

Источник

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

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