Имя: Пароль:
1C
1C 7.7
v7: Поиск по подстроке прямым запросом
0 Fiasko
 
16.11.12
00:06
Господа, а это вообще реализуемо? Делал кто-нибудь подобное? Хотел оптимизировать типовой "ПодборОбъектов", но что-то засомневался... Может я просто sql-язык плохо знаю..
1 Азат
 
16.11.12
00:07
а чем тебе LIKE '%ТВОЯСТРОКА%' не катит?
2 exchang
 
16.11.12
00:08
(1) exactly
3 Fiasko
 
16.11.12
00:10
понял, буду пытаться.. спасибо
4 Fiasko
 
17.11.12
16:13
Запрос работает, когда я непосредственно запускаю его с фильтром с конкрентным значением, а хотелось бы получать данные с фильтром по переменной.. Запрос, приведенный ниже, ничего не находит..
       стрПоиска = "efg";
       Запрос.УстановитьТекстовыйПараметр("Подстрока",стрПоиска);

       ТекстЗапроса = "
       |SELECT
       |    Спр.ID as [Номенклатура $Справочник.Номенклатура],
       |    Спр.Code as Код,
       |    Спр.PARENTID as [Производитель $Справочник.Номенклатура],
       |    Спр.Descr as Наименование,
       |    $Спр.КатНомер as КатНомер
       |FROM
       |    $Справочник.Номенклатура as Спр
       |WHERE $Спр.КатНомер LIKE '%Подстрока%'
       |"
       ;
Подскажите, пожалуйста :)
5 Злопчинский
 
17.11.12
16:27
|WHERE $Спр."+имяРеквизита+" LIKE
6 Fiasko
 
17.11.12
16:29
не, наоборот, переменная после like должна быть..
7 ADirks
 
17.11.12
16:30
'%'+:Подстрока+'%'
8 Fiasko
 
17.11.12
16:33
точно! Спасибо :)
9 Злопчинский
 
17.11.12
16:37
//======================================================================
Функция ПоискПоПодстрокеSQlite()
   
   Попытка
       глВКлайт.Открыть(":memory:");
       Запрос = глВКлайт.НовыйЗапрос();
       Запрос.ВыполнитьЗапрос("create virtual table Товары using dbeng(Справочник.Номенклатура)");
   Исключение
       //тОшибка = "инфо: проблема при выполнении запроса инициализации вирт.таблицы, при случае - сообщите программисту: "+ОписаниеОшибки();
       //Сообщить(тОшибка);
       Возврат 0;
   КонецПопытки;    

   РазбиваемаяСтрока    = ПодСтрокаПоиска;    
   РазбиваемаяСтрока    = СтрЗаменить(РазбиваемаяСтрока,"'","");
   РазбиваемаяСтрока    = СтрЗаменить(РазбиваемаяСтрока,"""","");
   РазбиваемаяСтрока    = СтрЗаменить(СокрЛП(РазбиваемаяСтрока)," ",РазделительСтрок);
   
   ТекстЗапроса = "SELECT
   |Товары.id [Элемент :Справочник.Номенклатура]
   |FROM Товары
   |WHERE Товары.isfolder=2 and Товары.ismark <> '*'";    

   Для Индекс = 1 По СтрКоличествоСтрок(РазбиваемаяСтрока)
   Цикл Слово = Врег(СтрПолучитьСтроку(РазбиваемаяСтрока,Индекс));
       
       Если  ПустоеЗначение(Слово)=1
       Тогда Продолжить;
       КонецЕсли;    
       ТекстЗапроса = ТекстЗапроса+"
       |AND UPPER(Товары.descr) LIKE '%"+Слово+"%'";
   КонецЦикла;
   
   //ТекстЗапроса = ТекстЗапроса+"
   //|ORDER BY Элемент.descr";
   
   ТЗраб = СоздатьОбъект("ТаблицаЗначений");
   Попытка
       _время1 = _GetPerformanceCounter();
       Запрос.ВыполнитьЗапрос(ТекстЗапроса).Выгрузить(ТЗраб);
   Исключение
       глВКлайт.Закрыть();
       тОшибка = "ошибка при выполнении запроса, сообщите программисту: "+ОписаниеОшибки();
       Сообщить(тОшибка);
       Возврат 0;
   КонецПопытки;
   глВКлайт.Закрыть();
10 Fiasko
 
17.11.12
16:39
(9) полезная штука, однозначно
11 Fiasko
 
17.11.12
16:39
(9) шпасиб :)
12 Злопчинский
 
17.11.12
16:44
это мелкий допил штатной тисовской ВыборИзСправочникаПоПодстроке
.
есть более продвинутые варианты, на том же ИС
13 Fiasko
 
18.11.12
18:18
блиииин... а если есть список значений подстрок, по которому и нужно найти элементы, как тут лучше поступить? через уложитьсписокобъектов? или дополнять текстзапроса по списку?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан