Скип-логика и автозаполнение
Форма не обязана показывать все поля всем и всегда. Два инструмента делают её «живой»: скип-логика (условия отображения) показывает поле или раздел только тогда, когда это уместно, а автозаполнение (деривации) заполняет вычисляемые поля само — без ручного ввода. И то и другое настраивается в конструкторе CRF и живёт в версии дизайна вместе с формами.
Условия отображения (скип-логика)
Заголовок раздела «Условия отображения (скип-логика)»У поля или раздела в инспекторе конструктора задаётся Условие отображения — выражение от других полей той же формы. Правило простое: истина — элемент виден, ложь — скрыт, пустое условие — виден всегда.
Классический пример: поле «Если да — уточните» видно только при ответе «Да» в соседнем поле. Координатор видит короткую форму, пока условия не раскроют дополнительные поля.
PREGNANT == 'Y'Условие можно собрать визуально — строками «поле — оператор — значение»: для полей-дат операторы читаются словами (раньше · не позже · позже · не раньше), а сравнивать поле можно не только с константой, но и с другим полем формы. Сложное условие задаётся формулой в расширенном режиме.
- Скрытое поле не считается незаполненным: оно не мешает завершить форму, и проверка «поле обязательно» по нему не срабатывает. Скрытый раздел скрывает все свои поля.
- Условия пересчитываются мгновенно — прямо во время ввода, без сохранения.
Если поле скрылось, а значение уже было
Заголовок раздела «Если поле скрылось, а значение уже было»Скип-логика никогда не удаляет данные молча. Если значение было введено, а потом ответ в управляющем поле изменился и поле скрылось, значение остаётся в базе, а координатор видит предупреждение: «Скрыто условием, но содержит значение».
Дальше решает человек, а не система: кнопка «Очистить (с причиной)» очищает значение — с обязательной причиной, записью в аудиторский след и обычными последствиями правки данных. Либо координатор возвращает управляющий ответ — и поле снова видно вместе со значением.
Автозаполнение (деривации)
Заголовок раздела «Автозаполнение (деривации)»Деривация — это правило «поле вычисляется из других полей»: например, ИМТ из роста и веса. Такие правила заводятся в блоке Автозаполнение вкладки Логика конструктора: выбираете целевое поле и пишете выражение. Готовое автозаполнение правится на месте — клик по нему открывает редактор.
round(num(WEIGHT) / (num(HEIGHT) * num(HEIGHT)), 1)Как это работает при вводе:
- целевое поле помечено бейджем «автозаполняется» и закрыто для ручного ввода — значение подставляет система;
- расчёт происходит мгновенно при вводе исходных полей — координатору не нужно ничего нажимать;
- пока исходные поля пусты, вычисляемое поле остаётся пустым.
Язык выражений: краткая справка
Заголовок раздела «Язык выражений: краткая справка»Условия отображения, автозаполнение и правила проверки пишутся
на одном компактном языке выражений. Поля адресуются по их OID; доступны сравнения
(==, !=, <, <=, >, >=), арифметика (+, -, *, /) и связки
and / or / not.
| Функция | Что делает |
|---|---|
is_empty(x) |
истина, если поле пустое |
num(x) |
числовое значение поля |
days_between(a, b) |
число дней между двумя датами |
round(x, n) |
округление до n знаков |
ref('ФОРМА', 'ПОЛЕ') |
значение поля другой формы |
ref('ВИЗИТ', 'ФОРМА', 'ПОЛЕ') |
то же с уточнением визита — для межформенных проверок |
Смысл «истины» зависит от того, где выражение используется:
| Где используется | Истина означает |
|---|---|
| Правило проверки | нарушение — проверка сработала (блокировка или запрос) |
| Условие отображения | элемент виден |
| Автозаполнение | не условие, а формула — её результат записывается в целевое поле |
Редактор в конструкторе проверяет выражение на лету: под полем сразу видно «Выражение корректно» или конкретную ошибку, а также список полей, от которых выражение зависит. Битые выражения не пройдут и отправку версии на ревью.