Поиск в динамическом списке

1. khabibullin.tu 95 03.10.18 11:44 Сейчас в теме +1 $m
Всем привет ! На форме есть динамический список, есть дополнение элемента формы (СтрокаПоиска), как можно получить значение в этой строке поиска и его заменить ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. Sashares 34 03.10.18 13:06 Сейчас в теме
17. dandykry 10 03.10.18 15:51 Сейчас в теме
(1) Посмотрите как сделано в формах партнеры, номенклатура. Там поиск такой как хотите
insurgut; +1 Ответить
2. khabibullin.tu 95 03.10.18 11:50 Сейчас в теме
Два дня бьюсь над этой проблемой, помогите кто чем может ))))
8. insurgut 207 03.10.18 13:04 Сейчас в теме
(2) судя по всему никак. Только переопределять строку поиска на форме и запускать поиск самому по событиям поля ввода.
13. khabibullin.tu 95 03.10.18 13:39 Сейчас в теме
(8)
(2) судя по всему никак. Только переопределять строку поиска на форме и запускать поиск самому по событиям поля ввода.


Допустим я добавлю поле ввода, как программно запустить поиск ? Полнотекстовый программный поиск по регистру сведений всегда возвращает 0 найденных значений, а передать значение поиска никак нельзя
15. insurgut 207 03.10.18 14:11 Сейчас в теме
(13) именно полнотекстовым видимо никак - это механизм платформы, к которому доступа нет. Самому как вариант только подменять запрос динамического списка добавляя условия "Список.Реквизит1 ПОДОБНО %СтрокаПоиска% ИЛИ Список.Реквизит2 ПОДОБНО %СтрокаПоиска%", после чего обновлять список.
19. herfis 499 03.10.18 16:49 Сейчас в теме
(13)
Полнотекстовый программный поиск по регистру сведений всегда возвращает 0 найденных значений

Вероятно потому, что по умолчанию для регистров сведений создание индекса полнотекстового поиска отключено.
21. insurgut 207 03.10.18 18:15 Сейчас в теме
(13) подсмотрено в УТ 11. На форме размещен реквизит (тип строка) СтрокаПоиска. При изменении вызываем:

&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
	
	ВыполнитьПоиск(Неопределено);
	
КонецПроцедуры


Ну а далее:

#Область ПолнотекстовыйПоиск

&НаКлиенте
Процедура ПроверитьИндексПолнотекстовогоПоиска(Знач Оповещение)
	
	Если Не ИндексПолнотекстовогоПоискаАктуален И ИнформационнаяБазаФайловая Тогда
		
		ПоказатьВопрос(Новый ОписаниеОповещения("ПроверитьИндексПолнотекстовогоПоискаЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), 
			НСтр("ru='Индекс полнотекстового поиска неактуален. Обновить индекс?'"), РежимДиалогаВопрос.ДаНет);
        Возврат;
		
	КонецЕсли;
	
	ПроверитьИндексПолнотекстовогоПоискаФрагмент(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьИндексПолнотекстовогоПоискаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    Оповещение = ДополнительныеПараметры.Оповещение;
    
    
    Результат = РезультатВопроса; 
    
    Если Результат = КодВозвратаДиалога.Да Тогда
        ПодключитьОбработчикОжидания("ОбновитьИндексПолнотекстовогоПоиска",0.2,Истина);
        ВыполнитьОбработкуОповещения(Оповещение);
        Возврат;
    КонецЕсли;
    
    
    ПроверитьИндексПолнотекстовогоПоискаФрагмент(Оповещение);

КонецПроцедуры

&НаКлиенте
Процедура ПроверитьИндексПолнотекстовогоПоискаФрагмент(Знач Оповещение)
    
    ВыполнитьПолнотекстовыйПоиск();
    
    ВыполнитьОбработкуОповещения(Оповещение);

КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИндексПолнотекстовогоПоиска()
	
	Состояние(НСтр("ru = 'Идет обновление индекса полнотекстового поиска...'"));
	ОбновитьИндексПолнотекстовогоПоискаСервер();
	ИндексПолнотекстовогоПоискаАктуален = Истина;
	Состояние(НСтр("ru = 'Обновление индекса полнотекстового поиска завершено...'"));
	ВыполнитьПолнотекстовыйПоиск();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПолнотекстовыйПоиск()
	
	ТекстОшибки = НайтиПартнеровПолнотекстовыйПоиск();
	Если ТекстОшибки = Неопределено Тогда
		РасширенныйПоиск = Истина;
		ЗаполнитьСтрокуОснования();
	Иначе
		Если НЕ ТекстОшибки = НСтр("ru = 'Ничего не найдено'") Тогда
			ПоказатьОповещениеПользователя(ТекстОшибки);
		Иначе
			ПартнерыИКонтрагентыКлиент.ВосстановитьОтображениеСпискаПослеПолнотекстовогоПоиска(ЭтаФорма);
			РасширенныйПоиск = Ложь;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьИндексПолнотекстовогоПоискаСервер()
	
	ПартнерыИКонтрагенты.ОбновитьИндексПолнотекстовогоПоиска();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьСтрокуОснования()
	
	Основание = Основания.НайтиСтроки(Новый Структура("Партнер", Элементы.Список.ТекущаяСтрока));
	Если Основание.Количество() = 0 Тогда
		ОснованиеВыбора = "";
	Иначе
		ОснованиеВыбора = Основание[0].Основание;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция НайтиПартнеровПолнотекстовыйПоиск()

	Возврат ПартнерыИКонтрагенты.НайтиПартнеровПолнотекстовыйПоиск(ЭтаФорма)

КонецФункции

&НаКлиенте
Процедура ВыполнитьПоиск(Знач Оповещение)
	
	Если СтрокаПоиска <> "" Тогда
		
		ПроверитьИндексПолнотекстовогоПоиска(Новый ОписаниеОповещения("ВыполнитьПоискЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)));
        Возврат;
		
	Иначе
		ПартнерыИКонтрагентыКлиент.ВосстановитьОтображениеСпискаПослеПолнотекстовогоПоиска(ЭтаФорма);
		РасширенныйПоиск = Ложь;
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список,
		                                                                   "ОтборПоПолнотекстовомуПоискуУстановлен",
		                                                                   Ложь);
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список,
		                                                                   "ОтборПоПолнотекстовомуПоиску",
		                                                                   Неопределено);
		ОснованиеВыбора = "";
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПоискЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Оповещение = ДополнительныеПараметры.Оповещение;
    
    
    ЭтаФорма.ТекущийЭлемент = ?(НЕ РасширенныйПоиск, Элементы.СтрокаПоиска, Элементы.Список);
    
    
    ВыполнитьОбработкуОповещения(Оповещение);

КонецПроцедуры

#КонецОбласти

Показать
22. khabibullin.tu 95 04.10.18 13:19 Сейчас в теме
(21)
Неопределено


А на какой форме это в УТ ?
23. insurgut 207 04.10.18 13:52 Сейчас в теме
3. Akuji 22 03.10.18 11:55 Сейчас в теме
Как выглядит новый поиск в конфигураторе

Для работы с новым механизмом поиска мы добавили в форму новый элемент. Он называется Дополнение элемента формы. Раньше у формы было 5 элементов: Поле, Таблица, Кнопка, Группа и Декорация. Теперь таких элементов шесть.

Для таблиц динамических списков платформа автоматически создаёт три таких элемента: Строка поиска, Состояние просмотра и Управление поиском. Появление этих элементов в форме регулируется тремя новыми свойствами таблицы: ПоложениеСтрокиПоиска, ПоложениеСостоянияПросмотра и ПоложениеУправленияПоиском.

При желании разработчик может не использовать стандартные элементы (Дополнение элемента формы), а создать собственные. Для этого достаточно добавить в форму Дополнение элемента формы и задать ему источник.

подробнее
Cmapnep; АлексейКузьмин; Doreng; +3 2 Ответить
4. khabibullin.tu 95 03.10.18 12:01 Сейчас в теме
(3)
Для работы с новым механизмом поиска мы добавили в форму новый элемент. Он называется Дополнение элемента формы. Раньше у формы было 5 элементов: Поле, Таблица, Кнопка, Группа и Декорация. Теперь таких элементов шесть.

Для таблиц динамических списков платформа автоматически создаёт три таких элемента: Строка поиска, Состояние просмотра и Управление поиском. Появление этих элементов в форме регулируется тремя новыми свойствами таблицы: ПоложениеСтрокиПоиска, ПоложениеСостоянияПросмотра и ПоложениеУправленияПоиском.

При желании разработчик может не использовать стандартные элементы (Дополнение элемента формы), а создать собственные. Для этого достаточно добавить в форму Дополнение элемента формы и задать ему источник.


Я видел это и ничего мне это не дает, как достучаться то до значения поиска ?
5. user705522_constantin_h 35 03.10.18 12:07 Сейчас в теме
(4)
Для таблиц динамических списков платформа автоматически создаёт три таких элемента: Строка поиска, Состояние просмотра и Управление поиском. Появление этих элементов в форме регулируется тремя новыми свойствами таблицы: ПоложениеСтрокиПоиска, ПоложениеСостоянияПросмотра и ПоложениеУправленияПоиском.

Список.СтрокаПоиска.
6. insurgut 207 03.10.18 12:31 Сейчас в теме
(5) Если точнее, то Элементы.СписокСтрокаПоиска, только к содержимому строки по этому пути не пробраться
7. user705522_constantin_h 35 03.10.18 13:04 Сейчас в теме
(6)Я думаю, как раз нужно Список.СтрокаПоиска.
11. insurgut 207 03.10.18 13:08 Сейчас в теме
(7) ну если нужно получить "Поле объекта не обнаружено (СтрокаПоиска)", то можно и так.
9. khabibullin.tu 95 03.10.18 13:04 Сейчас в теме
(5)
(6)

К сожалению, ваши данные никак не помогают мне решить проблему, это я и так знаю
14. user705522_constantin_h 35 03.10.18 14:07 Сейчас в теме
(9)Ну так заполняй Список.СтрокаПоиска = "ляляляляля"
16. insurgut 207 03.10.18 14:14 Сейчас в теме
(14) на управляемых формах нету у ни у элемента формы "Список", ни у самого объекта "Список" такого реквизита "СтрокаПоиска".
18. user705522_constantin_h 35 03.10.18 16:45 Сейчас в теме
(16)
Прикрепленные файлы:
20. insurgut 207 03.10.18 17:48 Сейчас в теме
(18) так это не реквизит. Чтобы убедиться - в отладчике покажите ) То, что в конфигураторе вы связали дополнение элемента формы со строкой поиска списка, не означает наличия программного доступа к введенному в это поле значения.
12. soft_wind 03.10.18 13:15 Сейчас в теме
еще как вариант, напишите свой обработчик поиска! создайте свое поле. у вас полный доступ к нему будет, и свой поиск быстрее отрабатывает.
замечено, стандартный/интрефейсный поиск капитально тупит!
тут делов-то на пару часов!
24. Ditron 185 05.10.18 16:32 Сейчас в теме
Никак однозначно, сделайте свой поиск! В чем проблема сделать группу и разместить в ней командную панель и ваше поле с обработчиком...
25. xtd 6 23.04.19 15:27 Сейчас в теме
(24)
У меня вышла проблема в этом: https://forum.infostart.ru/forum9/topic215541/
Как выбрать номенклатуру не учитывая конкретную последовательность введенных пользователем ключевых слов для поиска?
26. Ditron 185 23.04.19 17:19 Сейчас в теме
(25) полнотекстовый поиск вам в руки ) или... разбивать слова строки поиска в массив и в запрос их на поиск ПОДОБНО, но лучше первое...
27. xtd 6 23.04.19 17:28 Сейчас в теме
(26)
"разбивать слова строки поиска в массив и в запрос их на поиск ПОДОБНО"

