Ввод по строке

image_pdfimage_print

Печать (Ctrl+P)
Для прикладных объектов (справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры, бизнес-процессы и задачи, а также планы обмена) в свойстве Ввод по строке можно указать те реквизиты, по которым выполняется поиск. Если ввод по строке разрешен (заданы соответствующие реквизиты), то допустимо в поле ввода соответствующего типа не выполнять выбор из формы объекта, а ввести информацию, которая содержится в заданных реквизитах объекта.
Например,  в  справочнике Номенклатура ввод по строке разрешен у реквизита наименования. У справочника есть несколько наименований, в котором находится несколько товаров, начинающихся со слова Ве. Тогда, введя в поле ввода
номенклатуры подстроку  Ве, мы получим список товаров, которые начинаются с этого слова

Ввод по строке

В качестве реквизитов, по которым будет выполняться поиск, могут выступать:
● Для справочников, планов видов характеристик, планов счетов, планов видов расчета, планов обмена – Код и Наименование.
● Для документов – Номер.
● Для бизнес-процессов и задач – Номер и Наименование.
● Реквизиты, имеющие тип Число или Строка, для которых свойство Индексировать имеет значение Индексировать или Индексировать с доп. упорядочиванием. Примером последних может служить поле для ввода артикула, штрихкода, ИНН.

Настройка ввода по строке

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

Настройка ввода по строке

Если полей несколько, то установить порядок их следования. При поиске по строке поиск выполняется в полях в той последовательности, в которой они приведены в данном диалоге. Например, для элемента справочника Номенклатура ввод может осуществляться как по коду, так и по артикулу. Если значение кода одного элемента совпадет со значением артикула другого, то в список найденные значения попадут в том порядке, в котором указаны при настройке.
ВНИМАНИЕ! При выполнении поиска данных (во время ввода по строке) действуют ограничения доступа к данным .
Кроме указания того, по каким полям будет выполняться поиск, система позволяет дополнительно настроить некоторые параметры поиска. Свойство Способ поиска строки предназначено для указания способа поиска строки:
● Только в начале поля, выбранного для ввода по строке (значение Начало). В этом случае поисковая строка не разбивается на слова, а введенный текст ищется целиком. Например, если поиск выполняется в следующих данных: Иванов Максим и Максимов, то при вводе в поле ввода слова Максим будут найдены данные Максимов, а при вводе в поле ввода Иван Макс не будет найдено ничего.
● В любой части поля (значение Любая часть). Если строка поиска состоит из нескольких слов и поиск выполняется в любой части, то для поиска используется запрос, аналогичный следующему (для двух полей и двух слов):

