УчетнаяЗаписьКалендарей

Типы · CalendarAccount

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

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

УчетнаяЗаписьКалендарей (CalendarAccount)

УчетнаяЗаписьКалендарей (CalendarAccount)

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

Свойства:
Идентификатор (ID)
ИсточникУчетнойЗаписи (AccountSource)

Описание:

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

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

Мобильный клиент, сервер, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Сериализуется. Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен http://v8.1c.ru/8.3/data/mob. Имя типа XDTO: CalendarAccount.

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

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

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

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

Прочитать доступные учётные записи без раскрытия их имён

Проверяем API, локальную учётную запись и поддержку ключей; основной календарь не запрашивается, потому что такой запрос может его создать.

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

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

Подготовка

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

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

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

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

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

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

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

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

  2. МенеджерКалендарей создаётся без параметров. Он не является данными одного календаря.

  3. ПолучитьУчетныеЗаписиКалендарей возвращает массив объектов, не строки адресов. Мы показываем только число и проверки типов, не идентификаторы и источники всех личных записей.

  4. ПолучитьЛокальнуюУчетнуюЗаписьКалендарей получает локальную запись. По справке Android использует фиктивную LOCAL, iOS штатный механизм; код не присваивает чужой источник вручную.

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

  6. ПолучитьОсновнойКалендарь намеренно отсутствует в этом читающем уроке: на Android без календарей метод может создать LOCAL.

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

  1. Выведено фактическое число записей; проверки типов доступных записей и локальной записи дают Истина.

  2. Идентификаторы/адреса учётных записей не попали в Сообщить; код не вызывает добавление, изменение или удаление календарей.

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

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

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

  1. ПоддерживаетсяДобавлениеКалендарей не доказывает наличие разрешения ОС или права писать любой календарь.

  2. LOCAL и основная учётная запись — не одно и то же; не переключайте пример на корпоративную запись.

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

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

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

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

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

Подготовка

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