Перейти

Встроенный язык · Goto

Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции. Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~".

Синтаксис

Перейти ~<Метка>;
Полное описание, параметры и ограничения

Перейти (Goto)

Перейти (Goto)

Синтаксис:
Перейти ~<Метка>;

Описание:
Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.

Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~".

Пример:

Пока Истина Цикл
Для Каждого Элемент Из МассивЭлементов Цикл
Если ВыполнениеУсловия(Элемент) Тогда
Перейти ~ВыходИзДвойногоЦикла;
КонецЕсли;
...
КонецЦикла;
КонецЦикла;
~ВыходИзДвойногоЦикла:
// продолжение вычислений

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Перейти: выйти из двух конечных циклов после найденного номера

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

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.

  2. Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().

  3. Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.

  4. Браузер показывает код, но не исполняет BSL. Проверки результата нужно выполнить вручную на платформе 8.5.1.1343 в учебной базе.

Процедура ВыполнитьПример() Экспорт
    Найдена = Ложь;
    НайденнаяПолка = 0;
    НайденноеМесто = 0;
    Проверено = 0;
    Для Полка = 1 По 2 Цикл
        Для Место = 1 По 3 Цикл
            Проверено = Проверено + 1;
            Если Полка = 2 И Место = 1 Тогда
                Найдена = Истина;
                НайденнаяПолка = Полка;
                НайденноеМесто = Место;
                Перейти ~ПоискЗавершён;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    ~ПоискЗавершён:
    Сообщить(Найдена);
    Сообщить(НайденнаяПолка = 2 И НайденноеМесто = 1);
    Сообщить(Проверено = 4);
КонецПроцедуры

Разбор по шагам

  1. Первый цикл перебирает две собственные полки, второй — три места на каждой. Это числа в памяти, не чтение склада.

  2. Для полки 1 проверяются места 1/2/3. Четвёртая проверка — полка 2, место 1 — находит искомую пару.

  3. Перед переходом сохранить найденные значения в отдельные переменные. Не полагаться на значения счётчиков после выхода.

  4. Перейти ~ПоискЗавершён сразу передаёт управление метке за обоими циклами, поэтому места 2/2 и 2/3 не проверяются.

  5. Для сравнения замените условие полки на 3: оба конечных цикла завершатся обычно, выполнение всё равно дойдёт до метки, но найденной пары не будет.

Как проверить результат

  1. Исходный вариант: три сообщения Истина, проверены ровно четыре пары.

  2. При условии Полка=3: Найдена=Ложь, сохранённые номера остаются 0, Проверено=6. Ожидаемые проверки исходного успеха станут Ложь.

Ожидаемый результат

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

На что обратить внимание

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

  2. Метка объявляется как ~Имя: и доступна лишь в своей процедуре, функции или секции модуля. Перейти не вызывает другой модуль.

  3. Обратный безусловный переход способен создать бесконечное выполнение. Для обычного поиска удобнее отдельная функция с Возврат; здесь изучается конкретный оператор.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.