Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции. Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~".
Синтаксис
Перейти ~<Метка>;Полное описание, параметры и ограничения
Перейти (Goto)
Перейти (Goto)
Синтаксис:
Перейти ~<Метка>;
Описание:
Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.
Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~".
Пример:
Пока Истина Цикл
Для Каждого Элемент Из МассивЭлементов Цикл
Если ВыполнениеУсловия(Элемент) Тогда
Перейти ~ВыходИзДвойногоЦикла;
КонецЕсли;
...
КонецЦикла;
КонецЦикла;
~ВыходИзДвойногоЦикла:
// продолжение вычислений
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Перейти: выйти из двух конечных циклов после найденного номера
Ищем собственную пару полка/место в ограниченном наборе. Метка находится внутри той же процедуры, а не в другом модуле.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.
Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().
Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.
Браузер показывает код, но не исполняет BSL. Проверки результата нужно выполнить вручную на платформе 8.5.1.1343 в учебной базе.
Процедура ВыполнитьПример() Экспорт
Найдена = Ложь;
НайденнаяПолка = 0;
НайденноеМесто = 0;
Проверено = 0;
Для Полка = 1 По 2 Цикл
Для Место = 1 По 3 Цикл
Проверено = Проверено + 1;
Если Полка = 2 И Место = 1 Тогда
Найдена = Истина;
НайденнаяПолка = Полка;
НайденноеМесто = Место;
Перейти ~ПоискЗавершён;
КонецЕсли;
КонецЦикла;
КонецЦикла;
~ПоискЗавершён:
Сообщить(Найдена);
Сообщить(НайденнаяПолка = 2 И НайденноеМесто = 1);
Сообщить(Проверено = 4);
КонецПроцедурыРазбор по шагам
Первый цикл перебирает две собственные полки, второй — три места на каждой. Это числа в памяти, не чтение склада.
Для полки 1 проверяются места 1/2/3. Четвёртая проверка — полка 2, место 1 — находит искомую пару.
Перед переходом сохранить найденные значения в отдельные переменные. Не полагаться на значения счётчиков после выхода.
Перейти ~ПоискЗавершён сразу передаёт управление метке за обоими циклами, поэтому места 2/2 и 2/3 не проверяются.
Для сравнения замените условие полки на 3: оба конечных цикла завершатся обычно, выполнение всё равно дойдёт до метки, но найденной пары не будет.
Как проверить результат
Исходный вариант: три сообщения Истина, проверены ровно четыре пары.
При условии Полка=3: Найдена=Ложь, сохранённые номера остаются 0, Проверено=6. Ожидаемые проверки исходного успеха станут Ложь.
Ожидаемый результат
Показан действительный переход к своей метке и разница между выходом из одного и двух уровней цикла.
На что обратить внимание
Прервать закончил бы только ближайший цикл, а Возврат закончил бы всю процедуру и пропустил итоговые проверки.
Метка объявляется как ~Имя: и доступна лишь в своей процедуре, функции или секции модуля. Перейти не вызывает другой модуль.
Обратный безусловный переход способен создать бесконечное выполнение. Для обычного поиска удобнее отдельная функция с Возврат; здесь изучается конкретный оператор.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.