Перейти к основному содержимому

Логика

SURVEYSTUDIO позволяет программировать анкеты с логикой работы практически любой сложности, и для этого доступны такие средства, как:

  • условие показа вопроса,
  • действия перед показом вопроса или после ответа на него,
  • скрипты на языке программирования JavaScript.

Условие показа вопроса

Вопросы анкеты могут задаваться только при выполнении каких-то условий, например, если в предыдущих вопросах выбраны определённые ответы или указаны определённые числа.

В редакторе вопроса есть поле для указания условия, при котором он должен быть выведен на экран:

Если условие показа не указано — вопрос задаётся. Если указано невыполнимое условие — вопрос пропускается.

Примеры

Нужно задать вопрос, если:

  • в Q1 выбран ответ с кодом 3 или в Q2 выбран ответ с кодом 4. Так и пишем в поле: Q1 = 3 or Q2 = 4
  • в табличном Q35, в строке с кодом 7 выбран ответ с кодом 99: Q35(row = 7 and code = 99)
  • в Q12 указано число от 10 до 20: Q12(valueNum >= 10 and valueNum <= 20)

Как видно, синтаксис выражений достаточно прост. Узнать о нём подробнее и найти больше примеров можно здесь.

Действия

Действия — это операции, которые требуется сделать, например перейти на вопрос или завершить интервью.

Для каждого вопроса можно задать два списка действий: перед его показом на экране и после ответа (после нажатия кнопки Далее). И прежде чем что-то делать, важно ответить себе на вопрос: это должно делаться до показа вопроса или после ответа на него? Затем нужно открыть соответствующий список через выпадающее меню в левом нижнем углу редактора вопроса:

info

Кнопка Действия появляется после сохранения нового вопроса.

Примеры

Давайте добавим переход к Q10, если в текущем вопросе выбран ответ с кодом 97. Нажмите Действия -> После ответа -> Добавить и заполните поля следующим образом:

Как вы заметили, у действия могут быть параметры. Номер вопроса для перехода указывается в коротком поле первого параметра. Нажмите Сохранить.

note

Как и в вопросе, условия в действии может не быть, и тогда оно будет выполняться всегда.

Давайте сюда же добавим действие завершения интервью во всех остальных случаях. Для этого нажмите Добавить и в списке действий выберите Завершить интервью:

В длинном поле первого параметра можно указать текст, который будет выведен на экран при завершении интервью. Если ничего не указать — будет показано стандартное сообщение: «Спасибо за Ваши ответы.» Нажмите Сохранить.

note

О том, как завершать интервью и проставлять ему определённый результат (или статус), почитать можно здесь.

В итоге должен получиться список из двух действий:

После выбора ответа в Q1 и нажатия кнопки Далее система проверит, был ли выбран ответ с кодом 97. Если да, то произойдёт переход к Q10, если нет — интервью будет завершено.

info

Система выполняет действия последовательно, поэтому их порядок в списке имеет важное значение.

Ещё пример. Надо в Q2 показать ответы, выбранные в Q1. Для этого в Q2 должен быть список ответов с такими же кодами, как в Q1.

В Q2 нажимаем Действия -> Перед показом и добавляем 3 действия:

Должен получиться такой список:

Прежде чем что-то показывать, нужно скрыть всё, и это делает первое действие. Второе действие выводит на экран то, что выбрано в Q1. Ну а третье проверяет, есть ли смысл выводить вопрос на экран. В Q1 могут быть выбраны ответы, которых нет в Q2, и тогда нечего будет показывать — интервью прервётся с сообщением об ошибке.

note

Всё о показе ответов или строк таблиц найти можно здесь.

tip

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

Скрипты

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

Тема скриптов достаточно обширна. Для их написания необходимо изучить как минимум разделы 2-5 («Основы JavaScript» — «Типы данных») учебника JavaScript и ознакомиться с доступным набором объектов, функций и переменных, используемых для работы с SURVEYSTUDIO. Здесь лишь давайте разберёмся, какие типы скриптов есть в системе, ведь в базе знаний можно найти различные примеры, и важно уметь правильно их использовать.

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

