Имя: Пароль:
1C
1C 7.7
v7: Регулярные выражения
,
0 kloptula
 
04.01.13
13:59
Всех с прошедшим НГ и с наступающим Рождеством Христовым. Озадачили меня на праздники следующей задачей. Нужно организовать отбор элементов справочника (порядка 150000 элементов) с возможностью задания условия отбора регулярным выражением. С чего лучше начать, может кто уже делал подобное.
1 Botanik8888
 
04.01.13
14:01
2 Fragster
 
гуру
04.01.13
14:02
шли их нафиг
3 Fragster
 
гуру
04.01.13
14:02
это будет очень тупить
4 dauster
 
04.01.13
14:03
(0) делал через COM объект VBScript
5 dauster
 
04.01.13
14:04
6 kloptula
 
04.01.13
14:04
(4) можно поподробнее
7 kloptula
 
04.01.13
14:05
(5) это читал
8 Fragster
 
гуру
04.01.13
14:06
(7) и что, не хватило?
9 kloptula
 
04.01.13
14:09
(8) ))). ИспользоватьСписокЭлементов() в форме списка, список формировать через регулярные, но тупить будет пипец. Может как-нибудь быстрее можно?
10 kloptula
 
04.01.13
14:10
А в 8.2 поддержка регулярных есть штатная, или тоже через грабли. Может проще на 8.2 сделать
11 Fragster
 
гуру
04.01.13
14:11
(9) рисуй свою таблицу вместо справочниксписок, выводи туда найденное, все команды добавляй ручками
12 Fragster
 
гуру
04.01.13
14:11
(10) там только СОДЕРЖИТ, ну или в ПОДОБНО у ДС пропихнуть можно попробовать
13 kloptula
 
04.01.13
14:13
(11) это быстрее будет работать?
14 kloptula
 
04.01.13
14:14
(12) не, не то. Мне при отборе спецсимволы надо использовать, не взлетит
15 Fragster
 
гуру
04.01.13
14:14
(13) должно, вроде
16 Fragster
 
гуру
04.01.13
14:14
но все равно - тебе каждый раз перебирать 150к элементов надо будет - долго
17 Fragster
 
гуру
04.01.13
14:15
при изменении регулярки
18 kloptula
 
04.01.13
14:15
(15) в принципе справочник только на чтение будет использоваться, команды не нужны там никакие. Может загнать его весь в таблицу и с таблицей уже работать, чтобы не лезть каждый раз в базу.
19 kloptula
 
04.01.13
14:16
А если прямые запросы, они быстрее будут такой объем обрабатывать?
20 1Сергей
 
04.01.13
14:17
(19) само собой
21 Fragster
 
гуру
04.01.13
14:17
(19) а откуда в прямых запросах регулярные выражения?
22 ДенисЧ
 
04.01.13
14:17
(21) А что скуль ужо перестал отрабатывать lIKE?
23 Fragster
 
гуру
04.01.13
14:18
(22) а шо, лайк - это регулярные выражения?
24 ДенисЧ
 
04.01.13
14:19
(23)
Wildcard character
   

Description
   

Example

%
   

Any string of zero or more characters.
   

WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title.

_ (underscore)
   

Any single character.
   

WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).

[ ]
   

Any single character within the specified range ([a-f]) or set ([abcdef]).
   

WHERE au_lname LIKE '[C-P]arsen' finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. In range searches, the characters included in the range may vary depending on the sorting rules of the collation.

[^]
   

Any single character not within the specified range ([^a-f]) or set ([^abcdef]).
   

WHERE au_lname LIKE 'de[^l]%' all author last names starting with de and where the following letter is not l.
25 Fragster
 
гуру
04.01.13
14:27
(24) это не регулярные выражения
26 Mikeware
 
04.01.13
14:42
(25) вохможно, автору этого хватит.
ведь смысл - не в самом использовании регваров, а в реезультате...
27 Fragster
 
гуру
04.01.13
14:43
(26) ну как может хватить этого, если, например, нужно найти (Иванов|Петров) например?
28 Dolly_EV
 
04.01.13
14:47
Вот есть такая штука: http://infostart.ru/public/141953/
Правда это не регулярные выражения, но может заказчику понравится? Т.е. вместо использования спец.символов просто набираем по куску из нескольких слов - и все корректно фильтруется (там в комментах - прикрутка к dbf, если надо)
У меня на >15k Номенклатуре довольно сносно летает, правда не знаю, как это будет на 150k )))
29 Mikeware
 
