Внимание! В обработке использовано 3 функции из БСП: ОбщегоНазначенияКлиентСервер.СообщитьПользователю() СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку() СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()
Обновление
18.05.18. Версия обработки 1.0.2.
Добавлена функция "Удалить строки". Демонстрация возможность удаления строк из таблицы Google указав определенный диапазон индексов строк для удаления.
Функции
-
Авторизация в google используя протокол OAuth 2.0
-
Запрос для получения authorization code ("Код доступа").
-
Запрос для получения access_token и refresh token.
-
Запрос для получения access_token используя refresh token.
-
-
Взаимодействие из 1С с Google Sheets.
-
Получение списка листов таблицы гугл
-
Чтение данных из таблицы гугл и заполнение табличного документа 1С.
-
Запись данных из табличного документа 1С в таблицу гугл.
-
-
Дополнительно
-
Сохранение параметров подключения и списка листов таблицы в данных формы.
-
Условное представление элементов в зависимости от срока действия токена.
-
Формирование ссылки для перехода к выбранному листу таблицы при выборе названия листа из списка.
-
Используемые источники
-
В качестве основы были использованы обработки для обычных форм разработанные пользователем: echo77.
-
Некоторая информация была получена из статей на infostart.ru.:
-
Информация с сайта гугл:
Инструкция
Авторизация в google
Получить client ID and client secret
В качестве основы были использованы обработки для обычных форм разработанные пользователем: echo77.
Некоторая информация была получена из статей на infostart.ru.:
Информация с сайта гугл:
Авторизация в 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.
Под спойлером процедура демонстрирующая удаление строк:
Спасибо за такие возможности! Не скачивал (эту версию), но уверен, что хорошая, годная разработка. Пользователям 1С теперь доступны чтение/запись гугл таблиц, и это прекрасно.
(1) И Вам спасибо за оценку 🙂
Вмемориз
Хорошая работа. Спасибо. Актуальная вещь
Круто, умница
Артано Майаров, Евгений Сахненко, Вадим Скакун, спасибо коллеги 🙂
Респект! Очень пригодится!
(7) Спасибо, Андрей!
Не читал, но + )))
(9) Спасибо, 🙂
Пробежался глазами — годный инструмент но не проверялеще. +
Smartsheet бы еще!
(11) Заранее спасибо 🙂
(12) Smartsheet судя по всему классная штука, но для меня на данный момент не актуальная 🙂
Спасибо большое. Работает. Только не могу разобраться как удалять строки.
(15) Пожалуйста ).
https://developers.google.com/sheets/api/samples/rowcolumn#delete_rows_or_columns
Ссылка на пример запроса по удалению строк или колонок:
(16) Да пытаюсь разобраться, только у гугла для меня один ответ «»message»: «Invalid JSON payload received. Unknown name «requests»: Cannot find field.»,»
(18) Круть. Еще раз спасибо большое.
нравятся мне проекты ради проектов 🙂
(20) как показывает практика, полученный в процессе опыт конвертируется в итоге в материальные и не только блага 🙂
Подскажите:
1. Код обработки открытый?
2. Реализована ли возможность формировать многостраничную гугл таблицу?
3. Можно ли из обработки прописать пользователей (гугл), которым будет доступна созданная гугл таблица?
(24)
> Да
> Нет
> Нет
p.s.
Все что может обработка изложено в описании со скриншотами 🙂
Если считывать публичную таблицу обязательно ли нужны токены доступа?
(26)
Данная обработка при каждого обращении к данным передает в заголовке токен доступа.
Какая авторизация нужна для чтения публичных и приватных данных, а также ответ на ваш вопрос можно получить по ссылке:https://developers.google.com/sheets/api/guides/authorizing
(26)
https://developers.google.com/sheets/api/guides/authorizing
Данная обработка при каждом обращении к данным передает токен доступа.
Я не проверял как будет происходить доступ к публичным данным, но почитать об этом можно по ссылке:
Запустил Вашу обработку. Не могу получить листы моей гугл-таблицы. Ошибка:
{
«error»: {
«code»: 403,
«message»: «Request had insufficient authentication scopes.»,
«status»: «PERMISSION_DENIED»
}
}
Судя по описанию жалуется на способ идентификации. Непонятно… Может сталкивались с этой ошибкой?
(31)
Добрый день, судя по ошибке есть какая-то проблема с токеном доступа который вы используете.
Используемый вами токен доступа не позволяет обращаться к запрашиваемым данным.
Я лично с такой ошибкой не сталкивался.
Моя рекомендация будет, заново проделать настройки как это написано в разделе «Инструкция/Авторизация в google», сверяясь с приведенными скринами экрана.
Господа, еще один трабл. Я при каждом изменении остатков обновляю гугл-таблицу, но с определенного момента у клиентов в гугл-таблице перестали обновляться данные. У одного из них я почистил кеш и куки — все заработало. Но это не выход — клиентов много и всем объяснять нет возможности, писать инструкции без толку. Предполагаю что надо как-то снести все версии изменений гугл-таблицы и оставить только последнюю, актуальную версию, но не могу найти где это делается. Может кто-то сталкивался с такой проблемой?
(33)
https://productforums.google.com/forum/#!topic/docs/h_NWUzDL3Po
Добрый день. Я пробовал искать решения по очистке истории…
В основном сталкивался с такими ответами:
Т.е. удалить историю нельзя программными способами.
История очищается только если делать копию файла.
(31) «Request had insufficient authentication scopes» не задан ни один параметр scopes очевидно.
у кого есть рабочий пример как получать данные не диапазонами, а по отбору на значения в колонках ?
например, получить все строки со значением в колонке А1 = 1.
можно ли получить например только колонки А и С ?
а для чего такая сложная схема с идентификацией ? можно через постоянный API-ключ получать доступ:
https://sheets.googleapis.com/v4/spreadsheets/idтаблицы/?key=АпиКлюч&includeGridData=true
(37)
В рамках данной обработки реализован рекомендуемый Гуглом метод аутентификации OAuth 2.0 описанный по ссылке:https://developers.google.com/identity/protocols/OAuth2
Я не уверен что правильно понял, что вы имеете ввиду, но мне было бы интересно узнать подробнее.
Сбросьте пжл. ссылки где можно изучить детали про такой способ подключения? Может быть он более простой, но менее безопасный?
(38)
я же написал запрос, которым можно получить доступ к опубликованной по ссылке таблице, зная ее id и свой apikey.
вводите в этом запросе id таблицы, api-ключ гугла и получаете ее в json.
Лично мне не требовалось вносить в нее изменения, только читать данные, поэтому я дальше не копал.
(36)
например, получить все строки со значением в колонке А1 = 1.
Судя повсему используя текущий API это не получиться сделать. Доступны только следующие возможности фильтации при запросе данных:
https://developers.google.com/sheets/api/reference/rest/v4/DataFilter
Filters
Что-то похожее можно сделать для данных отображаемых при просмотре используя
Возможно если программно выполнить SetBasicFilterRequest и затем чтение из таблицы, будут прочитанных отфильтрованные данные… надо пробовать.
Судя по всему, что используя batchGetByDataFilter, можно задать отдельные dataFilters[], и получить только колонки А и С
(40)
пробовал, через batchupdate ставил фильтры — не работает, возвращает всю таблицу.
Как-то очень печально такое от гугла видеть.
Пришлось через запросы «select…» к таблице получать нужные данные
«https://docs.google.com/spreadsheets/d/id_таблицы/gviz/tq?tqx=out:html&tq=select*»
выгрузить в csv: «tqx=out:csv»
работает только для опубликованных «по ссылке» таблиц
Еще вопрос, получалось ли у кого-то выгрузить не публичный файл типа «таблица Гугл» (доступ открыт пользователю, публичной ссылки нет) через 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) Добрый день.
Да, действительно в обработке использовано 3 функции, которые входят в состав БСП:
ОбщегоНазначенияКлиентСервер.СообщитьПользователю()
СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку()
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()
Как мне кажется, основные сценарии использования данной обработки предполагают наличие данных функций в составе конфигурации, из которой данная обработка запускается.
В противном случае, мне кажеться исправление проблемы занимает относительно мало времени.
При этом внедрение БСП не требуетсся, а требуется просто замена в коде конфигураций всех вызывов обозначенных функций на свои локальные функции. Понять из названия и передаваемых параметров что делают данные функции, как мне кажется не составляет труда.
Но да, я согласен что следует упоминуть в описание обработки данный нюанс, что я и сделаю в ближайшее время.
Добавил в избранное…
https://infostart.ru/public/66842/
меня заинтерисовало — переходим на БП 3.0
на КА 1.1 у меня была допиленная обработка
Может кто-то находил подобное на УФ?
(45) Добрый день, если я правильно понял что вам надо, то это функционал из БСП
https://its.1c.ru/db/bsp302doc#content:1867:1
Программа предоставляет возможность загрузки табличных данных из файлов в произвольные списки (справочники) и табличные части документов. Например, для разового переноса нормативно-справочной информации при переходе с других программ, или для регулярной загрузки данных в табличные части при заполнении документов.
Можно легко расширять варианты загрузок без вмешательства в конфигурацию через подключение внешних обработок. Подробнее см. раздел документации Дополнительные отчеты и обработки.
Загрузка данных из файла:
■ позволяет задействовать для ввода данных возможности других программ (например, можно вводить данные в Excel, а потом загрузить их в программу);
■ не требует для ввода данных в файл наличия на компьютере программы 1С:Предприятие, поэтому ввод данных в такой файл может осуществляться в удаленных офисах, небольших складах, точках розничных продаж, т.е. там, где может не быть возможности наладить полноценную работу программы 1С:Предприятие (например, компьютер уже устарел для работы с данной программой);
■ позволяет подключить к вводу данных дополнительные кадры. Ввод данных во внешний файл требует только соблюдения структуры таблицы, а также знания правил ввода в той программе, для которой он предназначен, например, Excel, поэтому может быть поручен сотрудникам, которые имеют только начальные навыки работы с компьютером.
Доступ к данному материалу ограничен
Добавила в избранное. Однажды ненастным днем оно мне пригодится!
(48) угу я точно также поступаю
Очень пригодилось! Все разжевано, благодарю!
(50) Спасибо! 🙂
А на автоматическое обновление таблицы в регламентных задачах ее заточить можно?
(52) возможно для таких задач лучше подойдет такое решение как по ссылкеhttps://infostart.ru/public/805071/ (хотя я сам лично пока его не изучал досконально)
(53) не т.е. если оттуда аккуратно «дернуть» блок авторизации и заменить в этом решении — то его можно будет использовать для регламентных заданий — я правильно понимаю?..
(54) Для регламентных обработчиков, в теории (я не пробовал), я полагаю также можно использовать и OAuth 2.0 (именно его я использую в моей публикации).
Сценарий при этом может быть такой:
1. Интерактивно: Получаем Код доступа (требуется ручной ввод данных)
2. Автоматически: Получаем и сохраняем access_token и refresh_token на основании Кода доступа
3. Автоматически: По расписанию: Выполняем необходимую обработку данных в гугл таблицах, при этом контролируя время жизни access_token.
4. Автоматически: При окончании срока действия: Обновляем access_token используя refresh_token
5. Автоматически: Если что-то пошло не так: Отправляем оповещение на почту ответственному за процесс, чтобы он вмешался интерактивно, и например заново запросил Код доступа.
6. Интерактивно: Если требуется: Переходим к Шаг-1.
(55) о. т.е. стартовое получение рефреш-токена дает возможность в дальнейшем в любое время (без повторного диалогового логина) программно получать свежий токен и с ним обновлять целевую гугл-таблицу, да? пожалуй, так и бум делать…
а переноса форматирования нет — я правильно понимаю?.. наверное, оно и понятно — там нешуточное ковыряние в api команд подразумевается — поэтому, да?..
и — спасибо огромное, очень толковое решение!
по существу с аккуратными и конкретными формулировками — сие мне, как
перфекционисту, особо радует глаз и Cortex praefrontalis)
(56)
Да. Именно так. Полагаю всё должно заработать!
p.s.
Спасибо за оценку!
Можно ли сделать запись только определенных ячеек, чтобы не затереть работу, которую выполняют пользователи параллельно вручную?
(59) спасибо всем, решено добавлением в заголовок описания:
(58) Запись только определенных ячеек сделать можно. По ссылке можно посмотреть примеры как:
https://developers.google.com/sheets/api/samples/writing
(60) прим.: и — кстати, во все заголовки запросов, в которых тело json-истое — впиндюрил явно этот параметр, дабы неповадно было исполнителю путаться из-за своих перекосов в распознавании типов по формату…
Очень годная статья!
Автор молодец!
(63) Спасибо!