Имя: Пароль:
1C
1C 7.7
v7: 1SQLITE: Поиск элементов справочника по списку строк
0 Zhuravlik
 
11.07.13
11:05
Здравствуйте, не выходит.
Есть список значений, его значения - строки, необходимо к каждой строке по Like найти контрагента. Делаю вот так:

   спКонтрагентов = глРазложить(стр_Поиск);
   
   гд_НаЭкран(спКонтрагентов);

   База = СоздатьОбъект("SQLiteBase");
   База.Открыть(":memory:");
   
   База.УложитьОбъекты(спКонтрагентов, "тблКонтры");
   
   Запрос = База.НовыйЗапрос();

   ТекстЗапроса = "
   |SELECT
   |    спр.ID as [Контрагент :Справочник.Контрагенты]
   |FROM
   |    тблКонтры as Сравнение
   |    LEFT JOIN [Справочник.Контрагенты] as спр on (Сравнение.VAL LIKE '%'||trim(спр.DESCR)||'%')
   |";

   тз = Запрос.ВыполнитьЗапрос(ТекстЗапроса);    
   
Здесь - "Сравнение.VAL LIKE '%'||trim(спр.DESCR)||'%'" - не пойму, как строку подставить? Я думал, что || - это знак конкатенации,
но запрос проходит,  а контров не кажет... Что я не так делаю?
1 viktor_vv
 
11.07.13
11:19
Уложить объекты укладывает в таблицу с val строка 9 символов.
2 viktor_vv
 
11.07.13
11:20
Попробуй уложить ТЗ.
3 Ёпрст
 
11.07.13
11:21
(0)
:)

1. надо наеборот спр.DESCR like '%подвстрока%'
2.Сравнение.VAL.. если по списку, то надо кучу лайков объединять
4 viktor_vv
 
11.07.13
11:22
(1)+ "В данную таблицу выгружаются внутренние идентификаторы объектов в формате char(9)".
5 Zhuravlik
 
11.07.13
12:06
(4) В списке - строки - не элементы справочника
(3) 1. Я делал наоборот, все-равно не катит
2. Я же перебираю строки, а лефт-джойном присоединяю контров по LIKE. Зачем там куча лайков?
Подскажите, у меня синтаксис правильный?
Им. в виду "LEFT JOIN [Справочник.Контрагенты] as спр on (Сравнение.VAL LIKE '%'||trim(спр.DESCR)||'%')", т.е. чтобы поиск был по строке получаемой из trim(спр.DESCR), а не по "trim(спр.DESCR)"?
6 Ёпрст
 
11.07.13
12:12
(5) в уложить объекты - у тебя всегда строка в 9 символов, + соединять надо наеборот
7 Ёпрст
 
11.07.13
12:12
в наименовании искать по лайк.
8 Ёпрст
 
11.07.13
12:13
никаких тримов там не надо.
9 Ёпрст
 
11.07.13
12:13
Сделай ТЗ, типоизируй колонку, уложи в базу - соединяйся с ней.
10 Zhuravlik
 
11.07.13
12:21
Да)

   
  спКонтрагентов = глРазложить(стр_Поиск);
  тз = СоздатьОбъект("ТаблицаЗначений");
  тз.НоваяКолонка("Поиск", "Строка");
 
  Для сч=1 По спКонтрагентов.РазмерСписка() Цикл
         тз.НоваяСтрока();
       тз.Поиск = спКонтрагентов.ПолучитьЗначение(сч);
  КонецЦикла;

   База = СоздатьОбъект("SQLiteBase");
   База.Открыть(":memory:");
   
   База.УложитьТЗ(тз, "тблКонтры");
   
   Запрос = База.НовыйЗапрос();

   ТекстЗапроса = "
   |SELECT
   |    спр.ID as [Контрагент :Справочник.Контрагенты]
   |FROM
   |    тблКонтры as Сравнение
   |    LEFT JOIN [Справочник.Контрагенты] as спр on (trim(спр.DESCR) LIKE'%'||Сравнение.Поиск||'%')
   |";

   _тз = Запрос.ВыполнитьЗапрос(ТекстЗапроса);    
   
   гд_НаЭкран(_тз);

Получилось, спасибо большое))
11 Zhuravlik
 
11.07.13
12:22
+ Забыл trim убрать)
12 Ёпрст
 
11.07.13
12:22
трим выкини - он не нужен
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.