ЛокальныйКлючСобытияКалендаря

Типы · LocalCalendarEventKey

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

Полное описание, параметры и ограничения

ЛокальныйКлючСобытияКалендаря (LocalCalendarEventKey)

ЛокальныйКлючСобытияКалендаря (LocalCalendarEventKey)

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

Описание:

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

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

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

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

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

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

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

Добавить своё занятие, перенести на час и удалить

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

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

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

Подготовка

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

  2. Первый урок работает только с данными в памяти. Для обращения к календарям вручную разрешите учебному приложению доступ в настройках ОС; доступность API не заменяет разрешение.

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

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

  5. Никакой из этих рецептов в настоящем мобильном клиенте не запускался автоматически. Проверяйте разрешения, фактические типы и контрольные результаты на своём учебном устройстве.

&НаКлиенте
Перем КлючМоегоСобытия;
&НаКлиенте
Перем ТемаМоегоСобытия;

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

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

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

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

  1. Используйте новую отдельную форму. Модуль полностью включает команды создания, переименования и удаления пустого своего календаря из предыдущего урока.

  2. Добавьте строковый реквизит ПодтверждениеУчебногоДействия. Создайте команды СоздатьСвойКалендарь, ПереименоватьСвойКалендарь, УдалитьСвойПустойКалендарь, СоздатьСвоёСобытие, ПеренестиСвоёСобытиеНаЧас, ПрочитатьСвоёСобытие, УдалитьСвоёСобытие.

  3. Сначала создайте собственный локальный календарь с явной фразой согласия. Затем подтвердите создание собственного события: ключ календаря не вводится вручную и не берётся из найденного чужого.

  4. Событие — одно занятие на 30 минут в UTC. Участники и организатор пусты; напоминания очищаются только после подтверждения фактического типа Массив. При другом типе реальное добавление запрещено.

  5. ПолучитьСобытие возвращает данные учётной записи с вложенными данными события. ПолучитьКалендарьСобытия получает его календарь; перед изменением проверяются собственное имя, тема и локальная запись.

  6. Перенос прибавляет 3600 секунд к обеим датам; длительность сохраняется 1800. ИзменитьСобытие получает локальный ключ события, не карточку календаря.

  7. ПрочитатьСвоёСобытие не выводит глобальные ключи и личные данные. Конструктор ДанныеСобытияКалендаряУчетнойЗаписи не вызывается: в установленной справке его аргумент ошибочно указан ДанныеКалендаря, поэтому карточку получаем штатным менеджером.

  8. Удаляйте сначала собственное событие по сохранённому ключу с отдельной фразой. Только потом удаляйте собственный пустой календарь: наличие любого оставшегося события запрещает удаление календаря.

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

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

  2. При фактическом типе напоминаний не Массив событие не добавлено и показана причина. Это честный отказ, а не выдуманная поддержка API.

  3. Вручную проверьте в ОС одно собственное занятие, перенос, затем удаление. После очистки собственный календарь может быть удалён только если пуст.

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

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

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

  1. Действия при ручном запуске реально меняют календарь устройства. Они не выполнялись инструментами и не доказывают синхронизацию с внешними сервисами.

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

  3. Ни отсутствие участников, ни префикс имени не являются запретом синхронизации ОС: отдельный локальный несинхронизируемый учебный профиль обязателен.

  4. Не сравнивайте ключи по строковому представлению и не ищите чужие события для демонстрации удаления.

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

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

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

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

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