БизнесПроцессМенеджер.<Имя бизнес-процесса>.ПолучитьДанныеВыбора

Методы · GetChoiceData

Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе. Если требуется выполнить поиск более 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; отдельный управляемый клиентский модуль вызова.

Подготовка

  1. Новая пустая конфигурация УчебныеДанныеВыбора85 на платформе8.5.1.1343, управляемое приложение и толстый клиент Windows. Это другой стенд, не УчебныеФормыМенеджера85.

  2. УчебнаяЗадача85: номер Строка9 с автонумерацией, Наименование100. УчебныйПроцесс85: номер Строка9, автонумерация, Задача=УчебнаяЗадача85; карта Старт → Опыт85 → Финиш без адресации/обработчиков.

  3. У обоих объектов Маркер85 Строка36, Индексирование=Индексировать, без обязательного заполнения. Исследуемый вид перед опытом пуст, нет чужих или ранее сохранённых записей.

  4. Модули объектов, менеджеров и точек пустые: нет ПередЗаписью с запретом из урока форм и нет ОбработкаПолученияДанныхВыбора. Запрос выбора должен выполнять стандартную обработку.

  5. У своего вида включите стандартный быстрый выбор. Поля Ввод по строке: Наименование у задачи, Номер у процесса; поиск строки здесь выключен значением Неопределено.

  6. Общие → Общие модули → УчебныйЦикл85: Сервер и ВызовСервера Истина, Глобальный/Привилегированный Ложь, остальные флаги и повторное использование выключены. Вставьте весь основной код одного урока.

  7. Обработки → Запуск85 → управляемая форма Форма: ПодтверждаюПустойСтенд85 и Занято85 Булево исходно Ложь, Итог85 Строка неограниченной длины только для просмотра.

  8. Назначьте команду ВыполнитьПример85 кнопке и установите Действие=ВыполнитьСвойЦикл85. Вставьте отдельный полный модуль формы из дополнительного блока; процедура ВыполнитьСвойЦикл85 передаёт согласие в УчебныйЦикл85.ВыполнитьПример85.

  9. F7 и обновление только своего стенда. runtimeVerifiedScenarios=0: 1С, серверный вызов, запись/выбор/откат здесь не выполнялись.

  10. Код сам создаёт две разные плановые ссылки, проверяет их незанятость, создаёт настоящие объекты, пишет их только в свою транзакцию и откатывает её.

  11. После согласия будущий ручной опыт сравнивает4 результата: скалярный маркер2, массив двух ссылок2, массив одной ссылки1, отсутствующий маркер0.

  12. Не выносите результат в живую форму выбора во время транзакции, не добавляйте ФиксироватьТранзакцию и не копируйте код в рабочую базу.

Функция ВыполнитьПример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 = Ложь;
КонецПроцедуры

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

  1. Проверка стенда, согласия, версии, отсутствия чужой транзакции и пустого собственного вида выполняется до создания записей.

  2. Две реальные фабрики объектов получают собственные незанятые ссылки, дату и общий уникальный маркер; записи становятся видны своему серверному транзакционному вызову.

  3. Параметры содержат обязательные Отбор и СтрокаПоиска. Неопределено означает быстрый выбор без строкового поиска; ОграничиватьСтрокуПоиска=Истина не снимает защиту поиска.

  4. Скалярный Маркер85 задаёт Равно и возвращает свою пару. Каждое значение реально имеет ссылочный тип данного учебного вида и непустое пользовательское представление.

  5. Массив в Отбор.Ссылка задаёт В списке. Сначала две ссылки, затем после удаления второго элемента из массива только первая; состав списка проверяется, порядок не предполагается.

  6. Несуществующий собственный маркер возвращает пустой СписокЗначений, а не Неопределено и не пустую ссылку.

  7. Собственная транзакция откатывается при успехе и ошибке. После отката проверяется отсутствие обоих собственных объектов; ни одно выбранное значение не выдаётся за сохранённую бизнес-запись.

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

  1. Получены количества2,2,1,0 с правильными реальными собственными ссылками.

  2. Результат каждого вызова — СписокЗначений; элементы имеют Значение своего ссылочного типа и непустое Представление.

  3. Список одной ссылки содержит только первую; повторные/посторонние значения приводят к исключению.

  4. Скалярный отбор и массив ссылок объясняются разными сравнениями, без ручного построения строки запроса.

  5. После отката оба ПолучитьОбъект возвращают Неопределено; нет незакрытой транзакции, старта маршрута, выполнения или удаления.

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

При будущем ручном запуске проверены реальные данные быстрого выбора и сравнения Равно/В списке; созданная собственная пара полностью откатывается.

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

  1. СписокЗначений состоит из элементов; ссылкой является Элемент.Значение, а текстом Элемент.Представление. Сам элемент не равен бизнес-ссылке.

  2. Отбор и СтрокаПоиска обязательны даже для быстрого выбора. Неопределено в СтрокаПоиска — не отсутствие результата и не произвольная пустая строка.

  3. Для Массив/ФиксированныйМассив/СписокЗначений в значении отбора применяется В списке, для скаляра Равно. В этом уроке массив содержит только реальные собственные ссылки.

  4. Параметры.Отбор содержит тот же массив СвоиСсылки; Удалить(1) меняет его в памяти. Это удаление элемента массива, не удаление записи базы.

  5. Нет гарантии порядка стандартных данных выбора; проверяется принадлежность/число уникальных ссылок, не позиция отображения.

  6. Метод менеджера получает ровно один объект параметров. Два аргумента могут переадресовать вызов глобальному ПолучитьДанныеВыбора; это другой контракт.

  7. Метод вызывает ОбработкаПолученияДанныхВыбора менеджера. Свой пустой модуль сохраняет стандартную обработку; произвольный рабочий обработчик может изменить результаты или сделать внешнее действие.

  8. Это не универсальный поиск всех записей: результат зависит от настроек выбора, прав и обработчика. Для полного произвольного набора используйте отдельный запрос/выборку.

  9. 32 слова/1000 символов относятся к ограничениям строкового поиска. Урок не отключает ограничения и не включает полнотекстовый поиск.

  10. Два созданных объекта не запускают маршрут и не выполняют задачу. Флаги исполнения только исходные, они не присваиваются для имитации.

  11. Откат отменяет собственные записи, но не произвольные внешние побочные действия. Поэтому нужен новый стенд без обработчиков/подписок/обмена, не рабочая база.

  12. После отката прежние ссылочные значения больше не обозначают существующие записи. Не передавайте их в рабочий интерфейс как сохранённые объекты.

  13. Статические проверки не подтверждают запуск сервера, запись, выбор или откат. runtimeVerifiedScenarios=0, реальных действий1С, сети, файлов и новых резервных копий нет.

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

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

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

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

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