Ключ, используемый для получения или изменения данных события в мобильном устройстве.
Полное описание, параметры и ограничения
ЛокальныйКлючСобытияКалендаря (LocalCalendarEventKey)
ЛокальныйКлючСобытияКалендаря (LocalCalendarEventKey)
Доступен, начиная с версии 8.3.4.
Описание:
Ключ, используемый для получения или изменения данных события в мобильном устройстве.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.3.4.
Методическая информация
Практические примеры
Добавить своё занятие, перенести на час и удалить
Полный модуль включает создание собственного локального календаря и действия только с собственным событием; личные события не выбираются.
Где и как запускать
Полный клиентский модуль собственной мобильной управляемой формы. Не вставляйте процедуры внутрь другой процедуры.
Подготовка
Мобильный клиент/мобильное приложение 1С на собственном тестовом устройстве, не настольный тонкий клиент. Используйте отдельную пустую конфигурацию УчебнаяКонфигурацияСинтаксиса.
Первый урок работает только с данными в памяти. Для обращения к календарям вручную разрешите учебному приложению доступ в настройках ОС; доступность API не заменяет разрешение.
Для уроков добавления, изменения и удаления используйте только отдельное учебное устройство/профиль с локальными календарями без синхронизации, приглашений и рабочих событий. Не используйте основной личный/корпоративный календарь.
Код вставляется на уровне модуля собственной управляемой формы. Команды с указанными именами создайте вручную и назначьте им одноимённые обработчики.
Никакой из этих рецептов в настоящем мобильном клиенте не запускался автоматически. Проверяйте разрешения, фактические типы и контрольные результаты на своём учебном устройстве.
&НаКлиенте
Перем КлючМоегоСобытия;
&НаКлиенте
Перем ТемаМоегоСобытия;
&НаКлиенте
Перем КлючМоегоКалендаря;
&НаКлиенте
Перем ИмяМоегоКалендаря;
&НаКлиенте
Процедура СоздатьСвойКалендарь(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если КлючМоегоКалендаря <> Неопределено Тогда
ВызватьИсключение "Свой ключ уже сохранён: не создаём дубликат";
КонецЕсли;
Если ПодтверждениеУчебногоДействия <> "СОЗДАТЬ МОЙ УЧЕБНЫЙ КАЛЕНДАРЬ" Тогда
ВызватьИсключение "Подтвердите создание только в отдельном локальном учебном профиле";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
Если Не Менеджер.ПоддерживаетсяДобавлениеКалендарей() Тогда
ВызватьИсключение "Добавление календарей не поддерживается";
КонецЕсли;
ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКалендарей();
ИмяМоегоКалендаря = "guide-owned-calendar-" + Строка(Новый УникальныйИдентификатор);
Данные = Новый ДанныеКалендаря(ИмяМоегоКалендаря);
Данные.Цвет = Новый Цвет(40, 90, 180);
ДанныеЗаписи = Новый ДанныеКалендаряУчетнойЗаписи(Данные, ЛокальнаяЗапись, "");
Сообщить(ДанныеЗаписи.ДанныеКалендаря.Имя = ИмяМоегоКалендаря);
Сообщить(ДанныеЗаписи.УчетнаяЗапись.Идентификатор = ЛокальнаяЗапись.Идентификатор);
Сообщить(ПустаяСтрока(ДанныеЗаписи.ГлобальныйКлючКалендаря));
ПодтверждениеУчебногоДействия = "";
КлючМоегоКалендаря = Менеджер.ДобавитьКалендарь(ДанныеЗаписи);
Карточка = ПолучитьИПроверитьСвойКалендарь(Менеджер);
Сообщить(Карточка.ДанныеКалендаря.Имя = ИмяМоегоКалендаря);
Сообщить("Создан только собственный календарь: " + ИмяМоегоКалендаря);
КонецПроцедуры
&НаКлиенте
Процедура ПереименоватьСвойКалендарь(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если ПодтверждениеУчебногоДействия <> "ПЕРЕИМЕНОВАТЬ МОЙ УЧЕБНЫЙ КАЛЕНДАРЬ" Тогда
ВызватьИсключение "Нужно подтверждение переименования собственного календаря";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
Карточка = ПолучитьИПроверитьСвойКалендарь(Менеджер);
Если Не Менеджер.ПоддерживаетсяИзменениеКалендаря(КлючМоегоКалендаря) Тогда
ВызватьИсключение "Изменение собственного календаря не поддерживается";
КонецЕсли;
НовоеИмя = ИмяМоегоКалендаря + "-переименован";
НовыеДанные = Новый ДанныеКалендаря(НовоеИмя);
НовыеДанные.Цвет = Карточка.ДанныеКалендаря.Цвет;
НоваяКарточка = Новый ДанныеКалендаряУчетнойЗаписи(НовыеДанные, Карточка.УчетнаяЗапись, Карточка.ГлобальныйКлючКалендаря);
ПодтверждениеУчебногоДействия = "";
Менеджер.ИзменитьКалендарь(Карточка, НоваяКарточка);
ИмяМоегоКалендаря = НовоеИмя;
ПровереннаяКарточка = ПолучитьИПроверитьСвойКалендарь(Менеджер);
Сообщить(ПровереннаяКарточка.ДанныеКалендаря.Имя = НовоеИмя);
Сообщить("Новое собственное имя: " + ИмяМоегоКалендаря);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьСвойПустойКалендарь(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если ПодтверждениеУчебногоДействия <> "УДАЛИТЬ МОЙ ПУСТОЙ УЧЕБНЫЙ КАЛЕНДАРЬ" Тогда
ВызватьИсключение "Подтвердите удаление только своего пустого календаря";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
ПолучитьИПроверитьСвойКалендарь(Менеджер);
Если Не Менеджер.ПоддерживаетсяИзменениеКалендаря(КлючМоегоКалендаря) Тогда
ВызватьИсключение "Удаление собственного календаря не поддерживается";
КонецЕсли;
Отбор = Новый ОтборКомпоновкиДанных;
События = Менеджер.НайтиСобытия(Отбор, КлючМоегоКалендаря);
Если События.Количество() <> 0 Тогда
ВызватьИсключение "В собственном календаре есть события: удаление запрещено";
КонецЕсли;
ПодтверждениеУчебногоДействия = "";
Менеджер.УдалитьКалендарь(КлючМоегоКалендаря);
Остались = Менеджер.НайтиКалендари(ИмяМоегоКалендаря);
Сообщить(Остались.Количество() = 0);
КлючМоегоКалендаря = Неопределено;
ИмяМоегоКалендаря = "";
КонецПроцедуры
&НаКлиенте
Функция ПолучитьИПроверитьСвойКалендарь(Менеджер)
Если КлючМоегоКалендаря = Неопределено Или ПустаяСтрока(ИмяМоегоКалендаря) Тогда
ВызватьИсключение "Нет ключа календаря, созданного именно этой формой";
КонецЕсли;
Карточка = Менеджер.ПолучитьКалендарь(КлючМоегоКалендаря);
Если Карточка.ДанныеКалендаря.Имя <> ИмяМоегоКалендаря Тогда
ВызватьИсключение "Имя собственного календаря изменилось; автоматическое изменение запрещено";
КонецЕсли;
ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКалендарей();
Если Карточка.УчетнаяЗапись.Идентификатор <> ЛокальнаяЗапись.Идентификатор
Или Карточка.УчетнаяЗапись.ИсточникУчетнойЗаписи <> ЛокальнаяЗапись.ИсточникУчетнойЗаписи Тогда
ВызватьИсключение "Календарь не относится к локальной учебной записи";
КонецЕсли;
Возврат Карточка;
КонецФункции
&НаСервереБезКонтекста
Процедура ПроверитьСобственнуюУчебнуюКонфигурацию()
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСвоёСобытие(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если КлючМоегоСобытия <> Неопределено Тогда
ВызватьИсключение "Своё событие уже создано; дубликат запрещён";
КонецЕсли;
Если ПодтверждениеУчебногоДействия <> "СОЗДАТЬ МОЁ УЧЕБНОЕ СОБЫТИЕ" Тогда
ВызватьИсключение "Нужно подтверждение создания своего события";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
ПолучитьИПроверитьСвойКалендарь(Менеджер);
Если Не Менеджер.ПоддерживаетсяИзменениеСобытий(КлючМоегоКалендаря) Тогда
ВызватьИсключение "Изменение событий собственного календаря не поддерживается";
КонецЕсли;
ТемаМоегоСобытия = "guide-owned-event-" + Строка(Новый УникальныйИдентификатор);
Событие = ПодготовитьСвоёСобытие(Дата(2026, 10, 5, 10), Дата(2026, 10, 5, 10, 30));
ПодтверждениеУчебногоДействия = "";
КлючМоегоСобытия = Менеджер.ДобавитьСобытие(КлючМоегоКалендаря, Событие);
Карточка = ПолучитьИПроверитьСвоёСобытие(Менеджер);
Сообщить(Карточка.ДанныеСобытияКалендаря.Тема = ТемаМоегоСобытия);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиСвоёСобытиеНаЧас(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если ПодтверждениеУчебногоДействия <> "ПЕРЕНЕСТИ МОЁ УЧЕБНОЕ СОБЫТИЕ" Тогда
ВызватьИсключение "Нужно подтверждение изменения своего события";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
Карточка = ПолучитьИПроверитьСвоёСобытие(Менеджер);
Если Не Менеджер.ПоддерживаетсяИзменениеСобытий(КлючМоегоКалендаря) Тогда
ВызватьИсключение "Изменение событий не поддерживается";
КонецЕсли;
ИсходноеНачало = Карточка.ДанныеСобытияКалендаря.Начало;
ИсходныйКонец = Карточка.ДанныеСобытияКалендаря.Конец;
НовыеДанные = ПодготовитьСвоёСобытие(ИсходноеНачало + 3600, ИсходныйКонец + 3600);
ПодтверждениеУчебногоДействия = "";
Менеджер.ИзменитьСобытие(КлючМоегоСобытия, НовыеДанные);
ПровереннаяКарточка = ПолучитьИПроверитьСвоёСобытие(Менеджер);
Сообщить(ПровереннаяКарточка.ДанныеСобытияКалендаря.Начало = ИсходноеНачало + 3600);
Сообщить(ПровереннаяКарточка.ДанныеСобытияКалендаря.Конец = ИсходныйКонец + 3600);
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьСвоёСобытие(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Менеджер = Новый МенеджерКалендарей;
Карточка = ПолучитьИПроверитьСвоёСобытие(Менеджер);
Данные = Карточка.ДанныеСобытияКалендаря;
Сообщить(ТипЗнч(КлючМоегоСобытия) = Тип("ЛокальныйКлючСобытияКалендаря"));
Сообщить(Данные.Конец - Данные.Начало = 1800);
Сообщить(Данные.Повторение = ПовторениеСобытияКалендаря.ОдинРаз);
Сообщить(Данные.Участники.Количество() = 0);
Сообщить(ПустаяСтрока(Данные.Организатор));
Сообщить(ТипЗнч(Карточка.ГлобальныйКлючКалендаря) = Тип("Строка"));
Сообщить(ТипЗнч(Карточка.ГлобальныйКлючСобытияКалендаря) = Тип("Строка"));
Сообщить(ТипЗнч(Карточка.УчетнаяЗапись) = Тип("УчетнаяЗаписьКалендарей"));
КонецПроцедуры
&НаКлиенте
Процедура УдалитьСвоёСобытие(Команда)
ПроверитьСобственнуюУчебнуюКонфигурацию();
Если ПодтверждениеУчебногоДействия <> "УДАЛИТЬ МОЁ УЧЕБНОЕ СОБЫТИЕ" Тогда
ВызватьИсключение "Нужно подтверждение удаления именно своего события";
КонецЕсли;
Менеджер = Новый МенеджерКалендарей;
ПолучитьИПроверитьСвоёСобытие(Менеджер);
Если Не Менеджер.ПоддерживаетсяИзменениеСобытий(КлючМоегоКалендаря) Тогда
ВызватьИсключение "Удаление событий не поддерживается";
КонецЕсли;
ПодтверждениеУчебногоДействия = "";
Менеджер.УдалитьСобытие(КлючМоегоСобытия);
КлючМоегоСобытия = Неопределено;
ТемаМоегоСобытия = "";
Сообщить("Свое событие удалено. Перед удалением своего календаря ещё будет проверено отсутствие любых событий");
КонецПроцедуры
&НаКлиенте
Функция ПодготовитьСвоёСобытие(НачалоUTC, КонецUTC)
Событие = Новый ДанныеСобытияКалендаря(НачалоUTC, КонецUTC);
Событие.Тема = ТемаМоегоСобытия;
Событие.Описание = "Собственное упражнение Книга без приглашений";
Событие.Место = "Учебный стол";
Событие.ВесьДень = Ложь;
Событие.Организатор = "";
Событие.Участники = Новый Массив;
Событие.ЧасовойПояс = "UTC";
Событие.Повторение = ПовторениеСобытияКалендаря.ОдинРаз;
Если ТипЗнч(Событие.Напоминания) <> Тип("Массив") Тогда
ВызватьИсключение "Тип напоминаний не Массив: реальное добавление запрещено до проверки API устройства";
КонецЕсли;
Событие.Напоминания.Очистить();
Возврат Событие;
КонецФункции
&НаКлиенте
Функция ПолучитьИПроверитьСвоёСобытие(Менеджер)
ПолучитьИПроверитьСвойКалендарь(Менеджер);
Если КлючМоегоСобытия = Неопределено Или ПустаяСтрока(ТемаМоегоСобытия) Тогда
ВызватьИсключение "Нет ключа события собственного добавления";
КонецЕсли;
Карточка = Менеджер.ПолучитьСобытие(КлючМоегоСобытия);
Если Карточка.ДанныеСобытияКалендаря.Тема <> ТемаМоегоСобытия Тогда
ВызватьИсключение "Тема собственного события изменилась; действие запрещено";
КонецЕсли;
КлючКалендаряСобытия = Менеджер.ПолучитьКалендарьСобытия(КлючМоегоСобытия);
КалендарьСобытия = Менеджер.ПолучитьКалендарь(КлючКалендаряСобытия);
Если КалендарьСобытия.ДанныеКалендаря.Имя <> ИмяМоегоКалендаря Тогда
ВызватьИсключение "Событие перенесено в другой календарь; действие запрещено";
КонецЕсли;
ЛокальнаяЗапись = Менеджер.ПолучитьЛокальнуюУчетнуюЗаписьКалендарей();
Если Карточка.УчетнаяЗапись.Идентификатор <> ЛокальнаяЗапись.Идентификатор
Или Карточка.УчетнаяЗапись.ИсточникУчетнойЗаписи <> ЛокальнаяЗапись.ИсточникУчетнойЗаписи Тогда
ВызватьИсключение "Событие не относится к собственной локальной записи";
КонецЕсли;
Возврат Карточка;
КонецФункцииРазбор по шагам
Используйте новую отдельную форму. Модуль полностью включает команды создания, переименования и удаления пустого своего календаря из предыдущего урока.
Добавьте строковый реквизит ПодтверждениеУчебногоДействия. Создайте команды СоздатьСвойКалендарь, ПереименоватьСвойКалендарь, УдалитьСвойПустойКалендарь, СоздатьСвоёСобытие, ПеренестиСвоёСобытиеНаЧас, ПрочитатьСвоёСобытие, УдалитьСвоёСобытие.
Сначала создайте собственный локальный календарь с явной фразой согласия. Затем подтвердите создание собственного события: ключ календаря не вводится вручную и не берётся из найденного чужого.
Событие — одно занятие на 30 минут в UTC. Участники и организатор пусты; напоминания очищаются только после подтверждения фактического типа Массив. При другом типе реальное добавление запрещено.
ПолучитьСобытие возвращает данные учётной записи с вложенными данными события. ПолучитьКалендарьСобытия получает его календарь; перед изменением проверяются собственное имя, тема и локальная запись.
Перенос прибавляет 3600 секунд к обеим датам; длительность сохраняется 1800. ИзменитьСобытие получает локальный ключ события, не карточку календаря.
ПрочитатьСвоёСобытие не выводит глобальные ключи и личные данные. Конструктор ДанныеСобытияКалендаряУчетнойЗаписи не вызывается: в установленной справке его аргумент ошибочно указан ДанныеКалендаря, поэтому карточку получаем штатным менеджером.
Удаляйте сначала собственное событие по сохранённому ключу с отдельной фразой. Только потом удаляйте собственный пустой календарь: наличие любого оставшегося события запрещает удаление календаря.
Как проверить результат
После создания календаря и события проверки собственных данных Истина. После переноса обе проверки дат Истина; чтение даёт восемь Истина.
При фактическом типе напоминаний не Массив событие не добавлено и показана причина. Это честный отказ, а не выдуманная поддержка API.
Вручную проверьте в ОС одно собственное занятие, перенос, затем удаление. После очистки собственный календарь может быть удалён только если пуст.
Ожидаемый результат
Показан полный контролируемый жизненный цикл собственного занятия без выбора и удаления личных событий.
На что обратить внимание
Действия при ручном запуске реально меняют календарь устройства. Они не выполнялись инструментами и не доказывают синхронизацию с внешними сервисами.
После закрытия формы собственные ключи теряются. При неизвестном исходе операции не запускайте её повторно вслепую; вручную проверьте только собственные объекты.
Ни отсутствие участников, ни префикс имени не являются запретом синхронизации ОС: отдельный локальный несинхронизируемый учебный профиль обязателен.
Не сравнивайте ключи по строковому представлению и не ищите чужие события для демонстрации удаления.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.