(Поле1 ПОДОБНО “%Слово1%” ИЛИ Поле2 ПОДОБНО “%Слово1%”) И (Поле1 ПОДОБНО “%Слово2%” ИЛИ Поле2 ПОДОБНО “%Слово2%”)
Свойство Полнотекстовый поиск позволяет задействовать полнотекстовый поиск при организации ввода по строке. Полнотекстовый поиск нельзя использовать для таблиц внешних источников данных. Использование полнотекстового поиска обладает несколькими особенностями:
1. Полнотекстовый поиск всегда выполняется по началу слов.
2. Полнотекстовый поиск используется для первоначального отбора объектов, в которых будет выполняться дальнейший поиск (уменьшается количество объектов, в которых будет выполняться поиск).
3. К результатам полнотекстового поиска будут добавлены все непроиндексированные ссылки из таблицы, по которой выполнялся ввод по строке.
4. В списке отобранных объектов будет выполняться поиск по полям, которые отобраны для использования в механизме ввода по строке способом, который задан свойством Способ поиска строки.
5. Для каждого слова из поискового запроса в конце добавляется символ “*”.
Указанные особенности могут привести к тому, что:
● Полнотекстовый поиск может чрезмерно сузить набор данных для поиска, если используется поиск по любой части вместе с полнотекстовым поиском. В результате данные найдены не будут. При этом отключение полнотекстового поиска приведет к нахождению нужных данных. Это произойдет потому, что полнотекстовый поиск ищет только по началу слова. Если искомый текст не находится в начале слова – ввод по строке не найдет такие данные.
● Неактуальный индекс полнотекстового поиска может негативно сказаться на результатах поиска.
● Если полнотекстовый поиск завершился с ошибкой, то будет применяться обычный поиск, в соответствии со свойством Способ поиска строки. Это может привести к ситуации, когда найденный объект превратиться в ненайденный (для способа поиска по любой части слова). Например: в поле ввода введен символ «а», который есть не только в начале, а и в середине массива слов, в котором выполняется поиск. Для большого набора данных полнотекстовый поиск завершится с ошибкой (слишком большой результат поиска) и с помощью обычного поиска будут найдены данные, которые внутри себя содержат букву «а». Затем пользователь введет еще одну букву (например, «ц») и поисковая строка станет «ац». В этом случае полнотекстовый поиск отберет только те данные, которые начинаются на «ац» и проигнорирует те данные, которые содержат «ац» внутри себя.
Если выпадающий список формируется системой (а не с помощью программного кода прикладного решения), то представления найденных объектов формируются по специальному алгоритму. Представление найденного объекта состоит из двух частей: представление реквизита, содержащего строку поиска (обязательная часть) и дополнительное представление (не обязательная часть).
Собственно представление формируется следующим образом:
● Определяется поле, содержащее поисковую строку:
● В случае использования полнотекстового поиска или при обычном поиске по нескольким словам таким полем будет первое поле, из состава полей, указанных в свойстве Ввод по строке, в котором найдено первое слово из поисковой строки.
● При использовании обычного поиска по одному слову таким полем будет реквизит, в котором выполнялся поиск.
● Представление значения, расположенного в определенном поле будет являться обязательной частью представления найденного объекта для выпадающего списка.
● Определяется, необходимо или нет формировать дополнительное представление. Для этого определяется состав полей, который будет использоваться для формирования дополнительного представления:
● Если у найденного объекта есть только одно поле, используемое для формирования представления, и поисковая строка обнаружена в этом реквизите – используются поля альтернативного представления.
● В противном случае используются поля основного представления. Список полей основного и альтернативного представления приведен ниже.
● Если список полей для формирования дополнительного представления является пустым – дополнительное представление не формируется. В противном случае дополнительное представление формируется следующим образом:
● В круглые скобки заключается текстовое представление всех полей, которые выбраны для формирования дополнительного представления,через “, “;
● Сформированное дополнительное представление добавляется справа, через пробел, к обязательной части представления найденного объекта.
● Для формирования основного и альтернативного представления используются следующие поля:
● Справочник, бизнес-процесс, план видов характеристик, план счетов, план видов расчета:
● Основное представление: Наименование, Код.
● Альтернативное представление: в зависимости от того, какое выбрано основное представление, для альтернативного представления используется оставшееся поле.
● Документ:
● Основное представление: Номер, Дата.
● Альтернативное представление: отсутствует.
● Задача:
● Основное представление: Наименование, Номер, Дата.
● Альтернативное представление: отсутствует.
● Внешний источник данных:
● Основное представление: поле указанное в свойстве Поле представления таблицы внешнего источника данных .
● Альтернативное представление: отсутствует.
Свойство Режим получения данных выбора управляет тем, как платформа осуществляет поиск данных при вводе по строке. Если свойство установлено в значение Фоновый, то для получения данных используется фоновое задание, а в выпадающем списке отображается анимированная картинка, аналогичная фоновому выполнению отчета (см. здесь). Фоновое задание используется в том случае, если за 200 мс требуемые данные не получены для отображения пользователю. Для файлового варианта информационной базы возможно получение данных в фоновом режиме в том случае, если в момент получения данных не выполняется другое фоновое или регламентное задание. Во время фонового получения результатов выбора пользователь может продолжать редактировать поле ввода. Указанием значения Непосредственно в качестве значения свойства приводит к тому, что поиск выполняется без использования фоновых заданий.
При настройке ввода по строке рекомендуется следовать следующим рекомендациям:
● Значение Фоновый для свойства Режим получения данных выбора рекомендуется устанавливать для объектов, в которых планируется большое количество данных.
● Полнотекстовый поиск рекомендуется включать для объектов, в которых ожидается большое количество данных.
● Поиск строки в любом месте рекомендуется включать совместно с фоновым поиском, либо в таблицах, в которых не ожидается большого количества данных. Желательно, так же при большом количестве данных, если включается поиск в любом месте, то включать и полнотекстовый поиск (чтобы большая часть поисков выполнялась бы через полнотекстовый поиск).

