РежимВыбора

Свойства · ChoiceMode

Тип: Булево. При закрытии формы, у которой установлено свойство РежимВыбора и ссылка основного реквизита которой имеет не пустое значение, у владельца формы вызывается обработчик ОбработкаВыбора, в который передается значение основного реквизита формы. Если обработчик ОбработкаВыбора в параметре СтандартнаяОбработка возвращает значение Истина, то переданное значение присваивается реквизиту формы, с которым связано поле ввода.

Полное описание, параметры и ограничения

РежимВыбора (ChoiceMode)

Расширение формы клиентского приложения для объекта таблицы внешнего источника данных

РежимВыбора (ChoiceMode)

Доступен, начиная с версии 8.3.5.

Использование:
Чтение и запись.
Описание:
Тип: Булево.
При закрытии формы, у которой установлено свойство РежимВыбора и ссылка основного реквизита которой имеет не пустое значение, у владельца формы вызывается обработчик ОбработкаВыбора, в который передается значение основного реквизита формы.
Если обработчик ОбработкаВыбора в параметре СтандартнаяОбработка возвращает значение Истина, то переданное значение присваивается реквизиту формы, с которым связано поле ввода.
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.5.

Методическая информация

Практические примеры

Разрешить возврат собственной внешней карточки только для BOOK-1

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

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

Команда своей управляемой формы внешнего объекта; дополнительный код — отдельная вызывающая форма.

Подготовка

  1. Только собственный локальный SQL Server и отдельная учебная база 1С без рабочих внешних источников. SQL-блок выполните вручную в SSMS своего экземпляра: он создаёт новую GuideExternalBooks и две собственные таблицы. Если имя уже занято, существующую базу не удаляйте и не заменяйте.

  2. В ODBC Data Sources разрядности серверного процесса 1С создайте собственный System DSN GuideOwnBooks: ваш localhost SQL Server, база GuideExternalBooks, Windows-аутентификация. Пользователь серверного процесса 1С должен иметь доступ только к этой учебной базе. Настройте нормальное доверие сертификату драйвера, проверку TLS не отключайте.

  3. В Конфигураторе создайте ВнешниеИсточникиДанных → УчебныеКниги, автоматическое управление блокировками. Таблица Карточки: имя dbo.lesson_items, тип ОбъектныеДанные, ТолькоЧтение Ложь; Код=book_id Строка20, Название=title Строка100, Количество=quantity Число9.0. Null запрещён, ПоляКлюча и ПоляБлокировкиДанных — Код, представление — Название.

  4. Таблица Строки: имя dbo.lesson_lines, тип НеобъектныеДанные, ТолькоЧтение Ложь; Урок=lesson_id Строка20, Номер=line_no Число9.0, Название=title Строка100, Количество=quantity Число9.0. Null запрещён, поля ключа / блокировки — Урок и Номер именно в этом порядке.

  5. Мастером создайте у Карточки управляемую форму объекта УчебнаяКарточка, а у Строки управляемую форму записи УчебнаяСтрока. Сохраните настоящие основные реквизиты и привяжите поля. Назначьте эти формы основными для редактирования таблиц и создайте стандартные формы списков.

  6. В своей обработке с управляемой формой создайте команду ПодготовитьУчебноеСоединение. Отдельный блок настройки соединения относится только к модулю этой обработки; пользователь имеет административные права на свой источник. Настраивается только сеанс, не общие параметры чужого подключения.

  7. Основной блок — команда ВыбратьТолькоСвоюПервуюКнигу в управляемой форме объекта УчебнаяКарточка таблицы Карточки. Её основной реквизит Объект оставлен мастером; поле Код действительно соответствует book_id собственного SQL-источника.

  8. В отдельной вызывающей управляемой форме добавьте реквизит ВыбраннаяВнешняяКнига типа ВнешнийИсточникДанныхОбъектСсылка.УчебныеКниги.Карточки и связанное поле ПолеКниги. Клиентскую команду открытия и серверную функцию ссылки поместите в модуль этой формы.

  9. После отдельной настройки своего сеансового соединения откройте существующую BOOK-1 командой дополнительного блока. Владельцем является именно поле ввода; стандартную ОбработкаВыбора не отменяйте, чтобы выбранное значение попало в связанный реквизит.

  10. Свойство ПараметрыВыбора принимает ФиксированнаяСтруктура, не обычную Структура параметров открытия. Здесь Код — собственное явно обрабатываемое условие: Код = BOOK-1. Доступность вычисляется по тому же полю; автоматическая интерпретация произвольного имени платформой не обещается.

  11. Для отрицательного ручного опыта добавьте вторую СОБСТВЕННУЮ карточку BOOK-2 в эту же новую учебную SQL-таблицу и откройте её штатно; команда не должна закрыть её как допустимый выбор. Ключ BOOK-1 в форме не меняйте. Запись карточек этим BSL не выполняется.

