Имя: Пароль:
1C
 
Яндекс по номенклатуре
, ,
0 33554432
 
31.08.16
07:31
Есть справочник номенклатуры. И есть некий список номенклатуры с внешнего источника, которую нельзя продавать. Кодов нет, прямого соответствия нет. Есть сокращения и в своей базе и в том списке, количество слов разное. Марка может быть как на инглише, так и на русском.

Вопрос такой, как сделать поиск в своей базе, чтобы найти наиболее похожие позиции из того списка?
1 DrZombi
 
гуру
31.08.16
07:40
(0) Посадить бабушку в очках, она будет находить соответствие :)

А зачем вам?
Кто вас таким озадачил?
2 33554432
 
31.08.16
07:45
(1)
фармацевтическое предприятие. за продажу товара, запрещенного к продаже росздравнадзором - штраф вплоть до закрытия.
3 batman69
 
31.08.16
07:47
(2)Тогда там должно быть международное патентованое название, как то так, вот по нему и ищите.
4 Горогуля
 
31.08.16
07:48
(2) левый неформализованный список не автоматизируется. расслабься, забей и налей ещё кофе
5 shuhard
 
31.08.16
07:48
(3) +1
РЛС в помощь
6 shuhard
 
31.08.16
07:49
(4) там есть внешний ключ и всем он известен
7 Горогуля
 
31.08.16
07:50
(6) я только про "некий список номенклатуры с внешнего источника" увидел
8 33554432
 
31.08.16
07:51
(6)
что за ключ?
9 Diman000
 
31.08.16
07:52
В любом случае, если там все так серьезно, то в таких условиях доверить программе выбирать что можно продавать, а что нет - это бред.
Пусть руководство предприятия сажает за это дело девочек или бабушек, разгребать справочник номенклатуры и вести его дальше. Иначе может сесть само...
10 Лефмихалыч
 
31.08.16
08:08
(0) как бы ты ни сделал, результат все равно руками обрабатывать.
Прежде чем городить огород, посчитай, сколько будет стоить компании твой добелстный труд по построению суперсистемы нечеткого недопоиска и потом сравни со стоимостью работы оператора, который это за час руками просандалят.
11 Лефмихалыч
 
31.08.16
08:08
+(9) когда такие вещи доверяют системе, потом людям приходят штрафы за то, что тень сплошную пересекла...
12 33554432
 
31.08.16
08:11
понятно что делать будет оператор, но похожие позиции надо подстветить
13 33554432
 
31.08.16
08:12
вот я такую фишку написал, как думаете, взлетит?

Процедура поискНаСервере()

    строкапоиска=объект.Текст;
    строкапоиска=стрзаменить(строкапоиска,"(","");
    строкапоиска=стрзаменить(строкапоиска,")","");

        мас=    СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(строкапоиска," ");
для каждого стр из мас цикл
    сообщить(стр);
    
конеццикла;
сообщить(мас.количество());