Особенности поведения поля ввода

При вводе данных в поле ввода следует учитывать некоторые особенности работы со списком выбора. Если в результате набора обнаружено несколько объектов, начинающихся с введенного текста, то список этих объектов будет расположен в выпадающем списке. Во время ввода пользователь может с помощью кнопок Стрелка вверх и Стрелка вниз передвигаться по списку, при этом продолжая набор текста в самом поле. В этом случае для осуществления выбора требуется выбрать необходимый элемент и подтвердить выбор нажатием кнопки Enter или Tab. Для формирования списка
выбора для поля ввода используется следующий алгоритм:
1. Выполняется получение данных при выполнении поиска в первом поле (из списка выбранных полей) по началу строки и по подстроке. Количество записей, полученных в результате поиска по началу строки, будем называть РС, а количество записей, полученных в результате поиска по подстроке, будем называть РП.
2. Если РС+РП<=10, то в выпадающий список попадут все результаты каждого поиска.
3. Если РП и РС больше 5 (каждый), то в список выбора попадет по 5 записей из каждого списка.
4. Если любое из значений РП или РС меньше 5, то в выпадающий список попадут все записи из меньшего списка и столько записей из большего списка, чтобы дополнить выпадающий список до 10.
5. Если общее количество записей в выпадающем списке оказалось меньше 10, то выполняем алгоритм с шага 1 для следующего поля из списка выбранных полей, используя разницу между 10 и количеством полученных результатов как число необходимых к получению данных на следующем шаге.

Программное формирование списка выбора

Если разработчика не устраивает, каким образом формируется список выбора, он может переопределить его самостоятельно.
Сделать это можно двумя способами:
● Непосредственно в форме – в этом случае особое формирование списка выбора будет работать только для этого, единственного поля. Для этого необходимо определить обработчики событий НачалоВыбора, АвтоПодбор и ОкончаниеВводаТекста.
● В модуле менеджера соответствующего объекта – в этом случае особое формирование списка выбора будет выполняться для всех полей ввода, в которых вводятся значения используемого объекта.
Если поле связано с данными, имеющими тип ссылки на прикладной объект (например, СправочникСсылка, ПеречислениеСсылка и т. д.), то список выбора можно сформировать или в модуле менеджера соответствующего объекта, или с помощью обработчиков модуля формы. В остальных случаях список выбора можно сформировать только с помощью обработчиков модуля формы.
Подробнее остановимся на втором способе.
Для программного формирования списка выбора необходимо переопределить обработчик события ОбработкаПолученияДанныхВыбора менеджера
объекта. Обработчик получает набор параметров, определяющих условия формирования списка выбора. Набор параметров представляет собой
структуру, которая содержит:
● Строку поиска – текстовую строку, содержащую текст, который пользователь ввел в поле ввода. Данное свойство присутствует всегда (свойство
СтрокаПоиска).
● Отбор – структура, которая описывает отбор так, как его описывает параметр формы Отбор для расширения формы для динамического списка.
Данное свойство присутствует всегда.
Отбор, указанный в данном свойстве, будет конвертироваться (по возможности) в запрос полнотекстового поиска, уточняя этот запрос для
повышения скорости поиска.
● Свойство, которое указывает режим выбора групп и элементов (передается только для иерархических списков) – свойство ВыборГруппИЭлементов.
● Свойство, которое определяет способ поиска строки: по началу слова или по любой части (свойство СпособПоискаСтроки).
● Необходимость использования полнотекстового поиска (свойство ПолнотекстовыйПоиск).
● Режим получения данных выбора (свойство РежимПолученияДанныхВыбора).
● Кроме этого, в структуре передаются элементы, которые заданы в свойствах элемента формы – Связи параметров выбора (см. здесь) и Параметры
выбора (см. здесь).
Кроме того, в обработчик передается переменная, в которую следует вернуть сформированный список выбора, и параметр СтандартнаяОбработка,
который определяет поведение системы после того, как произойдет выход из обработчика.
Если разработчик устанавливает параметр СтандартнаяОбработка в значение Ложь, то ему необходимо самому полностью формировать список выбора.
Если флажок стандартной обработки установить в значение Истина, то можно предоставить системе возможность сформировать список выбора, но при
этом можно модифицировать параметры выбора (добавить дополнительные значения отбора, изменить режим выбора групп и элементов и т. д.).
Примечание 1. Если система сама формирует список выбора, при формировании списка учитываются ограничения доступа к данным .
Примечание 2. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации различных механизмов получения списков выбора.
Так, следующий код в случае любого текста, вводимого пользователем, будет предоставлять выбор из трех товаров, с кодами 00000002, 00000003 и 00000004.
Пример:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду(“00000002”));
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду(“00000003”));
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду(“00000004”));

