Чтение и запись из таблиц гугл (google sheets) в табличный документ 1С (8.3, управляемые формы)

16.03.19

Интеграция - Внешние источники данных

Внешняя обработка на управляемой форме для 1С версии 8.3 для доступа к сервисам Google Sheets c использованием протокола авторизации OAuth 2.0. Выполняет получение списка листов таблицы гугл, чтение таблицы гугл в табличный документ 1С и запись из табличного документа 1С в таблицу гугл. Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.11.2954).

Скачать файлы

Наименование Файл Версия Размер
Чтение и запись из таблиц гугл (google sheets) в табличный документ 1С (8.3, управляемые формы):
.epf 18,52Kb
509
.epf 1.0.2 18,52Kb 509 Скачать
Внимание! В обработке использовано 3 функции из БСП:
ОбщегоНазначенияКлиентСервер.СообщитьПользователю() 
СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку() 
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку() 

Обновление

18.05.18. Версия обработки 1.0.2.

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

Функции

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

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

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

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

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

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

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

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

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

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

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

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

Используемые источники

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

  2. Некоторая информация была получена из статей на infostart.ru.:

    1. Google Analytics API, Oauth2.0 и 1c8

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

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

    1. Google API Console

    2. Using OAuth 2.0 to Access Google APIs

    3. Refreshing an access token (offline access)

Инструкция

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

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

Необходимо используя Google API Console в рамках созданного проекта получить client ID and client secret

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

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

В обработке на закладке “Параметры подключения”, при нажатии на “Запросить” - открывается окно браузера и выполняется переход на страницу авторизации гугл. При этом обязательно должны быть указаны “Client id” и “Client secret”, полученные на предыдущем шаге.

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

Получить access_token

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

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

- либо использовать refresh token и обновить access token

- либо опять повторить процесс: получить код доступа, используя новый код доступа - получить новый access token.

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

Для удаления строк необходимо указать диапазон индексов С - ПО. Нумерация с 0-ля. Например для удаления 2-ой строки в таблице необходимо задать диапазон С = 1 ПО = 2.

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

 

Обработка Управляемые формы Google sheets загрузка выгрузка табличный документ таблица гугл OAuth 2.0

См. также

Автоматическая многопоточная выгрузка данных 1С 8.3 в БД Clickhouse (для работы с данными 1С в BI-системах)

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматизированной выгрузки данных из 1С 8.3, а также MS Excel в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Visiology, Apache Superset (и не только) - "Экстрактор данных 1С в BI". Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм. Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/ Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Yandex Datalens

160000 руб.

15.11.2022    10037    7    23    

18

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    8192    4    8    

7

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ 3. Отчеты по данным загруженным в регистры сведений. 4. В версии "с функцией автозагрузки данных" предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

600 руб.

25.05.2021    11784    9    4    

8

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Внешняя обработка с открытым кодом.

9000 руб.

08.12.2011    79881    119    121    

139

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    46943    89    153    

