Реализация взаимодействия между платформой 1С:Предприятие 7.7 и современными сервисами Google является нетривиальной задачей из-за отсутствия в "семерке" встроенных средств работы с JSON, протоколами HTTPS последних версий и механизмом авторизации OAuth 2.0. Тем не менее, задача выполнима. В данной статье мы разберем основные подходы, которые позволят наладить обмен данными с Google Calendar API v3.
Проанализируем ситуацию: 1С 7.7 не умеет "из коробки" работать с современными требованиями безопасности Google (TLS 1.2/1.3). Рассмотрим три основных пути реализации:
Прежде чем писать код, необходимо подготовить инфраструктуру на стороне Google. Разберем этот процесс:
Во-первых, создадим проект в Google Cloud Console. Во-вторых, включим Google Calendar API. Самый важный момент — выбор способа авторизации. Для автоматических систем (серверных задач) лучше всего использовать Service Account (Сервисный аккаунт). Вы получите файл ключа в формате JSON. Почту этого сервисного аккаунта нужно добавить в настройки вашего календаря Google с правами на редактирование. Это позволит избежать необходимости открывать браузер для логина пользователя из 1С.
Для выполнения запросов к 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.
Поскольку 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");
Сообщить(НазваниеСобытия);
КонецПроцедуры
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";
КонецФункции
Если работа с WinHttp вызывает сложности из-за кодировок (UTF-8 в 7.7 требует особых преобразований) или TLS, рассмотрим вариант с использованием Python. Выясним преимущества этого метода: Python имеет готовую библиотеку google-api-python-client, которая берет на себя все вопросы авторизации и сетевого взаимодействия.
Логика работы будет следующей:
task.json.КомандаСистемы("python google_sync.py").event_id и записывает его в файл ответа.event_id в реквизит справочника или документа.Проанализируем, как обеспечить актуальность данных. Чтобы иметь возможность редактировать или удалять события, созданные из 1С, необходимо обязательно хранить Google_Event_ID в базе данных 1С. При создании события Google возвращает этот уникальный идентификатор.
Алгоритм синхронизации:
Google_Event_ID.POST запрос (создание).PUT или PATCH запрос (обновление).DELETE.Таким образом, комбинируя внешние скрипты для решения проблем совместимости протоколов и MSScriptControl для обработки данных, мы получаем надежную систему интеграции 1С 7.7 с современными облачными сервисами.