СвязьПоТипу указывает на реальный реквизит УчебныйВид. QTY разрешает Число, LABEL — Строка; выбранное значение используется в расчёте или подписи и проверяется на сервере.
Где и как запускать
Полный модуль своей управляемой формы в новой конфигурации УчебныйВыборВвода85. Настольный тонкий клиент Windows; типовые данные и проверка ссылок читаются на сервере. Запуск в 1С не проверен.
Подготовка
Создайте с нуля отдельную конфигурацию УчебныйВыборВвода85: управляемое приложение, Такси, язык Русский, платформа 8.5.1.1343, без расширений, общих реквизитов-разделителей и прикладных обработчиков. Не используйте рабочую базу.
Создайте иерархический справочник УчебныеКниги85, иерархия групп и элементов, код Строка длиной 10 без автонумерации, наименование Строка 100. Добавьте реквизиты МеткаСтенда (Строка 30, для группы и элемента) и Секция (Строка 30, для элемента).
В своём новом стенде вручную заведите группы BOOKGROUP/Книги и PENGROUP/Канцелярия. В первой группе заведите BOOK/Книга и ALBUM/Альбом с Секция = Книги, во второй PEN/Ручка с Секция = Канцелярия. У всех этих собственных записей МеткаСтенда = owned-input85. Других записей не создавайте.
Каждый урок — отдельная новая управляемая форма внешней обработки. Назначьте ПриСозданииНаСервере, вставьте полный модуль. Реквизиты, поле и учебную команду код создаёт сам: вручную одноимённые элементы не добавляйте.
После F7 обновите только собственную конфигурацию. Запускайте настольный тонкий клиент Windows. Уроки не выполнялись: runtimeVerifiedScenarios=0, фактическое отображение и стандартный выбор ещё требуют отдельного ручного теста.
Будущий ручной опыт читает только свои подготовленные записи и меняет данные формы в памяти. Код не создаёт, не записывает и не удаляет объекты базы или файлы, не вызывает внешнюю сеть, печать или привилегированный режим.
Коды BOOK, ALBUM, PEN и метка owned-input85 — конкретные значения подготовленного собственного стенда, не имена товаров вашей конфигурации. Если подготовка не совпала, исправляйте только свой стенд, не отключайте защиту для production.
Дополнительно создайте в своей конфигурации план видов характеристик УчебныеВидыЗначений85 без иерархии, тип значения Число/Строка, код Строка длиной 10 без автонумерации. Только в нём вручную заведите QTY/Количество с типом Число и LABEL/Подпись с типом Строка. Другие планы или виды не используются.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
КонецЕсли;
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебныйВид", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.УчебныеВидыЗначений85")));
Новые.Добавить(Новый РеквизитФормы("УчебноеЗначение", Новый ОписаниеТипов("Число,Строка")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
УчебныйВид = ПланыВидовХарактеристик.УчебныеВидыЗначений85.НайтиПоКоду("QTY");
Если Не ЗначениеЗаполнено(УчебныйВид) Тогда
ВызватьИсключение "Сначала создайте свой вид QTY с типом Число";
КонецЕсли;
НачальноеОписаниеТипов = УчебныйВид.ТипЗначения;
Если ТипЗнч(НачальноеОписаниеТипов) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Описание типа своего QTY недоступно";
КонецЕсли;
Если Не НачальноеОписаниеТипов.СодержитТип(Тип("Число")) Тогда
ВызватьИсключение "Свой QTY должен разрешать Число";
КонецЕсли;
УчебноеЗначение = 3;
Вид = Элементы.Добавить("ПолеУчебногоВида", Тип("ПолеФормы"));
Вид.Вид = ВидПоляФормы.ПолеВвода;
Вид.ПутьКДанным = "УчебныйВид";
Вид.Заголовок = "Свой вид QTY или LABEL";
Вид.КнопкаСоздания = Ложь;
Поле = Элементы.Добавить("ПолеУчебногоЗначения", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебноеЗначение";
Поле.Заголовок = "Значение выбранного вида";
Поле.СвязьПоТипу = Новый СвязьПоТипу("УчебныйВид");
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить свой выбор";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Сообщить(ПроверитьСвойТипНаСервере());
КонецПроцедуры
&НаСервере
Функция ПроверитьСвойТипНаСервере()
Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
КонецЕсли;
Если Не ЗначениеЗаполнено(УчебныйВид) Тогда
Возврат "Выберите собственный вид QTY или LABEL";
КонецЕсли;
Если УчебныйВид.Код <> "QTY" И УчебныйВид.Код <> "LABEL" Тогда
Возврат "Вид не относится к двум собственным образцам";
КонецЕсли;
ДопустимыйТип = УчебныйВид.ТипЗначения;
Если ТипЗнч(ДопустимыйТип) <> Тип("ОписаниеТипов") Тогда
Возврат "Описание типа своего вида недоступно";
КонецЕсли;
Если Не ДопустимыйТип.СодержитТип(ТипЗнч(УчебноеЗначение)) Тогда
Возврат "Фактический тип значения не соответствует выбранному виду";
КонецЕсли;
Если УчебныйВид.Код = "QTY" Тогда
Если ТипЗнч(УчебноеЗначение) <> Тип("Число") Или УчебноеЗначение < 0 Тогда
Возврат "Для собственного количества нужен ноль или положительное число";
КонецЕсли;
Возврат "Своих книг: " + Строка(УчебноеЗначение) + "; сумма при цене 250: " + Строка(УчебноеЗначение * 250);
Иначе
Если ТипЗнч(УчебноеЗначение) <> Тип("Строка") Или ПустаяСтрока(УчебноеЗначение) Тогда
Возврат "Для собственного LABEL нужна непустая строка";
КонецЕсли;
Возврат "Своя подпись: " + УчебноеЗначение;
КонецЕсли;
КонецФункции
Разбор по шагам
Создаётся составной реквизит Число/Строка и ссылка на свой план видов характеристик. Реальный QTY находится в собственном плане по подготовленному коду, пустая ссылка не принимается.
СвязьПоТипу присваивается настоящему полю значения на сервере. Путь УчебныйВид указывает на реквизит с текущей ссылкой вида, не на выдуманное описание типа.
Второй параметр конструктора не задан: это не индекс вариантов Число/Строка. Он предназначен для номера вида субконто при связи с планом счетов.
После выбора QTY введите 3: учебная команда показывает количество 3 и собственную сумму 750. Никакого заказа не создаётся.
Выберите LABEL, введите Учебная книга: проверка показывает подпись, а не умножает строку. Предыдущее значение после смены вида контролируется по фактическому типу.
ТипЗначения ссылки читается только на сервере: этот член не доступен тонкому клиенту. СодержитТип сверяет настоящий тип вводного значения перед дальнейшим использованием.
Как проверить результат
QTY и 3 → Своих книг: 3; сумма при цене 250: 750. LABEL и Учебная книга → Своя подпись: Учебная книга.
Пустой вид, другой код, отрицательное количество или несоответствующий тип дают объяснение без записи.
Вручную проверьте разрешённый редактор и поведение смены вида в своём клиенте. Статическая проверка не доказывает автоматическое изменение отображения.
Ожидаемый результат
Тип выбранного вида управляет настоящим полем; независимая серверная проверка защищает собственный расчёт от несоответствующего значения.
На что обратить внимание
Не присваивайте СвязьПоТипу на клиенте и не читайте там ТипЗначения ссылки.
Ссылка на вид характеристики — не само ОписаниеТипов. Подстановка произвольного объекта вместо реквизита не создаёт рабочую связь.
Наличие связи не заменяет прикладные ограничения: отрицательное количество и пустая подпись проверяются явно.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.