Ошибки и особенности циклов в 1С

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

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

Типы циклов

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

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

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

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

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

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

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

Рис.1

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

Для  по

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

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

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

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

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

Рис.2

Пока

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

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

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

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

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

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

Рис.3

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

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

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

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

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

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

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

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



Должен ли уволенный и вновь принятый на работу сотрудник проходить предварительный медосмотр?
Должен ли уволенный и вновь принятый на работу тем же работодателем сотрудник заново проходить предварительный медицинский осмотр? Ответ на этот ...
Учет бланков трудовых книжек
Работодатель при заключении трудового договора с работником, устраивающимся на работу впервые, обязан оформить ему трудовую книжку, а при прекращении трудового ...
Тест 1С:ERP Управление предприятием (Ред. 2.2)  - 10 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:ERP Управление предприятием (Ред. 2.2)". Пройди тест! Всего 10 вопросов:Если по номенклатуре ведется учет ...
Тест 1С:Бухгалтерия 8.3  - 5 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:Бухгалтерия 8.3". Пройди тест! Всего 5 вопросов:В программе 1С:Бухгалтерия 8 результаты инвентаризации на оптовых ...
Тест Платформа 1С:Предприятия 8  - 5 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "Платформа 1С:Предприятия 8". Пройди тест! Всего 5 вопросов:При настройке связи между двумя наборами данных ...
Тест 1С:Управление нашей фирмой 8  - 10 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:Управление нашей фирмой 8". Пройди тест! Всего 10 вопросов:Можно ли использовать отчет Заказы поставщикам ...
Тест 1С:Розница 8  - 7 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:Розница 8". Пройди тест! Всего 7 вопросов:Какие существуют варианты отчета Причины возвратов от покупателя?...Где ...
Тест 1С:Документооборот 8 (Ред. 2.0)  - 10 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:Документооборот 8 (Ред. 2.0)". Пройди тест! Всего 10 вопросов:Чтобы сформировать номенклатуру дел на следующий ...
Тест 1С:Зарплата и управление персоналом 8 (Ред. 3.1)  - 7 вопросов от 27.7.2017
Проверь свои профессиональные навыки по программе "1С:Зарплата и управление персоналом 8 (Ред. 3.1)". Пройди тест! Всего 7 вопросов:В какой сумме ...
Применение Agile-технологий в проектах 1С
Agile – это одна из методик ведения проектов. О ее практическом применении в проектах 1С пойдет речь в статье ...
Джон фон Нейман

Макеты СКД

Макеты СКД
Рассмотрены некоторые типовые задачи, которые решаются с помощью предопределенных макетов, а также перечислены несколько случаев, для которых макеты не подходят ...
Создано смарт-кольцо, превращающее палец в телефон
На краудфандинговой платформе Kickstarter проходит кампания по сбору средств на массовое производство «умного кольца», превращающего палец владельца в смартфон ...
Прибыль Microsoft выросла за год на 26,2%
Чистая прибыль корпорации Microsoft по итогам 2016-2017 финансового года, который завершился 30 июня, составила 21,2 млрд долларов, что на 26,2% ...