&НаКлиенте
Процедура ВыбратьТолькоСвоюПервуюКнигу(Команда)
    РежимВыбора = Истина;
    Условие = Новый Структура("Код", "BOOK-1");
    ПараметрыВыбора = Новый ФиксированнаяСтруктура(Условие);
    ВыборДоступен = Объект.Код = ПараметрыВыбора.Код;
    Если Не ВыборДоступен Тогда
        Сообщить("Эта собственная книга не подходит: разрешён только BOOK-1");
        Возврат;
    КонецЕсли;
    Сообщить("Возвращается собственная карточка, соответствующая параметру выбора");
    Закрыть();
КонецПроцедуры
Свой локальный SQL Server: создать новую изолированную учебную таблицу
CREATE DATABASE GuideExternalBooks;
GO
USE GuideExternalBooks;
GO
CREATE TABLE dbo.lesson_items (
    book_id nvarchar(20) NOT NULL PRIMARY KEY,
    title nvarchar(100) NOT NULL,
    quantity numeric(9,0) NOT NULL
);
CREATE TABLE dbo.lesson_lines (
    lesson_id nvarchar(20) NOT NULL,
    line_no numeric(9,0) NOT NULL,
    title nvarchar(100) NOT NULL,
    quantity numeric(9,0) NOT NULL,
    PRIMARY KEY (lesson_id, line_no)
);
INSERT INTO dbo.lesson_items VALUES (N'BOOK-1', N'Учебная книга', 3);
INSERT INTO dbo.lesson_lines VALUES (N'LESSON-1', 1, N'Учебная строка книги', 3);
Вызывающая форма: отдельная команда соединения со своим источником
&НаКлиенте
Процедура ПодготовитьУчебноеСоединение(Команда)
    НастроитьСвойИсточник();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура НастроитьСвойИсточник()
    Источник = ВнешниеИсточникиДанных.УчебныеКниги;
    Параметры = Источник.ПолучитьПараметрыСоединенияСеанса();
    Параметры.СУБД = "MSSQLServer";
    Параметры.СтрокаСоединения = "DSN=GuideOwnBooks;";
    Параметры.АутентификацияОС = Истина;
    Параметры.АутентификацияСтандартная = Ложь;
    Параметры.ИмяПользователя = "";
    Параметры.Пароль = "";
    Источник.УстановитьПараметрыСоединенияСеанса(Параметры);
    Источник.УстановитьСоединение();
КонецПроцедуры
Вызывающая форма: открыть существующую карточку с владельцем-полем
&НаКлиенте
Процедура ОткрытьСвоюВнешнююКарточку(Команда)
    Параметры = Новый Структура("Ключ,РежимВыбора", СсылкаСвоейВнешнейКниги(), Истина);
    ОткрытьФорму("ВнешнийИсточникДанных.УчебныеКниги.Таблица.Карточки.Форма.УчебнаяКарточка",
        Параметры, Элементы.ПолеКниги, Истина);
КонецПроцедуры
Вызывающая форма: получить настоящую ссылку только собственной BOOK-1
&НаСервереБезКонтекста
Функция СсылкаСвоейВнешнейКниги()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 Карточки.Ссылка КАК Ссылка
    |ИЗ ВнешнийИсточникДанных.УчебныеКниги.Таблица.Карточки КАК Карточки
    |ГДЕ Карточки.Код = &Код";
    Запрос.УстановитьПараметр("Код", "BOOK-1");
    Выборка = Запрос.Выполнить().Выбрать();
    Если Не Выборка.Следующий() Тогда
        ВызватьИсключение "Подготовьте собственную карточку BOOK-1";
    КонецЕсли;
    Возврат Выборка.Ссылка;
КонецФункции

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

  1. Подготовьте свой SQL-источник и принимающее поле правильного ссылочного типа.

  2. Откройте свою существующую карточку с реальной ссылкой и владельцем.

  3. Выполните команду выбора; она возвращает только значение, отвечающее собственному условию.

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

  1. РежимВыбора — именно свойство настоящей формы объекта внешней таблицы. При её закрытии непустое значение основного объекта передаётся владельцу; форма не подменяется общей формой с одноимёнными флажками.

  2. ВыборДоступен отражает соответствие заданному условию; запрет не заменяет прав доступа к SQL. Если у реального прикладного сценария условий несколько, проверять надо все, а не копировать однополевое правило из опыта.

  3. РежимВыбора, ПараметрыВыбора и ВыборДоступен у этого расширения допускают запись. SQL / BSL / сеть при сборке HTML не выполнялись.

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

Есть настоящий внешний объект, конкретное условие и поле-получатель выбранной ссылки.

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

  1. Не вызывайте эту команду в произвольной общей форме или форме необъектной строки и не отключайте проверку только ради успешного закрытия.

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

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

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

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

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