82
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dzenn 834 10.04.18 12:36 Сейчас в теме
Спасибо за такие возможности! Не скачивал (эту версию), но уверен, что хорошая, годная разработка. Пользователям 1С теперь доступны чтение/запись гугл таблиц, и это прекрасно.
2. Ko1t 342 10.04.18 13:19 Сейчас в теме
(1) И Вам спасибо за оценку :)
22. пользователь 24.05.18 05:41
Сообщение было скрыто модератором.
...
23. пользователь 27.05.18 06:38
Сообщение было скрыто модератором.
...
3. Артано 744 11.04.18 04:56 Сейчас в теме
Вмемориз
4. Duketm 30 11.04.18 09:17 Сейчас в теме
Хорошая работа. Спасибо. Актуальная вещь
5. UncleVader 129 11.04.18 09:27 Сейчас в теме
Круто, умница
6. Ko1t 342 11.04.18 09:37 Сейчас в теме
Артано Майаров, Евгений Сахненко, Вадим Скакун, спасибо коллеги :)
7. DrAku1a 1605 11.04.18 10:48 Сейчас в теме
Респект! Очень пригодится!
8. Ko1t 342 11.04.18 11:11 Сейчас в теме
(7) Спасибо, Андрей!
9. starik-2005 2875 12.04.18 10:16 Сейчас в теме
Не читал, но + )))
10. Ko1t 342 12.04.18 10:17 Сейчас в теме
(9) Спасибо, :)
11. logarifm 1112 13.04.18 01:48 Сейчас в теме
Пробежался глазами - годный инструмент но не проверялеще. +
13. Ko1t 342 13.04.18 09:40 Сейчас в теме
(11) Заранее спасибо :)
12. KAV2 154 13.04.18 03:24 Сейчас в теме
Smartsheet бы еще!
14. Ko1t 342 13.04.18 09:41 Сейчас в теме
(12) Smartsheet судя по всему классная штука, но для меня на данный момент не актуальная :)
15. rintik 18 17.05.18 12:05 Сейчас в теме
Спасибо большое. Работает. Только не могу разобраться как удалять строки.
16. Ko1t 342 17.05.18 12:38 Сейчас в теме
(15) Пожалуйста ).
Ссылка на пример запроса по удалению строк или колонок:
https://developers.google.com/sheets/api/samples/rowcolumn#delete_rows_or_columns
17. rintik 18 17.05.18 13:01 Сейчас в теме
(16) Да пытаюсь разобраться, только у гугла для меня один ответ ""message": "Invalid JSON payload received. Unknown name \"requests\": Cannot find field.","
18. Ko1t 342 18.05.18 12:41 Сейчас в теме
(17) Я попробовал реализовать удаление строк, у меня получилось.
На форме обработки я добавил 2 реквизита: "УдалитьИндексС","УдалитьИндексПО".
Например для удаления 2-ой строки в таблице надо указать:
УдалитьИндексС = 1 (индексация начинается с 0-ля);
УдалитьИндексПО = 2;
Под спойлером код процедуры:
Процедура УдалитьСтрокиОбработка()
lexxmaster; rintik; +2 Ответить
19. rintik 18 18.05.18 14:24 Сейчас в теме
(18) Круть. Еще раз спасибо большое.
20. kolya_tlt 82 23.05.18 09:46 Сейчас в теме
нравятся мне проекты ради проектов :)
21. Ko1t 342 23.05.18 11:21 Сейчас в теме
(20) как показывает практика, полученный в процессе опыт конвертируется в итоге в материальные и не только блага :)
24. user658699_heinrich2906 30.06.18 14:55 Сейчас в теме
Подскажите:
1. Код обработки открытый?
2. Реализована ли возможность формировать многостраничную гугл таблицу?
3. Можно ли из обработки прописать пользователей (гугл), которым будет доступна созданная гугл таблица?
25. Ko1t 342 30.06.18 23:07 Сейчас в теме
(24)
1. Код обработки открытый?

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

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

> Нет
p.s.
Все что может обработка изложено в описании со скриншотами :)
26. leobrn 592 06.07.18 14:21 Сейчас в теме
Если считывать публичную таблицу обязательно ли нужны токены доступа?
27. пользователь 09.07.18 12:00
Сообщение было скрыто модератором.
...
28. Ko1t 342 09.07.18 12:05 Сейчас в теме
(26)
Данная обработка при каждого обращении к данным передает в заголовке токен доступа.

Какая авторизация нужна для чтения публичных и приватных данных, а также ответ на ваш вопрос можно получить по ссылке: https://developers.google.com/sheets/api/guides/authorizing
29. пользователь 09.07.18 12:08
Сообщение было скрыто модератором.
...
30. Ko1t 342 09.07.18 12:24 Сейчас в теме
(26)
Данная обработка при каждом обращении к данным передает токен доступа.
Я не проверял как будет происходить доступ к публичным данным, но почитать об этом можно по ссылке: https://developers.google.com/sheets/api/guides/authorizing
31. torch 126 02.10.18 17:05 Сейчас в теме
Запустил Вашу обработку. Не могу получить листы моей гугл-таблицы. Ошибка:
{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"status": "PERMISSION_DENIED"
}
}
Судя по описанию жалуется на способ идентификации. Непонятно... Может сталкивались с этой ошибкой?
32. Ko1t 342 02.10.18 18:17 Сейчас в теме
(31)
Добрый день, судя по ошибке есть какая-то проблема с токеном доступа который вы используете.
Используемый вами токен доступа не позволяет обращаться к запрашиваемым данным.
Я лично с такой ошибкой не сталкивался.
Моя рекомендация будет, заново проделать настройки как это написано в разделе "Инструкция/Авторизация в google", сверяясь с приведенными скринами экрана.
35. kassbar 155 01.03.19 20:58 Сейчас в теме
(31) "Request had insufficient authentication scopes" не задан ни один параметр scopes очевидно.
33. torch 126 18.11.18 18:05 Сейчас в теме
Господа, еще один трабл. Я при каждом изменении остатков обновляю гугл-таблицу, но с определенного момента у клиентов в гугл-таблице перестали обновляться данные. У одного из них я почистил кеш и куки - все заработало. Но это не выход - клиентов много и всем объяснять нет возможности, писать инструкции без толку. Предполагаю что надо как-то снести все версии изменений гугл-таблицы и оставить только последнюю, актуальную версию, но не могу найти где это делается. Может кто-то сталкивался с такой проблемой?
34. Ko1t 342 24.11.18 11:59 Сейчас в теме
(33)
Добрый день. Я пробовал искать решения по очистке истории...
В основном сталкивался с такими ответами:
https://productforums.google.com/forum/#!topic/docs/h_NWUzDL3Po
Т.е. удалить историю нельзя программными способами.
История очищается только если делать копию файла.
36. kassbar 155 01.03.19 21:01 Сейчас в теме
у кого есть рабочий пример как получать данные не диапазонами, а по отбору на значения в колонках ?
например, получить все строки со значением в колонке А1 = 1.

можно ли получить например только колонки А и С ?
40. Ko1t 342 03.03.19 21:53 Сейчас в теме
(36)
у кого есть рабочий пример как получать данные не диапазонами, а по отбору на значения в колонках ?
например, получить все строки со значением в колонке А1 = 1.

Судя повсему используя текущий API это не получиться сделать. Доступны только следующие возможности фильтации при запросе данных:
https://developers.google.com/sheets/api/reference/rest/v4/DataFilter
Что-то похожее можно сделать для данных отображаемых при просмотре используя Filters
Возможно если программно выполнить SetBasicFilterRequest и затем чтение из таблицы, будут прочитанных отфильтрованные данные... надо пробовать.

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

https://developers.google.com/sheets/api/guides/concepts#a1_notation
https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchGetByDataFilter
Судя по всему, что используя batchGetByDataFilter, можно задать отдельные dataFilters[], и получить только колонки А и С
41. kassbar 155 04.03.19 00:13 Сейчас в теме
(40)
Возможно если программно выполнить SetBasicFilterRequest и затем чтение из таблицы, будут прочитанных отфильтрованные данные... надо пробовать.

пробовал, через batchupdate ставил фильтры - не работает, возвращает всю таблицу.
Как-то очень печально такое от гугла видеть.

Пришлось через запросы "select..." к таблице получать нужные данные
"https://docs.google.com/spreadsheets/d/id_таблицы/gviz/tq?tqx=out:html&tq=select*"
выгрузить в csv: "tqx=out:csv"

работает только для опубликованных "по ссылке" таблиц
37. kassbar 155 01.03.19 22:58 Сейчас в теме
а для чего такая сложная схема с идентификацией ? можно через постоянный API-ключ получать доступ:
https://sheets.googleapis.com/v4/spreadsheets/idтаблицы/?key=АпиКлюч&includeGridData=true
38. Ko1t 342 03.03.19 16:43 Сейчас в теме
(37)
а для чего такая сложная схема с идентификацией ?

В рамках данной обработки реализован рекомендуемый Гуглом метод аутентификации OAuth 2.0 описанный по ссылке: https://developers.google.com/identity/protocols/OAuth2
можно через постоянный API-ключ получать доступ

Я не уверен что правильно понял, что вы имеете ввиду, но мне было бы интересно узнать подробнее.
Сбросьте пжл. ссылки где можно изучить детали про такой способ подключения? Может быть он более простой, но менее безопасный?
39. kassbar 155 03.03.19 19:22 Сейчас в теме
(38)
Я не уверен что правильно понял, что вы имеете ввиду

я же написал запрос, которым можно получить доступ к опубликованной по ссылке таблице, зная ее id и свой apikey.
вводите в этом запросе id таблицы, api-ключ гугла и получаете ее в json.
Лично мне не требовалось вносить в нее изменения, только читать данные, поэтому я дальше не копал.
42. kassbar 155 04.03.19 17:57 Сейчас в теме
Еще вопрос, получалось ли у кого-то выгрузить не публичный файл типа "таблица Гугл" (доступ открыт пользователю, публичной ссылки нет) через API GoogleDrive ?
У меня запросы типа
Новый HTTPЗапрос("drive/v3/files/" +idТаблицы+"/export/?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
всегда возвращает ошибку "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup".
Подключил API Google+ и API Google Drive с областью действия "https://www.googleapis.com/auth/drive"
43. simy4 32 16.03.19 11:32 Сейчас в теме
Укажите пожалуйста в вашей публикации, что для функционирования обработки требуется наличие БСП. Для меня данное требование оказалось сюрпризом. Неприятным.
44. Ko1t 342 16.03.19 14:47 Сейчас в теме
(43) Добрый день.
Да, действительно в обработке использовано 3 функции, которые входят в состав БСП:
ОбщегоНазначенияКлиентСервер.СообщитьПользователю()
СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку()
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()
Как мне кажется, основные сценарии использования данной обработки предполагают наличие данных функций в составе конфигурации, из которой данная обработка запускается.
В противном случае, мне кажеться исправление проблемы занимает относительно мало времени.
При этом внедрение БСП не требуетсся, а требуется просто замена в коде конфигураций всех вызывов обозначенных функций на свои локальные функции. Понять из названия и передаваемых параметров что делают данные функции, как мне кажется не составляет труда.
Но да, я согласен что следует упоминуть в описание обработки данный нюанс, что я и сделаю в ближайшее время.
45. German_Tagil 39 19.03.19 06:13 Сейчас в теме
Добавил в избранное...
меня заинтерисовало - переходим на БП 3.0
на КА 1.1 у меня была допиленная обработка https://infostart.ru/public/66842/
Может кто-то находил подобное на УФ?
46. Ko1t 342 19.03.19 10:58 Сейчас в теме
(45) Добрый день, если я правильно понял что вам надо, то это функционал из БСП
https://its.1c.ru/db/bsp302doc#content:1867:1
5.18 Загрузка данных из файла
47. German_Tagil 39 20.03.19 05:42 Сейчас в теме
Доступ к данному материалу ограничен
48. Mogilnikova 97 20.03.19 16:04 Сейчас в теме
Добавила в избранное. Однажды ненастным днем оно мне пригодится!
49. German_Tagil 39 21.03.19 10:35 Сейчас в теме
(48) угу я точно также поступаю
50. Lera_1c 15 01.08.19 11:08 Сейчас в теме
Очень пригодилось! Все разжевано, благодарю!
51. Ko1t 342 01.08.19 12:12 Сейчас в теме
(50) Спасибо! :)
52. skyboy13 13 06.09.19 17:46 Сейчас в теме
А на автоматическое обновление таблицы в регламентных задачах ее заточить можно?
53. Ko1t 342 08.09.19 11:23 Сейчас в теме
(52) возможно для таких задач лучше подойдет такое решение как по ссылке https://infostart.ru/public/805071/ (хотя я сам лично пока его не изучал досконально)
54. Cthulhu 1 09.10.19 13:55 Сейчас в теме
(53) не т.е. если оттуда аккуратно "дернуть" блок авторизации и заменить в этом решении - то его можно будет использовать для регламентных заданий - я правильно понимаю?..
55. Ko1t 342 12.10.19 11:07 Сейчас в теме
(54) Для регламентных обработчиков, в теории (я не пробовал), я полагаю также можно использовать и OAuth 2.0 (именно его я использую в моей публикации).
Сценарий при этом может быть такой:
1. Интерактивно: Получаем Код доступа (требуется ручной ввод данных)
2. Автоматически: Получаем и сохраняем access_token и refresh_token на основании Кода доступа
3. Автоматически: По расписанию: Выполняем необходимую обработку данных в гугл таблицах, при этом контролируя время жизни access_token.
4. Автоматически: При окончании срока действия: Обновляем access_token используя refresh_token
5. Автоматически: Если что-то пошло не так: Отправляем оповещение на почту ответственному за процесс, чтобы он вмешался интерактивно, и например заново запросил Код доступа.
6. Интерактивно: Если требуется: Переходим к Шаг-1.
56. Cthulhu 1 12.10.19 11:19 Сейчас в теме
(55) о. т.е. стартовое получение рефреш-токена дает возможность в дальнейшем в любое время (без повторного диалогового логина) программно получать свежий токен и с ним обновлять целевую гугл-таблицу, да? пожалуй, так и бум делать...
а переноса форматирования нет - я правильно понимаю?.. наверное, оно и понятно - там нешуточное ковыряние в api команд подразумевается - поэтому, да?..
и - спасибо огромное, очень толковое решение!
...
57. Ko1t 342 12.10.19 11:26 Сейчас в теме
(56)
о. т.е. стартовое получение рефреш-токена дает возможность в дальнейшем в любое время (без повторного диалогового логина) программно получать свежий токен и с ним обновлять целевую гугл-таблицу, да?

Да. Именно так. Полагаю всё должно заработать!
p.s.
Спасибо за оценку!
58. gdu199 25 26.10.19 18:46 Сейчас в теме
Можно ли сделать запись только определенных ячеек, чтобы не затереть работу, которую выполняют пользователи параллельно вручную?
61. Ko1t 342 11.11.19 20:26 Сейчас в теме
(58) Запись только определенных ячеек сделать можно. По ссылке можно посмотреть примеры как:
https://developers.google.com/sheets/api/samples/writing
59. Cthulhu 1 02.11.19 13:24 Сейчас в теме
помощи прошу опять.
приклеиваю к скачанному консольку управления доступом к файлу. ну как консольку. список прав получить, у юзера права забрать, юзеру (по указанному емылу) право выдать, права перезаписать (откорректировать)...
список получаю без проблем (GET-ом)
код:

Удаляю тоже без проблем (по ID, полученному в соотв.параметпе permissions соотв.пользователя, см.предыдущий фрагмент):
код

------
А вот с созданием - лбом об стену...
простынка

и хоть убейся:
ответ

прим.: в scope уже добавил https://www.googleapis.com/auth/drive т.к. без него не работает permissions в goole drive api v3
60. Cthulhu 1 08.11.19 13:42 Сейчас в теме
(59) спасибо всем, решено добавлением в заголовок описания:
Заголовки.Вставить( "Content-Type", "application/json" );
Ko1t; starik-2005; +2 Ответить
62. Cthulhu 1 13.11.19 14:26 Сейчас в теме
(60) прим.: и - кстати, во все заголовки запросов, в которых тело json-истое - впиндюрил явно этот параметр, дабы неповадно было исполнителю путаться из-за своих перекосов в распознавании типов по формату...
63. dityaanime 05.12.19 22:28 Сейчас в теме
Очень годная статья!
Автор молодец!
64. Ko1t 342 06.12.19 18:22 Сейчас в теме
(63) Спасибо!
65. пользователь 16.03.20 13:51
Сообщение было скрыто модератором.
...
66. request4t 16.03.20 15:07 Сейчас в теме
Здравствуйте.

Скачал вашу обработку.

В конфигураторе ругается на:
Функция ПолучитьIDФайлаGoogleDocs(URLGoogleTable) Экспорт
Процедура аили функция не определена (СтрНайти)

При открытии ругается:
Переменная не определена (НаправлениеПоиска)
67. Ko1t 342 18.03.20 23:38 Сейчас в теме
(66) Доброго времени суток, на какой версии платформы вы открываете обработку?
68. request4t 19.03.20 16:09 Сейчас в теме
(67)

Доброго.

