![]() |
|
Как отсортировать контекстный поиск | ☑ | ||
---|---|---|---|---|
0
ZSSSP
13.03.17
✎
15:55
|
Попробовал делать индексирование элемента не помогло. Попробовал индексирование с доп.упорядочиванием.http://s45.radikal.ru/i109/1703/1d/1b0c619a2123.png
|
|||
1
polosov
13.03.17
✎
15:58
|
Там по идее запросы: ВЫБРАТЬ ПЕРВЫЕ 50
как в УТ 11 А в этой конфе хз как. |
|||
2
ZSSSP
14.03.17
✎
07:44
|
скажи где в ут11 находится данный запрос, а в своей конфигурации я постараюсь сам определиться.
|
|||
3
RomaH
naïve
14.03.17
✎
07:57
|
дарю:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) УстановитьПривилегированныйРежим(Истина); СтандартнаяОбработка = Ложь; ДанныеВыбора = ПациентОкончаниеВводаТекстаНаСервере(Параметры); КонецПроцедуры Функция ПациентОкончаниеВводаТекстаНаСервере(Знач Параметры) ДанныеВыбора = Новый СписокЗначений; Подразделение = Неопределено; Параметры.Свойство("Подразделение",Подразделение); Текст = Параметры.СтрокаПоиска; ТекущийГод = Год(ТекущаяДата()); ПозднееНеОбрабатываем = ТекущийГод - 5; Текст = СокрЛП(Текст); RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Истина; RegExp.MultiLine = Ложь; // истина — текст многострочный, ложь — одна строка RegExp.Global = Истина; //Сначала обработаем временный номер Если Не ЗначениеЗаполнено(Подразделение) Тогда RegExp.pattern = "(\d+)"; Результаты = RegExp.Execute(Текст); Если Результаты.Count() > 0 Тогда ВременныйНомер = Число(Результаты.Item(0).Value); СписокФизПоВременномуНомеру(ДанныеВыбора,ВременныйНомер); КонецЕсли; КонецЕсли; //Дальше поищем даты и прочее #Область ДатаРождения_И_ФИО RegExp.pattern = "(\d.*\d)"; Результаты = RegExp.Execute(Текст); ЧастиДат = Новый Массив; Итерация = 0; День = 0; Месяц = 0; Год = 0; ДатаСтрокой = ""; Если Результаты.Count() > 0 Тогда СтрокаСДатой = Результаты.Item(0).Value; RegExp.pattern = "\d+"; Результаты = RegExp.Execute(СтрокаСДатой); Если Результаты.Count() > 0 Тогда Для Ш = 0 По Результаты.Count() - 1 Цикл ЧастьДаты = Результаты.Item(Ш).Value; ДатаСтрокой = ДатаСтрокой + ЧастьДаты; //ОбработатьЧастьДаты(ЧастьДаты,ЧастиДат,Итерация); КонецЦикла; Иначе //ОбработатьЧастьДаты(СтрокаСДатой,ЧастиДат,Итерация); КонецЕсли; КонецЕсли; Если СтрДлина(ДатаСтрокой) = 2 Тогда Год = ПолучитьГодИзЧисла(Число(ДатаСтрокой),ПозднееНеОбрабатываем,ТекущийГод); ИначеЕсли СтрДлина(ДатаСтрокой) = 3 Тогда ГодСтрокой = Сред(ДатаСтрокой,2); Год = ПолучитьГодИзЧисла(Число(ГодСтрокой),ПозднееНеОбрабатываем,ТекущийГод); Месяц = Число(Лев(ДатаСтрокой,1)); ИначеЕсли СтрДлина(ДатаСтрокой) = 4 Тогда //0255 ГодСтрокой = Сред(ДатаСтрокой,3); Год = ПолучитьГодИзЧисла(Число(ГодСтрокой),ПозднееНеОбрабатываем,ТекущийГод); Месяц = Число(Лев(ДатаСтрокой,2)); Если Месяц > 12 Тогда Месяц = 0; КонецЕсли; ИначеЕсли СтрДлина(ДатаСтрокой) = 6 Тогда //020266 ГодСтрокой = Сред(ДатаСтрокой,5); Год = ПолучитьГодИзЧисла(Число(ГодСтрокой),ПозднееНеОбрабатываем,ТекущийГод); Месяц = Число(Сред(ДатаСтрокой,3,2)); Если Месяц > 12 Тогда Месяц = 0; КонецЕсли; День = Число(Сред(ДатаСтрокой,1,2)); Если День > 31 Тогда День = 0; КонецЕсли; ИначеЕсли СтрДлина(ДатаСтрокой) = 8 Тогда //02021966 ГодСтрокой = Сред(ДатаСтрокой,5); Год = ПолучитьГодИзЧисла(Число(ГодСтрокой),ПозднееНеОбрабатываем,ТекущийГод); Месяц = Число(Сред(ДатаСтрокой,3,2)); Если Месяц > 12 Тогда Месяц = 0; КонецЕсли; День = Число(Сред(ДатаСтрокой,1,2)); Если День > 31 Тогда День = 0; КонецЕсли; КонецЕсли; Точность = "ГОД"; Если Месяц = 0 И Год > 0 Тогда Точность = "ГОД"; ДатаРождения = Дата(Год,1,1); ИначеЕсли День = 0 И Месяц > 0 И Год > 0 Тогда Точность = "МЕСЯЦ"; ДатаРождения = Дата(Год,Месяц,1); ИначеЕсли День > 0 И Месяц > 0 И Год > 0 Тогда Точность = "ДЕНЬ"; ДатаРождения = Дата(Год,Месяц,День); КонецЕсли; RegExp.pattern = "[a-zA-Zа-яА-Я]+"; Результаты = RegExp.Execute(Текст); РезКол = Результаты.Count() - 1; ФИО = ""; Для Инд = 0 По РезКол Цикл ФИО = ФИО + " " + Результаты.Item(Инд).Value; КонецЦикла; МассивФИО = СтрРазделить(ФИО," ",Ложь); #КонецОбласти СписокФизЛицПоПараметрам(ДанныеВыбора,ДатаРождения, Точность, МассивФИО, Подразделение,Параметры); Возврат ДанныеВыбора; КонецФункции Процедура СписокФизПоВременномуНомеру(ДанныеВыбора,ВременныйНомер) Если ВременныйНомер = 0 Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВременныйНомерПациента.ДокументРегистрации.Пациент КАК Ссылка, | ВременныйНомерПациента.ДокументРегистрации.Пациент.Наименование КАК Пациент, | ВременныйНомерПациента.ДокументРегистрации.Пациент.ДатаРождения КАК ДатаРождения |ИЗ | РегистрСведений.ВременныйНомерПациента КАК ВременныйНомерПациента |ГДЕ | ВременныйНомерПациента.НомерПациента = &НомерПациента | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВременныйНомерПациентаДляПрофосмотра.НаправлениеНаПрофосмотр.Пациент, | ВременныйНомерПациентаДляПрофосмотра.НаправлениеНаПрофосмотр.Пациент.Наименование, | ВременныйНомерПациентаДляПрофосмотра.НаправлениеНаПрофосмотр.Пациент.ДатаРождения |ИЗ | РегистрСведений.ВременныйНомерПациентаДляПрофосмотра КАК ВременныйНомерПациентаДляПрофосмотра |ГДЕ | ВременныйНомерПациентаДляПрофосмотра.НомерПациента = &НомерПациента"; Запрос.УстановитьПараметр("НомерПациента",ВременныйНомер); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Пациент + " " + Формат(Выборка.ДатаРождения,"ДФ=dd.MM.yy")); КонецЦикла; КонецПроцедуры Процедура СписокФизЛицПоПараметрам(ДанныеВыбора,ДатаРождения, Точность, МассивФИО, Знач Подразделение = Неопределено,Параметры) Если МассивФИО.Количество() = 0 И Не ЗначениеЗаполнено(ДатаРождения) Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Фамилия = ""; Имя = ""; Отчество = ""; Для Ш = 0 По МассивФИО.ВГраница() Цикл Фамилия = МассивФИО[Ш]; Прервать; КонецЦикла; Для Ш = 1 По МассивФИО.ВГраница() Цикл Имя = МассивФИО[Ш]; Прервать; КонецЦикла; Для Ш = 2 По МассивФИО.ВГраница() Цикл Отчество = СокрЛП(Отчество + " " + МассивФИО[Ш]); КонецЦикла; //ФИО = Фамилия + " " + Имя + " " + Отчество; // //МассивФИО = СтрРазделить(ФИО," ",Ложь); // //МассивПерестановок = ОбщегоНазначенияПовтИсп.ПолучитьИндексыПерестановкиПоДлинеМассива(МассивФИО.Количество()); ЭтоСтационар = Ложь; МассивСтационарыхПациентов = Неопределено; Если ЗначениеЗаполнено(Подразделение) Тогда Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗанятыеКойкиСтационара2ОстаткиИОбороты.Пациент |ИЗ | РегистрНакопления.ЗанятыеКойкиСтационара2.ОстаткиИОбороты(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, -7), &НачалоПериода, , , Подразделение = &Подразделение) КАК ЗанятыеКойкиСтационара2ОстаткиИОбороты"; Запрос.УстановитьПараметр("НачалоПериода",КонецДня(ТекущаяДата())); Запрос.УстановитьПараметр("Подразделение",Подразделение); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда МассивСтационарыхПациентов = Результат.Выгрузить().ВыгрузитьКолонку("Пациент"); ЭтоСтационар = Истина; КонецЕсли; КонецЕсли; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 16 | ФизическиеЛица.ФизЛицо КАК Ссылка, | ФизическиеЛица.Фамилия КАК Фамилия, | ФизическиеЛица.Имя КАК Имя, | ФизическиеЛица.Отчество КАК Отчество, | ФизическиеЛица.ФизЛицо.ДатаРождения КАК ДатаРождения |ИЗ | РегистрСведений.ФИОФизЛиц КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВесовыеКоэфициентыПациентов КАК ВесовыеКоэфициентыПациентов | ПО ФизическиеЛица.ФизЛицо = ВесовыеКоэфициентыПациентов.Пациент |ГДЕ | (НЕ &ЭтоСтационар | ИЛИ ФизическиеЛица.ФизЛицо В (&МассивСтационарыхПациентов)) | И (&ДатаРождения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ ФизическиеЛица.ФизЛицо.ДатаРождения МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаРождения, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаРождения, МЕСЯЦ)) | И (&Фамилия = ""%"" | ИЛИ ФизическиеЛица.Фамилия ПОДОБНО &Фамилия) | И (&Имя = ""%"" | ИЛИ ФизическиеЛица.Имя ПОДОБНО &Имя) | И (&Отчество = ""%"" | ИЛИ ФизическиеЛица.Отчество ПОДОБНО &Отчество) | И НЕ ФизическиеЛица.ФизЛицо.ПометкаУдаления | И НЕ ФизическиеЛица.ФизЛицо.Предопределенный | |УПОРЯДОЧИТЬ ПО | Фамилия, | Имя, | Отчество, | ВесовыеКоэфициентыПациентов.ВесовойКоэффициент УБЫВ"; Запрос.УстановитьПараметр("ДатаРождения", ?(ЗначениеЗаполнено(ДатаРождения),ДатаРождения,'00010101')); Запрос.УстановитьПараметр("ЭтоСтационар", ЭтоСтационар); Запрос.УстановитьПараметр("МассивСтационарыхПациентов", МассивСтационарыхПациентов); Запрос.УстановитьПараметр("Фамилия", Фамилия + "%"); Запрос.УстановитьПараметр("Фамилия", Фамилия + "%"); Запрос.УстановитьПараметр("Имя", Имя + "%"); Запрос.УстановитьПараметр("Отчество", Отчество + "%"); Запрос.Текст = СтрЗаменить(Запрос.Текст,"МЕСЯЦ",Точность); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл ДанныеВыбора.Добавить(Результат.Ссылка, Результат.Фамилия + " " + Результат.Имя + " " + Результат.Отчество + " " + Формат(Результат.ДатаРождения,"ДФ=dd.MM.yy")); КонецЦикла; Если Результат.Количество() > 15 Тогда ДанныеВыбора.Удалить(15); ДанныеВыбора.Добавить("", "---------------Это не все----------------"); ИначеЕсли Параметры.Отбор.Свойство("Предопределенный") Тогда Иначе ДанныеВыбора.Добавить("", "-----------------------------------------"); ДанныеВыбора.Добавить(Справочники.Пациенты.НовыйПациент,); КонецЕсли; КонецПроцедуры |
|||
4
RomaH
naïve
14.03.17
✎
08:08
|
и это не "контекстный поиск", а "быстрый поиск" или "ввод по строке в поле ввода"
ну по крайней мере так его 1С называет |
|||
5
ZSSSP
14.03.17
✎
09:30
|
Тема закрыта всем спасибо.Решил, нашел запрос где обрабатывается данный поиск сделал сортировку в нем.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |