Цикл Цикл

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

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

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

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

Порты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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