Связать отбор книги с фактической секцией формы

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

СвязьПараметраВыбора передаёт текущее УчебнаяСекция в Отбор.Секция. При смене секции режим Очищать предотвращает сохранение прежнего выбора в связанном поле.

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

Полный модуль своей управляемой формы в новой конфигурации УчебныйВыборВвода85. Настольный тонкий клиент Windows; типовые данные и проверка ссылок читаются на сервере. Запуск в 1С не проверен.

Подготовка

  1. Создайте с нуля отдельную конфигурацию УчебныйВыборВвода85: управляемое приложение, Такси, язык Русский, платформа 8.5.1.1343, без расширений, общих реквизитов-разделителей и прикладных обработчиков. Не используйте рабочую базу.

  2. Создайте иерархический справочник УчебныеКниги85, иерархия групп и элементов, код Строка длиной 10 без автонумерации, наименование Строка 100. Добавьте реквизиты МеткаСтенда (Строка 30, для группы и элемента) и Секция (Строка 30, для элемента).

  3. В своём новом стенде вручную заведите группы BOOKGROUP/Книги и PENGROUP/Канцелярия. В первой группе заведите BOOK/Книга и ALBUM/Альбом с Секция = Книги, во второй PEN/Ручка с Секция = Канцелярия. У всех этих собственных записей МеткаСтенда = owned-input85. Других записей не создавайте.

  4. Каждый урок — отдельная новая управляемая форма внешней обработки. Назначьте ПриСозданииНаСервере, вставьте полный модуль. Реквизиты, поле и учебную команду код создаёт сам: вручную одноимённые элементы не добавляйте.

  5. После F7 обновите только собственную конфигурацию. Запускайте настольный тонкий клиент Windows. Уроки не выполнялись: runtimeVerifiedScenarios=0, фактическое отображение и стандартный выбор ещё требуют отдельного ручного теста.

  6. Будущий ручной опыт читает только свои подготовленные записи и меняет данные формы в памяти. Код не создаёт, не записывает и не удаляет объекты базы или файлы, не вызывает внешнюю сеть, печать или привилегированный режим.

  7. Коды BOOK, ALBUM, PEN и метка owned-input85 — конкретные значения подготовленного собственного стенда, не имена товаров вашей конфигурации. Если подготовка не совпала, исправляйте только свой стенд, не отключайте защиту для production.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
    КонецЕсли;
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебнаяКнига", Новый ОписаниеТипов("СправочникСсылка.УчебныеКниги85")));
    Новые.Добавить(Новый РеквизитФормы("УчебнаяСекция", Новый ОписаниеТипов("Строка")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    УчебнаяСекция = "Книги";
    УчебнаяКнига = Справочники.УчебныеКниги85.ПустаяСсылка();
    Поле = Элементы.Добавить("ПолеУчебнойКниги", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "УчебнаяКнига";
    Поле.Заголовок = "Только свой учебный товар";
    Поле.ВыборГруппИЭлементов = ГруппыИЭлементы.Элементы;
    Поле.КнопкаВыбора = Истина;
    Поле.КнопкаВыпадающегоСписка = Истина;
    Поле.КнопкаСоздания = Ложь;
    Параметры = Новый Массив;
    Параметры.Добавить(Новый ПараметрВыбора("Отбор.МеткаСтенда", "owned-input85"));
    Поле.ПараметрыВыбора = Новый ФиксированныйМассив(Параметры);
    Секции = Элементы.Добавить("ПолеУчебнойСекции", Тип("ПолеФормы"));
    Секции.Вид = ВидПоляФормы.ПолеВвода;
    Секции.ПутьКДанным = "УчебнаяСекция";
    Секции.Заголовок = "Секция своего выбора";
    Секции.РежимВыбораИзСписка = Истина;
    Секции.СписокВыбора.Добавить("Книги", "Книги");
    Секции.СписокВыбора.Добавить("Канцелярия", "Канцелярия");
    Связи = Новый Массив;
    Связи.Добавить(Новый СвязьПараметраВыбора("Отбор.Секция", "УчебнаяСекция", РежимИзмененияСвязанногоЗначения.Очищать));
    Поле.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи);

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Сообщить(ПроверитьСвоюКнигуНаСервере());
КонецПроцедуры

&НаСервере
Функция ПроверитьСвоюКнигуНаСервере()
    Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный новый неразделённый стенд УчебныйВыборВвода85";
    КонецЕсли;
    Если Не ЗначениеЗаполнено(УчебнаяКнига) Тогда
        Возврат "Сначала выберите свою учебную книгу";
    КонецЕсли;
    Если УчебнаяКнига.ЭтоГруппа Или УчебнаяКнига.МеткаСтенда <> "owned-input85" Тогда
        Возврат "Нужен свой учебный элемент, а не группа или запись с иной меткой";
    КонецЕсли;
    Если УчебнаяКнига.Секция <> УчебнаяСекция Тогда
        Возврат "Выбранная книга не соответствует фактической текущей секции";
    КонецЕсли;
    Если УчебнаяКнига.Код <> "BOOK" И УчебнаяКнига.Код <> "ALBUM" И УчебнаяКнига.Код <> "PEN" Тогда
        Возврат "Выбрана запись вне трёх подготовленных собственных товаров";
    КонецЕсли;
    Возврат "Свой элемент: " + УчебнаяКнига.Наименование + "; секция: " + УчебнаяКнига.Секция;
КонецФункции

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

  1. Постоянная метка стенда остаётся в ПараметрыВыбора. Текущая секция берётся отдельно из собственного реквизита формы, а не зашита вторым постоянным параметром.

  2. СвязиПараметровВыбора — ФиксированныйМассив объектов СвязьПараметраВыбора. Связь создаётся на сервере, где запись этого свойства разрешена.

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

  4. При исходном Книги выберите BOOK. Измените секцию на Канцелярия: прежний выбор должен очиститься, после открытия выбора доступна PEN.

  5. Проверка на сервере сопоставляет настоящую Секция выбранного элемента и текущее значение формы. Она не полагается только на факт очистки или видимое меню.

  6. В стандартной форме выбора отбор может ограничивать содержимое при сохранении групп для навигации. Состав и поведение проверяются отдельно в своей конфигурации.

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

  1. Книги → BOOK/ALBUM; Канцелярия → PEN. Проверка сообщает именно выбранный собственный элемент и его секцию.

  2. После смены секции прежняя ссылка не должна оставаться выбранной; без нового выбора команда предлагает выбрать книгу.

  3. Если вручную нарушить соответствие в собственном стенде, серверная проверка сообщает несовпадение, а не успех.

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

Динамический параметр действительно зависит от данных формы и имеет контроль смены и согласованности выбранного значения.

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

  1. Путь связи — реквизит формы, не его текущая строковая величина. Не передавайте Книги вместо УчебнаяСекция вторым аргументом.

  2. СвязиПараметровВыбора нельзя присваивать в клиентском обработчике.

  3. Очищать относится к связанному значению формы и не удаляет книгу из базы.

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

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

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

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

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