04.01.13
14:58
(28) У Cадовникова, опять же, лучше сделано...
вот так применяется у мню:
http://s51.radikal.ru/i132/1301/f7/e8335f9155fc.jpg
30 Dolly_EV
 
04.01.13
15:02
(29) ну это на вкус и цвет, в твоем случае надо тянуть в запросе остаток, и например цену захочется? или еще 100500 реквизитов, которые есть на штатной форме? хотя перетянуть строку поиска в контекстно добавляемый реквизит тож хочу - в "Наименовании" ее (строку поиска) пока не ткнешь - не замечают )))
31 orefkov
 
04.01.13
15:02
Для начала надо выяснить:
- sql  или dbf
- А так ли надо именно регэкспы - возможно достаточно поиска по кускам слов.

Для дбф - однозначно 1С++, табличное поле, 1sqlite,  в котором есть оператор regexp и like.
Для sql не знаю, есть ли возможность использовать регэкспы в запросах но мне кажется,  чтш как-то можно.
32 Dolly_EV
 
04.01.13
15:04
(29) а, у тебя на картинке не подбор, а контекстный поиск при редактировании реквизита...
33 Mikeware
 
04.01.13
15:05
(31) вроде начиная с 2005.
а в 2000 http://www.sql.ru/forum/actualthread.aspx?tid=11751
34 Mikeware
 
04.01.13
15:14
Там класс ПолеВыбораЗначения.
а ему уже назначаешь поставщика. Для номенклатуры -возможен  отдельный поставщик (с остатками). можно выбирать из документов, из справчников (любых). ну и подключается быстрее. автор, кстати,  Диркс...
короче, долго расскаывать.
35 kiruha
 
04.01.13
15:23
(0)
>>ИспользоватьСписокЭлементов

Тебе прямые запросы нужны, а не регул выражения
36 kiruha
 
04.01.13
15:28
37 Mikeware
 
04.01.13
15:37
38 kiruha
 
04.01.13
15:45
(37)
Так там же вызов того же VBScript, только из SQL (по ОЛЕ)
39 Mikeware
 
04.01.13
15:48
(37) ага. Костыль, но тем не менее...
а автор задал вопрос и смылся...
40 kloptula
 
04.01.13
16:47
(39) Да отбегал, но столько всяких вариантов накидали. Буду пробовать теперь
41 kloptula
 
04.01.13
16:55
Всем огромное спасибо
42 Mikeware
 
04.01.13
17:02
(40) собственно эти варианты находятся яндексом за несколько минут.
я вот поискал, попутно кое-что нового для себя почерпнул...
43 Torquader
 
05.01.13
22:42
Какая разница, куда вы присунете регулярные выражения.
Если выбор не по какому-то индексу, а простой перебор, то это всё равно будет работать достаточно медленно.
Конечно, выполнение регулярных выражений прямым вызовом из SQL-сервера будет немного быстрее, чем перебор из 1С, но всё равно пользователю придётся ждать.
В нормальных системах перебор просто выносят в другой поток, чтобы пользователь мог менять условия, и не замечал медленности подбора, а в 1С с этим будет туго, если 150 тысяч записей, да длина строк явно в районе 64.
44 kiruha
 
05.01.13
23:56
Можно создать свой справочник,подчиненный спр номенклатура где в наименовании хранить слова встречающиеся в спр номенкулатура
Это и будет источник индекса для поиска
45 Torquader
 
06.01.13
00:12
(44) Я так делал - для поиска по словам - получается быстро и хорошо, а вот по частям слов - уже не очень - сначала нужно все слова перелопатить, чтобы они в фильтр попали, а потом по каждому найти все записи.
С регуляркой хуже в том, что могут написать условия на два слова подряд - и всё, справочник слов идёт лесом.
Собственно, можно понять, почему в поисковых системах в интернете нет регулярных выражений.
46 kiruha
 
06.01.13
00:25
Тогда вместо статического(по словам) - можно использовать динамический
Первый поиск штатно, потом в спец спр пишем результат поиска и ключ поиска.
такой спр не будет сильно большим

а если у автора SQL можно использовать полнотекстовый индекс
47 kloptula
 
06.01.13
10:26
В итоге сделал с помощью компоненты 1sqlite, отбор работает, но следующая проблема. Все хорошо только в монопольном режиме. В разделенном режиме запрос к базе тормозит очень и медленне на порядок выполняется. Как побороть?
48 kloptula
 
06.01.13
10:27
1sqlite версия 1026
49 kiruha
 
06.01.13
10:59
Без индекса будет постоянный скан 150 000 элементов, чтобы не использовать

