Номер телефона в строке результата поиска

1. cdpomaa 5 05.03.25 12:32 Сейчас в теме
Как вывести вместо кода справочника номер телефона в скобках?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 05.03.25 12:41 Сейчас в теме
(1) Переписать обработчик события поля формы АвтоПодбор.
3. cdpomaa 5 05.03.25 12:45 Сейчас в теме
4. cdpomaa 5 05.03.25 12:46 Сейчас в теме
И цвет красный убрать совпадающих слов
5. RustamZz 05.03.25 13:14 Сейчас в теме
(4) Перейдите на Такси, и он станет зеленым.
6. cdpomaa 5 05.03.25 13:24 Сейчас в теме
9. user5300 1081 05.03.25 15:08 Сейчас в теме
7. Anton_new01 05.03.25 13:39 Сейчас в теме
(1) делал что-то подобное для подбора контрагента.
подсвечивает искомый цвет в найденных строках по наименованию и дописывает ИНН и КПП
заполняет список авто подбора не более 50 элементов.


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

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

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

&НаСервереБезКонтекста
Функция ФорматированиеСтроки(Выборка, ТекстПоиска, ИмяЭлемента)

	#Область Дописка
	ИсходноеНаименование = Выборка.Наименование;
	НаименованиеСДопиской = ИсходноеНаименование;
	
	Если ИмяЭлемента = "Контрагент" Тогда
		НаименованиеСДопиской = СтрШаблон("%1 (ИНН:%2 / КПП:%3)", НаименованиеСДопиской, Выборка.ИНН, Выборка.КПП);
	КонецЕсли;
	#КонецОбласти
	
	#Область Аналитическая
	
	МассивПодстрок = СтрРазделить(ТекстПоиска, " ");
	
	МассивДлинСтрок = Новый Массив;
	ДлинаНаименования = СтрДлина(НаименованиеСДопиской); 
	УчтеннаяДлинаСтроки = 0;
	НаименованиеСДопискойВРег = ВРег(НаименованиеСДопиской);
	Для Каждого Подстрока Из МассивПодстрок Цикл
		ПозицияПодстроки = СтрНайти(НаименованиеСДопискойВРег, Подстрока,,УчтеннаяДлинаСтроки+1);
		Если ПозицияПодстроки = 0 Тогда
			Прервать;
		КонецЕсли;
		МассивДлинСтрок.Добавить(ПозицияПодстроки - 1 - УчтеннаяДлинаСтроки);
		УчтеннаяДлинаСтроки = ПозицияПодстроки - 1;
		МассивДлинСтрок.Добавить(СтрДлина(Подстрока));
		УчтеннаяДлинаСтроки = УчтеннаяДлинаСтроки + СтрДлина(Подстрока);
	КонецЦикла;
	
	Если ДлинаНаименования > УчтеннаяДлинаСтроки Тогда
		МассивДлинСтрок.Добавить(ДлинаНаименования - УчтеннаяДлинаСтроки);
	КонецЕсли;
	#КонецОбласти
	
	#Область Раскраска
	Шрифт = Новый Шрифт(,,Истина);
	ЦветПоисковойСтроки = WebЦвета.Зеленый;
	ЦветДописки = WebЦвета.СветлоСерый;
	
	// Каждый не четный номер массива выделяем цвета Поиска
	НачальныйНомер = 0;
	ИтоговыйМассивСтрок = Новый Массив;
	ГраницаДописки = СтрДлина(ИсходноеНаименование);
	Для Итератор = 0 По МассивДлинСтрок.ВГраница() Цикл
		
		ЧислоСимволов = МассивДлинСтрок[Итератор];
		  // пример наименование 15 дописка 10 строка поиска 3
		  
		Если Итератор%2=0 Тогда // четные номера 0 2 4 .. 
			// определяем красить черным или серым.
			Если НачальныйНомер + ЧислоСимволов <= ГраницаДописки Тогда
				ИтоговыйМассивСтрок.Добавить(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов));
			ИначеЕсли НачальныйНомер > ГраницаДописки Тогда
				ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов), Шрифт, ЦветДописки));
			ИначеЕсли НачальныйНомер < ГраницаДописки
				И НачальныйНомер + ЧислоСимволов > ГраницаДописки Тогда
				ЧастьСимволовДописки = НачальныйНомер + ЧислоСимволов - ГраницаДописки; 
				ИтоговыйМассивСтрок.Добавить(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов - ЧастьСимволовДописки));
				ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, ГраницаДописки + 1, ЧастьСимволовДописки), Шрифт, ЦветДописки));
			КонецЕсли;
		Иначе
			// зеленая строка поиска
			ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов), Шрифт, ЦветПоисковойСтроки));
		КонецЕсли;
		НачальныйНомер = НачальныйНомер + ЧислоСимволов;
		
	КонецЦикла;
	#КонецОбласти
	
	Возврат Новый ФорматированнаяСтрока(ИтоговыйМассивСтрок);
	
КонецФункции



Показать


PS. подписка на событие элемента АвтоПодбор
8. cdpomaa 5 05.03.25 14:55 Сейчас в теме
(7) при вводе символы удаляются, тоесть если ввести иванов то успеваешь ввести только ив
Оставьте свое сообщение

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