Общая информация
При реализации услуг в Визуальном конструкторе услуг иногда возникает необходимость в обработке однообразного набора полей в виде повторяющейся последовательности экранов для каждого элемента массива. Реализовать такую обработку в рамках ВКУ позволяет механизм циклических экранов, то есть описанный определённым образом набор экранов
Классическим примером применения циклического экрана является сбор данных, где в начале вводится список сотрудников (например, ФИО), а далее для каждого сотрудника необходимо внести одни и те же сведения (например, паспортные данные с прикреплением фотографии или ввод данных о компаниях и их учредителях)

В рамках ВКУ элементом, инициирующим цикл, может являться один из двух компонентов:
- RepeatableFields — компонент, предназначенный для ввода набора повторяющихся атрибутов
- ChildrenList — компонент, предназначенный для выбора одного или нескольких детей, указанных в ЛК пользователя, или ручного заполнения данных о детях
Данные компоненты обеспечивают создание единообразного массива данных, для каждого элемента которого впоследствии может быть организован цикл из повторяющегося набора экранов
Циклические экраны группируются и располагаются на сером фоне с отображением линий правил перехода на графе

На боковой панели циклические экраны также объединены в группу

Так выглядит пример цикла в ВКУ. Экраны:
- s_init — инициирующий цикл экран
- s1 — первый экран цикла
- s4 — финальный экран цикла
Как собрать цикл
Для подключения циклических экранов к услуге необходимо выполнить следующие действия:
- Создать инициирующий экран: Экран для повторяющегося набора компонентов с компонентом RepeatableFields или Экран со сложным компонентом с компонентом ChildrenList
- Активировать в созданном компоненте чек-бокс «Компонент инициирует цикл»
- Добавить вложенный компонент StringInput внутри инициирующего компонента, который необходимо скрыть. Данное поле будет использоваться для хранения индекса итерации id
- Создать отдельные экраны с необходимыми компонентами, которые будут находиться в цикле
- Настроить правила перехода для созданных циклических экранов. Для исходящего правила с инициирующего экрана цикла на первый экран цикла активировать чек-бокс «Сделать правилом цикла», для исходящего правила с финального экрана цикла активировать чек-бокс «Финальный экран цикла»
Шаблон цикла с использованием RepeatableFields
Шаблон цикла с использованием ChildrenList
Реализация цикла с помощью компонента RepeatableFields
- Создать экран для повторяющегося набора компонентов и добавить компонент RepeatableFields
- В настройках компонента RepeatableFields активировать чек-бокс «Компонент инициирует цикл»
- Создать вложенный компонент StringInput для хранения индекса итерации
- Активировать чек-бокс «Скрыть поле» в настройках компонента StringInput
- В блоке «Название поля, в которое запишется введённое значение на циклических экранах» добавить новое поле со значением "id"
- Добавить необходимые вложенные компоненты в компонент RepeatableFields
- Создать экраны с необходимыми компонентами для сбора информации, которые будут участвовать в цикле. Такими экранами могут быть:
- Создать правило перехода с инициирующего экрана на первый экран цикла, активировав в настройках правила перехода чек-бокс «Сделать правилом цикла»
- Настроить правила перехода между циклическими экранами. Принципы настройки условий циклических правил не отличаются от обычных
Примеры настройки правил перехода между экранамиЦиклические правила перехода могут использовать только циклические экраны или экраны без правил перехода. Такие правила отображаются на панели в отдельных разделах: «Исходящие цикла» и «Входящие цикла»




Важно! Для того, чтобы закончить цикл и инициировать выход из него, необходимо в настройках правила перехода с финального экрана цикла активировать чек-бокс «Финальный экран цикла». Экран, который должен следовать после цикла, не может быть финальным в услуге
Финальных экранов в цикле может быть более одного в зависимости от количества сценариев, в таком случае для каждого такого экрана необходимо создать исходящее правило перехода с активированным чек-боксом «Финальный экран цикла». Экранов без исходящих правил перехода в цикле не должно быть
Шаблон цикла с использованием RepeatableFields
Реализация цикла с помощью компонента ChildrenList
- Создать экран со сложным компонентом и добавить компонент ChildrenList
- В настройках компонента ChildrenList активировать чек-бокс «Компонент инициирует цикл»
- Добавить следующие вложенные компоненты
- В расширенной настройке всех вложенных компонентов в блоке «Название поля, в которое запишется введённое значение на циклических экранах» обязательно указать значения, приведённые в таблице ниже
Название компонента
Тип компонента
Скрытие
Название, в которое запишется введённое значение на циклических экранах
Id
StringInput
+
id
firstName
StringInput
-
firstName
lastName
StringInput
-
lastName
secondName
StringInput
-
secondName
birthDate
DateInput
-
birthDate
gender
RadioInput
-
gender
NewChild
RadioInput
+
isNew
svid
StringInput
+
type
- В настройках компонента gender (RadioInput) задать следующий массив с элементами:
- В настройках компонента NewChild (RadioInput) задать следующий массив с элементами:
- Создать экраны с необходимыми компонентами для сбора информации, которые будут участвовать в цикле. Такими экранами могут быть:
- Создать правило перехода с инициирующего экрана на первый экран цикла, активировав в настройках правила перехода чек-бокс «Сделать правилом цикла»
- Настроить правила перехода между циклическими экранами. Принципы настройки условий циклических правил не отличаются от обычных
Примеры настройки правил перехода между экранамиЦиклические правила перехода могут использовать только циклические экраны или экраны без правил перехода. Такие правила отображаются на панели в отдельных разделах: «Исходящие цикла» и «Входящие цикла»





Важно! Для того, чтобы закончить цикл и инициировать выход из него, необходимо в настройках правила перехода с финального экрана цикла активировать чек-бокс «Финальный экран цикла». Экран, который должен следовать после цикла, не может быть финальным в услуге
Финальных экранов в цикле может быть более одного в зависимости от количества сценариев, в таком случае для каждого такого экрана необходимо создать исходящее правило перехода с активированным чек-боксом «Финальный экран цикла». Экранов без исходящих правил перехода в цикле не должно быть
Шаблон цикла с использованием ChildrenList
Использование компонентов загрузки в цикле
При использовании компонентов загрузки фото или файлозагрузчиков (PhotoUploadComponent или FileUploadComponent) требуется уникальная загрузка фото или файлов на каждой итерации. В расширенных настройках компонента необходимо активировать чек-бокс «Компонент используется на циклических экранах»
В случае, если чек-бокс не активирован, то на второй итерации цикла пользователь обнаружит, что файл уже загружен, будет отображаться файл с предыдущей итерации