Есть еще вариант, чтобы не засорять базу -
создать отдельную маленькую базу MySQL , туда продублировать твой справочник. В этой базе создать полнотекстовый индекс, например
http://articles-hosting.ru/112/polnotekstovyj-poisk-v-mysql.html
при поиске обращаться к MySQL
Регламентом обновлять табличку и индекс
50 kloptula
 
06.01.13
11:08
Что же все-таки с монополным - немонопольным режимом, в чем может быть проблема?
51 PALESIA
 
06.01.13
13:30
(0) как вариант в глобальник закинь это:

Перем глСписокЭлементов Экспорт; // для поиска по фрагментам в справочниках
//*************************************************************************************
Функция глОпределитьСписокЭлементов(перСправочник,перВладелец,перСписокПолей,перПорядок,перДата) Экспорт
   
   Фраги = "";
   Если ВвестиСтроку(Фраги,"  УКАЖИТЕ ФРАГМЕНТЫ ДЛЯ ПОИСКА:  ",50,0) < 1 Тогда  Возврат 0;
   ИначеЕсли ПустаяСтрока(Фраги) = 1 Тогда  Возврат 0;
   КонецЕсли;
   
   Фраги = Врег(СокрЛП(Фраги))+",";
   Фраги = СтрЗаменить(Фраги," ",",");
   Фраги = СтрЗаменить(Фраги,Симв(10),",");
   Фраги = СтрЗаменить(Фраги,Симв(13),",");
   Пока Найти(Фраги,",,") > 0 Цикл  Фраги = СтрЗаменить(Фраги,",,",",");  КонецЦикла;
   
   Фраг1 = "";  Запятая = Найти(Фраги,",");  Если Запятая > 0 Тогда  Фраг1 = Лев(Фраги,Запятая-1); Фраги = Сред(Фраги,Запятая+1);  КонецЕсли;
   Фраг2 = "";  Запятая = Найти(Фраги,",");  Если Запятая > 0 Тогда  Фраг2 = Лев(Фраги,Запятая-1); Фраги = Сред(Фраги,Запятая+1);  КонецЕсли;
   Фраг3 = "";  Запятая = Найти(Фраги,",");  Если Запятая > 0 Тогда  Фраг3 = Лев(Фраги,Запятая-1); Фраги = Сред(Фраги,Запятая+1);  КонецЕсли;
   Фраг4 = "";  Запятая = Найти(Фраги,",");  Если Запятая > 0 Тогда  Фраг4 = Лев(Фраги,Запятая-1); Фраги = Сред(Фраги,Запятая+1);  КонецЕсли;
   Фраг5 = "";  Запятая = Найти(Фраги,",");  Если Запятая > 0 Тогда  Фраг5 = Лев(Фраги,Запятая-1); Фраги = Сред(Фраги,Запятая+1);  КонецЕсли;
   
   Поля = перСписокПолей + ",";
   Поле1 = "";  Запятая = Найти(Поля,",");  Если Запятая > 0 Тогда  Поле1 = Лев(Поля,Запятая-1); Поля = Сред(Поля,Запятая+1);  КонецЕсли;
   Поле2 = "";  Запятая = Найти(Поля,",");  Если Запятая > 0 Тогда  Поле2 = Лев(Поля,Запятая-1); Поля = Сред(Поля,Запятая+1);  КонецЕсли;
   Поле3 = "";  Запятая = Найти(Поля,",");  Если Запятая > 0 Тогда  Поле3 = Лев(Поля,Запятая-1); Поля = Сред(Поля,Запятая+1);  КонецЕсли;
   Поле4 = "";  Запятая = Найти(Поля,",");     Если Запятая > 0 Тогда  Поле4 = Лев(Поля,Запятая-1); Поля = Сред(Поля,Запятая+1);  КонецЕсли;
   Поле5 = "";  Запятая = Найти(Поля,",");     Если Запятая > 0 Тогда  Поле5 = Лев(Поля,Запятая-1); Поля = Сред(Поля,Запятая+1);  КонецЕсли;
   
   глЗапрос = СоздатьОбъект("Запрос");
   глТекст = "Обрабатывать Все;
   |Указатель = Справочник."+перСправочник+".ТекущийЭлемент;
   |Период с (перДата) по (перДата);";
       
   Если ПустоеЗначение(перВладелец) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "искВладелец = Справочник."+перСправочник+".Владелец; Условие(искВладелец=перВладелец);";
   КонецЕсли;
   
   Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + РазделительСтрок + "Поиска1 = Справочник."+перСправочник+"."+Поле1+";";  КонецЕсли;
   Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + РазделительСтрок + "Поиска2 = Справочник."+перСправочник+"."+Поле2+";";  КонецЕсли;
   Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + РазделительСтрок + "Поиска3 = Справочник."+перСправочник+"."+Поле3+";";  КонецЕсли;
   Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + РазделительСтрок + "Поиска4 = Справочник."+перСправочник+"."+Поле4+";";  КонецЕсли;
   Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + РазделительСтрок + "Поиска5 = Справочник."+перСправочник+"."+Поле5+";";  КонецЕсли;
   
   Если ПустоеЗначение(Фраг1) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "Условие(";
       Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + "(Найти(Врег(Поиска1),Фраг1)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска2),Фраг1)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска3),Фраг1)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска4),Фраг1)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска5),Фраг1)>0)";  КонецЕсли;
       глТекст = глТекст + ");";
   КонецЕсли;
   
   Если ПустоеЗначение(Фраг2) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "Условие(";
       Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + "(Найти(Врег(Поиска1),Фраг2)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска2),Фраг2)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска3),Фраг2)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска4),Фраг2)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска5),Фраг2)>0)";  КонецЕсли;
       глТекст = глТекст + ");";
   КонецЕсли;
   
   Если ПустоеЗначение(Фраг3) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "Условие(";
       Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + "(Найти(Врег(Поиска1),Фраг3)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска2),Фраг3)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска3),Фраг3)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска4),Фраг3)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска5),Фраг3)>0)";  КонецЕсли;
       глТекст = глТекст + ");";
   КонецЕсли;
   
   Если ПустоеЗначение(Фраг4) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "Условие(";
       Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + "(Найти(Врег(Поиска1),Фраг4)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска2),Фраг4)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска3),Фраг4)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска4),Фраг4)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска5),Фраг4)>0)";  КонецЕсли;
       глТекст = глТекст + ");";
   КонецЕсли;
   
   Если ПустоеЗначение(Фраг5) = 0 Тогда
       глТекст = глТекст + РазделительСтрок + "Условие(";
       Если ПустоеЗначение(Поле1) = 0 Тогда  глТекст = глТекст + "(Найти(Врег(Поиска1),Фраг5)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле2) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска2),Фраг5)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле3) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска3),Фраг5)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле4) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска4),Фраг5)>0)";  КонецЕсли;
       Если ПустоеЗначение(Поле5) = 0 Тогда  глТекст = глТекст + "или(Найти(Врег(Поиска5),Фраг5)>0)";  КонецЕсли;
       глТекст = глТекст + ");";
   КонецЕсли;
   
   Порядки = перПорядок + ",";
   Порядок1 = "";  Запятая = Найти(Порядки,",");  Если Запятая > 0 Тогда  Порядок1 = Лев(Порядки,Запятая-1); Порядки = Сред(Порядки,Запятая+1);  КонецЕсли;
   Порядок2 = "";  Запятая = Найти(Порядки,",");  Если Запятая > 0 Тогда  Порядок2 = Лев(Порядки,Запятая-1); Порядки = Сред(Порядки,Запятая+1);  КонецЕсли;
   Порядок3 = "";  Запятая = Найти(Порядки,",");  Если Запятая > 0 Тогда  Порядок3 = Лев(Порядки,Запятая-1); Порядки = Сред(Порядки,Запятая+1);  КонецЕсли;
   
   глТекст = глТекст + РазделительСтрок + "Группировка Указатель";
   Если ПустоеЗначение(Порядок1) = 0 Тогда  глТекст = глТекст + " упорядочить по Указатель." + Порядок1;  КонецЕсли;
   Если ПустоеЗначение(Порядок2) = 0 Тогда  глТекст = глТекст + ", Указатель." + Порядок2;  КонецЕсли;
   Если ПустоеЗначение(Порядок3) = 0 Тогда  глТекст = глТекст +", Указатель." + Порядок3;  КонецЕсли;
   глТекст = глТекст + " без групп;";
   
   Если глЗапрос.Выполнить(глТекст) = 1 Тогда
       глСписокЭлементов.УдалитьВсе();
       Пока глЗапрос.Группировка(1) = 1 Цикл
           глСписокЭлементов.ДобавитьЗначение(глЗапрос.Указатель);
       КонецЦикла;
   КонецЕсли;
   Возврат глСписокЭлементов.РазмерСписка();
   