8.3.13.1513
69. Ko1t 342 19.03.20 18:41 Сейчас в теме
(68)
Добрый день, я ещё раз проверил у себя:
Платформа: 8.3.16.1063, Режим совместимости конфигурации: Версия 8.3.8 - у меня ошибки нет!
Предположу, что вы открываете обработку в конфигурации которая работает в режиме совместимости.
Делаю такой вывод на основании синтаксис помощника:
СтрНайти (StrFind)
Синтаксис:
СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>)
...
Использование в версии:
Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).


У вас включен режим совместимости? Если да, с какой версией?
70. Vix 28 07.05.20 22:47 Сейчас в теме
(66)Замените СтрНайти на обычную Найти
71. Ko1t 342 08.05.20 15:44 Сейчас в теме
(70) хм.. зачем?
72. Vix 28 09.05.20 15:14 Сейчас в теме
(71) Скорее всего режим совместимости стоит 8.3.5 и минимум, что можно сделать довольствоваться функцией "Найти", но при условии, что использует СтрНайти, первые два параметра СтрНайти(Строка,ПодстрокаПоиска). По хорошему нужно переходить уже на новую платформу выше 8.3.12, правда стабильную, о стабильных оч. много тем на форуме, и везде найдутся минусы))
73. Vix 28 09.05.20 15:32 Сейчас в теме
Автору плюс, разработка стоящая видимо, думаю в дальнейшем я смогу эту идею применить при хранении и раздачи ключей каждому пользователю, для работы, не с типовой конфигурацией 1С
74. script 127 01.06.20 19:51 Сейчас в теме
Добавьте в описание, что для работы чтения таблицы необходимо дать право Google Sheets API т.е. включить его в проект Google API.
75. Ko1t 342 02.06.20 18:25 Сейчас в теме
(74) Добрый день! Я не уверен на 100 %, но не помню что надо как-то специально "дать право Google Sheets API" в проекте Google API, но допускаю что я могу что-то упустить из вида, так прошло досточно много времени с момента публикации.

Буду вам признателен, если вы укажите точно где и как это право необходимо "дать".

В описании к моей статье есть снимок экрана с запросом на доступ к нужным данным, и по-моему, когда я писал статью и тестировал обработку, не требовалось ничего более кроме как ответить утвердительно на запрос доступа как на картинке по ссылке https://prnt.sc/ssfnfu
89. mity1982 11.08.21 13:06 Сейчас в теме
(75) В ответ на попытку получить spreadsheet получаем ответ
{
"error": {
"code": 403,
"message": "Google Sheets API has not been used in project ############ before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?########## then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developers console API activation",
"url": "https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?##########"
}
]
},
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "SERVICE_DISABLED",
"domain": "googleapis.com",
"metadata": {
"consumer": "#########",
"service": "sheets.googleapis.com"
}
}
]
}
}

По указанной в ответе ссылке идем на: https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?########## Нажимаем кнопку Enable. На прикрепленной картинке кнопка Enable на месте Manage, я ее уже нажал :).
Прикрепленные файлы:
76. Артано 744 25.06.20 06:33 Сейчас в теме
Видимо имеется ввиду, что явным образом не написано, что для вашего приложения нужно создать проект или добавить его к существующему
77. TrashMaster 196 10.08.20 20:38 Сейчас в теме
есть косячок в вычислении диапазона - только 676 колонок

&НаСервере
Процедура ИницилизироватьМассивБукв()
	МассивБуквСтолбцов = Новый СписокЗначений;
	МассивБуквСтолбцов.Добавить("A");
	МассивБуквСтолбцов.Добавить("B");
	МассивБуквСтолбцов.Добавить("C");
	МассивБуквСтолбцов.Добавить("D");
	МассивБуквСтолбцов.Добавить("E");
	МассивБуквСтолбцов.Добавить("F");
	МассивБуквСтолбцов.Добавить("G");
	МассивБуквСтолбцов.Добавить("H");
	МассивБуквСтолбцов.Добавить("I");
	МассивБуквСтолбцов.Добавить("J");
	МассивБуквСтолбцов.Добавить("K");
	МассивБуквСтолбцов.Добавить("L");
	МассивБуквСтолбцов.Добавить("M");
	МассивБуквСтолбцов.Добавить("N");
	МассивБуквСтолбцов.Добавить("O");
	МассивБуквСтолбцов.Добавить("P");
	МассивБуквСтолбцов.Добавить("Q");
	МассивБуквСтолбцов.Добавить("R");
	МассивБуквСтолбцов.Добавить("S");
	МассивБуквСтолбцов.Добавить("T");
	МассивБуквСтолбцов.Добавить("U");
	МассивБуквСтолбцов.Добавить("V");
	МассивБуквСтолбцов.Добавить("W");
	МассивБуквСтолбцов.Добавить("X");
	МассивБуквСтолбцов.Добавить("Y");
	МассивБуквСтолбцов.Добавить("Z");
