Как настроить выгрузку и интеграцию данных из Google Таблиц в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

Интеграция 1С с Google Таблицами — крайне популярная задача. Зачастую клиентам или менеджерам удобнее вести оперативный учет, собирать заявки или формировать прайс-листы в совместном онлайн-доступе, а в 1С требуется периодически загружать эти данные для формирования документов или проведения анализа. Существует несколько кардинально различающихся способов реализации этой задачи: от самых простых и надежных "ручных" методов до полностью автоматизированных фоновых процессов.

В этой статье мы подробно разберем все основные варианты интеграции, проанализируем их сильные и слабые стороны, а также рассмотрим технические нюансы реализации каждого метода в коде 1С.

---

Способ 1. Загрузка из локального файла XLSX через табличный документ

Это самый простой, надежный и отказоустойчивый метод, который не зависит от стабильности внешнего API Google, изменений в протоколах безопасности или блокировок контролирующих органов (РКН). Как справедливо отмечают специалисты на форумах, если у клиента нет жесткого требования к ежеминутному обновлению данных, лучшим решением будет выгрузка таблицы в файл Excel (.xlsx) и его последующий импорт в 1С. Для такой задачи можно использовать универсальную обработку для загрузки данных из Excel в справочники 1С.

Для реализации этого способа мы напишем простую обработку. Нам не потребуется установленный Microsoft Excel на сервере 1С — платформа умеет читать такие файлы напрямую с помощью встроенного объекта ТабличныйДокумент.

Разберем по шагам пример кода, выполняющего чтение локального файла на стороне сервера:


Процедура ПрочитатьФайлExcelНаСервере(ПутьКФайлу) Экспорт
    
    ТабДок = Новый ТабличныйДокумент;
    
    Попытка
        // Читаем файл напрямую в табличный документ
        ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение
        ВызватьИсключение "Не удалось прочитать файл. Возможно, он поврежден или открыт в другой программе. Ошибка: " + ОписаниеОшибки();
    КонецПопытки;
    
    КоличествоСтрок = ТабДок.ВысотаТаблицы;
    КоличествоКолонок = ТабДок.ШиринаТаблицы;
    
    // Обходим строки таблицы, начиная со второй (предполагая, что первая строка — шапка)
    Для НомерСтроки = 2 По КоличествоСтрок Цикл
        
        КодТовара = СокрЛП(ТабДок.ПолучитьОбласть(НомерСтроки, 1, НомерСтроки, 1).ТекущийОбъект.Текст);
        Наименование = СокрЛП(ТабДок.ПолучитьОбласть(НомерСтроки, 2, НомерСтроки, 2).ТекущийОбъект.Текст);
        Количество = Число(ТабДок.ПолучитьОбласть(НомерСтроки, 3, НомерСтроки, 3).ТекущийОбъект.Текст);
        Цена = Число(ТабДок.ПолучитьОбласть(НомерСтроки, 4, НомерСтроки, 4).ТекущийОбъект.Текст);
        
        Если ПустаяСтрока(КодТовара) Тогда
            Продолжить; // Пропускаем пустые строки
        КонецЕсли;
        
        // Здесь мы можем выполнять поиск номенклатуры и заполнение документов
        // Например: ЗаписатьДанныеВДокумент(КодТовара, Количество, Цена);
        
    КонецЦикла;

КонецПроцедуры

Преимущества: Абсолютная независимость от внешних сервисов в момент загрузки, отсутствие необходимости настраивать авторизацию Google API, простота отладки кода.

Недостатки: Требует участия человека для ручного экспорта файла из веб-интерфейса Google Таблиц.

---

Способ 2. Автоматическое скачивание XLSX/CSV по прямой ссылке

Если мы хотим автоматизировать процесс, но не желаем связываться со сложной авторизацией OAuth 2.0 и регистрацией приложений в Google Cloud, мы можем опубликовать документ "для всех, у кого есть ссылка" (в режиме чтения) и скачивать его программно. Google позволяет выгружать документы по прямой ссылке, сформированной особым образом.

Для этого нам понадобится уникальный идентификатор нашей таблицы (он находится в адресной строке браузера между /d/ и /edit).

Адрес для скачивания в формате Excel выглядит так:
https://docs.google.com/spreadsheets/d/[ИДЕНТИФИКАТОР_ТАБЛИЦЫ]/export?format=xlsx

Напишем код 1С, который автоматически скачивает этот файл во временный каталог на сервере и передает его для обработки:


Функция СкачатьТаблицуGoogle(Знач ИдентификаторТаблицы)
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
    
    // Настраиваем защищенное соединение SSL
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    
    Попытка
        HTTPСоединение = Новый HTTPСоединение("docs.google.com", 443,,,,, ЗащищенноеСоединение);
        
        // Формируем относительный путь запроса для экспорта в xlsx
        ПутьЗапроса = "/spreadsheets/d/" + ИдентификаторТаблицы + "/export?format=xlsx";
        HTTPЗапрос = Новый HTTPЗапрос(ПутьЗапроса);
        
        // Отправляем запрос и сохраняем результат сразу в файл
        HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос, ИмяВременногоФайла);
        
        Если HTTPОтвет.КодСостояния = 200 Тогда
            Возврат ИмяВременногоФайла;
        Иначе
            ВызватьИсключение "Ошибка скачивания файла. Код состояния: " + HTTPОтвет.КодСостояния;
        КонецЕсли;
        
    Исключение
        ЗафиксироватьОшибку(ОписаниеОшибки());
        Возврат "";
    КонецПопытки;
    
EndФункция

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

---

Способ 3. Прямая интеграция через Google Sheets API и библиотеку OPI

Если требуется не просто читать файлы, а осуществлять двусторонний обмен (например, записывать статус обработки обратно в Google Таблицу, менять цвета ячеек, добавлять новые строки программно), необходимо использовать официальный Google Sheets API.

Для облегчения этой задачи существует замечательная отечественная библиотека с открытым исходным кодом — OPI (Open Integrations). Она берет на себя всю рутину по формированию заголовков, разбору JSON и работе с авторизацией. Для работы с ней программисту достаточно вызвать готовую функцию платформы.

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


// Пример получения данных ячеек через OPI
Токен = "Ваш_Полученный_OAuth_Токен";
Книга  = "Идентификатор_Вашей_Таблицы_Google";
Лист   = "Лист1";
Диапазон = "A1:D10";

ДанныеЯчеек = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, Диапазон, Лист);

// Перебираем полученные данные
Если ДанныеЯчеек.Свойство("values") Тогда
    Для Каждого СтрокаДанных Из ДанныеЯчеек.values Цикл
        // Каждая строка представляет собой массив значений колонок
        Код = СтрокаДанных[0];
        Наименование = СтрокаДанных[1];
        // Выполняем логику обработки данных...
    КонецЦикла;
КонецЕсли;

Для регулярных фоновых процессов рекомендуется использовать авторизацию через Сервисный аккаунт (Service Account) Google. Вместо интерактивного подтверждения в браузере вы генерируете JSON-ключ в консоли разработчика Google, предоставляете доступ этому сервисному e-mail к вашей таблице и используете его для генерации токенов в фоновых заданиях 1С без какого-либо участия пользователя. Для решения этой задачи подойдёт готовая обработка для интеграции 1С с Google Таблицами через сервисный аккаунт.

---

Способ 4. Промежуточный скрипт Google Apps Script (Веб-приложение)

Интересный альтернативный подход — перенос логики парсинга данных на сторону Google. В самой таблице во встроенном редакторе скриптов (Google Apps Script) пишется простой JavaScript-код, собирающий нужные данные и отдающий их по запросу в формате JSON. Скрипт публикуется как веб-приложение, доступное по уникальной ссылке.

Со стороны 1С отправляется стандартный GET-запрос к этой веб-ссылке. В ответ приходит чистый JSON-массив, который парсится в 1С одной строкой кода:


// Чтение JSON в структуру 1С
СтруктураДанных = ПолучитьДанныеИзGoogleAppsScript(СсылкаНаВебПриложение);
ТаблицаЗначений = УслугиСервера.ПрочитатьJSON(СтруктураДанных);

Этот способ избавляет разработчика 1С от необходимости поддерживать сложные библиотеки интеграции и разбираться в дебрях авторизации OAuth 2.0.

---

Способ 5. Решение проблем блокировок Google в РФ через "ИнтернетПрокси"

В современных реалиях работа с облачными сервисами Google из России может быть нестабильной из-за сетевых блокировок. Как упоминают участники форума, сервисы Google могут периодически "не отвечать" на запросы со стороны серверов 1С без использования специальных средств обхода ограничений.

Если системные администраторы компании не могут настроить VPN-туннель на уровне всей операционной системы сервера, разработчик 1С может решить эту проблему непосредственно в программном коде с помощью объекта ИнтернетПрокси.

Проанализируем пример создания HTTP-соединения через внешний прокси-сервер:


Функция СоздатьСоединениеЧерезПрокси()
    
    // Создаем объект прокси-сервера (например, купленный приватный SOCKS5 или HTTP прокси)
    Прокси = Новый ИнтернетПрокси;
    
    // Задаем настройки прокси-сервера
    Прокси.Установить("https", "194.226.112.45", 8080, "myProxyUser", "myProxyPassword");
    Прокси.НеИспользоватьПроксиДляАдресов.Добавить("*.1c.ru");
    Прокси.НеИспользоватьПроксиДляАдресов.Добавить("localhost");
    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    
    // Передаем объект прокси в конструктор HTTP-соединения
    HTTPСоединение = Новый HTTPСоединение("docs.google.com", 443,,,,, ЗащищенноеСоединение, Прокси);
    
    Возврат HTTPСоединение;
    
КонецФункции

При таком подходе весь локальный трафик 1С идет привычным образом, и только обращения к доменам Google безопасно туннелируются через внешний прокси-сервер, гарантируя стабильную работу обмена без сбоев.

---

Подведение итогов и выбор оптимального архитектурного решения

Выбор конкретного метода загрузки из Google Таблиц в 1С зависит от требований бизнеса к актуальности данных и технического ландшафта:

  1. Если данные обновляются раз в день или неделю, а безопасность превыше всего — выбирайте Способ 1 (Ручной импорт XLSX).
  2. Если процесс нужно автоматизировать, но таблица не содержит конфиденциальной коммерческой тайны — используйте Способ 2 (Скачивание XLSX по прямой ссылке без авторизации).
  3. При необходимости полноценной двусторонней автоматизации и работы в фоне — внедряйте Способ 3 (Google API / OPI с Сервисным аккаунтом). При нестабильности каналов связи обязательно дополняйте этот способ настройкой ИнтернетПрокси (Способ 5).
← На главную