Ищем собственную пару полка/место в ограниченном наборе. Метка находится внутри той же процедуры, а не в другом модуле.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.
Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().
Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА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. Ожидаемые проверки исходного успеха станут Ложь.
Ожидаемый результат
Показан действительный переход к своей метке и разница между выходом из одного и двух уровней цикла.
На что обратить внимание
Прервать закончил бы только ближайший цикл, а Возврат закончил бы всю процедуру и пропустил итоговые проверки.
Метка объявляется как ~Имя: и доступна лишь в своей процедуре, функции или секции модуля. Перейти не вызывает другой модуль.
Обратный безусловный переход способен создать бесконечное выполнение. Для обычного поиска удобнее отдельная функция с Возврат; здесь изучается конкретный оператор.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.