Имя: Пароль:
1C
1С v8
8.2 найдено более 50 элементов - как обойти?
0 RomaH
 
naïve
17.01.13
08:53
нужная идея
суть проблемы - справочник групп и элементов
идет ввод в табличную часть путем ввода по строке (код)

код формируется по иерархии

1
1.1
1.1.2
и так далее

так вот, при желании выбрать группу с кодом "1" система выдает сообщение что найдено более 50 элементов

вот как ограничить количество этих элементов до 49? и что бы красиво?

допустим выбрать первые 49 элементов с минимальным числом символов после строки посика?
1 IamAlexy
 
17.01.13
08:55
как как.. программно..
обрабатывай события окончания ввода текста вроде как и формируй свой список
2 RomaH
 
naïve
17.01.13
08:59
а как отсортировать по релевантности к строке поиска?
3 kotletka
 
17.01.13
09:01
(1)неверно, надо грамотно структурировать нси, тогда такой проблемы не будет
4 RomaH
 
naïve
17.01.13
09:03
(3) что такое "нси"?
нси структурирован на уровне министерства здравоохранения и коды набираются в базу данных с печатной формы пришедшей от заказчика
5 Ranger_83
 
17.01.13
09:04
(3)С какого перепугу заказчик будет подстраиваться под программу??
6 RomaH
 
naïve
17.01.13
09:13
http://www.dropmocks.com/mBoFYt

1. справочник и элемент который нужен в спсике выбора на первых позициях

2. форма котоая сейчас получается

3. код которым это получается

вот как сделать так что бы элементы с кодом "1" - наиболее соотвествующие строке поиска шли на первом месте?
7 AaNnDdRrEeYy
 
17.01.13
09:13
В событии поля
&НаКлиенте
Процедура Реквизит1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; //не будет искать сам

а потом запросом Первые например 50 и условие ПОДОБНО "Текст%"

а результат запроса записхнуть в ДанныеВыбора
8 RomaH
 
naïve
17.01.13
09:14
(7) не правильно, для этого есть менеджер справочника
вопрос в другом - как описать релевантность
9 RomaH
 
naïve
17.01.13
09:14
в запросе можно длину строки узнать?
10 ptiz
 
17.01.13
09:19
(9) Зачем? Делаешь ПОДОБНО и сортируешь
11 AaNnDdRrEeYy
 
17.01.13
09:20
(9)нет нельзя.
12 RomaH
 
naïve
17.01.13
09:21
сортировка не очень подходит (полумера)
поиск идет по 4 полям
код (00000001)/код официальный (1.1.1)/код быстрого подбора (111)/наименование

по какому полю сортировать?
13 AaNnDdRrEeYy
 
17.01.13
09:21
(8) и что там в модуле менеджера справочника?
Там только ОбработкаПолученияДанных и ОбработкаПолученияФормы
14 IamAlexy
 
17.01.13
09:23
(2) придумать алгоритм сортировки и реализовать его... этож программный способ - все в твоих руках
15 RomaH
 
naïve
17.01.13
09:23
(13) ОбработкаПолученияДанных это зачем?
16 AndyD
 
17.01.13
09:26
(12) нам с форума не очень видно как вам надо.

как вам надо, так и сортируйте перед выводом
17 AndyD
 
17.01.13
09:27
можно каждому полю из 4х присвоить вес соответствия (от 1 до 100, например), потом сложить веса всех полей и по этой сумме сортировать
18 AaNnDdRrEeYy
 
17.01.13
09:28
(15) Ну да, это подходит. Но это будет работать во всех полях ввода с типом этого справочника, если это надо тогда ладно.
19 RomaH
 
naïve
17.01.13
09:44
что-то не врубаюсь

   Запрос = Новый Запрос;
   
   Запрос.УстановитьПараметр("СтрокаПоиска0",Текст);
   Запрос.УстановитьПараметр("СтрокаПоиска1",Текст + "_");
   Запрос.УстановитьПараметр("СтрокаПоиска2",Текст + "__");
   Запрос.УстановитьПараметр("Текст",Текст + "%");
   Запрос.УстановитьПараметр("Владелец",Параметры.Отбор.Владелец);
   
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ВредныеПроизводственныеФакторыИРаботы.Ссылка КАК Ссылка,
   |    ВредныеПроизводственныеФакторыИРаботы.ПометкаУдаления,
   |    ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора,
   |    ВЫБОР
   |        КОГДА ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора ПОДОБНО &СтрокаПоиска0
   |            ТОГДА 0
   |        КОГДА ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора ПОДОБНО &СтрокаПоиска1
   |            ТОГДА 1
   |        КОГДА ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора ПОДОБНО &СтрокаПоиска2
   |            ТОГДА 2
   |    КОНЕЦ КАК Релевантность
   |ИЗ
   |    Справочник.ВредныеПроизводственныеФакторыИРаботы КАК ВредныеПроизводственныеФакторыИРаботы
   |ГДЕ
   |    ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора ПОДОБНО &Текст
   |    И ВредныеПроизводственныеФакторыИРаботы.Владелец = &Владелец
   |    И НЕ ВредныеПроизводственныеФакторыИРаботы.ПометкаУдаления
   |
   |УПОРЯДОЧИТЬ ПО
   |    Релевантность";
   
   
   Результат = Запрос.Выполнить().Выбрать();
   
   ДанныеВыбора = Новый СписокЗначений;
   
   КоличествоЭлементов = 0;
   
   Пока Результат.Следующий() И КоличествоЭлементов <50 Цикл
       
       ДанныеВыбора.Добавить(Результат.Ссылка,,Результат.ПометкаУдаления);    
       
       КоличествоЭлементов = КоличествоЭлементов + 1;
       
   КонецЦикла;


по строке поиска "1" на первые места выдает элементы с кодом "11432"
что не так?
20 AaNnDdRrEeYy
 
17.01.13
09:48
когда срабатывает первый

ВЫБОР
   |        КОГДА ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора ПОДОБНО &СтрокаПоиска0

то второй ВЫБОР КОГДА уже не проверяется ,может тут что не так?

Напиши ВЫБРАТЬ ПЕРВЫЕ 50 быстрее будет.
21 RomaH
 
naïve
17.01.13
09:49
ИНАЧЕ 100 не хватает
22 RomaH
 
naïve
17.01.13
09:51
но это только для одного поля
а вот как красиво сделать для многих?
23 AaNnDdRrEeYy
 
17.01.13
09:54
Можно в запросе их сложить
ВЫБОР
   |        КОГДА ВредныеПроизводственныеФакторыИРаботы.КодБыстрогоПодбора +   второйКОД + ТретийКОД ПОДОБНО &СтрокаПоиска0
   |            ТОГДА 0

и тогда в подобно надо два значка процента поставить %текст%
чтоб в середине этой сложенной строки искало