Найти один собственный контакт точным отбором

Учебные задачи

Используем отбор по полному уникальному имени и локальной записи, а не поиск всех личных контактов.

Где и как запускать

Полный клиентский модуль собственной мобильной управляемой формы. Не вставляйте процедуры внутрь другой процедуры.

Подготовка

  1. Только мобильный клиент/мобильное приложение 1С на собственном тестовом устройстве и отдельная пустая конфигурация УчебнаяКонфигурацияСинтаксиса. Настольный клиент не заменяет этот API.

  2. Вручную разрешите доступ к контактам только своему учебному приложению. Поддержка метода не доказывает разрешение ОС.

  3. Изменения адресной книги выполняйте только в отдельном локальном учебном профиле без синхронизации и реальных контактов. Не используйте корпоративные/личные учётные записи.

  4. Создайте отдельную управляемую форму для каждого урока. Полный код вставляется на уровне модуля; команды и указанные строковые реквизиты создаются вручную.

  5. Рецепты изменения/удаления при ручном запуске реально меняют адресную книгу ОС. Здесь они не исполнялись, runtime-проверка 1С не заявляется.

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

Разбор по шагам

  1. Создайте строковый реквизит УчебноеИмяКонтакта и поле ввода. Скопируйте точное собственное имя из урока добавления ниже, включая UUID.

  2. Отбор содержит два используемых элемента Равно: Имя и УчетнаяЗапись. Это поля менеджера контактов из установленной справки, не поля SQL.

  3. Соседние элементы верхнего уровня задают совместные условия. Без отборов НайтиКонтакты вернул бы все контакты; такой вызов здесь отсутствует.

  4. Ноль — нормальное отсутствие. Больше одного — явный отказ от выбора первого. При одном результате читаем только его карточку.

  5. Результат НайтиКонтакты — массив локальных ключей. Сами телефоны/адреса найденного человека не выводятся и не изменяются.

Как проверить результат

  1. При существующем собственном локальном контакте четыре сравнения Истина.

  2. Пустой результат не создаёт контакта. Повторные совпадения не приводят к чтению/изменению первого.

Ожидаемый результат

Показаны точный отбор, локальный ключ и чтение одного собственного учебного контакта.

На что обратить внимание

  1. Префикс имени не доказывает собственность. Этот урок только читает; найденные ключи не используются для удаления.

  2. Названия полей отбора зависят от языка API; здесь русские имена установленной русской справки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.