запросПодбор=новый запрос;

    запросПодбор.Текст="ВЫБРАТЬ
                       |    Номенклатура.Ссылка КАК Номенклатура,
                       |    Номенклатура.Производитель
                       |ИЗ
                       |    Справочник.Номенклатура КАК Номенклатура
                       |ГДЕ
                       |    Номенклатура.Наименование ПОДОБНО &Наименование
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование1
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование2
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование3
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование4
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование5
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование6
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование7
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование8
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование9
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование10
                       |    И Номенклатура.Наименование ПОДОБНО &Наименование11
                       |    И Номенклатура.Производитель.Наименование ПОДОБНО &про";
              
         запросПодбор.УстановитьПараметр("про","%"+объект.Производ+"%");              
        запросПодбор.УстановитьПараметр("Наименование","%"+мас[0]+"%");
    если мас.количество()>1 тогда    запросПодбор.УстановитьПараметр("Наименование1","%"+мас[1]+"%") иначе запросПодбор.УстановитьПараметр("Наименование1","%"+" "+"%") конецесли;
    если мас.количество()>2 тогда    запросПодбор.УстановитьПараметр("Наименование2","%"+мас[2]+"%") иначе запросПодбор.УстановитьПараметр("Наименование2","%"+" "+"%") конецесли;
    если мас.количество()>3 тогда    запросПодбор.УстановитьПараметр("Наименование3","%"+мас[3]+"%") иначе запросПодбор.УстановитьПараметр("Наименование3","%"+" "+"%") конецесли;
    если мас.количество()>4 тогда    запросПодбор.УстановитьПараметр("Наименование4","%"+мас[4]+"%") иначе запросПодбор.УстановитьПараметр("Наименование4","%"+" "+"%") конецесли;
    если мас.количество()>5 тогда    запросПодбор.УстановитьПараметр("Наименование5","%"+мас[5]+"%") иначе запросПодбор.УстановитьПараметр("Наименование5","%"+" "+"%") конецесли;
    если мас.количество()>6 тогда    запросПодбор.УстановитьПараметр("Наименование6","%"+мас[6]+"%") иначе запросПодбор.УстановитьПараметр("Наименование6","%"+" "+"%") конецесли;
    если мас.количество()>7 тогда    запросПодбор.УстановитьПараметр("Наименование7","%"+мас[7]+"%") иначе запросПодбор.УстановитьПараметр("Наименование7","%"+" "+"%") конецесли;
    если мас.количество()>8 тогда    запросПодбор.УстановитьПараметр("Наименование8","%"+мас[8]+"%") иначе запросПодбор.УстановитьПараметр("Наименование8","%"+" "+"%") конецесли;
    если мас.количество()>9 тогда    запросПодбор.УстановитьПараметр("Наименование9","%"+мас[9]+"%") иначе запросПодбор.УстановитьПараметр("Наименование9","%"+" "+"%") конецесли;
    если мас.количество()>10 тогда    запросПодбор.УстановитьПараметр("Наименование10","%"+мас[10]+"%") иначе запросПодбор.УстановитьПараметр("Наименование10","%"+" "+"%") конецесли;
    если мас.количество()>11 тогда    запросПодбор.УстановитьПараметр("Наименование11","%"+мас[11]+"%") иначе запросПодбор.УстановитьПараметр("Наименование11","%"+" "+"%") конецесли;    



        итог=запросПодбор.Выполнить().Выгрузить();
        объект.Результат.Загрузить(итог);
14 Лефмихалыч
 
31.08.16
08:12
(12) о каком количестве позиций речь?
15 33554432
 
31.08.16
08:14
(14)
30 штук в неделю забракованных позиций, 300 тыс номенклатура в базе
16 Лефмихалыч
 
31.08.16
08:16
(15) вообще нет повода для автоматизации. 30 позиций в неделю найти - не проблема. Человеку даже час для этого не нужен.
17 Лефмихалыч
 
31.08.16
08:17
человек только посмотрит на кашу из этих слов и сразу поймет, какую папку ему открывать. А вот код твой поймет не сразу и не факт, что вообще поймет.
18 33554432
 
31.08.16
08:20
(16)
фармация это тебе не бревна, и даже не алкоголь, тут тысячи похожих позиций номенклатуры могут быть для одной отдельно взятой. И каждая позиция может из 30 слов состоять.
19 33554432
 
31.08.16
08:26
вот пример сегодняшней реальной заблокированной номенклатуры. попробуй поройся в базе.

"Перчатки медицинские латексные и нитриловые по ТУ 2514-001-50341858-2010 в следующих исполнениях: хирургические стерильные и нестерильные и смотровые стерильные и нестерильные"
20 batman69
 
31.08.16
08:29
(19) Ну, так если ты это глазами найти не можешь, как ты это автоматизировать собрался?
21 batman69
 
31.08.16
08:31
А 30 штук в неделю, вообще не о чем.
22 Лефмихалыч
 
31.08.16
08:31
(18) я в курсе, фармацию несколько лет к ряду автоматизировал. И не вижу проблем.

(19) ну, удачи
23 33554432
 
31.08.16
08:37
(20)
они вводят несколько отрывков через пробел и что-то похожее в списке выпадает.
24 batman69
 
31.08.16
08:39
(23) "и что-то похожее в списке выпадает", эх россия....
25 Stepa86
 
31.08.16
09:05
Полнотекстовый поиск уже предлагали?
26 batman69
 
31.08.16
09:10
(25) Ты первый, Стёпа.
27 lubitelxml
 
31.08.16
09:28
(0) посмотри уже как в УТ 10.3 работает обработка поиск и замена дублей. Там можно выставлять - на сколько сильно может изменятся наименование
28 sitex
 
naïve
31.08.16
10:07
(0) Регулярный выражения поди тоже предлагали).