МенеджерКонтактов.ПоддерживаетсяИзменениеКонтакта

Методы · ContactEditingSupported

Определяет возможность редактирования или удаления контакта.

Синтаксис

ПоддерживаетсяИзменениеКонтакта(<Контакт>)
Полное описание, параметры и ограничения

МенеджерКонтактов.ПоддерживаетсяИзменениеКонтакта (ContactManager.ContactEditingSupported)

МенеджерКонтактов (ContactManager)

ПоддерживаетсяИзменениеКонтакта (ContactEditingSupported)

Доступен, начиная с версии 8.3.10.

Синтаксис:
ПоддерживаетсяИзменениеКонтакта(<Контакт>)
Параметры:

<Контакт> (обязательный)
Тип: ЛокальныйКлючКонтакта.
Проверяемый контакт.
Возвращаемое значение:
Тип: Булево.
Для устройств под управлением Windows Phone всегда возвращает Ложь.
Для устройств под управлением Android и iOS всегда возвращает Истина.
Описание:

Определяет возможность редактирования или удаления контакта.

Доступность:

Мобильный клиент, мобильное приложение (клиент).

См. также:
МенеджерКонтактов, метод ИзменитьКонтакт
МенеджерКонтактов, метод УдалитьКонтакт

Использование в версии:

Доступен, начиная с версии 8.3.10.

Методическая информация

Практические примеры

Создать, изменить и удалить только собственный вымышленный контакт

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

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

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

Подготовка

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

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

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

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

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

&НаКлиенте
Перем КлючМоегоКонтакта;
&НаКлиенте
Перем ИмяМоегоКонтакта;

&НаКлиенте
Процедура СоздатьСвойКонтакт(Команда)
    ПроверитьСобственнуюУчебнуюКонфигурацию();
    Если КлючМоегоКонтакта <> Неопределено Тогда
        ВызватьИсключение "Свой контакт уже создан; дубликат запрещён";
    КонецЕсли;
    Если ПодтверждениеУчебногоДействия <> "СОЗДАТЬ МОЙ УЧЕБНЫЙ КОНТАКТ" Тогда
        ВызватьИсключение "Подтвердите создание только в собственном локальном учебном профиле";
    КонецЕсли;
    Менеджер = Новый МенеджерКонтактов;
    Если Не Менеджер.ПоддерживаетсяДобавлениеКонтактов() Тогда
        ВызватьИсключение "Добавление контактов не поддерживается";
    КонецЕсли;
    ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКонтактов();
    ИмяМоегоКонтакта = "guide-owned-contact-" + Строка(Новый УникальныйИдентификатор);
    Данные = Новый ДанныеКонтакта;
    Данные.Имя = ИмяМоегоКонтакта;
    Данные.Фамилия = "Учебный";
    Данные.Заметка = "guide-owned-note-created";
    Карточка = Новый ДанныеКонтактаУчетнойЗаписи(Данные, ЛокальнаяЗапись, "");
    ПодтверждениеУчебногоДействия = "";
    КлючМоегоКонтакта = Менеджер.ДобавитьКонтакт(Карточка);
    ПровереннаяКарточка = ПолучитьИПроверитьСвойКонтакт(Менеджер);
    Сообщить(ПровереннаяКарточка.ДанныеКонтакта.Заметка = "guide-owned-note-created");
    Сообщить("Создан только собственный контакт: " + ИмяМоегоКонтакта);
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьЗаметкуСвоегоКонтакта(Команда)
    ПроверитьСобственнуюУчебнуюКонфигурацию();
    Если ПодтверждениеУчебногоДействия <> "ИЗМЕНИТЬ МОЙ УЧЕБНЫЙ КОНТАКТ" Тогда
        ВызватьИсключение "Нужно подтверждение изменения собственного контакта";
    КонецЕсли;
    Менеджер = Новый МенеджерКонтактов;
    Карточка = ПолучитьИПроверитьСвойКонтакт(Менеджер);
    Если Не Менеджер.ПоддерживаетсяИзменениеКонтакта(КлючМоегоКонтакта) Тогда
        ВызватьИсключение "Изменение своего контакта не поддерживается";
    КонецЕсли;
    Карточка.ДанныеКонтакта.Заметка = "guide-owned-note-changed";
    ПодтверждениеУчебногоДействия = "";
    Менеджер.ИзменитьКонтакт(КлючМоегоКонтакта, Карточка);
    ПровереннаяКарточка = ПолучитьИПроверитьСвойКонтакт(Менеджер);
    Сообщить(ПровереннаяКарточка.ДанныеКонтакта.Заметка = "guide-owned-note-changed");
КонецПроцедуры

&НаКлиенте
Процедура УдалитьСвойКонтакт(Команда)
    ПроверитьСобственнуюУчебнуюКонфигурацию();
    Если ПодтверждениеУчебногоДействия <> "УДАЛИТЬ МОЙ УЧЕБНЫЙ КОНТАКТ" Тогда
        ВызватьИсключение "Нужно подтверждение удаления собственного контакта";
    КонецЕсли;
    Менеджер = Новый МенеджерКонтактов;
    ПолучитьИПроверитьСвойКонтакт(Менеджер);
    Если Не Менеджер.ПоддерживаетсяИзменениеКонтакта(КлючМоегоКонтакта) Тогда
        ВызватьИсключение "Удаление собственного контакта не поддерживается";
    КонецЕсли;
    ПодтверждениеУчебногоДействия = "";
    Менеджер.УдалитьКонтакт(КлючМоегоКонтакта);
    КлючМоегоКонтакта = Неопределено;
    ИмяМоегоКонтакта = "";
    Сообщить("Собственный контакт удалён. Вручную проверьте результат в учебной адресной книге");
КонецПроцедуры

&НаКлиенте
Функция ПолучитьИПроверитьСвойКонтакт(Менеджер)
    Если КлючМоегоКонтакта = Неопределено Или ПустаяСтрока(ИмяМоегоКонтакта) Тогда
        ВызватьИсключение "Нет сохранённого ключа собственного добавления";
    КонецЕсли;
    Карточка = Менеджер.ПолучитьКонтакт(КлючМоегоКонтакта);
    Если Карточка.ДанныеКонтакта.Имя <> ИмяМоегоКонтакта
        Или Карточка.ДанныеКонтакта.Фамилия <> "Учебный" Тогда
        ВызватьИсключение "Данные собственного контакта изменились; действие запрещено";
    КонецЕсли;
    ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКонтактов();
    Если Карточка.УчетнаяЗапись.Идентификатор <> ЛокальнаяЗапись.Идентификатор
        Или Карточка.УчетнаяЗапись.ИсточникУчетнойЗаписи <> ЛокальнаяЗапись.ИсточникУчетнойЗаписи Тогда
        ВызватьИсключение "Контакт не принадлежит локальной учебной записи";
    КонецЕсли;
    Возврат Карточка;
КонецФункции

&НаСервереБезКонтекста
Процедура ПроверитьСобственнуюУчебнуюКонфигурацию()
КонецПроцедуры

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

  1. В одной отдельной форме создайте строковый реквизит ПодтверждениеУчебногоДействия и поле ввода. Создайте три команды СоздатьСвойКонтакт, ИзменитьЗаметкуСвоегоКонтакта, УдалитьСвойКонтакт.

  2. Перед каждым действием заново введите точную фразу из обработчика. До записи/изменения/удаления фраза очищается.

  3. ДобавитьКонтакт получает ДанныеКонтактаУчетнойЗаписи и возвращает ЛокальныйКлючКонтакта. Этот конкретный ключ сохраняется в памяти формы; дубликаты запрещены.

  4. Перед изменением карточка читается по сохранённому ключу и сравнивается с собственным уникальным именем, фамилией Учебный и локальной записью.

  5. Меняем только заметку в полученной собственной карточке. ИзменитьКонтакт получает ключ и карточку данных учётной записи; другие поля не заменяются пустым новым контактом.

  6. Удаление получает только ключ собственного добавления после повторных проверок. Код не ищет контакт для удаления по имени и не удаляет все контакты с похожим префиксом.

  7. Не закрывайте форму до удаления своего контакта. Если ключ потерян или исход операции неизвестен, вручную проверьте собственные объекты; не продолжайте автоматическое удаление по поиску.

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

  1. После создания проверка собственной заметки Истина; после изменения снова Истина для изменённой заметки.

  2. Вручную проверьте в учебной адресной книге один вымышленный контакт, заметку и его удаление. Повторное создание при сохранённом ключе запрещено.

  3. Чужое имя/фамилия/учётная запись запрещают автоматические действия. После успешного удаления собственный ключ очищен.

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

Показан безопасно ограниченный жизненный цикл собственного контакта с правильными типами данных менеджера.

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

  1. Это не транзакция базы 1С; откат изменения/удаления контакта ОС автоматически не предусмотрен.

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

  3. Локальная запись и отсутствие телефонов не заменяют проверки синхронизации профиля. Используйте отдельный изолированный профиль.

  4. Пример не выполнялся на настоящем телефоне и не является доказательством разрешений или работы конкретной ОС.

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

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

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

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

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

Подготовка

  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С» и не аффилирован с ней.