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

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

Интеграция 1С с внешними сервисами, такими как Google Таблицы, является классической задачей для автоматизации управленческого учета и построения оперативной отчетности — для этого подойдёт универсальная выгрузка из 1С во внешние базы данных и BI-системы. Для новичка в разработке эта задача может показаться необъятной из-за необходимости работать с HTTP-протоколами, API и механизмами авторизации. В данной статье мы подробно разберем, как построить надежную систему выгрузки, которая будет работать автоматически и устойчиво к сбоям интернета.

Выбор архитектуры: Авторизация и доступ

Первым делом проанализируем, как 1С будет «представляться» сервисам Google. Существует два основных пути: OAuth 2.0 и Service Account. Для автоматических фоновых процессов, которые должны работать без участия пользователя, мы рекомендуем использовать Service Account (Сервисный аккаунт).

Разберем подробнее, почему это важно. При использовании стандартного OAuth пользователю периодически нужно подтверждать доступ в браузере. Сервисный аккаунт — это «робот», который имеет свой собственный ключ (JSON-файл). Достаточно один раз «расшарить» нужную Google-таблицу на email этого сервисного аккаунта, и 1С сможет подключаться к ней в любое время без ввода паролей.

Для реализации этого механизма в 1С нам потребуется сформировать JWT-токен (JSON Web Token), подписать его и обменять на access_token. Рассмотрим, какие объекты 1С нам помогут в этом (поможет инструментарий для разработки и отладки управляемых форм):

  1. HTTPСоединение — для отправки запросов к серверам Google.
  2. Криптография — для подписи токена (если используется сложный вариант авторизации).
  3. ЗаписьJSON — для формирования тела запроса.

Работа с Google Sheets API v4

Взаимодействие с таблицами происходит через REST API — для этого есть модуль выгрузки данных 1С в Google Таблицы. Выясним основные методы, которые нам понадобятся для решения задачи:

Проанализируем структуру JSON-запроса для добавления данных. Данные передаются в виде массива массивов, где каждый вложенный массив — это строка таблицы. Посмотрим на пример формирования структуры в 1С:


ДанныеДляОтправки = Новый Структура;
Строки = Новый Массив;
ТекущаяСтрока = Новый Массив;
ТекущаяСтрока.Добавить(Формат(Объект.Дата, "ДФ=dd.MM.yyyy"));
ТекущаяСтрока.Добавить(Объект.Номер);
ТекущаяСтрока.Добавить(Объект.СуммаДокумента);

Строки.Добавить(ТекущаяСтрока);
ДанныеДляОтправки.Вставить("values", Строки);

Организация мгновенной синхронизации

Чтобы данные уходили в Google Таблицу сразу после создания или изменения документа, мы воспользуемся механизмом Подписки на события. Создадим подписку на событие ПриЗаписи для интересующих нас документов.

Однако здесь кроется важный нюанс: если мы будем отправлять данные напрямую в обработчике события, пользователь будет ждать завершения сетевого запроса. Если интернет работает медленно, 1С «зависнет» на несколько секунд. Чтобы этого избежать, используем Фоновые задания.

Рассмотрим алгоритм работы подписки:

  1. В момент записи документа система проверяет, нужно ли выгружать этот объект.
  2. Вместо прямой отправки 1С запускает процедуру через ФоновыеЗадания.Выполнить().
  3. Основной сеанс пользователя мгновенно освобождается, а сервер в фоновом режиме общается с Google API.

Обеспечение отказоустойчивости при сбоях интернета

Выясним причину возможных проблем: интернет может отключиться в самый неподходящий момент. Чтобы данные не потерялись, мы создадим вспомогательный Регистр сведений, который назовем ОчередьВыгрузкиВGoogle.

Проанализируем логику работы этой очереди:

  1. При записи документа мы не сразу отправляем его, а создаем запись в этом регистре со статусом "В очереди".
  2. Регламентное задание (запускающееся, например, раз в 5 минут) выбирает все записи из регистра.
  3. Пытается отправить их в Google.
  4. Если отправка прошла успешно — запись удаляется.
  5. Если произошла ошибка (нет интернета, ошибка сервера Google) — запись остается в регистре для следующей попытки.

Такой подход гарантирует, что ни один документ не будет пропущен, даже если связь отсутствовала несколько часов.

Распределение данных по годам (листам)

По условию задачи данные должны группироваться по годам. Разберем, как это реализовать программно. Перед каждой выгрузкой нам нужно получить список листов книги. Посмотрим на логику:


ИмяЛиста = Формат(Объект.Дата, "ДФ=yyyy");
// 1. Запрашиваем структуру таблицы через GET
// 2. Ищем в массиве sheets лист с названием ИмяЛиста
// 3. Если не нашли:
//    Вызываем batchUpdate с командой addSheet и названием ИмяЛиста
// 4. Отправляем данные методом values.append, указывая диапазон как "2023!A1"

Важно помнить, что работа с HTTPСоединение требует правильной настройки заголовков. В заголовке обязательно должен присутствовать Authorization: Bearer [Ваш_Токен] и Content-Type: application/json.

Рекомендации по изучению

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

Используя предложенную архитектуру (Сервисный аккаунт + Очередь в регистре + Фоновые задания), вы создадите профессиональное решение, которое будет работать стабильно и эффективно, несмотря на отсутствие опыта в разработке сложных интеграций. Для этой задачи есть автоматизированная выгрузка из 1С во внешние СУБД.

← На главную