Имя: Пароль:
1C
1C 7.7
v7: Хитрый поиск
,
0 247tsm
 
07.04.12
04:05
Добрый день всем.

Наш бух хочет, чтобы я сделал для него хитрый поиск по справочнику Номенклатура по следующим критериям:
1) есть поле, в которое вводится искомый текст;
2) по нажатию кнопки должен производиться поиск сразу по всем колонкам, которые есть в справочнике Номенклатура (код товара, код аналога, наименование,  характеристика...);
3) поиск должен находить искомое выражение в любой части слова (в начале, в конце, в середине);
4) если в колонках есть точки, пробелы, дефисы, запятые... они должны игнорироваться (например, если в какой-либо колонке есть "то,ва.р-ы", то при поиске слова "товары" мы должны стать на эту колонку);
Т.е. полный аналог поиска по клавишам CTRL-F3 и F3 с добавлением условия п.4).
Во как.
Кто-нибудь может подсказать, как это сделать, особенно п.4)?

Спасибо
1 nicxxx
 
07.04.12
04:37
с божьей помощью и regex-пом справишься
2 Web00001
 
07.04.12
05:57
если должны игнорироваться конкретно пробелы дефисы запятые то да нужен regexp как организовывается в 1С ищи по форуму, уже проскакивало
3 kosts
 
07.04.12
07:06
Я бы попробовал или реквизит неопределенной длины и все текстовые поля без точек записать.
Или возможно в отдельном новом справочнике, в котором будут ссылка на номенклатуру и копии текстовых реквизитов без точек и запятых.
Типовыми средствами можно обойтись.
4 МастерВопросов
 
07.04.12
07:16
см. в ТиС встроенную обработку:
Обработка.ВыборИзСправочникаПоПодстроке

там реализован поиск по произвольному фрагменту наименования одного из реквизитов номенклатуры, плюс хранится история поиска. Т.е. в окне поиска щелкаешь кнопку "вниз" и раскрывается список последних значений, по которым делался поиск.
Пользователям очень нравится эта обработка, покажи её бух-ше и может писать ничего не надо будет.

Вызывается из Формы-списка справочника "Номенклатура" по кнопке "Поиск" (внизу справа под самим списком).
http://s019.radikal.ru/i616/1204/f9/72d7a372bcdf.jpg

       Запрос = СоздатьОбъект("Запрос");
       
       ТекстЗапроса ="
       |ТекущийЭлемент = Справочник.*.ТекущийЭлемент;" +
       РеквизитПоиска + " = Справочник.*." + РеквизитПоиска + ";
       |Группировка ТекущийЭлемент Без Упорядочивания Без Групп;
       |Условие(Найти(ВРег(" + РеквизитПоиска + "),ВРег(ПодСтрокаПоиска))>0);
       |Без итогов;";          
       
       ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"*",ВидСправочника);
       
       Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
           Возврат;
       КонецЕсли;
5 xenos
 
07.04.12
07:22
Создать ключевое поле которое будет создаваться при записи элемента справочника.

Ключ=Строка(Реквизит1)+"@"+Строка(Реквизит2)+"@"+Строка(Реквизит2);

Ключ=СтрЗаменить(Ключ,".","");
Ключ=СтрЗаменить(Ключ,",","");
Ключ=СтрЗаменить(Ключ,"-","");

Ключ=ВРег(Ключ);

А потом уже искать по этому полю.
6 xenos
 
07.04.12
07:27
можно это ключевое поле вывести на форму списка, а там уже уже использовать обычный поиск на панели инструментов.
7 leshikkam
 
07.04.12
07:51
(0) А можно и на прямых запросах
8 Mikeware
 
07.04.12
08:28
Присоединяюсь к leshikkam - на прямых запросах, взяв за основу класс Садовникова КоллекцияПолейВыбораЗначения, работы на пару-тройку часов.
9 wertyu
 
07.04.12
08:31
но лучше всего справочник привести из убожеского вида в читабельный как минимум
10 Mikeware
 
07.04.12
08:45
(9) да, убрать идиотство типа "то,ва.р-ы" необходимо.
подозреваю, что данное требование возникает в копмьютерных фирмах, где в наименование лепятся характеристики. В этом случае совет -вводить такие названия через шаблон-форму.
11 Web00001
 