Это как? Можно пример кода?
28. Ditron 185 23.04.19 17:52 Сейчас в теме
(27) в (6) вышеуказанной вами ветки вам полный код описали, с формированием динамического текста запроса
29. KAV2 156 18.03.20 13:34 Сейчас в теме
(24) это технически сложно сделать так как это делает платформа, надо ведь реализовать подкрашивание красным цветом найденных символов в строках динамического списка.
30. Romkin 02.04.20 17:57 Сейчас в теме
Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных() - тип настройки компановки данных... можно вытащить оттуда или сразу загрузить эти настройки...
Korolev; Laretyn; +2 Ответить
31. ma1n 05.02.21 15:58 Сейчас в теме
Пример, как получить значение.

Минус этого метода - может найти значение пользовательского отбора.
Можно их исключить, вычислив пользовательские отборы в "Список.КомпановщикНастроек.ПользовательскиеНастройки.Элементы"
Здесь это не продемонстрировано.

&НаСервере
Процедура ОпределитьТекстПоиска()

	//Поиск работает хитро, поэтому нужно понять, для каких целей нужна строка поиска.
 	//Ради примера -  для создания нового элемента справочника в наименование нужно поместить текст поиска.
	
	ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("Ссылка.Наименование");
	ЭлементыОтбора = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных().Отбор.Элементы;
	
	Результат = "";
	ПолучитьЗначениеОтбора(ЭлементыОтбора, ПолеКомпоновкиДанных, Результат);
	
	Сообщить(Результат);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПолучитьЗначениеОтбора(ЭлементыОтбора, ПолеКомпоновкиДанных, Результат)
	
	Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл
	
		Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			
			ПолучитьЗначениеОтбора(ЭлементОтбора.Элементы, ПолеКомпоновкиДанных, Результат)
			
		Иначе
			
			Если ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновкиДанных Тогда
				Результат = ЭлементОтбора.ПравоеЗначение;
				Прервать;
			КонецЕсли;
			
		КонецЕсли;
		
		Если ЗначениеЗаполнено(Результат) Тогда
			Прервать;
		КонецЕсли;
		
	КонецЦикла; 
	
