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