Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе. Если требуется выполнить поиск более 32 слов или 1000 символов, то свойство ОграничиватьСтрокуПоиска требуется установить в значение Ложь.
Синтаксис
ПолучитьДанныеВыбора(<Параметры>)Полное описание, параметры и ограничения
БизнесПроцессМенеджер.<Имя бизнес-процесса>.ПолучитьДанныеВыбора (BusinessProcessManager.<Business process name>.GetChoiceData)
БизнесПроцессМенеджер.<Имя бизнес-процесса> (BusinessProcessManager.<Business process name>)
ПолучитьДанныеВыбора (GetChoiceData)
Доступен, начиная с версии 8.2.
Синтаксис:
ПолучитьДанныеВыбора(<Параметры>)
Параметры:
<Параметры> (обязательный)
Тип: Структура.
Содержит параметры для формирования списка значений.
Структура, в которой обязательно должны содержаться следующие ключи:
Отбор (Filter) - тип Структура. Отбор, используемый для поиска данных. Значения элементов отбора могут иметь тип Массив, СписокЗначений, ФиксированныйМассив или иной тип, не являющийся коллекцией; для типов Массив, СписокЗначений, ФиксированныйМассив сравнение выполняется с видом сравнения ВСписке, иначе вид сравнения Равно;
СтрокаПоиска (SearchString) - содержит строку, используемую при поиске данных. Для быстрого выбора содержит значение Неопределено;
ВыборГруппИЭлементов (ChoiceFoldersAndItems) (необязательный) - тип ИспользованиеГруппИЭлементов. Указывает использование групп и элементов;
СпособПоискаСтроки (StringSearchMode) (необязательный) - тип СпособПоискаСтрокиПриВводеПоСтроке. Указывает способ поиска при вводе по строке;
ПолнотекстовыйПоиск (FullTextSearch) (необязательный) - тип ПолнотекстовыйПоискПриВводеПоСтроке. Указывает необходимость использования полнотекстового поиска при вводе по строке;
ОграничиватьСтрокуПоиска (LimitSearchString) (необязательный) - тип Булево. Указывает необходимость применения ограничений на искомую строку при вводе по строке.
Возвращаемое значение:
Тип: СписокЗначений.
Описание:
Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе.
Если требуется выполнить поиск более 32 слов или 1000 символов, то свойство ОграничиватьСтрокуПоиска требуется установить в значение Ложь.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Вызов метода выполняет обращение к серверу.
Примечание:
Если в модуле менеджера в методе указано два параметра, то будет вызван метод ПолучитьДанныеВыбора глобального контекста.
Выполнение метода приводит к вызову события ОбработкаПолученияДанныхВыбора.
В режиме совместимости конфигурации Версия8_3_17 и ниже рекомендуется устанавливать свойство ОграничиватьСтрокуПоиска в значение Истина, чтобы при выполнении сложных запросов генерировалась ошибка.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Получить реальные данные выбора бизнес-процесса: Равно и В списке
Две собственные записи внутри отменяемой транзакции: обязательные параметры быстрого выбора, скалярный/коллекционный отбор, значения/представления и отсутствие совпадений.
Где и как запускать
Полный серверный общий модуль УчебныйЦикл85, собственный пустой стенд УчебныеДанныеВыбора85; отдельный управляемый клиентский модуль вызова.
Подготовка
Новая пустая конфигурация УчебныеДанныеВыбора85 на платформе8.5.1.1343, управляемое приложение и толстый клиент Windows. Это другой стенд, не УчебныеФормыМенеджера85.
УчебнаяЗадача85: номер Строка9 с автонумерацией, Наименование100. УчебныйПроцесс85: номер Строка9, автонумерация, Задача=УчебнаяЗадача85; карта Старт → Опыт85 → Финиш без адресации/обработчиков.
У обоих объектов Маркер85 Строка36, Индексирование=Индексировать, без обязательного заполнения. Исследуемый вид перед опытом пуст, нет чужих или ранее сохранённых записей.
Модули объектов, менеджеров и точек пустые: нет ПередЗаписью с запретом из урока форм и нет ОбработкаПолученияДанныхВыбора. Запрос выбора должен выполнять стандартную обработку.
У своего вида включите стандартный быстрый выбор. Поля Ввод по строке: Наименование у задачи, Номер у процесса; поиск строки здесь выключен значением Неопределено.
Общие → Общие модули → УчебныйЦикл85: Сервер и ВызовСервера Истина, Глобальный/Привилегированный Ложь, остальные флаги и повторное использование выключены. Вставьте весь основной код одного урока.
Обработки → Запуск85 → управляемая форма Форма: ПодтверждаюПустойСтенд85 и Занято85 Булево исходно Ложь, Итог85 Строка неограниченной длины только для просмотра.
Назначьте команду ВыполнитьПример85 кнопке и установите Действие=ВыполнитьСвойЦикл85. Вставьте отдельный полный модуль формы из дополнительного блока; процедура ВыполнитьСвойЦикл85 передаёт согласие в УчебныйЦикл85.ВыполнитьПример85.
F7 и обновление только своего стенда. runtimeVerifiedScenarios=0: 1С, серверный вызов, запись/выбор/откат здесь не выполнялись.
Код сам создаёт две разные плановые ссылки, проверяет их незанятость, создаёт настоящие объекты, пишет их только в свою транзакцию и откатывает её.
После согласия будущий ручной опыт сравнивает4 результата: скалярный маркер2, массив двух ссылок2, массив одной ссылки1, отсутствующий маркер0.
Не выносите результат в живую форму выбора во время транзакции, не добавляйте ФиксироватьТранзакцию и не копируйте код в рабочую базу.
Функция ВыполнитьПример85(Согласие) Экспорт
Если Не Согласие Тогда
ВызватьИсключение "Только собственный новый пустой стенд УчебныеДанныеВыбора85 с согласием";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Нужна платформа8.5.1.1343; чужая транзакция недопустима";
КонецЕсли;
ВыборкаДо = БизнесПроцессы.УчебныйПроцесс85.Выбрать();
Если ВыборкаДо.Следующий() Тогда
ВызватьИсключение "Исследуемый учебный вид должен быть пустым";
КонецЕсли;
Маркер = Строка(Новый УникальныйИдентификатор);
СсылкаПервой = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Новый УникальныйИдентификатор);
СсылкаВторой = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Новый УникальныйИдентификатор);
Если СсылкаПервой = СсылкаВторой Или СсылкаПервой.ПолучитьОбъект() <> Неопределено
Или СсылкаВторой.ПолучитьОбъект() <> Неопределено Тогда
ВызватьИсключение "Собственные плановые ссылки должны быть разными и незанятыми";
КонецЕсли;
НачатьТранзакцию();
Попытка
Первая = БизнесПроцессы.УчебныйПроцесс85.СоздатьБизнесПроцесс();
Первая.УстановитьСсылкуНового(СсылкаПервой);
Первая.Дата = ТекущаяДата();
Первая.Маркер85 = Маркер;
Вторая = БизнесПроцессы.УчебныйПроцесс85.СоздатьБизнесПроцесс();
Вторая.УстановитьСсылкуНового(СсылкаВторой);
Вторая.Дата = ТекущаяДата();
Вторая.Маркер85 = Маркер;
Первая.Записать();
Вторая.Записать();
Отбор = Новый Структура("Маркер85", Маркер);
Параметры = Новый Структура("Отбор,СтрокаПоиска,ОграничиватьСтрокуПоиска", Отбор, Неопределено, Истина);
ПоМаркеру = БизнесПроцессы.УчебныйПроцесс85.ПолучитьДанныеВыбора(Параметры);
ПроверитьСвоюПару85(ПоМаркеру, СсылкаПервой, СсылкаВторой, 2, Маркер);
СвоиСсылки = Новый Массив;
СвоиСсылки.Добавить(СсылкаПервой);
СвоиСсылки.Добавить(СсылкаВторой);
Параметры.Отбор = Новый Структура("Ссылка", СвоиСсылки);
ПоДвумСсылкам = БизнесПроцессы.УчебныйПроцесс85.ПолучитьДанныеВыбора(Параметры);
ПроверитьСвоюПару85(ПоДвумСсылкам, СсылкаПервой, СсылкаВторой, 2, Маркер);
СвоиСсылки.Удалить(1);
ПоОднойСсылке = БизнесПроцессы.УчебныйПроцесс85.ПолучитьДанныеВыбора(Параметры);
ПроверитьСвоюПару85(ПоОднойСсылке, СсылкаПервой, СсылкаВторой, 1, Маркер);
Параметры.Отбор = Новый Структура("Маркер85", Маркер + "-missing");
Отсутствующие = БизнесПроцессы.УчебныйПроцесс85.ПолучитьДанныеВыбора(Параметры);
Если ТипЗнч(Отсутствующие) <> Тип("СписокЗначений") Тогда
ВызватьИсключение "Даже при отсутствии совпадений нужен список значений";
КонецЕсли;
Если Отсутствующие.Количество() <> 0 Тогда
ВызватьИсключение "Несуществующий собственный маркер не должен давать данные выбора";
КонецЕсли;
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если ТранзакцияАктивна() Или СсылкаПервой.ПолучитьОбъект() <> Неопределено
Или СсылкаВторой.ПолучитьОбъект() <> Неопределено Тогда
ВызватьИсключение "Собственная пара осталась после отката";
КонецЕсли;
Возврат "Равно по маркеру:2, В списке по двум ссылкам:2, по одной ссылке:1, отсутствие:0. Проверены реальные собственные типы/ссылки/представления. Записи отменены.";
КонецФункции
Процедура ПроверитьСвоюПару85(Данные, СсылкаПервой, СсылкаВторой, ОжидаемоеКоличество, Маркер)
Если ТипЗнч(Данные) <> Тип("СписокЗначений") Тогда
ВызватьИсключение "Данные выбора должны быть реальным списком значений";
КонецЕсли;
Если Данные.Количество() <> ОжидаемоеКоличество Тогда
ВызватьИсключение "Количество собственных данных выбора не совпало";
КонецЕсли;
ЕстьПервая = Ложь;
ЕстьВторая = Ложь;
Для Каждого Элемент Из Данные Цикл
Если ТипЗнч(Элемент.Значение) <> Тип("БизнесПроцессСсылка.УчебныйПроцесс85") Тогда
ВызватьИсключение "Элемент содержит не ссылку своего учебного вида";
КонецЕсли;
Если Элемент.Значение.Маркер85 <> Маркер Или Элемент.Представление = "" Тогда
ВызватьИсключение "У выбора нет собственного маркера или пользовательского представления";
КонецЕсли;
Если Элемент.Значение = СсылкаПервой И Не ЕстьПервая Тогда
ЕстьПервая = Истина;
ИначеЕсли Элемент.Значение = СсылкаВторой И ОжидаемоеКоличество = 2 И Не ЕстьВторая Тогда
ЕстьВторая = Истина;
Иначе
ВызватьИсключение "Выбор содержит повторную, неизвестную или лишнюю ссылку";
КонецЕсли;
КонецЦикла;
Если Не ЕстьПервая Или (ОжидаемоеКоличество = 2 И Не ЕстьВторая) Тогда
ВызватьИсключение "Результат не содержит все ожидаемые реальные записи";
КонецЕсли;
КонецПроцедурыУправляемый запуск УчебныйПроцесс85
УчебныеДанныеВыбора85 → Обработки → Запуск85 → Формы → Форма → Модуль
Полный модуль своей управляемой формы: согласие, занятость и серверный вызов УчебныйЦикл85.ВыполнитьПример85.
&НаКлиенте
Процедура ВыполнитьСвойЦикл85(Команда)
Если Не ПодтверждаюПустойСтенд85 Или Занято85 Тогда
ВызватьИсключение "Нужно собственное подтверждение и отсутствие другого опыта";
КонецЕсли;
Занято85 = Истина;
Попытка
Итог85 = УчебныйЦикл85.ВыполнитьПример85(ПодтверждаюПустойСтенд85);
Исключение
Занято85 = Ложь;
Итог85 = ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
Занято85 = Ложь;
КонецПроцедурыРазбор по шагам
Проверка стенда, согласия, версии, отсутствия чужой транзакции и пустого собственного вида выполняется до создания записей.
Две реальные фабрики объектов получают собственные незанятые ссылки, дату и общий уникальный маркер; записи становятся видны своему серверному транзакционному вызову.
Параметры содержат обязательные Отбор и СтрокаПоиска. Неопределено означает быстрый выбор без строкового поиска; ОграничиватьСтрокуПоиска=Истина не снимает защиту поиска.
Скалярный Маркер85 задаёт Равно и возвращает свою пару. Каждое значение реально имеет ссылочный тип данного учебного вида и непустое пользовательское представление.
Массив в Отбор.Ссылка задаёт В списке. Сначала две ссылки, затем после удаления второго элемента из массива только первая; состав списка проверяется, порядок не предполагается.
Несуществующий собственный маркер возвращает пустой СписокЗначений, а не Неопределено и не пустую ссылку.
Собственная транзакция откатывается при успехе и ошибке. После отката проверяется отсутствие обоих собственных объектов; ни одно выбранное значение не выдаётся за сохранённую бизнес-запись.
Как проверить результат
Получены количества2,2,1,0 с правильными реальными собственными ссылками.
Результат каждого вызова — СписокЗначений; элементы имеют Значение своего ссылочного типа и непустое Представление.
Список одной ссылки содержит только первую; повторные/посторонние значения приводят к исключению.
Скалярный отбор и массив ссылок объясняются разными сравнениями, без ручного построения строки запроса.
После отката оба ПолучитьОбъект возвращают Неопределено; нет незакрытой транзакции, старта маршрута, выполнения или удаления.
Ожидаемый результат
При будущем ручном запуске проверены реальные данные быстрого выбора и сравнения Равно/В списке; созданная собственная пара полностью откатывается.
На что обратить внимание
СписокЗначений состоит из элементов; ссылкой является Элемент.Значение, а текстом Элемент.Представление. Сам элемент не равен бизнес-ссылке.
Отбор и СтрокаПоиска обязательны даже для быстрого выбора. Неопределено в СтрокаПоиска — не отсутствие результата и не произвольная пустая строка.
Для Массив/ФиксированныйМассив/СписокЗначений в значении отбора применяется В списке, для скаляра Равно. В этом уроке массив содержит только реальные собственные ссылки.
Параметры.Отбор содержит тот же массив СвоиСсылки; Удалить(1) меняет его в памяти. Это удаление элемента массива, не удаление записи базы.
Нет гарантии порядка стандартных данных выбора; проверяется принадлежность/число уникальных ссылок, не позиция отображения.
Метод менеджера получает ровно один объект параметров. Два аргумента могут переадресовать вызов глобальному ПолучитьДанныеВыбора; это другой контракт.
Метод вызывает ОбработкаПолученияДанныхВыбора менеджера. Свой пустой модуль сохраняет стандартную обработку; произвольный рабочий обработчик может изменить результаты или сделать внешнее действие.
Это не универсальный поиск всех записей: результат зависит от настроек выбора, прав и обработчика. Для полного произвольного набора используйте отдельный запрос/выборку.
32 слова/1000 символов относятся к ограничениям строкового поиска. Урок не отключает ограничения и не включает полнотекстовый поиск.
Два созданных объекта не запускают маршрут и не выполняют задачу. Флаги исполнения только исходные, они не присваиваются для имитации.
Откат отменяет собственные записи, но не произвольные внешние побочные действия. Поэтому нужен новый стенд без обработчиков/подписок/обмена, не рабочая база.
После отката прежние ссылочные значения больше не обозначают существующие записи. Не передавайте их в рабочий интерфейс как сохранённые объекты.
Статические проверки не подтверждают запуск сервера, запись, выбор или откат. runtimeVerifiedScenarios=0, реальных действий1С, сети, файлов и новых резервных копий нет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.