Обмен с google 1с

Обновлено: 08.07.2024

Помоги пожалуйста разобраться с задачей.

Гугл любит обновлять форматы и протоколы, поэтому вчера работавшая обработка "ломается" в какой-то момент. Не вариант скачать в стабильном формате (odt, xls) и уже локально обрабатывать?
Ничего более менее похожего на рабочее найти не получилось, возможно что-то и существует в природе.
Возвращаюсь к этому вопросу раз в месяц на протяжении последнего года :-)
(2) Сейчас так и работаю.
У меня очень много информации хранится в разных таблицах и хочется не качать кучу таблиц, потом пересохранять их в xlsx (т.к. графики в них) и уже работать в 1С, а как-то напрямую.
Думал еще в сторону синхронизации через запросы в Ecxel, данные все отображаются (зеркалятся) хорошо, однако при обращении к ячейкам - они пустые :-)
Также хочется управлять правами доступа к таблицам из единого списка в 1С, где все сотрудники сразу.
А не вести отдельную таблицу с пометками куда кому доступ предоставлен.
Но это уже второстепенная задача.
Задача в чтении данных из таблиц. И желательно прям из гугл таблицы.
(6) Информация интересная, но нужно реализовывать автоматическую загрузку (скачивание) таблиц.(раз в час где-то нужно обновление информации).
Как рабочий вариант, я думаю, может написать скрипт, привязанный к событию при редактировании, который будет открывать Ecxel файл на компьютере и заменять данные в нём на свои? Найдет ли гугл документ локальный файл?

Which version of the API should be used?

We strongly recommend all developers use the Google Sheets API v4.

Version 3.0 (the version described here), is documented for legacy purposes only, and will eventually be deprecated. We no longer document v1 or v2.

Versions 1 and 2 are no longer available as of October 20, 2012.

About authorization protocols

You must use OAuth 2.0 to authorize requests.

OAuth 1.0 is no longer supported and was disabled on May 5, 2015. If your application uses OAuth 1.0, you must migrate to OAuth 2.0 to use this API.

ПИК Digital — ИТ-компания, которая делает стройку технологичной. В прошлом году мы перевели Группу Компаний ПИК на G Suite. Для полноценной работы с Google Таблицами и Документами потребовалось доработать наши системы.

Одна из таких доработок — расширение для выгрузки отчетов и форм из 1С в Google Диск в формате Google Таблиц и Google Документов. В статье мы поделимся готовым решением и полезной информацией по его внедрению. Расширение бесплатное. Берите и пользуйтесь.




Для работы расширения потребуется:

  1. Зарегистрировать аккаунт Google
  2. Создать проект в Google Cloud Platform
  3. Создать OAuth-клиент
  4. Настроить доступ к Google Drive API
  5. Установить расширение 1С
  6. Настроить подключение к Google API в 1С

Для работы потребуется аккаунт Google. Без него расширение не сможет взаимодействовать с сервисами G Suite. Уже есть действующая учетка — используйте её.

Создание проекта в GCP

Для активации доступа к Google Drive API необходимо создать проект в Google Cloud Platform (GCP). Есть два варианта бесплатной работы с GCP:

  • 12-месячный пробный период — с бюджетом в 300 долларов США.
  • Always Free — доступ к большинству ресурсов GCP.


Создание OAuth-клиента

Создадим учетные данные для подключения к G Suite по протоколу OAUth 2.0. В GCP идём в пункт меню «API и сервисы» — «Учетные данные» — «Создать учетные данные» — «Идентификатор ключа OAUth».

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


Оставьте тип доступа «Открытый доступ» и введите название приложения, которое будет отображаться, когда сотрудник запустит проект и потребуется согласие на доступ к данным. Нажмите «Сохранить».

После этого задайте «Тип приложения». Выберите «Другие типы» и введите идентификатор клиента OAuth. Обратите внимание, что это не то же самое, что отображаемое название приложения. В результате откроется окно с идентификатором и секретом клиента. Сохраните их, это важно.

Подключение библиотеки Google Drive API

Для получения доступа к функционалу API перейдите в пункт меню «Библиотека API», найдите нужную библиотеку и подключите ее.


Поскольку мы хотим работать с форматами G Suite, необходимо подключить к проекту библиотеку Google Drive API. Кроме того, нам понадобится библиотека Google Sheets API, Google Docs API. Найдите и подключите ее таким же способом.

Установка расширения в пользовательском режиме

Теперь можно формировать запросы к API. Напомним: наша задача — выгрузить данные из отчета 1С стандартной формы в Google Таблицу или Google Документ.

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

Наше расширение работает с платформой начиная с версии 8.3.10, на конфигурациях БП (начиная с 3.0.65 и выше), ERP (начиная с 2.4.6 и выше) и УТ (начиная с 11.4.6 и выше).

Если установка прошла успешно, то вы увидите кнопку «Сохранить на Google Drive» в отчётах и печатных формах.


Настройка параметров подключения к Google API в 1С

Осталось настроить параметры подключения к Google API, и можно работать. Снова выбираем в меню пункт «Все функции» и в разделе «Обработки» ищем пункт «Параметры подключения к Google API».


Заполняем поля Clientid, Clientsecret и «Порт» значениями, полученными при создании проекта в GCP. По умолчанию подставляются имя файла и папки, где будут сохранены временные ключи, используемые для подключения. Данные о ключах (refresh и access-токены) пользователя в целях безопасности сохраняются в каталог временных файлов текущего пользователя, в папку <имя папки> и в файл <имя файла>. Если один и тот же проект Google создается в разных конфигурациях, имя файла можно сделать одинаковым во всех из них, чтобы не создавать несколько файлов с одинаковой информацией. При сохранении параметры подключения сохраняются в хранилище общих настроек.

Сохранение отчета

Теперь вы сможете сохранять отчеты в формате Google Таблиц и Google Документов на Google Диске.

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


В появившемся окне введите адрес своей электронной почты Gmail и пароль. Далее
в открывшемся окне нажмите «Разрешить». Так вы даёте приложению сохранить информацию в вашем Google Диске.


Вам потребуется ввести имя файла, выбрать его тип и каталог для сохранения на общем или личном диске. Нажмите «Сохранить». После сохранения отчет откроется в браузере. Приятного просмотра.

Техническая сторона вопроса

Теперь разберемся, как это работает внутри платформы 1С.
Для подключения формируется следующая строка запроса к сервису Google:


ид_клиента— идентификатор клиента, в котором мы ранее сохранили значение переменной.
scope — адреса библиотек API, которые мы будем использовать. Если необходимо подключить несколько библиотек, перечислите их через пробел.

Эта строка запроса нужна для одноразового подключения нашего клиентского приложения к сервису Google. Можно ввести строку запроса в браузере, в ответ сервис вернет URL примерно такого содержания:


Можно в конструкторе форм 1С добавить поле для HTML-данных и выполнить запрос через него. Нам необходимо из этого URL получить значение <КОД> — код доступа к сервису.

Код может быть примерно таким:


В переменной expires_in содержится время жизни access-токена.
Ниже показан запрос на обновление токена:


В этом коде для загрузки файла используется способ multipart upload.
Мы формируем POST-запрос из двух блоков данных. В первом блоке прописываем title и mimeType файла. Во втором блоке передается содержимое файла. Блоки определяются разделителями, которые указаны в конце и начале блока.

Подробнее об этом в статье о вставке файлов базы знаний Google Диск.

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

Автор нашего расширения – ведущий разработчик ПИК Digital Бражникова Мария mbrazh

В общем, когда начинал гуглить, ничего толком не находил. Статьи в основном старые, а так как недавно гугл изменил способ авторизации, то грош теперь таким статьям цена. Решил копать глубже. Наткнулся на несколько интересных ссылок и разобрался.

В общих чертах процедура аутентификации выглядит так:

Перейдем к практике.

Скачивать будем эту тестовую гугл таблицу:

Переходим по ссылке


После этого выбираем в списке сервис Drive API (к нему необходимо получить доступ приложению)


Далее перехо дим по ссылке Credentials , чтобы создать идентификаторы приложения


Задаем имя приложения, которое будет видно пользователю при запросе разрешений.


Затем создаем ID пользователя, еще раз нажав на поле Credentials.


После завершения получаем


Подготовительные действия завершены. Все дальнейшие действия будут выполняться в среде 1С:Предприятие.

Создаем обработку и добавляем на форму элемент ПолеHTMLДокумента.


В процедуре-обработчике события для кнопки “Авторизация” надо написать код, формирующий адрес страницы авторизации и в последней строке открывающий эту страницу на экране для пользователя.

Таким образом, при нажатии кнопки «Авторизация» пользователю будет выведена страница для выполнения авторизации и выдачи разрешения для доступа к данным таблицы.


Разрешаем доступ приложению.

Разберем эту процедуру. Сначала нам нужно получить код доступа из заголовка браузера.

Получив маркер, можем получить доступ к метаданным нашей таблицы. В метаданных есть много чего интересного, в том числе и ссылка на скачивание (в форматах csv, pdf, xlsx). Итак, получим метаданные нашей таблицы.

Далее дело за малым. Нужно обработать полученный ответ. Вытягиваем от туда ссылку на скачивание. (В нашем примере в формате . xlsx ) .


Добавлена функция "Удалить строки". Демонстрация возможность удаления строк из таблицы Google указав определенный диапазон индексов строк для удаления.

Функции

Авторизация в google используя протокол OAuth 2.0

Запрос для получения authorization code ("Код доступа").

Запрос для получения access_token и refresh token.

Запрос для получения access_token используя refresh token.

Взаимодействие из 1С с Google Sheets.

Получение списка листов таблицы гугл

Чтение данных из таблицы гугл и заполнение табличного документа 1С.

Запись данных из табличного документа 1С в таблицу гугл.

Дополнительно

Сохранение параметров подключения и списка листов таблицы в данных формы.

Условное представление элементов в зависимости от срока действия токена.

Формирование ссылки для перехода к выбранному листу таблицы при выборе названия листа из списка.

В качестве основы были использованы обработки для обычных форм разработанные пользователем: echo77.

Информация с сайта гугл:

Авторизация в google

Получить client ID and client secret


Необходимо используя



Запросить "Код доступа"

Для доступа к данным гугл необходимо при каждом запросе передавать access_token. При этом чтобы получить access_token, необходимо сначало получить authorization code "Код доступа".





Код доступа можно использовать только один раз для получения access_token. Если access_token утерян, необходимо получить новый “Код доступа” который использовать для получения нового access_token (или использовать refresh token для получения нового access token)

Получить access_token

Любой запрос для доступа к данным требует указания access token-а в параметрах запроса. Для первичного получения “access token”, необходимы: “Client id”, “Client secret” и “Код доступа”.

“Aсcess token” имеет непродолжительное время жизни (3600 сек.).После окончания действия, необходимо:

При нажатии "Получить" будет выполнен запрос для получения Аccess token и Refresh token, и будет рассчитан “Срок действия токена”


Запрос возвращает .json содержащий требуемую информацию, и токены заполняются в соответствующие поля на форме обработки:



После получения “Access token”, пока он действует можно обращаться к данным в гугл.

Обновить access_token используя refresh_token

После того как истек срок действия “access token” или раньше, можно использовать “refresh token”, чтобы получить новый access token, без использования браузера и получения кода доступа.

Существуют определенные ограничения на использование “refresh token” (подробности по ссылке)


Работа с таблицей гугл (Google Sheet)

Подключение к таблице и получение списка листов таблицы

Необходимо указать ссылку на таблицу гугл в строке “Ссылка на таблицу google”.

При указании ссылки, программа получит “ID таблицы”, выполнит подключение к таблице, прочитает список листов таблицы и заполнит список выбора для поля “Лист”.



Чтение данных из таблицы гугл в табличный документ 1С

По кнопке “Прочитать таблицу” выполняется запрос, результат запроса обрабатывается и заполняется табличный документ


Запись данных табличного документа 1С в таблицу гугл

По кнопке “Записать таблицу” выполняется запрос в котором передается информация для записи в таблицу гугл.


18.05.18. Удаление строк из таблицы Google

Под спойлером процедура демонстрирующая удаление строк:


Related Posts

60 Comments

Спасибо за такие возможности! Не скачивал (эту версию), но уверен, что хорошая, годная разработка. Пользователям 1С теперь доступны чтение/запись гугл таблиц, и это прекрасно.

(1) И Вам спасибо за оценку 🙂

Хорошая работа. Спасибо. Актуальная вещь

Артано Майаров, Евгений Сахненко, Вадим Скакун, спасибо коллеги 🙂

Респект! Очень пригодится!

Smartsheet бы еще!

(12) Smartsheet судя по всему классная штука, но для меня на данный момент не актуальная 🙂

Спасибо большое. Работает. Только не могу разобраться как удалять строки.

Ссылка на пример запроса по удалению строк или колонок:

(18) Круть. Еще раз спасибо большое.

нравятся мне проекты ради проектов 🙂

(20) как показывает практика, полученный в процессе опыт конвертируется в итоге в материальные и не только блага 🙂

1. Код обработки открытый?

2. Реализована ли возможность формировать многостраничную гугл таблицу?

3. Можно ли из обработки прописать пользователей (гугл), которым будет доступна созданная гугл таблица?

2. Реализована ли возможность формировать многостраничную гугл таблицу? 3. Можно ли из обработки прописать пользователей (гугл), которым будет доступна созданная гугл таблица?

Все что может обработка изложено в описании со скриншотами 🙂

Если считывать публичную таблицу обязательно ли нужны токены доступа?

Данная обработка при каждого обращении к данным передает в заголовке токен доступа.

Данная обработка при каждом обращении к данным передает токен доступа.

Запустил Вашу обработку. Не могу получить листы моей гугл-таблицы. Ошибка:

Добрый день, судя по ошибке есть какая-то проблема с токеном доступа который вы используете.

Используемый вами токен доступа не позволяет обращаться к запрашиваемым данным.

Я лично с такой ошибкой не сталкивался.

В основном сталкивался с такими ответами:

Т.е. удалить историю нельзя программными способами.

История очищается только если делать копию файла.

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

например, получить все строки со значением в колонке А1 = 1.

можно ли получить например только колонки А и С ?

а для чего такая сложная схема с идентификацией ? можно через постоянный API-ключ получать доступ:

Я не уверен что правильно понял, что вы имеете ввиду, но мне было бы интересно узнать подробнее.

Сбросьте пжл. ссылки где можно изучить детали про такой способ подключения? Может быть он более простой, но менее безопасный?

Я не уверен что правильно понял, что вы имеете ввиду

я же написал запрос, которым можно получить доступ к опубликованной по ссылке таблице, зная ее id и свой apikey.

вводите в этом запросе id таблицы, api-ключ гугла и получаете ее в json.

Лично мне не требовалось вносить в нее изменения, только читать данные, поэтому я дальше не копал.

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

например, получить все строки со значением в колонке А1 = 1.

Судя повсему используя текущий API это не получиться сделать. Доступны только следующие возможности фильтации при запросе данных:

Что-то похожее можно сделать для данных отображаемых при просмотре используя Filters

Судя по всему, что используя batchGetByDataFilter, можно задать отдельные dataFilters[], и получить только колонки А и С

Как-то очень печально такое от гугла видеть.

У меня запросы типа

Укажите пожалуйста в вашей публикации, что для функционирования обработки требуется наличие БСП. Для меня данное требование оказалось сюрпризом. Неприятным.

Да, действительно в обработке использовано 3 функции, которые входят в состав БСП:

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

В противном случае, мне кажеться исправление проблемы занимает относительно мало времени.

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

Но да, я согласен что следует упоминуть в описание обработки данный нюанс, что я и сделаю в ближайшее время.

Может кто-то находил подобное на УФ?

(45) Добрый день, если я правильно понял что вам надо, то это функционал из БСП

Программа предоставляет возможность загрузки табличных данных из файлов в произвольные списки (справочники) и табличные части документов. Например, для разового переноса нормативно-справочной информации при переходе с других программ, или для регулярной загрузки данных в табличные части при заполнении документов.

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

Загрузка данных из файла:

Читайте также: