|
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С использовать в табличной части документа данные из внешнего файла или только из метаданных конфигурации? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |