Код писался на УНФ 1.6.12.4. Но подойдет и для любой другой. Чуток подправить под конфу, если надо и все.
1) Создать серверный общий модуль.
2) Создать подписку на событие объекта справочника. Указать в ней следующую процедуру:
Ну и весь код общего модуля. При желании можно добавить еще какую-нибудь проверку.
#Область ПодпискиНаСобытия
Процедура aspect_ПередЗаписьюСправочникаПередЗаписью(Источник, Отказ) Экспорт
Если ТипЗнч(Источник) = Тип("СправочникОбъект.Контрагенты") Тогда
Если НЕ ЗначениеЗаполнено(Источник.Ссылка) Тогда
Если ЗначениеЗаполнено(Источник.НомерТелефона) Тогда
// необходимо произвести поиск по этому номеру телефона, предварительно обработав его
// т.к. номер может быть введен по-разному
ТаблицаСообщений = Новый ТаблицаЗначений;
ТаблицаСообщений.Колонки.Добавить("ТекстСообщения", Новый ОписаниеТипов("Строка"));
ТаблицаСообщений.Колонки.Добавить("Контрагент" , Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
НомерТелефонаДляПроверки = ПреобразоватьНомерТелефонаДляПроверки(Источник.НомерТелефона);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.НомерТелефона КАК НомерТелефона
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ЭтоГруппа
| И НЕ Контрагенты.НомерТелефона = &ПустойНомерТелефона";
Запрос.УстановитьПараметр("ПустойНомерТелефона", "");
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
ТекущийНомерТелефона = ПреобразоватьНомерТелефонаДляПроверки(ВыборкаЗапроса.НомерТелефона);
Для i=1 По СтрЧислоСтрок(ТекущийНомерТелефона) Цикл
Для m=1 По СтрЧислоСтрок(НомерТелефонаДляПроверки) Цикл
Если СтрПолучитьСтроку(ТекущийНомерТелефона, i) = СтрПолучитьСтроку(НомерТелефонаДляПроверки, m) Тогда
ТекстСообщения = "Номер телефона: '" + СтрПолучитьСтроку(НомерТелефонаДляПроверки, m) + "' уже привязан к контрагенту: '" + Строка(ВыборкаЗапроса.Ссылка) + "'";
НоваяСтрока = ТаблицаСообщений.Добавить();
НоваяСтрока.ТекстСообщения = ТекстСообщения;
НоваяСтрока.Контрагент = ВыборкаЗапроса.Ссылка;
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если ТаблицаСообщений.Количество() > 0 Тогда
ТекстСообщения = "Открыть контрагента можно двойным нажатием ЛКМ";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Для каждого СтрокаСообщения Из ТаблицаСообщений Цикл
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения.ТекстСообщения, СтрокаСообщения.Контрагент, , , );
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Функция ПреобразоватьНомерТелефонаДляПроверки(НомерТелефона)
НомерТелефонаДляПроверки = НомерТелефона;
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, " ", "");
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "+", "");
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "(", "");
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, ")", "");
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "-", "");
НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, ",", Символы.ПС);
Возврат НомерТелефонаДляПроверки;
КонецФункции