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