Как настроить интеграцию 1С 7.7 с Google Календарем?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Реализация взаимодействия между платформой 1С:Предприятие 7.7 и современными сервисами Google является нетривиальной задачей из-за отсутствия в "семерке" встроенных средств работы с JSON, протоколами HTTPS последних версий и механизмом авторизации OAuth 2.0. Тем не менее, задача выполнима. В данной статье мы разберем основные подходы, которые позволят наладить обмен данными с Google Calendar API v3.

Выбор архитектурного решения

Проанализируем ситуацию: 1С 7.7 не умеет "из коробки" работать с современными требованиями безопасности Google (TLS 1.2/1.3). Рассмотрим три основных пути реализации:

  1. Прямые запросы через WinHttp: Подходит, если операционная система поддерживает нужные протоколы TLS, а авторизация уже пройдена.
  2. Внешний скрипт-прослойка (Python/C#/Golang): Самый надежный метод. Скрипт берет на себя всю работу с API, а 1С обменивается с ним файлами или параметрами командной строки.
  3. Использование COM-объектов: Написание или использование готовых библиотек (.NET), которые регистрируются в системе и вызываются из 1С как обычные объекты.

Шаг 1: Настройка в Google Cloud Console

Прежде чем писать код, необходимо подготовить инфраструктуру на стороне Google. Разберем этот процесс:

Во-первых, создадим проект в Google Cloud Console. Во-вторых, включим Google Calendar API. Самый важный момент — выбор способа авторизации. Для автоматических систем (серверных задач) лучше всего использовать Service Account (Сервисный аккаунт). Вы получите файл ключа в формате JSON. Почту этого сервисного аккаунта нужно добавить в настройки вашего календаря Google с правами на редактирование. Это позволит избежать необходимости открывать браузер для логина пользователя из 1С.

Шаг 2: Реализация HTTP-запросов через WinHttp

Для выполнения запросов к API из 1С 7.7 наиболее стабильным объектом является WinHttp.WinHttpRequest.5.1. Рассмотрим пример структуры запроса для получения списка событий:


// Создание объекта запроса
HttpЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
URL = "https://www.googleapis.com/calendar/v3/calendars/" + КалендарьID + "/events";

HttpЗапрос.Open("GET", URL, 0);
HttpЗапрос.SetRequestHeader("Authorization", "Bearer " + ТокенДоступа);
HttpЗапрос.SetRequestHeader("Content-Type", "application/json");

Попытка
    HttpЗапрос.Send();
    Если HttpЗапрос.Status = 200 Тогда
        ТекстОтвета = HttpЗапрос.ResponseText;
    КонецЕсли;
Исключение
    Сообщить("Ошибка соединения: " + ОписаниеОшибки());
КонецПопытки;

Важно: ТокенДоступа (Access Token) имеет ограниченный срок жизни. Если вы используете OAuth 2.0 для обычного пользователя, вам придется реализовать механизм обновления токена через refresh_token.

Шаг 3: Работа с форматом JSON в 1С 7.7

Поскольку Google API принимает и возвращает данные только в формате JSON, а в 1С 7.7 нет парсера, проанализируем использование MSScriptControl. Мы можем загрузить в него код на JScript, который умеет работать с объектами JSON.

Пример функции для разбора JSON:


Процедура РазобратьJSON(СтрокаJSON)
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "JScript";
    // Добавляем вспомогательную функцию
    Скрипт.AddCode("function getProperty(obj, prop) { return obj[prop]; }");
    
    // Парсим строку в объект
    Данные = Скрипт.Eval("(" + СтрокаJSON + ")");
    
    // Пример получения значения свойства "summary"
    НазваниеСобытия = Скрипт.Run("getProperty", Данные, "summary");
    Сообщить(НазваниеСобытия);
КонецПроцедуры

Шаг 4: Конвертация даты и времени

Google Calendar требует дату в формате RFC3339 (например, 2023-10-27T10:00:00Z). В 1С 7.7 дата и время хранятся раздельно, поэтому выясним, как правильно собрать строку. Нам необходимо учитывать часовой пояс. Рассмотрим пример формирования такой строки:


Функция СформироватьДатуRFC3339(Дата1С, Время1С)
    Год = ДатаГод(Дата1С);
    Мес = Формат(ДатаМесяц(Дата1С), "Ч(0)2");
    Ден = Формат(ДатаЧисло(Дата1С), "Ч(0)2");
    
    // Предположим, время передается как строка "HH:MM:SS"
    Возврат "" + Год + "-" + Мес + "-" + Ден + "T" + Время1С + "Z";
КонецФункции

Шаг 5: Использование внешнего скрипта на Python

Если работа с WinHttp вызывает сложности из-за кодировок (UTF-8 в 7.7 требует особых преобразований) или TLS, рассмотрим вариант с использованием Python. Выясним преимущества этого метода: Python имеет готовую библиотеку google-api-python-client, которая берет на себя все вопросы авторизации и сетевого взаимодействия.

Логика работы будет следующей:

  1. 1С выгружает данные о событии (название, дата, время) в текстовый файл task.json.
  2. 1С запускает скрипт командой КомандаСистемы("python google_sync.py").
  3. Скрипт читает файл, отправляет данные в Google, получает event_id и записывает его в файл ответа.
  4. 1С считывает файл ответа и сохраняет event_id в реквизит справочника или документа.

Логика синхронизации и хранения данных

Проанализируем, как обеспечить актуальность данных. Чтобы иметь возможность редактировать или удалять события, созданные из 1С, необходимо обязательно хранить Google_Event_ID в базе данных 1С. При создании события Google возвращает этот уникальный идентификатор.

Алгоритм синхронизации:

  1. При записи документа в 1С проверяем наличие Google_Event_ID.
  2. Если ID пустой — выполняем POST запрос (создание).
  3. Если ID заполнен — выполняем PUT или PATCH запрос (обновление).
  4. При пометке на удаление в 1С — отправляем запрос DELETE.

Таким образом, комбинируя внешние скрипты для решения проблем совместимости протоколов и MSScriptControl для обработки данных, мы получаем надежную систему интеграции 1С 7.7 с современными облачными сервисами.

← На главную