|
Поиск номенклатуры по наименованию | ☑ | ||
---|---|---|---|---|
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) думаю, перевести не сложно
| ТоварыНаСкладахОстатки.Номенклатура.Наименование ПОДОБНО &Наименование в цикле добавлять к условию запроса |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |