Как найти контрагент по электронному адресу?

Версия для печатиPDF-версия
Иногда нужно найти контрагента по контактной информации.
Например, по ФИО, телефону, адресу, электронному адресу и т.д.
 
Сегодня весь день пытаюсь составить запрос на поиск контрагента по регистру сведений КонтактнаяИнформация.
В инете не нашел ни одного примера.
От обратного лишь только.
Научите, пожалуйста.
 
 
В регистре нашел форму списка.
И по ней составил:

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Представление,
		|	КонтактнаяИнформация.Объект,
		|	КонтактнаяИнформация.Тип,
		|	КонтактнаяИнформация.Вид
		|ИЗ
		|	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация";

	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Если Найти(ВыборкаДетальныеЗаписи.Представление, Мыло) > 0 Тогда 
			
			  РеквизитФормыСтрока =  ВыборкаДетальныеЗаписи.Объект;
	КонецЕсли;	
	КонецЦикла;
Вроде работает.
Буду допиливать.
Но есть вопрос: По метаданным такие вещи искать возможно?

Идея правильная, только в условия запроса надо добавить условие ПОДОБНО:

ГДЕ КонтактнаяИнформация.Представление ПОДОБНО &Мыло

И в параметр запроса Мыло передавать значение "%" + Мыло + "%" .

Без такого условия при большом объёме данных цикл обхода выборки будет много времени забирать. 

Для отбора только по контрагентам нужно добавить такое условие:

КонтактнаяИнформация.Объект ССЫЛКА Справочник.Контрагенты

Было:


	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Представление,
		|	КонтактнаяИнформация.Объект,
		|	КонтактнаяИнформация.Тип,
		|	КонтактнаяИнформация.Вид
		|ИЗ
		|	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация";


			
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		     		
    	Если Найти(ВыборкаДетальныеЗаписи.Представление, Мыло) > 0 Тогда 
			
			Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Объект) И ТипЗнч(ВыборкаДетальныеЗаписи.Объект) = Тип("СправочникСсылка.Контрагенты") Тогда

      	мРеквизитФормыСтрока =  ВыборкаДетальныеЗаписи.Объект;
				
			ИначеЕсли ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Объект) И ТипЗнч(ВыборкаДетальныеЗаписи.Объект) = Тип("СправочникСсылка.КонтактныеЛицаКонтрагентов") Тогда
			
			мРеквизитФормыСтрока = ВыборкаДетальныеЗаписи.Объект.Ссылка.Владелец;
		
			Иначе


		 Сообщить("Нету");

		
			КонецЕсли;	 
			  
		КонецЕсли;	
		
	КонецЦикла;

Стало:


	Мыло = "%" + Мыло + "%";
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Представление,
		|	КонтактнаяИнформация.Объект,
		|	КонтактнаяИнформация.Тип,
		|	КонтактнаяИнформация.Вид
		|ИЗ
		|	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
		|ГДЕ
   		|    КонтактнаяИнформация.Представление ПОДОБНО &Мыло";

		
		Запрос.УстановитьПараметр("Мыло", Мыло);


			
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();


	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл


      	мРеквизитФормыСтрока = ВыборкаДетальныеЗаписи.Объект;

	
	 КонецЦикла;
	

 

 Визульно что с % , что без них работает.

Зачем они нужны?
 
 
И в порядке общего развития:
Куда и как прикрутить условие не понял.
Пробовал так:
 
 
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Мыло
    |    КонтактнаяИнформация.Объект ССЫЛКА Справочник.Контрагенты";
 
 
 
Синтаксическую ошибку выдает.
 
Куда правильно и как прикручивать это услувие, в случае необходимости?
 

 

 

1. Без % поиск идёт по полному соответствию (т.е. аналогично Представление = Мыло). С % ищутся строки с вхождением искомой строки. Например, если в Представление внесено несколько адресов электронной почты, то это может пригодиться. Смотрите сами, как лучше.
2. Перед вторым условием нужно добавить И.

Понял. Огромное спасибо.

Оказывается очень полезая вещь - %