1. телефон надо передавать в запрос параметром. надеюсь он нормализован.
2. ссылку можно также передавать параметром с условием <>. для нового она будет пустая, а все объекы в базе имеют непустую ссылку, так что ничего не сломается. И не будет лишнего ветвления.
3. сравнение с Объект.Код предполагает, что это модуль объекта. Если это событие ПередЗаписью - то транзакция не нужна, она и так есть. если ПроверкаЗаполнения - то нужна, но стоит помнить, что при программной работе ПроверитьЗаполнение нужно вызывать руками. Ну и если в ПроверкаЗаполнения, то между окончанием проверки и началом транзакции записи также кто-то может вклиниться.
Сама блокировка устанавливается как-то так:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.Контакты");
ЭлементБлокировки.УстановитьЗначение("ТелефонНомер", Объект.ТелефонНомер);
Блокировка.Заблокировать();
Устанавливать её следует ДО запроса