Модуль «Обучение» (Learning) хранит результаты каждой попытки прохождения теста и позволяет выдавать пользователям сертификаты по итогам курса. Разберём, где смотреть баллы, как задать проходной порог и как выгрузить статистику.
Где хранятся результаты тестов
Каждое прохождение теста пользователем фиксируется как отдельная попытка (attempt). Модуль сохраняет дату, набранный балл, статус и все ответы. Открыть список можно в административном разделе.
- Перейдите в
Сервисы → Обучение → Результаты тестов. - В фильтре выберите нужный курс, тест или конкретного пользователя.
- Откройте попытку, чтобы увидеть детальную расшифровку: какие вопросы заданы, что ответил слушатель и сколько баллов начислено.
Для каждой попытки в списке отображаются ключевые поля:
- Статус — попытка завершена, в процессе или прервана;
- Оценка — процент правильных ответов;
- Пройден / не пройден — результат сравнения с проходным баллом;
- Дата и время начала и завершения.
Проходной балл и число попыток
Критерий успешного прохождения задаётся в настройках самого теста, а не курса. Откройте Сервисы → Обучение → Учебные курсы, зайдите в структуру курса и отредактируйте тест.
Ключевые параметры теста:
| Параметр | Назначение |
|---|---|
| Проходной балл, % | Минимальный процент правильных ответов для отметки «пройден» |
| Число попыток | Сколько раз пользователь может пересдать тест |
| Ограничение по времени | Лимит на прохождение в минутах |
| Случайный порядок вопросов | Перемешивание вопросов и вариантов ответов |
Важно: статус «пройден» выставляется автоматически при сравнении оценки попытки с проходным баллом. Если снизить порог задним числом, уже сохранённые попытки не пересчитываются — статус фиксируется в момент завершения.
Выдача сертификатов по итогам курса
Штатный модуль learning хранит факт успешного прохождения курса, но готового «красивого» PDF-бланка из коробки не формирует. Сертификат обычно реализуют одним из способов:
- Печатная форма на публичной части — компонент выводит шаблон с ФИО, названием курса и датой, слушатель распечатывает или сохраняет в PDF;
- Инфоблок «Сертификаты» — при успешном завершении события
OnAfterTestResultUpdateсоздаётся элемент с номером и датой; - Внешняя генерация через библиотеку вроде TCPDF/mPDF по данным попытки.
Минимальный сценарий выдачи через обработчик события:
- Подпишитесь на событие завершения теста в
init.php. - Проверьте, что попытка имеет статус «пройден» и это финальный тест курса.
- Сформируйте уникальный номер сертификата и сохраните его (инфоблок, HL-блок или отдельная таблица).
- Покажите слушателю ссылку на печатную форму и, при необходимости, отправьте письмо.
Номер сертификата удобно строить из ID пользователя, ID курса и даты — так его легко проверить по базе.
Статистика и аналитика прохождения
Для оценки эффективности обучения используйте связку из результатов тестов и выборки по пользователям.
- Сколько слушателей прошли курс и сколько провалили — фильтр по статусу в списке результатов;
- Средний балл по тесту — помогает выявить слишком сложные или слишком лёгкие вопросы;
- Число попыток на пользователя — большое количество пересдач сигнализирует о непонятной формулировке;
- Динамика по датам — активность обучения в течение периода.
Программно данные доступны через API модуля: класс CTestResult возвращает попытки с полями балла, статуса и времени, а CTestAttempt — детализацию по вопросам. Это позволяет собрать собственный отчёт или выгрузить данные во внешнюю BI-систему.
Экспорт результатов
Штатной кнопки «Экспорт в Excel» в списке результатов нет, поэтому выгрузку организуют одним из вариантов:
- Через API и CSV — небольшой скрипт перебирает
CTestResult::GetList()и пишет строки в файл с разделителем «;»; - Через отчёт на инфоблоках — если сертификаты и результаты дублируются в инфоблок, применяется штатный экспорт CSV;
- Прямой SQL-запрос к таблицам
b_learn_test_resultиb_learn_attemptдля разовой выгрузки.
При выгрузке добавляйте ФИО и e-mail пользователя (join с таблицей пользователей) — по одному лишь ID отчёт неинформативен.
Частые ошибки
Типичные проблемы при работе с результатами и сертификатами:
- Проходной балл задан у курса, а не у теста. Порог настраивается в свойствах теста — иначе статус «пройден» не выставляется никогда.
- Число попыток равно нулю. Пустое или нулевое значение может блокировать запуск теста. Укажите конкретное число или включите неограниченные попытки осознанно.
- Сертификат выдаётся на незавершённой попытке. В обработчике события проверяйте именно финальный статус, а не факт открытия теста.
- Дубли сертификатов при пересдаче. Если попыток несколько, добавьте проверку: выдавать сертификат только один раз на пару «пользователь + курс».
- Кэш публичной части. После смены проходного балла или структуры теста очистите кэш компонентов обучения, иначе слушатели видят старые условия.
- Удаление курса стирает результаты. Перед реорганизацией структуры выгрузите статистику — при удалении теста связанные попытки теряются.
Итог
Модуль «Обучение» полноценно хранит результаты тестирования: попытки, баллы, статусы и детализацию ответов доступны в разделе Сервисы → Обучение → Результаты тестов. Проходной балл и число попыток задаются в свойствах теста и определяют отметку «пройден».
Готовых PDF-сертификатов в коробке нет, но их несложно реализовать через обработчик события завершения теста и печатную форму или инфоблок. Для аналитики и экспорта используйте API (CTestResult, CTestAttempt) или прямую выгрузку данных. Главное — фиксировать критерии успешного прохождения заранее и не менять их задним числом.