КонецПроцедуры


&НаКлиенте
Функция ПолучитьБуквуПоНомеру(Номер)
	Если Номер <= МассивБуквСтолбцов.Количество() Тогда
		Возврат МассивБуквСтолбцов[Номер-1].Значение;
	КонецЕсли;
	
	//Предполагаем что макс. кол-во столбоц не может быть больше определенного
	КолВоБукв = МассивБуквСтолбцов.Количество(); 
	МаксСтолбцов = КолВоБукв*КолВоБукв; 
	Если Номер > МаксСтолбцов Тогда
		ПоказатьПредупреждение(,"Не предусмотрена работа с таблицами у которых столбцов больше чем: "+МаксСтолбцов);
		Возврат "ZZ";
	КонецЕсли;
	
	НомерПервойБуквы = Цел(Номер/КолВоБукв);
	Смещение = Номер - (НомерПервойБуквы*КолВоБукв);
	
	Буква = ПолучитьБуквуПоНомеру(НомерПервойБуквы);
	Буква = Буква+ПолучитьБуквуПоНомеру(Смещение);
	
	Возврат Буква;
КонецФункции
Показать


исправление

Функция ПолучитьБуквуПоНомеру(НомерКолонки)
	Результат = "";
	Остаток = НомерКолонки;
	пока Остаток > 0 цикл
		Смещение = (Остаток - 1)%26;
		Результат = Символ(65 + Смещение) + Результат;
		Остаток = Цел((Остаток - Смещение)/26);
	конеццикла;
	Возврат Результат;
КонецФункции
Показать
78. request4t 06.10.20 14:20 Сейчас в теме
здравствуйте.

при получении токена ошибка

{
"error": "invalid_grant",
"error_description": "Bad Request"
}

кто может помочь?
79. Ko1t 342 15.11.20 21:42 Сейчас в теме
(78)
"error": "invalid_grant",
"error_description": "Bad Request"

доброго времени суток! не знаю актуально ли ещё...
Если попросить помощи у гугл, то получим следующий ответ:
https://groups.google.com/g/google-doubleclick-for-advertisers-api/c/FZo-6ZZGeyQ?pli=1
There are 2 common problems that cause invalid_grant errors:

1. Your server's clock is out of sync with NTP
2. You've exceeded the refresh token limit
80. request4t 18.11.20 16:32 Сейчас в теме
(79)
здравствуйте. уже нет, но спасибо за ответ.
112. aalexanderbn 02.07.23 17:48 Сейчас в теме
(78)
Подскажите пожалуйста с чем была связана ошибка и как ее решили, у меня такая же. Не смог найти решение.
81. Gold_Hunter 6 20.11.20 19:09 Сейчас в теме
Добрый день!
При попытке запросить код доступа, возникает такая ошибка:

{ВнешняяОбработка.ЧтениеЗаписьИЗGoogleSheet.Форма.Форма.Форма(188)}: Ошибка при вызове метода контекста (ПерейтиПоНавигационнойСсылке)
ПерейтиПоНавигационнойСсылке(URL);
по причине:
Не удалось перейти по ссылке "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=515731690390-vh9ccjrl4pj9qssbec4042ce1ttn02uo.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&access_type=offline&scope=https://www.googleapis.com/auth/drive.readonly+https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/spreadsheets" по причине: Неверно задана навигационная ссылка.
82. request4t 28.04.21 15:03 Сейчас в теме
подскажите кто знает: возможно ли из 1С выгружать в таблицу изображения товаров?
83. ip0593 20 14.05.21 22:14 Сейчас в теме
возможно ли грузить только определенные ячейки с 1С в гугл таблицу? ведь там формулы введены в гугл таблице.
84. Bor_ka 98 18.05.21 16:34 Сейчас в теме
Добрый день,
Отличное решение, удалось подключиться, но примерно через час перестало работать.
Да, ключ не обновлял.
refresh_token не сохранил
Тогда решил восстановить КодДоступа, но уже после этого шага access_token получить не удается.

Ошибка 1С,
Ошибки при получении токена: Ошибка при выполнении HTTP запроса

Что делаю не так? Возможно, для повторного получения access_token, запрос должен быть немного другим?
85. Bor_ka 98 19.05.21 12:34 Сейчас в теме
(84) Уже разобрался! Моя ошибка! Все работает как нужно!
86. sys1c 01.07.21 05:19 Сейчас в теме
(79) добрый день.


в настройках нету Application type - Other
какой выбирать? пробовал WEB- не работает
unknown181538; +1 Ответить
87. sys1c 01.07.21 06:31 Сейчас в теме
(79) все получилось, указал Десктоп.
но, из 1с в Гугл, и из Гугл в 1с, не переносится ничего кроме текста (
ни форматирование колонок, ни обрамление шапки, картинки, только текст
88. manlak 77 11.08.21 09:52 Сейчас в теме
Большое спасибо за обработку! Все супер и работает
90. L3raa 04.10.21 15:07 Сейчас в теме
Есть ли возможность загружать pdf файлы?
91. Zabba 10.12.21 10:03 Сейчас в теме
Спасибо большое!
Отличная обработка в открытом доступе!
92. Pim 177 07.02.22 00:28 Сейчас в теме
Подскажите, есть возможность записывать в гугл-таблицу без авторизации через сайт?
Или эмулировать авторизацию программно?
Хочу по регламентному заданию отправлять данные.
93. Ko1t 342 11.02.22 14:37 Сейчас в теме
(92) Я лично не занимался решением такой задачи.
94. ip0593 20 25.03.22 17:12 Сейчас в теме
при запросе Кода доступа

Ошибка авторизации
Ошибка 400: invalid_request

Невозможно выполнить вход в приложение, поскольку оно не отвечает правилам Google в отношении безопасности OAuth 2.0.

Вы можете сообщить разработчику, что приложение не соответствует одному или нескольким правилам проверки Google.
Параметры запроса
Материалы в этом разделе предоставлены разработчиком приложения и не проверены компанией Google.
Если вы разработчик приложения, убедитесь, что эти параметры запроса соответствуют правилам Google.
redirect_uri: urn:ietf:wg:oauth:2.0:oob

как быть?
96. Tony_Medvedos 11.05.22 13:05 Сейчас в теме
(94)
С февраля 2022 года они отключили данную возможность
Повышение безопасности
Как временное решение - "&redirect_uri=http://localhost:1";
Но тогда нужно вручную копировать код доступа и вставлять в обработку
Также здесь есть решение для Python
Redirect_Uri error

Ну и как я понимаю этот код доступа нужно получить только 1 раз
95. Ko1t 342 05.04.22 12:00 Сейчас в теме
Судя по всему надо "шаматить" с настройками аккаунта гугл под которым вы подключаетесь
97. IrinaMakatukha 26.07.22 18:43 Сейчас в теме
Скажите пожалуйста , Прочитать таблицу - работает., а вот Записать таблицу выдает ошибку (при получении кода доступа там все права даю)
Что это значит ?

<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<span id=logo aria-label=Google></span>
<p>404. <ins>That’s an error.</ins>
<p>The requested URL
/v4/spreadsheets/1kQnhnS1ijpVV0UKX70RbtIT4jd_It5Gkq-XarDVRBZ0/values/06/2022!A1:A1?valueInputOption=USER_ENTERED
was not found on this server. <ins>That’s all we know.</ins>
98. пользователь 23.08.22 11:17
Сообщение было скрыто модератором.
...
Оставьте свое сообщение