СправочникМенеджер.<Имя справочника>.ПолучитьДанныеВыбора

Методы · GetChoiceData

Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе. Если требуется выполнить поиск более 32 слов или 1000 символов, то свойство ОграничиватьСтрокуПоиска требуется установить в значение Ложь.

Синтаксис

ПолучитьДанныеВыбора(<Параметры>)
Полное описание, параметры и ограничения

СправочникМенеджер.<Имя справочника>.ПолучитьДанныеВыбора (CatalogManager.<Catalog name>.GetChoiceData)

СправочникМенеджер.<Имя справочника> (CatalogManager.<Catalog name>)

ПолучитьДанныеВыбора (GetChoiceData)

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

Синтаксис:
ПолучитьДанныеВыбора(<Параметры>)
Параметры:

<Параметры> (обязательный)
Тип: Структура.
Содержит параметры для формирования списка значений.
Структура, в которой обязательно должны содержаться следующие ключи:
Отбор (Filter) - тип Структура. Отбор, используемый для поиска данных. Значения элементов отбора могут иметь тип Массив, СписокЗначений, ФиксированныйМассив или иной тип, не являющийся коллекцией; для типов Массив, СписокЗначений, ФиксированныйМассив сравнение выполняется с видом сравнения ВСписке, иначе вид сравнения Равно;

СтрокаПоиска (SearchString) - содержит строку, используемую при поиске данных. Для быстрого выбора содержит значение Неопределено;

ВыборГруппИЭлементов (ChoiceFoldersAndItems) (необязательный) - тип ИспользованиеГруппИЭлементов. Указывает использование групп и элементов;

СпособПоискаСтроки (StringSearchMode) (необязательный) - тип СпособПоискаСтрокиПриВводеПоСтроке. Указывает способ поиска при вводе по строке;

ПолнотекстовыйПоиск (FullTextSearch) (необязательный) - тип ПолнотекстовыйПоискПриВводеПоСтроке. Указывает необходимость использования полнотекстового поиска при вводе по строке;

ОграничиватьСтрокуПоиска (LimitSearchString) (необязательный) - тип Булево. Указывает необходимость применения ограничений на искомую строку при вводе по строке.

Возвращаемое значение:
Тип: СписокЗначений.

Описание:

Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе.
Если требуется выполнить поиск более 32 слов или 1000 символов, то свойство ОграничиватьСтрокуПоиска требуется установить в значение Ложь.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.

Примечание:
Если в модуле менеджера в методе указано два параметра, то будет вызван метод ПолучитьДанныеВыбора глобального контекста.
Выполнение метода приводит к вызову события ОбработкаПолученияДанныхВыбора.

В режиме совместимости конфигурации Версия8_3_17 и ниже рекомендуется устанавливать свойство ОграничиватьСтрокуПоиска в значение Истина, чтобы при выполнении сложных запросов генерировалась ошибка.
Использование в версии:

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

Описание изменено в версии 8.3.18.

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

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

Подготовить быстрый выбор двух товаров по списку артикулов

Структура параметров содержит обязательные Отбор и СтрокаПоиска. Массив артикулов означает сравнение ВСписке, а результат — СписокЗначений с двумя своими ссылками.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу на точной платформе 8.5.1.1343. Имя конфигурации УчебныеВыборкиКаталога85, совместимость НеИспользовать. Это не копия рабочих УТ/КА/УНФ/БП; исходные конфигурации и рабочие базы не трогайте. Здесь код не запускался: runtimeVerifiedScenarios=0.

  2. Создайте единственный справочник УчебныеТовары: иерархия групп и элементов, владельцы не назначены, предопределенных данных нет, код Строка длиной 10, автонумерация выключена, контроль уникальности включён, наименование длиной 100. Других объектов хранения данных не добавляйте.

  3. Добавьте единственный реквизит Артикул: Строка длиной 20, использование для групп и элементов, Индексировать. Индекс обязателен для отбора Выбрать по этому реквизиту. Табличных частей нет. Модули справочника/менеджера, подписки, регламентные задания, разделители и расширения должны быть пустыми/отсутствовать.

  4. Создайте два неглобальных общих модуля: УчебныйКаталог85 и УчебныеПримерыКаталога85, Сервер=Да, клиентские флаги=Нет, Вызов сервера=Да, привилегированный режим=Нет. В первый вставьте полный общий модуль подготовки ниже; во второй — полный основной код только одного выбранного урока. Не склеивайте разные процедуры ВыполнитьПример.

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

  6. Данные создаёт сам урок: G01 Основной и G02 Архив в корне; A01 Книга/BOOK-A и A02 Ручка/PEN-A в Основной; B01 Книга/BOOK-B в Архив. Все пять записей существуют лишь внутри собственной транзакции. При успехе и ошибке выполняется откат; фиксации нет.

  7. Будущий ручной запуск вызывает настоящую запись пяти собственных строк в учебной базе до отката. Откат не отменяет внешние действия неизвестных обработчиков, поэтому рабочая конфигурация или её копия здесь недопустима. Запускайте одним пользователем, вне чужой транзакции; существующие данные код не удаляет.

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

Процедура ВыполнитьПример() Экспорт
    УчебныйКаталог85.ПроверитьСвойСтенд();
    НачатьТранзакцию();
    Попытка
        Данные = УчебныйКаталог85.ПодготовитьСвоиТовары();
        Менеджер = Справочники.УчебныеТовары;
        Артикулы = Новый Массив;
        Артикулы.Добавить("BOOK-A");
        Артикулы.Добавить("PEN-A");
        Отбор = Новый Структура("Артикул", Артикулы);
        Параметры = Новый Структура;
        Параметры.Вставить("Отбор", Отбор);
        Параметры.Вставить("СтрокаПоиска", Неопределено);
        Параметры.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
        Параметры.Вставить("СпособПоискаСтроки", Метаданные.СвойстваОбъектов.СпособПоискаСтрокиПриВводеПоСтроке.Начало);
        Параметры.Вставить("ПолнотекстовыйПоиск", Метаданные.СвойстваОбъектов.ПолнотекстовыйПоискПриВводеПоСтроке.НеИспользовать);
        Параметры.Вставить("ОграничиватьСтрокуПоиска", Истина);
        Список = Менеджер.ПолучитьДанныеВыбора(Параметры);
        Если ТипЗнч(Список) <> Тип("СписокЗначений") Или Список.Количество() <> 2 Тогда
            ВызватьИсключение "Ожидался список быстрого выбора из двух своих товаров";
        КонецЕсли;
        Найденные = Новый Соответствие;
        Для Каждого Элемент Из Список Цикл
            Если Элемент.Значение <> Данные.A01 И Элемент.Значение <> Данные.A02 Тогда
                ВызватьИсключение "В быстром выборе появился чужой товар или группа";
            КонецЕсли;
            Найденные.Вставить(Элемент.Значение, Истина);
            Сообщить(Элемент.Представление);
        КонецЦикла;
        Если Найденные.Количество() <> 2 Или Найденные.Получить(Данные.A01) <> Истина
            Или Найденные.Получить(Данные.A02) <> Истина Тогда
            ВызватьИсключение "Набор быстрого выбора должен содержать A01 и A02";
        КонецЕсли;
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    УчебныйКаталог85.ПроверитьОткат(Данные);
    Сообщить("Собственные пять строк отменены; учебный справочник снова пуст");
КонецПроцедуры
УчебныйКаталог85

УчебныеВыборкиКаталога85 → Общие → Общие модули → УчебныйКаталог85

Полный серверный общий модуль: защита стенда, подготовка пяти записей и проверка отката. Не выполнялся.

Процедура ПроверитьСвойСтенд() Экспорт
    Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Каталог = Метаданные.Справочники[0];
    Если Каталог.Имя <> "УчебныеТовары" Или Не Каталог.Иерархический
        Или Каталог.Реквизиты.Количество() <> 1 Или Каталог.Реквизиты.Найти("Артикул") = Неопределено Тогда
        ВызватьИсключение "Нужен собственный иерархический справочник с единственным реквизитом Артикул";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Функция ПодготовитьСвоиТовары() Экспорт
    Если Не ТранзакцияАктивна() Тогда
        ВызватьИсключение "Подготовка допустима только внутри собственной отменяемой транзакции";
    КонецЕсли;
    ПроверкаПустоты = Справочники.УчебныеТовары.Выбрать();
    Если ПроверкаПустоты.Следующий() Тогда
        ВызватьИсключение "Учебный справочник должен быть пуст; чужие записи не изменяются";
    КонецЕсли;
    Пустая = Справочники.УчебныеТовары.ПустаяСсылка();
    Данные = Новый Структура;
    Данные.Вставить("G01", СоздатьСвоюСтроку("G01", "Основной", "GROUP-A", Пустая, Истина));
    Данные.Вставить("G02", СоздатьСвоюСтроку("G02", "Архив", "GROUP-B", Пустая, Истина));
    Данные.Вставить("A01", СоздатьСвоюСтроку("A01", "Книга", "BOOK-A", Данные.G01, Ложь));
    Данные.Вставить("A02", СоздатьСвоюСтроку("A02", "Ручка", "PEN-A", Данные.G01, Ложь));
    Данные.Вставить("B01", СоздатьСвоюСтроку("B01", "Книга", "BOOK-B", Данные.G02, Ложь));
    Данные.Вставить("Пустая", Пустая);
    Возврат Данные;
КонецФункции

Функция СоздатьСвоюСтроку(Код, Наименование, Артикул, Родитель, Группа)
    Если Группа Тогда
        Объект = Справочники.УчебныеТовары.СоздатьГруппу();
    Иначе
        Объект = Справочники.УчебныеТовары.СоздатьЭлемент();
    КонецЕсли;
    Ссылка = Справочники.УчебныеТовары.ПолучитьСсылку(Новый УникальныйИдентификатор);
    Объект.УстановитьСсылкуНового(Ссылка);
    Объект.Код = Код;
    Объект.Наименование = Наименование;
    Объект.Артикул = Артикул;
    Объект.Родитель = Родитель;
    Объект.Записать();
    Прочитанный = Ссылка.ПолучитьОбъект();
    Если Прочитанный = Неопределено Тогда
        ВызватьИсключение "Собственная учебная запись не прочитана";
    КонецЕсли;
    Если Прочитанный.Код <> Код Или Прочитанный.Наименование <> Наименование
        Или Прочитанный.Артикул <> Артикул Или Прочитанный.Родитель <> Родитель
        Или Прочитанный.ЭтоГруппа <> Группа Тогда
        ВызватьИсключение "Прочитанная учебная строка отличается от подготовленной";
    КонецЕсли;
    Возврат Ссылка;
КонецФункции

Процедура ПроверитьОткат(Данные) Экспорт
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Собственная транзакция не завершена";
    КонецЕсли;
    Для Каждого Имя Из СтрРазделить("G01,G02,A01,A02,B01", ",") Цикл
        Если Данные[Имя].ПолучитьОбъект() <> Неопределено Тогда
            ВызватьИсключение "Собственная запись осталась после отката: " + Имя;
        КонецЕсли;
    КонецЦикла;
    ПроверкаПустоты = Справочники.УчебныеТовары.Выбрать();
    Если ПроверкаПустоты.Следующий() Тогда
        ВызватьИсключение "После отката справочник не пуст";
    КонецЕсли;
КонецПроцедуры
УчебныйПульт85.Пульт

УчебныеВыборкиКаталога85 → Обработки → УчебныйПульт85 → Формы → Пульт → Модуль

Полный модуль управляемой формы только собственной обработки. Не выполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебныеПримерыКаталога85.ВыполнитьПример();
КонецПроцедуры

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

  1. Отбор — структура с ключом Артикул. Её значение Массив BOOK-A,PEN-A означает ВСписке; это контракт ПолучитьДанныеВыбора, а не ограничение одноэлементного фильтра Выбрать.

  2. СтрокаПоиска=Неопределено задаёт быстрый выбор без строки ввода. Оба обязательных ключа присутствуют, даже когда строка поиска отсутствует.

  3. ВыборГруппИЭлементов.Элементы исключает группы. Режим начала строки и отказ от полнотекстового поиска заданы явно; при быстром выборе они не превращают Неопределено в строковый поиск.

  4. Метод возвращает СписокЗначений. Читаем Значение элемента как ссылку, Представление только выводим; порядок и конкретный текст представления не используются как идентификатор.

  5. Проверяем количество и набор A01/A02. Обращение выполняется к серверу и вызывает событие менеджера ОбработкаПолученияДанныхВыбора; здесь обработчик намеренно пустой.

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

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

  1. Ожидается СписокЗначений из двух ссылок A01/A02 и их представлений. B01 и группы в список не входят; после отката справочник пуст.

  2. Для проверки ограничения в копии кода удалите PEN-A из исходного массива, оставив проверку количества 2: должно быть исключение и откат.

  3. Для отдельного опыта поиска строки меняйте СтрокаПоиска только после проверки настройки ввода по строке и заново задавайте ожидания; текущий пример проверяет быстрый выбор, а не автодополнение UI.

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

Подготовлен и проверен стандартный список быстрого выбора по двум артикулам, без открытия форм и записи результата выбора. runtimeVerifiedScenarios=0.

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

  1. СписокЗначений и СправочникВыборка — разные результаты разных методов. Нельзя вызывать Следующий у списка или переносить все его параметры в Выбрать.

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

  3. ОграничиватьСтрокуПоиска=Истина сохраняет ограничения поиска; для длинного внешнего ввода проектируют отдельную проверку, а не безусловно выключают лимит.

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

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

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

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

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