Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 фев 2024, 01:53

Как настроить быстрый выбор в выпадающем списке?

Автор Yury_B, 15 дек 2023, 13:29

0 Пользователей и 1 гость просматривают эту тему.

Yury_B

Добрый день.
Поле со списком автомобилей.
Быстрый поиск настроен на наименование из справочника. Хочу настроить быстрый поиск по номерному знаку из другого поля справочинка. Как это сделать?

antoneus

В менеджере справочника написать предопределенную процедуру ОбработкаПолученияДанныхВыбора. Или, если такой поиск нужен только в этой форме - написать обработчик события поля АвтоПодбор.

LexaK

Yury_B, или в элементе, добавьте обработчик события АвтоПодбор
пример,
&НаКлиенте
Процедура таблцаТоваровНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

СтандартнаяОбработка = ложь;
//Если Текст > "" Тогда //не пустая строка
Если СтрДлина(Текст) > 2 Тогда //переделано на ввод хотя бы трех символов
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(ПоискТовараПоТексту(Текст));
КонецЕсли;

КонецПроцедуры
если помогло нажмите: Спасибо!

Yury_B

LexaK, Не понимаю где ошибка
{Документ.Путевой.Форма.ФормаДокумента.Форма(476)}: Ошибка при вызове метода контекста (ЗагрузитьЗначения)
        ДанныеВыбора.ЗагрузитьЗначения(ПоискАвтомобиляПоНомеру(Текст));
по причине:
Несоответствие типов (параметр номер '1')
Несоответствие типов (параметр номер '1')
&НаКлиенте
    Процедура АвтомобильАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
         СтандартнаяОбработка = ложь;
    //Если Текст > "" Тогда //не пустая строка
    Если СтрДлина(Текст) > 2 Тогда //переделано на ввод хотя бы трех символов
        ДанныеВыбора = Новый СписокЗначений;
        ДанныеВыбора.ЗагрузитьЗначения(ПоискАвтомобиляПоНомеру(Текст));
    КонецЕсли;
    КонецПроцедуры

&НаСервере
Функция   ПоискАвтомобиляПоНомеру(Текст)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Автомобили.Наименование КАК Наименование,
        |    Автомобили.ГосНомер КАК ГосНомер
        |ИЗ
        |    Справочник.Автомобили КАК Автомобили
        |ГДЕ
        |    Автомобили.ГосНомер = &ГосНомер";
   
    Запрос.УстановитьПараметр("ГосНомер", Текст);
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
        Наименование = ВыборкаДетальныеЗаписи.Наименование;
        Возврат Наименование
КонецФункции

LexaK

Yury_B, в список значений грузить надо массив!
сейчас запрос подправлю...
если помогло нажмите: Спасибо!

LexaK

Yury_B, доработка (понятное дело без проверки, могут быть опечатки)
&НаСервереБезКонтекста
Функция   ПоискАвтомобиляПоНомеру(Текст)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Автомобили.Ссылка //как правило нужна именно Ссылка
        |//    Автомобили.Наименование КАК Наименование,
        |//    Автомобили.ГосНомер КАК ГосНомер
        |ИЗ
        |    Справочник.Автомобили КАК Автомобили
        |ГДЕ
        |    Автомобили.ГосНомер подобно &ГосНомер";
   
    Запрос.УстановитьПараметр("ГосНомер", "%"+Текст+"%"); //для поиска по Чпсти номера
   
    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

КонецФункции
если помогло нажмите: Спасибо!

Yury_B

LexaK, Одно но - срабатывает на наборе 3-го значения, а когда нажимаю 4-е пропадают предыдущие и начинается заново. Например: набираю 2425 получаю 5 в итоге

LexaK

Yury_B, а вы код и коменты умеете читать?

ЦитироватьОдно но - срабатывает на наборе 3-го значения,


   Если СтрДлина(Текст) > 2 Тогда //переделано на ввод хотя бы трех символов
 
что в этой команде не понятного?

(а когда нажимаю 4-е пропадают предыдущие)
вот это не понятно почему, что-то другое неправильно настроено
если помогло нажмите: Спасибо!

Yury_B

LexaK, В команде понятно, что срабатывает на 3-м значении, непонятно почему пропадает.

LexaK

понятно почему происходит "сброс" вводимой строки поиска

так как при поиске происходит обращение к серверу (запрос с подобно)
то после "возвращения" с сервера происходит перевывод формы с потерей вводимого текста,
можно этот момент обойти/решить программно.

странно пытался запомнить Текст (ввода поиска)
ТекстПоиска = Текст; //и больше ни чего еще
после перезапуска обработки эффект очистки вводимого текста - пропал!  :dfbsdfbsdf:   (1С однако...)

(на этом и забросил проверку)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск