Перейти к содержимому
РуководствоДата-менеджер

Настроить скип-логику и автозаполнение

Форма не обязана показывать все поля всем и всегда. Скип-логика (условия отображения) показывает поле или раздел только тогда, когда это уместно, а автозаполнение (деривации) заполняет вычисляемые поля само — без ручного ввода. Оба инструмента настраиваются в конструкторе CRF и живут в версии дизайна вместе с формами.

Дата-менеджер — дизайнер исследования (Study Builder) или дата-менеджер с правом «править версию дизайна» (studyversion.update). Логика вступит в силу после того, как версию утвердит и опубликует другой человек.

Задача возникает при сборке формы: когда часть вопросов нужна только при определённом ответе («Если да — уточните») или значение вычисляется из других (ИМТ из роста и веса).

  • Версия дизайна — Черновик.
  • Управляющие поля уже есть в той же форме: условие отображения читает только поля своей формы. Исходные поля автозаполнения могут быть и в другой форме — тогда формула берёт их ссылкой ref(…) того же визита.
  • Целевое поле автозаполнения не отмечено Обязательным и не лежит в журнале (повторяющемся разделе).
0:000:00
Логика формы в конструкторе: проверки и автозаполнение на одном языке выражений.
  1. В конструкторе выберите поле или раздел, который нужно показывать не всегда.

  2. В инспекторе Свойства найдите Условие отображения (по умолчанию — «Видно всегда — условия нет») и нажмите + Добавить условие.

  3. Соберите условие строками «поле — условие — с чем сравнивать»; для полей-дат условия читаются словами (раньше · не позже · позже · не раньше), сравнивать можно и с другим полем формы. Сложное условие задайте формулой в Расширенном режиме (формула), например:

    PREGNANT == 'Y'
  4. Убедитесь, что под условием написано «Выражение корректно». Истина — элемент виден, ложь — скрыт. Рядом с полем в структуре формы появится признак условие.

  1. В конструкторе откройте форму и перейдите на вкладку Логика.

  2. В блоке Автозаполнение нажмите Добавить автозаполнение.

  3. Выберите Целевое поле — оно станет вычисляемым: значение подставляется автоматически, ручной ввод закрывается.

  4. Впишите Выражение; поле можно вставить из списка Вставить поле (поле другой формы вставляется ссылкой ref(…) того же визита). Например, ИМТ:

    round(num(WEIGHT) / (num(HEIGHT) * num(HEIGHT)), 1)
  5. Убедитесь, что под выражением написано «Выражение корректно», и нажмите Создать.

Готовое автозаполнение правится на месте — клик по нему открывает редактор. Проверьте условия и формулы в превью: там они работают как при реальном вводе, но данные не сохраняются.

  • Правка сохраняется в черновике и пишется в аудиторский след («Изменено поле», «Создано автозаполнение» в хронике изменений дизайна).
  • После публикации версии при вводе:
    • условия пересчитываются мгновенно, без сохранения; скрытое поле не считается незаполненным — оно не мешает завершить форму, и проверка «поле обязательно» по нему не срабатывает; скрытый раздел скрывает все свои поля;
    • вычисляемое поле помечено автозаполняется, закрыто для ручного ввода и пересчитывается сразу при вводе исходных полей; пока исходные пусты, оно пустое.
  • Если поле скрылось, а значение в нём уже было, значение остаётся, а координатор видит предупреждение «Скрыто условием, но содержит значение» и кнопку Очистить (с причиной).
  • Пересчёт вычисляемого поля — это изменение данных: верификация SDV по нему сбрасывается, а покрывающие подписи получают статус Инвалидирована и требуют переподписания.
  • «Условие видимости использует только поля этой формы — ref() здесь недоступен» — условие отображения не читает другие формы; перенесите управляющий вопрос в эту форму.
  • «Условие не может ссылаться на само поле» — управляющим должно быть другое поле.
  • «Условие не может зависеть от заслеплённого поля» — слепое поле не может управлять видимостью: это раскрыло бы его значение.
  • «У поля „…“ уже есть формула» — у целевого поля может быть только одно автозаполнение; измените существующее.
  • «Формулы ссылаются друг на друга по кругу» — разорвите цикл между вычисляемыми полями.
  • «Заполнять формулой поле журнала нельзя» / «Поле „…“ лежит в журнале» — формулы не работают с полями повторяющихся разделов.
  • «Поле „…“ помечено обязательным» — снимите Обязательное у целевого поля: его никто не заполняет руками.
  • «Формула читает слепое поле, поэтому „…“ тоже должно быть слепым» — отметьте целевое поле Слепое (значение маскируется).
  • При вводе ответ 422 и значение не принимается — запись в поле, скрытое условием, или в вычисляемое поле отклоняется сервером. Это ожидаемо: поменяйте управляющий ответ или исходные поля.

Почему скрытое значение не удаляется само

Заголовок раздела «Почему скрытое значение не удаляется само»

Скип-логика никогда не удаляет данные молча. Если значение было введено, а потом ответ в управляющем поле изменился и поле скрылось, значение остаётся в базе. Дальше решает человек: Очистить (с причиной) — с обязательной причиной, записью в аудиторский след и обычными последствиями правки данных; либо координатор возвращает управляющий ответ — и поле снова видно вместе со значением.

Если исходное значение исправили, система пересчитает вычисляемое поле. Пересчитанное значение — изменение данных, как любое другое: SDV-верификация по нему сбрасывается, а подписи, покрывающие это значение, инвалидируются и потребуют повторного подписания. Правка самого исходного значения, как обычно, требует причины изменения.

Условия отображения, автозаполнение и правила проверки пишутся на одном компактном языке выражений. Поля адресуются по имени данных (OID); доступны сравнения (==, !=, <, <=, >, >=), арифметика (+, -, *, /) и связки and / or / not.

Функция Что делает
is_empty(x) истина, если поле пустое
num(x) числовое значение поля
days_between(a, b) число дней между двумя датами
round(x, n) округление до n знаков
ref('ФОРМА', 'ПОЛЕ') значение поля другой формы
ref('ВИЗИТ', 'ФОРМА', 'ПОЛЕ') то же с уточнением визита — для межформенных проверок

ref() доступен в правилах проверки и автозаполнении; условие отображения читает только поля своей формы.

Смысл «истины» зависит от того, где выражение используется:

Где используется Истина означает
Правило проверки нарушение — проверка сработала (блокировка или запрос)
Условие отображения элемент виден
Автозаполнение не условие, а формула — её результат записывается в целевое поле

Редактор в конструкторе проверяет выражение на лету: под полем сразу видно «Выражение корректно» или конкретную ошибку, а также список полей, от которых выражение зависит. Выражения с ошибками не пройдут и отправку версии на ревью.