Имя: Пароль:
1C
1С v8
Поиск номенклатуры по наименованию
0 Zeratul
 
30.09.11
16:06
Хочу сделать следующее - есть поле ввода где юзер пишет ключевые слова для поиска номенклатуры например вент*160 (вентилятор alpine 160)


Номенклатура = Номенклатура.Значение;
Буфер = СокрЛ(Номенклатура);

Ключ = СтрЗаменить(Буфер,"*"," ");

ЭлементПоиска = Строка(Ключ);

ЭлементПоиска = "%" + ЭлементПоиска + "%";


Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =

"ВЫБРАТЬ
|    ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК Номенклатура,
|    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
|    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
|    ТоварыНаСкладахОстатки.Номенклатура.Код КАК Код
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
|    ТоварыНаСкладахОстатки.Номенклатура.Наименование ПОДОБНО &Наименование
|    И ТоварыНаСкладахОстатки.КоличествоОстаток > 0";

Запрос.УстановитьПараметр("Наименование", ЭлементПоиска);

ВременнаяТаблица = Запрос.Выполнить().Выгрузить();
ВременнаяТаблица.Колонки.Добавить("ДокументПоступления");
ВременнаяТаблица.Колонки.Добавить("ДатаПоступления");



Для Каждого СтрокаТЧ ИЗ ВременнаяТаблица Цикл

Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", СтрокаТЧ.ХарактеристикаНоменклатуры);

Запрос.Текст =
  "ВЫБРАТЬ ПЕРВЫЕ 1
  |    Закупки.Регистратор КАК ДокументПоступления,
  |    Закупки.Период КАК ДатаПоступления
  |ИЗ
  |    РегистрНакопления.Закупки КАК Закупки
  |ГДЕ
  |    Закупки.Номенклатура = &Номенклатура
  |    И Закупки.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
  |
  |УПОРЯДОЧИТЬ ПО
  |    ДатаПоступления УБЫВ";
 

Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
           СтрокаТЧ.ДокументПоступления = Результат.ДокументПоступления;
           СтрокаТЧ.ДатаПоступления = Результат.ДатаПоступления;
       //    СтрокаТЧ.ЦеныНоменклатуры = Результат.ЦеныНоменклатуры;
       КонецЦикла
       КонецЦикла;
Таблица.Загрузить(ВременнаяТаблица);


не пойму почему не работает...
1 butterbean
 
30.09.11
16:08
* надо было на % заменить...
а вообще запрос в цикле - кошмар
2 vmv
 
30.09.11
16:09
велосипед, в 8.2 такой поиск уже встроенный
3 Zeratul
 
30.09.11
16:12
(2) мне это для УТ нужно))
(1) спасибо большое все получилось, я совсем забыл между слов % поставить)))
4 Renat11111
 
30.09.11
16:15
(0) с такими запросами в дворники иди!
5 Zeratul
 
30.09.11
16:26
еще вопрос, он ищет только если вводить первые несколько слов наименования!
Допустим ищем вентилятор alpine 160
если ввести в поиск 160*вент то он ничего не найдет
как сделать чтобы искал?
6 unregistered
 
30.09.11
16:30
(5) Используй полнотекстовый поиск с ограничением области поиска. Текст поискового запроса будет "вент # 160". Ограничь процент нечеткости. Первый элемент поисковой выдачи скорее всего и будет твоей номенклатурой.
7 vinogradъ
 
30.09.11
16:36
в клюшках делал:
[code]
sql = "                      
|select n.id [Ном $Справочник.Номенклатура]                                    
|from    $Справочник.Номенклатура n
|where ";
Для й = 1 По КолПодстрок Цикл                                    
   Если й > 1 Тогда
   sql = sql + " and ";
   КонецЕсли;
   sql = sql + "n.descr like '%" + СокрЛП(СтрПоиска[й]) + "%'";
КонецЦикла;
sql = sql + "order by n.descr";
[/code]
8 vinogradъ
 
30.09.11
16:37
ищет по фрагментам наименования в любом порядке
9 Zeratul
 
30.09.11
16:41
(7) а на 1с как это будет выглядеть?)
10 vinogradъ
 
30.09.11
16:43
(9) думаю, перевести не сложно
|    ТоварыНаСкладахОстатки.Номенклатура.Наименование ПОДОБНО &Наименование
в цикле добавлять к условию запроса
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс