Главная » 1С Предприятие » ПЕРЕХОД ПО МЕТКЕ

0

Выполняется  оператором Перейти метка;

где метка это имя, начинающееся с тильды (знака ~), например ~М1.

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

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

// Процедура, выводящая группы непериодических констант

// Завершается либо при обнаружении непериодической  константы типа Календарь,

// либо после вывода всех групп. Запускается из обработки Проба  процедура Выполнить()

перем всегоКонстант, ин, номерГруппы, иден; ОчиститьОкноСообщений();

номерГруппы = 0;

всегоКонстант  = Метаданные.Константа();

ин = 1;                          //               Номер константы                  v

пока ин <= всегоКонстант цикл

если Метаданные.Константа(ин).Периодический = 0 тогда номерГруппы = номерГруппы + 1;

Сообщить("Выводится группа с номером " + номерГруппы);

// Вложенный цикл Пока

пока Метаданные.Константа(ин).Периодический = 0 цикл если Метаданные.Константа(ин).Тип = "Календарь" тогда

перейти ~М1;       //   Выход из всех циклов конецЕсли;

иден = Метаданные.Константа(ин).Идентификатор; Сообщить(иден + " " + Константа.ПолучитьАтрибут(иден));

ин = ин + 1;          //      Не забываем перейти к следующей константе если ин > всегоКонстант тогда

прервать;          //      Досрочный выход из вложенного цикла конецЕсли;

конецЦикла; // пока Метаданные.Константа(ин).Периодический = 0 иначе                       //              Имеем периодическую константу

ин = ин + 1;             //        Не забываем перейти к следующей константе конецЕсли;

конецЦикла; // пока ин <= всегоКонстант

// Располагаем после метки ~М1 двоеточие

~М1:                  //          Сюда передается управление оператором Перейти ~М1;  если номерГруппы = 0 тогда

Сообщить("В  конфигураторе нет непериодических констант."); конецЕсли;

конецПроцедуры // Выполнить

Замечание.  В данной задаче  метку  ~М1   нельзя  расположить  перед  оператором конецЦикла:

~М1: конец цикла; // пока ин <= всегоКонстант

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

Разумеется, задачу  можно  решить и  без  использования оператора,  введя флаг  обнаружения  константы  типа Календарь и  применив,  например,  объединение  условий. При  желании  соответствующий код вы  можете  составить самостоятельно.

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии