Имя: Пароль:
1C
1С v8
Нечеткий поиск по наименованию
0 Aleksei_Pro
 
31.05.12
17:27
НайденныеОбъекты = Новый СписокЗначений;
   НайденныеОбъекты.Очистить();    
   Попытка        
       ЗагрузитьВнешнююКомпоненту("StrMatch.dll");
   Исключение        
       Сообщить("Компонента не найдена!", СтатусСообщения.Внимание);
   КонецПопытки;    
   StrMatch = Новый ("AddIn.StrMatchExtension");
   
   Запрос = Новый Запрос;    
   Запрос.Текст =    
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка,
   |    Номенклатура.Наименование,
   |    Номенклатура.Код
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура";    
   Выборка = Запрос.Выполнить().Выбрать();
   StrMatch.СоздатьКэш(333);    
   Пока Выборка.Следующий() Цикл        
       НаименованиеНоменклатуры = Выборка.Наименование;
       КодНоменклатуры = Выборка.Код;        
       StrMatch.ДобавитьВКэш(333,НаименованиеНоменклатуры,КодНоменклатуры,Строка(НаименованиеНоменклатуры));        
   КонецЦикла;
   
   ПервыйПроход = Истина;    
   Коэффициент = 0;
   ТекущийКоэффициент = 0;
   StrMatch.СравнитьСКэшем(333,НаименованиеТовара,100);
   
   Для К = 1 По 100 Цикл        
       НаименованиеКодНоменклатура = 0;    
       StrMatch.ПолучитьИзПодбора(К, НаименованиеНоменклатуры , ТекущийКоэффициент);    
       Если ПервыйПроход Тогда
           Если (ТекущийКоэффициент >= 100) Тогда    
               Коэффициент = ТекущийКоэффициент/2;
           Иначе
               Коэффициент = ТекущийКоэффициент/1.5;
           КонецЕсли;
           ПервыйПроход = Ложь;
       КонецЕсли;                    
       Если ТекущийКоэффициент >= Коэффициент И ТекущийКоэффициент > 0 Тогда
           Выборка.Сбросить();    
           Выборка.НайтиСледующий(НаименованиеНоменклатуры,"Наименование");        
           НайденныеОбъекты.Добавить(Выборка.Ссылка);            
       КонецЕсли;
   КонецЦикла;
   
   StrMatch.ОчиститьКэш(333);
   Возврат НайденныеОбъекты.ВыгрузитьЗначения();

Он выводит 100 найденных позиций, а как сделать чтобы выводил, если коофициент > 50 ?
1 Aleksei_Pro
 
31.05.12
17:38
Что никто не знает как сделать?
2 Maxus43
 
31.05.12
17:38
никто не занет что это за х*рня StrMatch.dll и какой коэффициент ты хочеш чтоб был > 50
3 Maxus43
 
31.05.12
17:39
Если Коэффициент > 50 Тогда
НайденныеОбъекты.Очистить();
КонецЕсли;
Возврат НайденныеОбъекты.ВыгрузитьЗначения();
4 Maxus43
 
31.05.12
17:40
т.е.
Если Коэффициент < 50
5 Aleksei_Pro
 
31.05.12
17:42
(3) ТекущийКоэффициент всегда один и тот же.
6 Maxus43
 
31.05.12
17:43
(5) и? как я догадаюсь что у тебя там и как оно работает... если какая переменная будет >50 то выводить? вставляй в (3) и всё
7 Aleksei_Pro
 
31.05.12
17:43
(2) в google посмотри
8 Aleksei_Pro
 
31.05.12
17:46
А кто знает "333" что задается?
9 Aleksei_Pro
 
31.05.12
17:47
Коэффициент и ТекущийКоэффициент всегда одинаковые...
10 Maxus43
 
31.05.12
17:48
читал?
В архиве есть подробное описание компоненты в файле als (с)

я вот не хочу
11 Aleksei_Pro
 
31.05.12
17:57
(10) читал конечно, непонятно только почему нельзя установить отбор по коэфициенту в КЭШ, а задается только сколько элементов с наибольшим коэф. выводить ("100" в данном случае)
Закон Брукера: Даже маленькая практика стоит большой теории.