КонецФункции // глОпределитьСписокЭлементов(перСправочник,перВладелец,перСписокПолей,перПорядок) Экспорт
//*************************************************************************************
глСписокЭлементов = СоздатьОбъект("СписокЗначений");
52 PALESIA
 
06.01.13
13:32
Потом на форме списка справочника сделай кнопку "Найти" и прикрути это (только свои данные для справочника подправь):

//*************************************************************************************
Процедура ПоискПоФрагментам()
   
   текЭлемент = ТекущийЭлемент();
   Если глОпределитьСписокЭлементов("ЕдиницыОборудования","",
       "Код,ИнвНомер,Наименование,Коментарий","Код",ТекущаяДата()) = 0 Тогда
       ИспользоватьСписокЭлементов();
       АктивизироватьОбъект(текЭлемент);
   Иначе
       ИерархическийСписок(0,0);
       ИспользоватьСписокЭлементов(глСписокЭлементов);
   КонецЕсли;

КонецПроцедуры // ПоискПоФрагментам()
//*************************************************************************************
53 kiruha
 
06.01.13
14:29
//Поиск через fxoledb, глОлеДБ - подключение к драйверу - стандартно

Процедура ПоискПоПодстрокеСПП(ВидСправочника,РеквизитПоиска)  
   
    Если РеквизитПоиска="Код" Тогда РеквизитПоиска2="Спр.Code" ;
          ТипРеквизита="Строка";
    ИначеЕсли РеквизитПоиска="Наименование" Тогда РеквизитПоиска2="Спр.Descr";
          ТипРеквизита="Строка";
    Иначе  
          МетСпр=Метаданные.Справочник(ВидСправочника);
          ТипРеквизита=МетСпр.Реквизит(РеквизитПоиска).Тип;
          Если (ТипРеквизита="Строка") Тогда
                РеквизитПоиска2="$Спр."+СокрЛП(РеквизитПоиска);
          ИначеЕсли (ТипРеквизита="Справочник") Тогда
                ВидРеквизита=МетСпр.Реквизит(РеквизитПоиска).Вид;
                РеквизитПоиска2="$Спр."+СокрЛП(РеквизитПоиска);
          Иначе Возврат;
          КонецЕсли;
         
    КонецЕсли;      
   
   
    Если ТипРеквизита="Строка" Тогда
          ТекстЗапроса="
          |SELECT
          |Спр.ID as [Элемент $Справочник."+ВидСправочника+"]
          |FROM
          |      $Справочник."+ВидСправочника+" as Спр
          |WHERE
          |    Спр.IsFolder = 2 AND
          |    UPPER("+РеквизитПоиска2+") LIKE  '%' + :СтрПоиска + '%'";
    ИначеЕсли   (ТипРеквизита="Справочник") Тогда
          ТекстЗапроса="
          |SELECT
          |Спр.ID as [Элемент $Справочник."+ВидСправочника+"]
          |FROM
          |      $Справочник."+ВидСправочника+" as Спр
          |LEFT JOIN $Справочник."+ВидРеквизита+" as СпрРек  ON СпрРек.ID="+РеквизитПоиска2+"
          |WHERE
          |    Спр.IsFolder = 2 AND
          |    UPPER(СпрРек.Descr) LIKE  '%' + :СтрПоиска + '%'";
         
    КонецЕсли;
   
    ОлеДБКоманда = глОлеДБ.СоздатьКоманду();
    ОлеДБКоманда.УстановитьТекстовыйПараметр("СтрПоиска",ВРЕГ(СокрЛП(ПодСтрокаПоиска)));
    ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);
54 kloptula
 
09.01.13
23:50
Помогите с запросом на 1sqlite:

Текст="SELECT
   |code Код,
   |id [Товар:Справочник.ПрайсЛистыПоставщиков]
   |FROM ПрайсЛисты
   |WHERE ismark <> '*'";
       |AND descr LIKE '%"+Слово+"%'";


Выбирает по совпадению подстроки в наименовании Номенклатуры.
В обрабатываемом справочнике еще есть реквизит "контрагент" (Тип: Справочник.Контрагенты). Я предварительно формирую список нужных мне контрагентов. Как можно сделать еще условие в запросе на список Контрагентов, которых надо использовать. Пните, кто знает
55 Злопчинский
 
10.01.13
00:30
я неграмотный... как-то типа где ID в списке iD
56 kloptula
 
10.01.13
09:53
Вот какая мысль посетила. А можно ли хранить большой справочник во внешней dbf таблице с индексами, выводить записи в ТЗ на форме и отбор осуществлять во внешней таблице. Будет ли это быстрее или нет смысла заморачиваться?

И второе, можно ли в 1С использовать в табличной части документа данные из внешнего файла или только из метаданных конфигурации?