|
v7: Как облегчить поиск в номенклатуре 1с? (режим пользователя) | ☑ | ||
---|---|---|---|---|
0
rikko999
25.03.17
✎
14:49
|
В программе 1с Торговля и Склад работаю на складе бытовой техники. В базе содержится инфа по товарам. В поле наименование товара прописан и производитель товара, и серия и название и доп. числовые характеристики. И нет определенного порядка что первое что второе что третьеи т.д. Т.е. вначале может идти как производитель, так и серия, так и др. характеристики. Например:
1)asus eee pc ноутбук 1225b 4 кг 2)ноутбук 3кг asus eee pc X101CH И проблема в том что поиск в номенклатуре чувствителен к порядку слов в запросе. Например если вбить в поиске: ноу%4%asus%ee%122% (напоминаю знак процента при поиске заменяет любое количество любых символов) - ничего не будет найдено. Поэтому иногда очень тяжело найти товар в базе. Вопрос: как можно облегчить поиск? Может есть какие -то еще операторы облегчающие поиск как %? Такие чтоб позволяли искать без соблюдения порядка слов? Или вообще другие варианты? Что думаете? |
|||
1
Aleksey
25.03.17
✎
14:54
|
разбивать на строки и искать через и
|
|||
2
Aleksey
25.03.17
✎
15:01
|
РазбиваемаяСтрока = "ноу asus ee 122"
РазбиваемаяСтрока=СтрЗаменить(СокрЛП(стрПоиска)," ",РазделительСтрок); текст="SELECT id [Товар :Справочник.Номенклатура] FROM Товары WHERE isfolder=2 and ismark <> '*'"; Для Индекс=1 По СтрКоличествоСтрок(РазбиваемаяСтрока) Цикл Слово=СтрПолучитьСтроку(РазбиваемаяСтрока,Индекс); Если ПустоеЗначение(Слово)=0 Тогда текст=текст+" AND (descr LIKE '%"+Слово+"%')"; КонецЕсли; КонецЦикла; тз=запрос.ВыполнитьЗапрос(текст); P.S. код для 1CSqlite, запрос уже сам поправишь под свои нужды |
|||
3
vcv
25.03.17
✎
15:29
|
Много раз видел в магазинах бытовой техники, что продавец не ищет товар, а берёт ценник с товара и сканирует штрихкод. Это если покупатель пальцем тычет "вот это". Или, если покупатель просит подобрать на компьютере, делает как обычно организовано на сайтах - открывает раздел, указывает критерии поиска типа производителя и вперёд глазами по результатам поиска.
Вы бы уточнили, какая именно версия 1С. Пишете "Торговля и склад", однако в типовой 1С никогда в жизни не было поиска с метасимволами типа "ноу%4%asus%ee%122%". |
|||
4
rikko999
25.03.17
✎
15:55
|
Aleksey, это же режим пользователя, а не режим конфигурации. Я так понял вы предложили код нового поиска? Не думаю что там есть доступ к коду конфигурации. Да наверно и не разрешат мне что-то менять в конфигурации...
vcv, вы правы я навскидку написал название. В понедельник уточню. Я вот нашел кажется решение: оператор РЯДОМ/n (NEAR/[+/-]n) поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами. Знак указывает, в каком направлении от первого слова будет искаться второе слово (+ (плюс) – после первого; - (минус) – до первого слова). Если знак не указан, то будут найдены данные, содержащие указанные слова на дистанции n слов друг от друга. Порядок слов не имеет значения. Примеры: фен РЯДОМ/3 воздух – будут найдены данные, в которых слово воздух находится на расстоянии не более трех слов до или после слова фен. Что думаете? И кст этот оператор работает в любой версии 1с? |
|||
5
Djelf
25.03.17
✎
16:10
|
(4) Без доступа к коду ничего не получится.
В режиме пользователя на 99.99% ничего тут не изменить. В (3) правильно подмечено - подобный синтаксис не используется в стандартных конфигурациях 1с. Но если используется "%" то это скорее всего прямой запрос с like и в (2) самое простое решение. Хотя возможно в коде тупой перебор таблицы и имитация like. А вариантов навалом: перейти на regexp/pcre или искать с помощью strmatch http://catalog.mista.ru/public/237186/ Но все это потребует доступа к коду. |
|||
6
Aleksey
25.03.17
✎
16:34
|
(4) В программе ТиС 7.7 нет ни % в поиски ни оператором рядом.
Либо мы говорим не про 1с, либо на лицо использование внешней компоненты |
|||
7
Djelf
25.03.17
✎
17:20
|
(6) Чего это не про 1с и не про 7.7?
Если в таблице не 100500 записей то и такая гадость будет работать (~0.04мс времени поиска на запись). "РЯДОМ" тоже не так уж и затратно по времени.
|
|||
8
Злопчинский
25.03.17
✎
17:51
|
у меня есть для файловой базы поиск как в (2) на SQLite
еще есть типа как в (7) Запрос = СоздатьОбъект("Запрос"); РазбиваемаяСтрока = ПодСтрокаПоиска; РазбиваемаяСтрока = СтрЗаменить(РазбиваемаяСтрока,"'",""); РазбиваемаяСтрока = СтрЗаменить(РазбиваемаяСтрока,"""",""); РазбиваемаяСтрока = СтрЗаменить(СокрЛП(РазбиваемаяСтрока)," ",РазделительСтрок); ТекстЗапроса =" |Без Итогов; |ТекущийЭлемент = Справочник.*.ТекущийЭлемент;" + РеквизитПоиска + " = Справочник.*." + РеквизитПоиска + "; |Группировка ТекущийЭлемент Без Упорядочивания Без Групп;"; Для Индекс = 1 По СтрКоличествоСтрок(РазбиваемаяСтрока) Цикл Слово = ВРег(СтрПолучитьСтроку(РазбиваемаяСтрока,Индекс)); Если ПустоеЗначение(Слово)=1 Тогда Продолжить; КонецЕсли; ТекстЗапроса = ТекстЗапроса+" |Условие(Найти(ВРег(" + РеквизитПоиска + "),"""+Слово+""")>0);"; КонецЦикла; ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"*",ВидСправочника); //_время1 = _GetPerformanceCounter(); Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; //Сообщить((_GetPerformanceCounter()-_время1)/1000); |
|||
9
Злопчинский
25.03.17
✎
17:53
|
(0) если доступа к конфигуратору нет - то не смертельно
внешняя обработка с полем для ввода и ищет... главное чтобы обработку можно было открыть |
|||
10
Хилый
25.03.17
✎
17:57
|
(0) Навести порядок в базе, привести наименование к общему шаблону, новый товар заводить согласно новому шаблону - не предлагать?
|
|||
11
Aleksey
25.03.17
✎
18:27
|
(7) описание рядом это из языка запросов полнотекстового поиска в данных,который в 8-ке. А в сабже речь про 7-ку
|
|||
12
Web00001
25.03.17
✎
18:34
|
Не знаю про какую торговлю говорит ТС, в УТ10.3 при поиске номенклатуры спецсимволы типа "%" экранируются и не приносят такого эффекта на который рассчитывает ТС.
|
|||
13
Web00001
25.03.17
✎
19:46
|
(12)тьху 77 же, ну..
|
|||
14
Djelf
25.03.17
✎
20:43
|
(8) Для файловой в 1sqlite прикольнее regexp. Как то так http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/863#863
Вот интересно - егаис научил юзверей читать xml, что нужно сделать чтобы они научились regexp? |
|||
15
Злопчинский
25.03.17
✎
20:58
|
не, регексп это вылом мозга
|
|||
16
Злопчинский
25.03.17
✎
20:58
|
там думать надо.
иксемель можно тупо читать. а регексп - пофиг. |
|||
17
rikko999
25.03.17
✎
22:16
|
Вот про внешнюю обработку это интересно. Я про это не знал пока тут не написали. Это получается типа как отдельный скрипт, который можно запустить в любом конфиге?
Но я совсем не знаком с яп 1С. Поэтому займусь этим когда время будет. Увы сейчас запара...(( |
|||
18
Злопчинский
25.03.17
✎
22:47
|
(17) да.
если только одмин не закрыл права всякие. может получиться так, что я тебе пришлю обработку, а ты ее запустить не сможешь, т.к. просто достучаться не сможешь . проверил у себя - работает ли поиск как ты писал, работает... https://www.screencast.com/t/sTMuqVMFS |
|||
19
rikko999
26.03.17
✎
13:34
|
(18) но у тебя на скрине в поиск введено без операторов, которые я писал. Или ты про другое?
Да и вообще удивительно что оно у тебя дало результаты. Ведь такие результаты можно получить только если ввести с оператором ПОДОБНО(%): дос%20 |
|||
20
rikko999
26.03.17
✎
13:36
|
(18) и проверь пожалуйста оператор РЯДОМ
|
|||
21
Злопчинский
26.03.17
✎
14:09
|
(19) нет никакого подобно
Это простая 7.7 Рядом штатно тоже нет, но реализовать можно штатно, но думаю это лишнее |
|||
22
Aleksey
26.03.17
✎
14:21
|
(19) Ты точно уверен чтоу тебя ТиС, а не Управление Торговлей
Подобно и рядом это из 8-ки. Может все таки у тебя Управления торговлей 11 с включенным полнотекстовым поиском? |
|||
23
rikko999
26.03.17
✎
14:58
|
(21) (22) Мужики, если честно то не знаю я точно. В понедельник на работе узнаю точно. Но оператор % точно работает, как я и показал в примере. Мы только так и ищем, если еще и полным названием писать, то оптовики сбегут от нас пока дождутся...
|
|||
24
АгентБезопасной Нацио
27.03.17
✎
11:16
|
(23) Если 7.7, то надо делать вот так:
http://s017.radikal.ru/i407/1510/cc/bb536a52b9c8.jpg http://s020.radikal.ru/i707/1510/5a/f8354179363c.png |
|||
25
Fragster
гуру
27.03.17
✎
11:19
|
надо кого-то заставить принять стандарт наименования номенклатуры и поставить срок по приведению справочника к этому стандарту
|
|||
26
Fragster
гуру
27.03.17
✎
11:19
|
назначить исполнителя и ответственного
|
|||
27
Злопчинский
27.03.17
✎
11:21
|
(24) ага, давно такую хрень собираюсь у себя впилить, но все руки не доходят...
напомните ссылочку, где расписано как это поставить ? (где-то на ИСе есть) |
|||
28
АгентБезопасной Нацио
27.03.17
✎
11:22
|
(25) одно другому не мешает... можно и стандарт, и поиск нормальный.
да,кстати, ищут чаще всего "под диктовку покупателя". еще и покупателя заставишь стандарт вопросов выучить? :-) хотя если сделать шаблон для ввода номенклатуры, и ввод только через шаблон - будет гораздо проще |
|||
29
АгентБезопасной Нацио
27.03.17
✎
11:23
|
(27) а я тебе в скайп скидывал.
на инфосране этого нету.. |
|||
30
АгентБезопасной Нацио
27.03.17
✎
11:26
|
мне больше интересно, как это у ТС организовано...
и точно ли у него ТиС... |
|||
31
Fragster
гуру
27.03.17
✎
11:28
|
(28) продавцы должны знать этот стандарт и должны быть транслятором от покупателя в 1с, иначе нафиг они нужны? поставьте терминалы самообслуживания, как в юлмарте.
|
|||
32
Aleksey
27.03.17
✎
11:29
|
(27) а оно разве на дбф работает? Там вроде бы скульные запросы
|
|||
33
АгентБезопасной Нацио
27.03.17
✎
11:30
|
(32) работает
|
|||
34
Злопчинский
27.03.17
✎
11:33
|
(30) точно ТиС, дбф-ная
|
|||
35
Злопчинский
27.03.17
✎
11:35
|
(25) потом стандарт на стандарт... ;-) стандарт именования кастрюлю - такой, а стандарт именования мелких прчиндалов - такой.
если стандарт написать обобщающими словами - то львиная доля "манагеров" его не поймет.. у них голова другим забита... ;-) |
|||
36
АгентБезопасной Нацио
27.03.17
✎
11:36
|
(35) можно конструктор (нк, или помощник) формирования наименваний использовать...
|
|||
37
АгентБезопасной Нацио
27.03.17
✎
11:37
|
(34) прикольно. никогда не прробовал в строке подбора вилдкарты использовать...
|
|||
38
Масянька
27.03.17
✎
11:38
|
(0) Порядок в базе:
1. группы номенклатуры. Например: группа "Ноуты", подгруппы "Asus", "Toshiba" и пр. И только в группе "ноутбук 3кг asus eee pc X101CH". 2. стандарт наименования. Например: наименование - ноут, производитель - asus, модель - eee pc X101CH, далее - всяко-разно - 3 кг. Дело долгое, тяжелое, но только когда сделаешь - станет легче. И намного. |
|||
39
АгентБезопасной Нацио
27.03.17
✎
11:39
|
(27) а там тебе в скайп стукнулся.... если потерял - маякни
|
|||
40
АгентБезопасной Нацио
27.03.17
✎
11:42
|
(38) порядок может быть разным. может по типу номенклатуры (ноут, моноблок, монитор.. ), а может и по производителю (Тобиша-Акайва-Фунайва-Сонни-Панасонец-итд), может по группе наценки (элитка-середняки-ширпотреб-слив). и все порядки имеют право на существование...
|
|||
41
Злопчинский
27.03.17
✎
11:47
|
(37) да и я никогда не использую. Откуда они там работать будут ЕСЛИ ЭТО ЯВНО НЕ ПРОПИСАНО В КОДЕ?
|
|||
42
Злопчинский
27.03.17
✎
13:50
|
для дбф у меня работает вот такая фиговина
. База = СоздатьОбъект("OLEDBData"); RS = База.Соединение(" |Provider=VFPOLEDB.1; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=" + КаталогИБ() + "; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN="""""); //Это ВАЖНО !!! соединение Collating Sequence=MACHINE Запрос = База.СоздатьКоманду(); . но не работает . ODBCDatabase = СоздатьОбъект("ODBCDatabase"); ЗапросДБФ = СоздатьОбъект("ODBCRecordSet"); СтрокаПодключения = "DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;"+ "Exclusive=No;SourceType=DBF;SourceDB="+КаталогИБ(); Результат = ODBCDatabase.Соединение(СтрокаПодключения); . для ODBC надо что-то отдельное для VFP ставить? или какие-то настройки в системе не сделаны? . oledb ставился через VFPOLEDBSetup.msi (или vfpoledb.exe - не помню, но наверное это одно и то же) |
|||
43
Злопчинский
27.03.17
✎
14:11
|
ODBC даже сразу и не найти влегкую.. ладно. сисадмину задачу поставил - сделает...
|
|||
44
Злопчинский
28.03.17
✎
14:53
|
Админ поставли ОДБЦ, впилил класс поиска-выбора как на картинках выше (выбор контрагента в ведомости), но вряд ли это сильно будет востребовано
|
|||
45
АгентБезопасной Нацио
28.03.17
✎
15:08
|
(44) на картинках выше - выбор номенклатуры. а выбор контры вот:
http://s42.radikal.ru/i097/1510/04/dcdc83c1b9fa.jpg http://s019.radikal.ru/i600/1510/9f/7745e6037784.jpg |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |