Разделить шаг изменения и видимые деления шкалы

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

Изменение идёт по единице, крупный шаг по пять, разметка по десять с обеих сторон. Расчёт использует значение реквизита, а не количество видимых делений.

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

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

Подготовка

  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;
    Поле.Ориентация = ОриентацияЭлементаФормы.Горизонтально;
    Поле.ОтображениеРазметки = ОтображениеРазметкиПолосыРегулирования.СОбоихСторон;
    Поле.ШагРазметки = 10;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Рассчитать свою скидку";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Поле = Элементы.УчебнаяПолоса;
    Если ТипЗнч(УчебнаяСкидка) <> Тип("Число") Тогда
        ВызватьИсключение "Учебная скидка должна быть числом";
    КонецЕсли;
    Если УчебнаяСкидка < 0 ИЛИ УчебнаяСкидка > 30 Тогда
        ВызватьИсключение "Допустима учебная скидка от 0 до 30";
    КонецЕсли;
    ИсходнаяСумма = 3 * 250;
    СуммаСкидки = Окр(ИсходнаяСумма * УчебнаяСкидка / 100, 2);
    КОплате = ИсходнаяСумма - СуммаСкидки;
    Сообщить(ИсходнаяСумма = 750);
    Сообщить(СуммаСкидки >= 0 И СуммаСкидки <= 225);
    Сообщить(КОплате >= 525 И КОплате <= 750);
    Сообщить(КОплате + СуммаСкидки = ИсходнаяСумма);
    Сообщить(СтрШаблон("Скидка: %1 процентов; сумма скидки: %2; к оплате: %3", УчебнаяСкидка, СуммаСкидки, КОплате));
    Сообщить(Поле.Шаг = 1 И Поле.БольшойШаг = 5);
    Сообщить(Поле.ШагРазметки = 10);
    Сообщить(Поле.ОтображениеРазметки = ОтображениеРазметкиПолосыРегулирования.СОбоихСторон);
КонецПроцедуры

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

  1. Связанный реквизит и диапазон совпадают с собственным калькулятором скидки: 0…30, начальное 10.

  2. ШагРазметки 10 настраивает внешний вид шкалы, но не запрещает значения 11 или 12.

  3. СОбоихСторон задаёт сторону рисования делений. Это не два реквизита и не два разных диапазона.

  4. После одного малого шага от 10 получите 11 и расчёт 82.5 скидки, 667.5 к оплате.

  5. Точные размеры и плотность делений зависят от поля и клиента; математический расчёт от этого не меняется.

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

  1. При исходном значении ожидаются семь Истина и 75 / 675. После малого шага вправо от 10 — 82.5 / 667.5.

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

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

Три разных понятия шага изучаются на одном собственном числовом расчёте.

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

  1. ШагРазметки не округляет числовой реквизит и не заменяет Шаг.

  2. Не подставляйте отображение разметки обычного элемента вместо другого перечисления по похожему названию.

  3. Размер выплаты вычисляет код, а не внешний вид шкалы.

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

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

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

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

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