Цикл
Компонент может применяться для циклического исполнения выбранного пользователем узла. В качестве такого узла, как правило, используется Подмодель, в которой задаются действия выполняемые над данными в каждой итерации. Возможны следующие способы задать итерации цикла:
- Заданное количество раз — аналог "FOR ... TO ...".
- Количество итераций задается условием выхода из цикла — аналог "DO ... WHILE ...". На предмет соответствия этому условию анализируется значение выходной переменной узла, заключенного в цикл.
- Количество итераций задается количеством групп, на которые разделяются строки входного набора данных — аналог "FOR EACH". В предельном случае количество итераций равно количеству строк входного набора.
В первом и втором случае применение входного набора данных не обязательно. Но, если таковой применяется, то в каждой итерации на вход узла, заключенного в цикл, подаются все строки этого набора (наборов).
В третьем случае строки входного набора разделяются по заданному признаку на группы строк, и в каждой итерации на вход узла, заключенного в цикл, подаются строки очередной группы. Если в качестве признака группы указываются уникальные идентификаторы строк входного набора, то такая группа будет содержать только одну строку. В этом случае цикл будет перебирать строки входного набора и передавать очередную строку на вход узла, заключенного в цикл.
Добавить узел Цикл в сценарий можно двумя способами:
- Из стандартных компонентов: методом Drag-and-Drop, перенеся производный компонент в область построения Сценария, или через конетекстное меню, нажав правой кнопкой мыши по компоненту.
- Из производных компонентов: также методом Drag-and-Drop (дополнительно зажать кнопку Shift на клавиатуре) или через контекстное меню.
При добавлении узла Цикл от производного компонента его метка формируется следующим образом: Метка производного компонента (цикл)
.
При настройке узла Цикл всегда создается производный компонент по базовому узлу. То есть Цикл может ссылаться только на компонент. Создаваемые таким образом производные компоненты по умолчанию имеют область видимости Закрытый, а настройка Производные узлы отключена.
Порты
При первоначальном создании узел не имеет портов. После задания параметров в мастере настройки узел цикла имеет набор портов узла, заключенного в цикл, кроме выходных портов для переменных.
Мастер настройки
Шаг 1. Выбор узла цикла
На данном этапе предоставляется список в виде дерева Доступных узлов для заключения в цикл:
- Узлы текущего модуля — содержит перечень узлов модуля, в котором на данный момент ведётся работа;
- Компоненты — содержит текущий пакет и перечень внешних пакетов, на которые настроены ссылки и их производные компоненты с областью видимости Открытый.
Интерфейс мастера предоставляет возможность осуществлять поиск узлов в общем списке с помощью фильтров: по имени и комментарию узла.
Не допускается выполнение в цикле узлов, созданных на базе следующих компонентов: Выполнение узла, Узел-ссылка, Условие и Цикл.
Сохранять конфигурацию выбранного узла — параметр отвечает за сохранение собственной конфигурации внутреннего компонента, в случае если она отличается от исходной. По умолчанию не установлен.
Шаг 2. Настройка вида цикла
Исходный узел — информационное поле, отображающее узел, который заключается в цикл.
Вид цикла — определение логики работы цикла, задается радиокнопкой:
- Заданные итерации — данный вид цикла будет выполняться столько раз, сколько будет задано в параметре "Количество итераций".
- Цикл с постусловием — количество итераций такого цикла регулируется условием, на соответствие которому при каждой итерации проверяется переменная. На итерации, при которой значение переменной удовлетворяет условию, работа цикла заканчивается. Задаются следующие настройки:
- Переменная — выбор переменной для условия выхода из цикла. Список выбора содержит переменные, передаваемые на выходные порты узла, заключенного в цикл.
- Условие завершения — отношение сравнения переменной со Значением.
- Значение — поле для ввода значения, с которым будет сравниваться переменная. Следует учитывать, что в узле, заключенном в цикл, должна присутствовать операция над этой переменной, которая приводит к выполнению условия выхода из цикла, иначе цикл получится бесконечным.
- Групповая обработка — этот цикл разделяет исходные данные на группы по выбранному критерию, благодаря чему узел, заключенный в цикл, обрабатывает каждую группу данных отдельно. Критерий разделения определяется параметром "Вид групповой обработки":
- Фиксированный размер групп — исходный набор данных будет последовательно разделен на группы, размер которых определяется параметром "количество строк в группе". Если количество строк в группе не кратно количеству строк в исходном наборе, размер последней группы окажется меньше.
- Фиксированное количество групп — исходный набор данных будет разделен на заданное количество групп. Это количество задается параметром "Количество групп" . В случае, если количество групп не кратно количеству строк в исходном наборе, в некоторых группах количество строк будет отличаться, и они будут равномерно распределены среди остальных групп.
- Разбиение по уникальным значениям полей — следует выбрать в списке поля исходного набора, задающие уникальный идентификатор группы строк. Количество групп будет равно количеству уникальных идентификаторов.
Параллельная обработка — применяется для ускорения вычислений при работе цикла, количество потоков определяется параметром "максимальное количество потоков". Параллельная обработка не поддерживается циклом с постусловием.
Важно: В некоторых случаях применение параллельной обработки недопустимо. Например, если на каждой итерации происходит обращение к источнику данных, не допускающему параллельные запросы.
Добавлять идентификаторы итераций — флаг добавляет в выходную таблицу поле "Идентификатор итерации", где для каждой строки указан номер итерации, на которой строка была создана.
Игнорировать ошибки — флаг отключает прерывание выполнения цикла при обнаружении ошибок.
Переменная цикла — переменная, которой в ходе работы цикла присваивается номер текущей итерации. Нумерация итераций осуществляется с 0. Переменная выбирается из списка переменных входных портов узла, заключенного в цикл.
Шаг 3. Сопоставление переменных
Данный этап становится доступен только при заключении в цикл Подмоделей, имеющих входные и выходные порты для переменных. На этом этапе настраивается передача значений выходных переменных соответствующим входным переменным на следующей итерации цикла.
Для создания соответствия входных и выходных переменных следует перетащить обозначение входной переменной на обозначение выходной. Данное соответствие графически отобразится линией связи. Такие связи можно удалить кнопкой . Связывать переменные на этом этапе необязательно.