Элемент фиксированного массива свойства СвязиПараметровВыбора.
Примеры платформы
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Контрагент");Полное описание, параметры и ограничения
СвязьПараметраВыбора (ChoiceParameterLink)
СвязьПараметраВыбора (ChoiceParameterLink)
Доступен, начиная с версии 8.2.
Свойства:
ИзменениеЗначения (ValueChange)
Имя (Name)
ПутьКДанным (DataPath)
Конструкторы:
По умолчанию
Описание:
Элемент фиксированного массива свойства СвязиПараметровВыбора.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Контрагент");
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Проверить, почему марка очищается при смене производителя
У Номенклатура.Марка отбор связан с Производитель и имеет режим Clear. Читаем реальное правило и переносим его только в собственное описание связи.
Где и как запускать
Полный серверный общий модуль учебной копии КА2 Progress. Только схема и собственные значения в памяти.
Подготовка
Используйте отдельную учебную копию КА2 Progress, соответствующую C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Названия и настройки проверены по реальным Catalogs/Номенклатура.xml и Catalogs/ВидыПодарочныхСертификатов.xml.
Создайте серверный общий модуль УчебныеЗадачи, вставьте полный модуль одного урока и вызовите ВыполнитьПример() из своего серверного обработчика учебной команды.
Примеры читают схему и создают значения только в памяти. Они не создают и не записывают товары, не меняют метаданные, не запускают заполнение объекта или перестроение поискового индекса.
Процедура ВыполнитьПример() Экспорт
Справочник = Метаданные.Справочники.Найти("Номенклатура");
Если Справочник = Неопределено Тогда
ВызватьИсключение "В учебной конфигурации отсутствует Справочники.Номенклатура";
КонецЕсли;
Описание = Справочник.Реквизиты.Найти("Марка");
Если Описание = Неопределено Тогда
ВызватьИсключение "В найденном справочнике нет нужного реквизита учебного урока";
КонецЕсли;
Связи = Описание.СвязиПараметровВыбора;
Если Связи.Количество() <> 1 Тогда
ВызватьИсключение "Ожидалась одна связь марки с производителем";
КонецЕсли;
Связь = Связи[0];
Если ТипЗнч(Связь) <> Тип("СвязьПараметраВыбора") Тогда
ВызватьИсключение "Ожидался объект СвязьПараметраВыбора";
КонецЕсли;
Сообщить(Связь.Имя = "Отбор.Производитель");
Сообщить(Связь.ИзменениеЗначения = РежимИзмененияСвязанногоЗначения.Очищать);
Сообщить("Путь к источнику значения: " + Связь.ПутьКДанным);
Сообщить(НЕ ПустаяСтрока(Связь.ПутьКДанным));
УчебнаяСвязь = Новый СвязьПараметраВыбора(Связь.Имя, Связь.ПутьКДанным, Связь.ИзменениеЗначения);
Сообщить(УчебнаяСвязь.Имя = Связь.Имя);
Сообщить(УчебнаяСвязь.ПутьКДанным = Связь.ПутьКДанным);
Сообщить(УчебнаяСвязь.ИзменениеЗначения = Связь.ИзменениеЗначения);
Сообщить("Правило прочитано; действительная форма номенклатуры не открывалась и не изменялась");
КонецПроцедурыРазбор по шагам
Проверяем массив и тип объекта связи до чтения свойств. В исходном XML DataPath указывает на реквизит Производитель, ValueChange=Clear.
Имя — параметр отбора, ПутьКДанным — источник его значения. Это не одна и та же строка и не путь к файлу ОС.
Очищать относится к связанному значению при изменении ведущего. Оно объясняет, почему нельзя сохранять прежнюю марку, игнорируя смену производителя.
Конструктор получает режим явно. Его документированный вариант по умолчанию тоже Очищать, но явный аргумент делает перенос настоящего правила понятным.
Созданное описание само не привязано к форме и не очищает данные. Фактическую обработку рабочего поля необходимо проверять отдельно на учебной копии.
Как проверить результат
Шесть контрольных Истина и фактический путь к источнику значения.
Нет изменения производителя или марки в базе; повторный запуск только повторяет чтение схемы.
Ожидаемый результат
Получено настоящее объяснение связи марки с производителем и корректное неизменяемое описание этой связи.
На что обратить внимание
Не присваивайте readonly-свойства СвязьПараметраВыбора: создавайте новое описание конструктором.
Из правила схемы нельзя заключить, что произвольная самописная форма действительно использует эту связь.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Связать отбор книги с фактической секцией формы
СвязьПараметраВыбора передаёт текущее УчебнаяСекция в Отбор.Секция. При смене секции режим Очищать предотвращает сохранение прежнего выбора в связанном поле.
Где и как запускать
Полный модуль своей управляемой формы в новой конфигурации УчебныйВыборВвода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.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
КонецЕсли;
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебнаяКнига", Новый ОписаниеТипов("СправочникСсылка.УчебныеКниги85")));
Новые.Добавить(Новый РеквизитФормы("УчебнаяСекция", Новый ОписаниеТипов("Строка")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
УчебнаяСекция = "Книги";
УчебнаяКнига = Справочники.УчебныеКниги85.ПустаяСсылка();
Поле = Элементы.Добавить("ПолеУчебнойКниги", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебнаяКнига";
Поле.Заголовок = "Только свой учебный товар";
Поле.ВыборГруппИЭлементов = ГруппыИЭлементы.Элементы;
Поле.КнопкаВыбора = Истина;
Поле.КнопкаВыпадающегоСписка = Истина;
Поле.КнопкаСоздания = Ложь;
Параметры = Новый Массив;
Параметры.Добавить(Новый ПараметрВыбора("Отбор.МеткаСтенда", "owned-input85"));
Поле.ПараметрыВыбора = Новый ФиксированныйМассив(Параметры);
Секции = Элементы.Добавить("ПолеУчебнойСекции", Тип("ПолеФормы"));
Секции.Вид = ВидПоляФормы.ПолеВвода;
Секции.ПутьКДанным = "УчебнаяСекция";
Секции.Заголовок = "Секция своего выбора";
Секции.РежимВыбораИзСписка = Истина;
Секции.СписокВыбора.Добавить("Книги", "Книги");
Секции.СписокВыбора.Добавить("Канцелярия", "Канцелярия");
Связи = Новый Массив;
Связи.Добавить(Новый СвязьПараметраВыбора("Отбор.Секция", "УчебнаяСекция", РежимИзмененияСвязанногоЗначения.Очищать));
Поле.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи);
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить свой выбор";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Сообщить(ПроверитьСвоюКнигуНаСервере());
КонецПроцедуры
&НаСервере
Функция ПроверитьСвоюКнигуНаСервере()
Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
КонецЕсли;
Если Не ЗначениеЗаполнено(УчебнаяКнига) Тогда
Возврат "Сначала выберите свою учебную книгу";
КонецЕсли;
Если УчебнаяКнига.ЭтоГруппа Или УчебнаяКнига.МеткаСтенда <> "owned-input85" Тогда
Возврат "Нужен свой учебный элемент, а не группа или запись с иной меткой";
КонецЕсли;
Если УчебнаяКнига.Секция <> УчебнаяСекция Тогда
Возврат "Выбранная книга не соответствует фактической текущей секции";
КонецЕсли;
Если УчебнаяКнига.Код <> "BOOK" И УчебнаяКнига.Код <> "ALBUM" И УчебнаяКнига.Код <> "PEN" Тогда
Возврат "Выбрана запись вне трёх подготовленных собственных товаров";
КонецЕсли;
Возврат "Свой элемент: " + УчебнаяКнига.Наименование + "; секция: " + УчебнаяКнига.Секция;
КонецФункции
Разбор по шагам
Постоянная метка стенда остаётся в ПараметрыВыбора. Текущая секция берётся отдельно из собственного реквизита формы, а не зашита вторым постоянным параметром.
СвязиПараметровВыбора — ФиксированныйМассив объектов СвязьПараметраВыбора. Связь создаётся на сервере, где запись этого свойства разрешена.
Путь УчебнаяСекция совпадает с реально добавленным реквизитом. Отбор.Секция совпадает с реальным реквизитом собственной книги.
При исходном Книги выберите BOOK. Измените секцию на Канцелярия: прежний выбор должен очиститься, после открытия выбора доступна PEN.
Проверка на сервере сопоставляет настоящую Секция выбранного элемента и текущее значение формы. Она не полагается только на факт очистки или видимое меню.
В стандартной форме выбора отбор может ограничивать содержимое при сохранении групп для навигации. Состав и поведение проверяются отдельно в своей конфигурации.
Как проверить результат
Книги → BOOK/ALBUM; Канцелярия → PEN. Проверка сообщает именно выбранный собственный элемент и его секцию.
После смены секции прежняя ссылка не должна оставаться выбранной; без нового выбора команда предлагает выбрать книгу.
Если вручную нарушить соответствие в собственном стенде, серверная проверка сообщает несовпадение, а не успех.
Ожидаемый результат
Динамический параметр действительно зависит от данных формы и имеет контроль смены и согласованности выбранного значения.
На что обратить внимание
Путь связи — реквизит формы, не его текущая строковая величина. Не передавайте Книги вместо УчебнаяСекция вторым аргументом.
СвязиПараметровВыбора нельзя присваивать в клиентском обработчике.
Очищать относится к связанному значению формы и не удаляет книгу из базы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.