Здесь доступны:

  • Подготовка — выполняется один раз в самом начале, при запуске анкеты, а также при каждой выгрузке массива. Используется для создания вопросов, изменения их порядка (рандомизация/ротация), установки флагов и т.д. То есть в этом скрипте можно только формировать макет анкеты. Нельзя выполнять операции, влияющие на логику, например, скрывать/показывать или случайным образом добавлять варианты ответа, объявлять глобальные переменные, от которых будут зависеть переходы между вопросами — для всего этого нужно использовать другие скрипты.

  • Обработка — выполняется после завершения анкеты, непосредственно перед записью интервью в базу данных. Здесь можно провести анализ всех ответов в интервью и выполнить какие-то расчёты, исправления и прочие действия.

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

  • После ответа — выполняется после ответа на каждый вопрос.

  • Во время показа — этот скрипт особенный, он выполняется в браузере, а не на сервере, во время показа каждого вопроса. Используется для модификаций страницы: добавления, изменения или удаления элементов и прочее. Из него нет доступа к вопросам и API системы, поддерживается JQuery.

Редактор скрипта вопроса открывается через меню в левом нижнем углу редактора вопроса:

info

Кнопка Скрипты появляется после сохранения нового вопроса.

У вопроса есть 3 скрипта, аналогичных глобальным:

  • Перед показом — выполняется перед каждым показом вопроса.

  • После ответа — выполняется после каждого ответа на вопрос.

  • Во время показа — выполняется в браузере, во время каждого показа вопроса.

Пример

Во многих анкетах требуется автоматически отнести возраст респондента к определённому интервалу. Давайте посмотрим, как это делается.

В анкете должно быть два вопроса:

  1. Числовой вопрос для ввода возраста.
  2. Вопрос с единственным выбором, где в качестве ответов — необходимые интервалы.

Пусть это будут Q1 и Q2. В Q2 нужно добавить скрипт перед показом:

let age = Q1.openValueInt;

Q[1].checked = age <= 17;
Q[2].checked = age >= 18 && age <= 24;
Q[3].checked = age >= 25 && age <= 34;
Q[4].checked = age >= 35 && age <= 44;
Q[5].checked = age >= 45 && age <= 54;
Q[6].checked = age >= 55;

return answered;

В первой строке в переменную age помещается введённое в Q1 число, просто для удобства.

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

В последней строке вопрос помечается как отвеченный (не выводится на экран).

caution

В любом скрипте, если выполнилась строка return …, то всё, что написано после неё в этом же скрипте, не выполнится.

Порядок выполнения

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

При запуске анкеты выполняется скрипт Подготовка.

Затем проверяется условие показа вопроса. Если оно не выполняется, то сразу осуществляется переход к следующему за ним вопросу. Далее выполняются:

  1. Глобальный скрипт перед показом.
  2. Скрипт перед показом вопроса.
  3. Действия перед показом вопроса.
  4. Глобальный скрипт во время показа вопроса.
  5. Скрипт во время показа вопроса.
  6. Глобальный скрипт после ответа на вопрос.
  7. Скрипт после ответа на вопрос.
  8. Действия после ответа на вопрос.

И так для каждого вопроса. После завершения интервью выполняется скрипт Обработка.

Проверка ответов

После завершения интервью, перед сохранением ответов в базу данных, производится автоматическая проверка ответов на соответствие прописанной в анкете логике: осуществляется переход к первому вопросу и проход до конца анкеты с выполнением всех необходимых условий, действий и скриптов, как если бы анкету запустили второй раз с уже проставленными ответами и нажимали кнопку Далее. При этом может выясниться, что какой-то вопрос не должен задаваться, а ответ в нём есть, или, наоборот, вопрос должен был задаваться, но ответа нет.

При обнаружении несоответствия на экран выводится сообщение и предложение что-то с этим сделать:

note

Если во второй строке написано: «Обработка была остановлена на вопросе QXX из-за отсутствия ответа или ошибки» — обычно это означает, что в указанном вопросе или рядом с ним не хватает ответа. Нужно внимательно проверить анкету и исправить ошибку логики.

Если вторая строка сообщения начинается словами: «Обработка завершилась корректно…» — чаще всего это означает, что интервьюер во время заполнения анкеты возвращался к предыдущим вопросам и менял в них ответы. Это привело к переходу к другим вопросам анкеты. В результате часть ответов оказалась лишней. Поэтому в данном случае это не ошибка, а уведомление о лишних ответах. Но это сообщение может появляться и из-за ошибок в логике анкеты — её лучше проверить.

Проверку ответов можно отключить в анкете, если она не нужна. Для этого необходимо нажать кнопку Свойства в правом верхнем углу редактора анкеты и поставить флаг Запретить проверку с очисткой лишних ответов перед сохранением интервью:

В онлайн-опросах это лучше делать всегда, чтобы не пугать респондентов.

caution

При отключении проверки ответов скрипт Обработка выполняться не будет.