СтандартнаяОбработка = Ложь;
КонецПроцедуры

В следующем примере отбор, который сформировало поле ввода, будет расширен установкой дополнительного отбора так, чтобы в список выбора не попали услуги. При этом все формирование списка выбора берет на себя система.
Пример:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Параметры.Отбор.Вставить(“Вид”, Перечисления.ВидыТоваров.Товар);
КонецПроцедуры

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Товары.Ссылка как Товар
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Наименование ПОДОБНО &Наименование”;
Запрос.УстановитьПараметр(“Наименование”, Параметры.СтрокаПоиска + “%”);
Результат = Запрос.Выполнить();
ТаблицаРезультатов = Результат.Выгрузить();
МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку(“Товар”);
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров);
СтандартнаяОбработка = Ложь;
КонецПроцедуры

Также следует обратить внимание на еще один способ формирования списка выбора: передачу в качестве значения элемента списка значений не ссылки на искомый объект (как в примерах выше), а структуру особого содержания.
Эта структура состоит из следующих элементов:
● Значение – собственно значение выбираемого элемента. Элемент структуры с таким именем должен быть обязательно.
● ПометкаУдаления – признак, что выбираемое значение помечено на удаление в информационной базе. Элемент структуры с таким именем не является обязательным.
● Предупреждение – строка с текстом предупреждения, которое отобразит «1С:Предприятие» при выборе такого элемента из списка значений.
Элемент структуры с таким именем не является обязательным.
Если в структуре свойство ПометкаУдаления равно значению Истина и не указано свойство Предупреждение, то система автоматически сформирует текст предупреждения. Если свойство Предупреждение указано, то отображается именно оно. Следует помнить, что текст Предупреждение завершается вопросом Продолжить? и отображается в качестве вопроса с вариантами ответа Да и Нет.
Далее будет показана модификация предыдущего примера, в котором для складов с установленным в значение Истина реквизитом НеИспользовать будет сформировано предупреждение Этот склад не должен использоваться.
Также можно совмещать в одном списке выбора и значения типа Структура, и простые значения.
Пример:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
// Сформируем список с предупреждениями
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| Склады.Ссылка,
| Склады.Наименование,
| Склады.НеИспользовать
|ИЗ
| Справочник.Склады КАК Склады”;
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура(“Значение”, ВыборкаДетальныеЗаписи.Ссылка);
// Заполним предупреждение
Если ВыборкаДетальныеЗаписи.НеИспользовать Тогда
Структура.Вставить(“Предупреждение“, “Этот склад не должен использоваться!”);
КонецЕсли;
Элемент = ДанныеВыбора.Добавить();
Элемент.Значение = Структура;
Элемент.Представление = ВыборкаДетальныеЗаписи.Наименование;
КонецЦикла;
КонецПроцедуры
ПРИМЕЧАНИЕ. Если представления элементов (в том числе и элементов структуры с именем Значение) не указаны в явном виде, то они будут получены автоматически.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *