Интеграция 1С с облачными сервисами, такими как Google Таблицы, является распространенной задачей. Платформа 1С 8.2 имеет ряд особенностей и ограничений, особенно в части работы с современными протоколами безопасности и форматами обмена данными. В рамках данной статьи мы подробно разберем, как обойти эти ограничения и настроить стабильное получение данных из таблиц.
Прежде всего, проанализируем ситуацию. Платформа 1С 8.2 (особенно старых релизов) зачастую не поддерживает протокол TLS 1.2, который является обязательным для сервисов Google. При попытке использовать стандартный объект HTTPСоединение вы можете столкнуться с ошибкой установки защищенного соединения. Кроме того, в 8.2 отсутствует встроенный функционал для работы с JSON, который возвращает официальный API Google.
Рассмотрим два основных сценария решения задачи:
Если ваша таблица открыта для чтения по ссылке, нам не обязательно использовать сложный API. Мы можем заставить Google отдать данные в виде текстового файла CSV. Это значительно упростит парсинг данных на стороне 1С.
Разберем алгоритм формирования ссылки. Оригинальная ссылка выглядит так:
https://docs.google.com/spreadsheets/d/ID_ТАБЛИЦЫ/edit#gid=0
Для экспорта нам нужно заменить часть после последнего слеша на специальную команду. Итоговая ссылка для 1С будет выглядеть следующим образом:
https://docs.google.com/spreadsheets/d/ID_ТАБЛИЦЫ/export?format=csv
Посмотрим на пример кода, который использует COM-объект WinHttp.WinHttpRequest.5.1. Этот объект более надежен в среде Windows и корректно работает с современными сертификатами Google, в отличие от штатных средств 1С 8.2.
Функция ПолучитьДанныеИзGoogleТаблицы(IDТаблицы)
// Формируем адрес ресурса
АдресРесурса = "https://docs.google.com/spreadsheets/d/" + IDТаблицы + "/export?format=csv";
// Используем WinHTTP для работы с HTTPS
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", АдресРесурса, Ложь);
Попытка
WinHttp.Send();
Исключение
Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Если WinHttp.Status = 200 Тогда
// Получаем текст ответа
ТекстОтвета = WinHttp.ResponseText;
Возврат ТекстОтвета;
Иначе
Сообщить("Ошибка сервера: " + WinHttp.Status);
Возврат Неопределено;
КонецЕсли;
КонецФункции
После того как мы получили текстовую строку из Google, ее необходимо разобрать. В CSV-файле строки разделены символом перевода строки, а ячейки — запятыми (или точками с запятой, в зависимости от региональных настроек).
Разберем по шагам простой алгоритм чтения данных из полученного текста:
// Пример обработки текста CSV
ТекстCSV = ПолучитьДанныеИзGoogleТаблицы("1KvA5PiLx68DJvFvj5Tcinfq2448TP9z1tEiLvALzL3c");
Если ТекстCSV <> Неопределено Тогда
// Разбиваем текст на строки
МассивСтрок = СтрЗаменить(ТекстCSV, Символы.ПС, Символы.ВК);
Для НомерСтроки = 1 По СтрЧислоСтрок(МассивСтрок) Цикл
ТекущаяСтрока = СтрПолучитьСтроку(МассивСтрок, НомерСтроки);
// Здесь можно реализовать разделение строки по запятым
// Внимание: если в ячейках есть запятые, потребуется более сложная логика
Сообщить("Считана строка: " + ТекущаяСтрока);
КонецЦикла;
КонецЕсли;
Если таблица требует авторизации или вам нужно работать с конкретными диапазонами через официальный интерфейс, рассмотрим работу с API. Выясним причину, почему это сложнее в 1С 8.2: ответ от API приходит в формате JSON, а стандартные средства платформы 8.2 не умеют его читать.
Для решения этой задачи проанализируем использование MSScriptControl.ScriptControl. Это позволит нам выполнить JavaScript внутри 1С для парсинга структуры JSON.
Сначала сформируем запрос к API. Вам потребуется API Key, который можно получить в консоли Google Cloud.
// Пример формирования запроса к API v4
КлючAPI = "ВАШ_API_KEY";
IDТаблицы = "1KvA5PiLx68DJvFvj5Tcinfq2448TP9z1tEiLvALzL3c";
Диапазон = "Лист1!A1:B10";
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + IDТаблицы + "/values/" + Диапазон + "?key=" + КлючAPI;
HTTP = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
HTTP.Open("GET", URL, 0);
HTTP.Send();
Если HTTP.Status = 200 Тогда
JSONТекст = HTTP.ResponseText;
// Далее вызываем функцию парсинга
Результат = РазобратьJSON(JSONТекст);
КонецЕсли;
Теперь рассмотрим, как реализовать функцию РазобратьJSON в условиях 1С 8.2 с помощью встроенного JavaScript:
Функция РазобратьJSON(СтрокаJSON)
ScriptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScriptCtrl.Language = "JScript";
ScriptCtrl.AddCode("function getValues(jsonString) {
var obj = eval('(' + jsonString + ')');
return obj.values;
}");
Попытка
Данные = ScriptCtrl.Run("getValues", СтрокаJSON);
Возврат Данные;
Исключение
Сообщить("Ошибка парсинга JSON");
Возврат Неопределено;
КонецПопытки;
КонецФункции
Google Таблицы всегда отдают данные в кодировке UTF-8. Платформа 1С 8.2 при использовании старых методов работы с текстом может некорректно отображать кириллицу. При чтении ответа через WinHttp, объект обычно автоматически определяет кодировку, но если вы сохраняете данные в файл, всегда используйте КодировкаТекста.UTF8.
Важный момент: Если вы планируете не только читать, но и записывать данные в таблицу, вам потребуется авторизация через OAuth 2.0 или Сервисный аккаунт. Для 1С 8.2 это крайне трудоемкая задача, требующая реализации шифрования RSA-SHA256, поэтому для записи данных рекомендуется использовать внешние компоненты или промежуточные скрипты (например, на Python или PowerShell).
Подведем итог. Для быстрого и надежного считывания данных из Google Таблиц в 1С 8.2:
HTTPСоединение применяйте COM-объект WinHttp для обхода проблем с TLS.Следуя этим шагам, вы сможете успешно интегрировать вашу базу 1С 8.2 с облачными данными без необходимости покупки сторонних обработок.