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