Каждое нажатие выполняет следующую собственную проверку строки или арифметики. Индикатор связан с числом выполненных проверок от 0 до 4.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе платформы 8.5.1.1343 создайте внешнюю обработку УчебныеЭлементы85, пустую управляемую форму и назначьте её основной. Используйте тонкий клиент Windows.
В свойствах формы → События назначьте процедуру ПриСозданииНаСервере. Вставьте полный код урока на уровне модуля, не внутрь другой процедуры.
Не создавайте перечисленные в коде реквизиты, поля и кнопку вручную: они добавляются при создании формы. Каждый урок запускайте в отдельной копии формы.
Сохраните свою EPF и откройте её в учебной базе через Файл → Открыть. Код не читает рабочие заказы и не требует справочника товаров.
Реквизит формы хранит значение, а ПолеФормы его отображает. ПутьКДанным связывает две части; неизвестного свойства Поле.Значение здесь нет.
Расчёты используют собственные 3 книги по 250 и учебные условия. Они ничего не записывают в базу, не создают файлов и не вызывают сеть.
Запуск и вид в 1С не проверены. Учитывайте интерфейс вашей учебной базы: Версия8_5 и Такси по-разному используют некоторые свойства.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("УчебныйПрогресс", Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
ЭтаФорма.УчебныйПрогресс = 0;
Поле = Элементы.Добавить("УчебныйИндикатор", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеИндикатора;
Поле.ПутьКДанным = "УчебныйПрогресс";
Поле.Заголовок = "Четыре собственные проверки";
Поле.МинимальноеЗначение = 0;
Поле.МаксимальноеЗначение = 4;
Поле.Ориентация = ОриентацияЭлементаФормы.Горизонтально;
Поле.ОтображатьПроценты = Истина;
Поле.Отображение = РежимСглаживанияИндикатора.Плавный;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Выполнить следующую учебную проверку";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.УчебныйИндикатор;
Если ТипЗнч(УчебныйПрогресс) <> Тип("Число") Тогда
ВызватьИсключение "Учебный прогресс должен быть числом";
КонецЕсли;
Если УчебныйПрогресс < 0 ИЛИ УчебныйПрогресс > 4 ИЛИ УчебныйПрогресс <> Цел(УчебныйПрогресс) Тогда
ВызватьИсключение "Допустимо целое число выполненных проверок от 0 до 4";
КонецЕсли;
Если УчебныйПрогресс = 4 Тогда
Сообщить("Все четыре учебные проверки уже выполнены. Закройте и откройте форму для нового прохода");
Возврат;
КонецЕсли;
Если УчебныйПрогресс = 0 Тогда
Успех = СтрДлина("Книга") = 5;
Название = "Длина собственного слова Книга";
ИначеЕсли УчебныйПрогресс = 1 Тогда
Успех = 3 * 250 = 750;
Название = "Сумма трёх собственных книг";
ИначеЕсли УчебныйПрогресс = 2 Тогда
Успех = Окр(750 * 10 / 100, 2) = 75;
Название = "Десятипроцентная учебная скидка";
Иначе
Успех = 750 - 75 = 675;
Название = "Собственная сумма после скидки";
КонецЕсли;
Если Не Успех Тогда
ВызватьИсключение "Не прошла учебная проверка: " + Название;
КонецЕсли;
УчебныйПрогресс = УчебныйПрогресс + 1;
Процент = 100 * УчебныйПрогресс / 4;
Сообщить(Название);
Сообщить(Успех);
Сообщить(СтрШаблон("Выполнено %1 из 4; расчётный процент %2", УчебныйПрогресс, Процент));
Сообщить(Поле.МинимальноеЗначение = 0 И Поле.МаксимальноеЗначение = 4);
Сообщить(Процент >= 25 И Процент <= 100);
КонецПроцедуры
Разбор по шагам
Сервер создаёт числовой реквизит и поле вида ПолеИндикатора; данные начинаются с нуля.
Минимум 0 и максимум 4 задают шкалу именно выполненных проверок. В реквизит не записываем 25, 50, 75 или 100.
Клиент проверяет тип, диапазон и целочисленность. Полностью выполненный проход останавливает команду до выполнения новой проверки.
Последовательные нажатия реально вычисляют длину Книга, 3 × 250, 10% от 750 и 750 − 75. Только успешная проверка увеличивает счётчик.
Процент вычисляется отдельно как 100 × выполнено / 4. Управление возвращается после каждого нажатия, поэтому это не имитация обновления интерфейса внутри долгого цикла.
Как проверить результат
Нажмите четыре раза: ожидаются счётчики 1, 2, 3, 4 и расчётные проценты 25, 50, 75, 100; после каждой проверки три Истина.
Пятое нажатие выдаёт сообщение о завершении и оставляет реквизит равным 4. Закройте и откройте форму: проход начинается с нуля.
Ожидаемый результат
Индикатор отображает подтверждённый собственными вычислениями прогресс без внешних заданий и фиктивных ожиданий.
На что обратить внимание
Это ручной учебный проход, не монитор фонового задания сервера и не проверка состояния обмена.
Индикатор не выполняет вычисления сам: он отображает связанный реквизит. ОтображатьПроценты не меняет его числовой смысл.
Не добавляйте Шаг или метод ПерейтиКЗначению: в нативном расширении этого индикатора их нет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.