КонецПроцедуры
Показать
32. Rain_man 27.05.22 11:08 Сейчас в теме
(31)
&НаСервере
Процедура ОпределитьТекстПоиска()

//Поиск работает хитро, поэтому нужно понять, для каких целей нужна строка поиска.
//Ради примера - для создания нового элемента справочника в наименование нужно поместить текст поиска.

ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("Ссылка.Наименование");
ЭлементыОтбора = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных().Отбор.Элементы;

Результат = "";
ПолучитьЗначениеОтбора(ЭлементыОтбора, ПолеКомпоновкиДанных, Результат);

Сообщить(Результат);

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПолучитьЗначениеОтбора(ЭлементыОтбора, ПолеКомпоновкиДанных, Результат)

Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл

Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда

ПолучитьЗначениеОтбора(ЭлементОтбора.Элементы, ПолеКомпоновкиДанных, Результат)

Иначе

Если ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновкиДанных Тогда
Результат = ЭлементОтбора.ПравоеЗначение;
Прервать;
КонецЕсли;

КонецЕсли;

Если ЗначениеЗаполнено(Результат) Тогда
Прервать;
КонецЕсли;

КонецЦикла;

КонецПроцедуры
Показать


Сделал пустую внешнюю обработку, в ней ТЗ со строкой поиска. Набрал что-то в строку поиска, нажал кнопку (любую созданную для этого) и перехватил в отладчик.
ПолучитьИсполняемыеНастройкиКомпоновкиДанных() - содержит "Неопределено"
33. OdiVol 31.05.22 12:07 Сейчас в теме
Прекрасный рабочий вариант. Спасибо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот