Выбрать скидку полосой и вычислить сумму к оплате

Учебные задачи

Полоса управляемой формы меняет своё целое число от 0 до 30. Кнопка проверяет диапазон, рассчитывает скидку и проверяет сохранение исходной суммы.

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебнаяСкидка85 с пустой управляемой основной формой. Тонкий клиент Windows.

  2. Не добавляйте реквизит УчебнаяСкидка, элемент УчебнаяПолоса и кнопку вручную: они создаются полным модулем урока.

  3. В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код на уровне модуля, сохраните свою EPF и откройте её в учебной базе.

  4. Связанный реквизит — неотрицательное целое число. Полоса меняет именно УчебнаяСкидка, а не неизвестное свойство Значение элемента.

  5. Исходная сумма — собственные 3 × 250 = 750. Первое нажатие при 10% рассчитывает 75 скидки и 675 к оплате. После движения полосы снова нажимайте кнопку.

  6. Каждый урок выполняйте в отдельной копии формы. Расчёт существует только в памяти и сообщениях; рабочие документы и настройки не меняются.

  7. Запуск и отображение в 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);
    Сообщить(Поле.Ориентация = ОриентацияЭлементаФормы.Горизонтально);
КонецПроцедуры

Разбор по шагам

  1. Сначала создаём числовой реквизит, затем поле правильного вида и связь ПутьКДанным.

  2. Минимум 0 и максимум 30 задают фактические значения скидки. Движок на середине диапазона означает 15, а не автоматически 50 процентов.

  3. Шаг 1 относится к клавишам курсора; БольшойШаг 5 — к PgUp/PgDn. Это не шаг видимой разметки.

  4. Код перед вычислением проверяет тип и диапазон реквизита, а затем считает сумму скидки с округлением до двух знаков.

  5. Четыре проверки контролируют исходные 750, границы скидки, границы оплаты и арифметическое равенство двух частей.

Как проверить результат

  1. При исходных 10 ожидаются семь Истина и строка 10%, 75, 675. При 0 — 0 и 750; при 30 — 225 и 525.

  2. Установите фокус на полосе, нажмите стрелку и PgUp. Проверяйте выбранное число после нажатия кнопки; на границе шаг ограничен диапазоном.

Ожидаемый результат

Настоящий элемент управляемой формы выбирает входное число для проверяемого собственного расчёта.

На что обратить внимание

  1. У этого расширения нет метода ПерейтиКЗначению: такой метод относится к тестируемому элементу автоматизации.

  2. Диапазон поля не заменяет проверку вводных данных; прямое присваивание реквизиту проверяется отдельно.

  3. Учебный процент не является реальным правилом скидок вашей конфигурации.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.