Используем отбор по полному уникальному имени и локальной записи, а не поиск всех личных контактов.
Где и как запускать
Полный клиентский модуль собственной мобильной управляемой формы. Не вставляйте процедуры внутрь другой процедуры.
Подготовка
Только мобильный клиент/мобильное приложение 1С на собственном тестовом устройстве и отдельная пустая конфигурация УчебнаяКонфигурацияСинтаксиса. Настольный клиент не заменяет этот API.
Вручную разрешите доступ к контактам только своему учебному приложению. Поддержка метода не доказывает разрешение ОС.
Изменения адресной книги выполняйте только в отдельном локальном учебном профиле без синхронизации и реальных контактов. Не используйте корпоративные/личные учётные записи.
Создайте отдельную управляемую форму для каждого урока. Полный код вставляется на уровне модуля; команды и указанные строковые реквизиты создаются вручную.
Рецепты изменения/удаления при ручном запуске реально меняют адресную книгу ОС. Здесь они не исполнялись, runtime-проверка 1С не заявляется.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
ИмяКонтакта = СокрЛП(УчебноеИмяКонтакта);
Если Лев(ИмяКонтакта, 20) <> "guide-owned-contact-" Тогда
ВызватьИсключение "Укажите точное полное имя собственного учебного контакта";
КонецЕсли;
Менеджер = Новый МенеджерКонтактов;
ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКонтактов();
Отбор = Новый ОтборКомпоновкиДанных;
ПоИмени = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПоИмени.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Имя");
ПоИмени.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ПоИмени.ПравоеЗначение = ИмяКонтакта;
ПоИмени.Использование = Истина;
ПоЗаписи = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПоЗаписи.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УчетнаяЗапись");
ПоЗаписи.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ПоЗаписи.ПравоеЗначение = ЛокальнаяЗапись;
ПоЗаписи.Использование = Истина;
Ключи = Менеджер.НайтиКонтакты(Отбор);
Если Ключи.Количество() = 0 Тогда
Сообщить("Собственный контакт не найден; ничего не создано");
Возврат;
КонецЕсли;
Если Ключи.Количество() <> 1 Тогда
ВызватьИсключение "Неоднозначный результат; чтение первого контакта запрещено";
КонецЕсли;
Ключ = Ключи.Получить(0);
Карточка = Менеджер.ПолучитьКонтакт(Ключ);
Сообщить(ТипЗнч(Ключ) = Тип("ЛокальныйКлючКонтакта"));
Сообщить(Карточка.ДанныеКонтакта.Имя = ИмяКонтакта);
Сообщить(Карточка.УчетнаяЗапись.Идентификатор = ЛокальнаяЗапись.Идентификатор);
Сообщить(Карточка.УчетнаяЗапись.ИсточникУчетнойЗаписи = ЛокальнаяЗапись.ИсточникУчетнойЗаписи);
Сообщить("Изменение доступно: " + Строка(Менеджер.ПоддерживаетсяИзменениеКонтакта(Ключ)));
КонецПроцедурыРазбор по шагам
Создайте строковый реквизит УчебноеИмяКонтакта и поле ввода. Скопируйте точное собственное имя из урока добавления ниже, включая UUID.
Отбор содержит два используемых элемента Равно: Имя и УчетнаяЗапись. Это поля менеджера контактов из установленной справки, не поля SQL.
Соседние элементы верхнего уровня задают совместные условия. Без отборов НайтиКонтакты вернул бы все контакты; такой вызов здесь отсутствует.
Ноль — нормальное отсутствие. Больше одного — явный отказ от выбора первого. При одном результате читаем только его карточку.
Результат НайтиКонтакты — массив локальных ключей. Сами телефоны/адреса найденного человека не выводятся и не изменяются.
Как проверить результат
При существующем собственном локальном контакте четыре сравнения Истина.
Пустой результат не создаёт контакта. Повторные совпадения не приводят к чтению/изменению первого.
Ожидаемый результат
Показаны точный отбор, локальный ключ и чтение одного собственного учебного контакта.
На что обратить внимание
Префикс имени не доказывает собственность. Этот урок только читает; найденные ключи не используются для удаления.
Названия полей отбора зависят от языка API; здесь русские имена установленной русской справки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.