Цикл Цикл

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

  1. Заданное количество раз — аналог "FOR ... TO ...".
  2. Количество итераций задается условием выхода из цикла — аналог "DO ... WHILE ...". На предмет соответствия этому условию анализируется значение выходной переменной узла, заключенного в цикл.
  3. Количество итераций задается количеством групп, на которые разделяются строки входного набора данных — аналог "FOR EACH". В предельном случае количество итераций равно количеству строк входного набора.

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

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

Добавить узел Цикл в сценарий можно двумя способами:

  • Из стандартных компонентов: методом Drag-and-Drop, перенеся производный компонент в область построения Сценария, или через конетекстное меню, нажав правой кнопкой мыши по компоненту.
  • Из производных компонентов: также методом Drag-and-Drop (дополнительно зажать кнопку Shift на клавиатуре) или через контекстное меню.

При добавлении узла Цикл от производного компонента его метка формируется следующим образом: Метка производного компонента (цикл).

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

Порты

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

Мастер настройки

Шаг 1. Выбор узла цикла

На данном этапе предоставляется список в виде дерева Доступных узлов для заключения в цикл:

  • Узлы текущего модуля — содержит перечень узлов модуля, в котором на данный момент ведётся работа;
  • Компоненты — содержит текущий пакет и перечень внешних пакетов, на которые настроены ссылки и их производные компоненты с областью видимости Открытый.

Интерфейс мастера предоставляет возможность осуществлять поиск узлов в общем списке с помощью фильтров: по имени и комментарию узла.

Не допускается выполнение в цикле узлов, созданных на базе следующих компонентов: Выполнение узла, Узел-ссылка, Условие и Цикл.

Сохранять конфигурацию выбранного узла — параметр отвечает за сохранение собственной конфигурации внутреннего компонента, в случае если она отличается от исходной. По умолчанию не установлен.

Шаг 2. Настройка вида цикла

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

Вид цикла — определение логики работы цикла, задается радиокнопкой:

  • Заданные итерации — данный вид цикла будет выполняться столько раз, сколько будет задано в параметре "Количество итераций".
  • Цикл с постусловием — количество итераций такого цикла регулируется условием, на соответствие которому при каждой итерации проверяется переменная. На итерации, при которой значение переменной удовлетворяет условию, работа цикла заканчивается. Задаются следующие настройки:
    • Переменная — выбор переменной для условия выхода из цикла. Список выбора содержит переменные, передаваемые на выходные порты узла, заключенного в цикл.
    • Условие завершения — отношение сравнения переменной со Значением.
    • Значение — поле для ввода значения, с которым будет сравниваться переменная. Следует учитывать, что в узле, заключенном в цикл, должна присутствовать операция над этой переменной, которая приводит к выполнению условия выхода из цикла, иначе цикл получится бесконечным.
  • Групповая обработка — этот цикл разделяет исходные данные на группы по выбранному критерию, благодаря чему узел, заключенный в цикл, обрабатывает каждую группу данных отдельно. Критерий разделения определяется параметром "Вид групповой обработки":
    • Фиксированный размер групп — исходный набор данных будет последовательно разделен на группы, размер которых определяется параметром "количество строк в группе". Если количество строк в группе не кратно количеству строк в исходном наборе, размер последней группы окажется меньше.
    • Фиксированное количество групп — исходный набор данных будет разделен на заданное количество групп. Это количество задается параметром "Количество групп" . В случае, если количество групп не кратно количеству строк в исходном наборе, в некоторых группах количество строк будет отличаться, и они будут равномерно распределены среди остальных групп.
    • Разбиение по уникальным значениям полей — следует выбрать в списке поля исходного набора, задающие уникальный идентификатор группы строк. Количество групп будет равно количеству уникальных идентификаторов.

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

Важно: В некоторых случаях применение параллельной обработки недопустимо. Например, если на каждой итерации происходит обращение к источнику данных, не допускающему параллельные запросы.

Добавлять идентификаторы итераций — флаг добавляет в выходную таблицу поле "Идентификатор итерации", где для каждой строки указан номер итерации, на которой строка была создана.

Игнорировать ошибки — флаг отключает прерывание выполнения цикла при обнаружении ошибок.

Переменная цикла — переменная, которой в ходе работы цикла присваивается номер текущей итерации. Нумерация итераций осуществляется с 0. Переменная выбирается из списка переменных входных портов узла, заключенного в цикл.

Шаг 3. Сопоставление переменных

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

Для создания соответствия входных и выходных переменных следует перетащить обозначение входной переменной на обозначение выходной. Данное соответствие графически отобразится линией связи. Такие связи можно удалить кнопкой Удалить связь. Связывать переменные на этом этапе необязательно.