07.04.12
09:30
(8) А где взять этот класс?
12 Mikeware
 
07.04.12
10:51
13 247tsm
 
07.04.12
13:50
xenos, хорошая идея! Очень просто, но эффективно. И не нужны какие-либо доп. компоненты и прочее.
А еще какие есть идеи?
14 Злопчинский
 
07.04.12
15:59
(13) не взлетит! ;-) ибо штатный алгоритм поиска такого требует точного написания искомого... и если два слова типа "народные товары" - то так и надо написать - "товары народные" - не найдет - это правлда лечится просто совсем в этой обработке.. а так конечно ничего лучшенечеткого поиска нет...
.
http://infostart.ru/public/14255/
15 Рэйв
 
07.04.12
16:06
>>Наш бух хочет, чтобы я сделал

Все.Дальше не читал.

ЧУВАК.смирись.Ты неудачнег.
16 Рэйв
 
07.04.12
16:08
+(15)Кошерный одинесник сам упирает ГБ что делать.
17 247tsm
 
07.04.12
16:22
(16) Не согласен, т.е. абсолютно! Зачем программисту брать на себя ответственность за базу данных, ее заполнение и т.д.? Если я буду указывать ГБ, то во всех разборках он будет спихивать все на меня - я ж ему сказал, что делать! Программист должен быть помощником "сбоку" и не должен отвечать за БД. БД - это собственность БУХГАЛТЕРИИ и поэтому они несут за нее ответственность. Приняли программу, процедуру, отчет - все ответсвенность за все последствия несет тот, кто принял, т.е. ГБ.

Но мы говорим о хитром поиске. И меня интересуют идею по этому вопросу.
18 Рэйв
 
07.04.12
16:25
(17)Ну ты как детский сад:-).
ГБ  то она. И отвечает ОНА. По документам. Поэтому ту ейц можешь говорить хоть лететь на луну, ответственное лицо -ГБ
19 Злопчинский
 
07.04.12
16:33
мну Бухша сказала что основной инсрумент главбуха НК и ПБУ, а не всякое Посо старыми релизами, глюками и прочим. На что я ответил - карандаш в руки, листы бумаги - и вперед! - мне проще будет...
.
однако же щаз сижу обновляю далеко не типовую бухию... НЕ МОГУТ ОНИ НИЧЕГО без проги... не, может и могут, но тогда на отдел п родаж из 5 манагеров будет бухгалтерия человек 40...
20 Mikeware
 
07.04.12
16:33
(18) он ничуть не лезет в компетенцию ГБ. Равно как и она не заставляет его делать какую-нибудь глупость. Его просят сделать чисто интерфейсный изыск. Вполне реальный, достаточно просто реализуемый.
21 Рэйв
 
07.04.12
16:35
(20)>>достаточно просто реализуемый.
Видимо НЕ Просто. :)
22 Mikeware
 
07.04.12
16:36
(21) кому как.
23 247tsm
 
07.04.12
16:37
(18) Может быть, может быть. Попутно еще вопрос - влияет на скорость поиска длина дополнительного реквизита, как предложил xenos в (5)? Какой поиск будет быстрее - при длине реквизита, равной сумме длин реквизитов поиска, например 200, или при неограниченной длине?
24 Mikeware
 
07.04.12
16:38
(23) читай умные книжки.
25 247tsm
 
07.04.12
16:44
в (23) я имел в виду не неограниченную дляну, а произвольную длину. При заданной длине, например 200, комп всегда! просматривает все 200 символов. А если длна не ограничена, то все равно конкретные данные фиксированной длины и частенько, если не всегда сумма их длин даже в базе из 1000 строк будет меньше чем 200*1000=200000 символов. Поэтому и спрашиваю, что выбрать - фиксированную длину или нефиксированную?
26 Mikeware
 
07.04.12
16:46
(25) я тебе ровно о том же...
читай книжки по организации хранения данных, по ограничениям конкретных реализаций - и такие вопросы не будут возникать.
27 247tsm
 
07.04.12
16:48
Ок
28 247tsm
 
08.04.12
01:13
Я сделал, как предложил в (5) xenos. Все получилось.

Всем спасибо
AdBlock убивает бесплатный контент. 1Сергей