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