Загрузка google таблицы через API

13.01.24

Интеграция - WEB-интеграция

Загрузим google таблицу в таблицу значений с использованием API google.

Для получения данных по API нужно получить ключ

 
Получение API key

Переходим в консоль google для получения API

console.cloud.google.com

Выбираем "Select a project" 

Нажимаем NEW PROJECT

Заполняем нажимаем create

Переходим в APIs

Жмем enable APIs

в поиске вбиваем sheets жмем интер. Жмем google sheets API

Жмем enable

Слева жмем Credentials

Жмем create Credentials, выбираем API key

Будет создан Api. жмем его

выбираем restrict key, выпадающем списке ищем sheets. Жмем save

API key готов

Для примера я создал таблицу

 

 

В ссылке на таблицу наc интересует id таблицы

 

 

Теперь делаем Get-запрос к сервису google

 

 

Функция ПолучитьДанныеИзГуглТаблицы(ИдТаблицы,НазваниеЛиста,КлючАПИ) 
	
	АдресРесурса = "sheets.googleapis.com";        
	АдресНужнойСтраницы = "/v4/spreadsheets/"+ИдТаблицы+"/values/"+НазваниеЛиста+"?key="+КлючАПИ;
	
	Соединение = Новый HTTPСоединение(АдресРесурса,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
	Запрос = Новый HTTPЗапрос(АдресНужнойСтраницы);
	Ответ = Соединение.Получить(Запрос);
	
	Если Ответ.КодСостояния = 200 Тогда	 	
		Соединение = Новый HTTPСоединение(АдресРесурса,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
		Запрос = Новый HTTPЗапрос(АдресНужнойСтраницы);	
		Ответ = Соединение.Получить(Запрос);
		ВходящаяСтрока = Ответ.ПолучитьТелоКакСтроку(); 
		Возврат ВходящаяСтрока;
	Иначе
	    Сообщение = Новый СообщениеПользователю;
	    Сообщение.Текст = "не получен. Статус-код " + Ответ.КодСостояния;
	    Сообщение.Сообщить();
	    Возврат "";
	КонецЕсли;
	
КонецФункции

СтрокаJSON = ПолучитьДанныеИзГуглТаблицы("12345678912334567","Лист1","AIz1111111111111111111111Q");

 

Получаем строку json

 

 

{
  "range": "'Лист1'!A1:Z1000",
  "majorDimension": "ROWS",
  "values": [
    [
      "Товар",
      "Кол-во",
      "цена",
      "Годность"
    ],
    [
      "груши",
      "12",
      "14,55",
      "18.12.2023"
    ],
    [
      "яблоки",
      "123",
      "15,74",
      "21.12.2023"
    ],
    [
      "сливы",
      "41",
      "17,32",
      "25.12.2023"
    ]
  ]
}

 

Преобразуем строку JSON в Таблицу значений

 

 

СтрокаJSON = ПолучитьДанныеИзГуглТаблицы("12345678912334567","Лист1","AIz1111111111111111111111Q");
Если ЗначениеЗаполнено(СтрокаJSON) Тогда
	МассивСтрок = ИзJSON(СтрокаJSON).values;  
	ТЗ = ПолучитьТЗ(МассивСтрок);  
КонецЕсли;

Функция ИзJSON(СтрокаJSON) Экспорт
	ТекТоварыJSON = Новый ЧтениеJSON ;
	ТекТоварыJSON.УстановитьСтроку(СтрокаJSON);
	Возврат ПрочитатьJSON(ТекТоварыJSON);
КонецФункции

Функция ПолучитьТЗ(МассивСтрок)  
	
	ТЗ = Новый ТаблицаЗначений;	      
	ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(50)));
	ТЗ.Колонки.Добавить("Количетсво", Новый ОписаниеТипов("Число", ,Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный)));     
	ТЗ.Колонки.Добавить("Цена",	Новый ОписаниеТипов("Число", ,Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный)));
	ТЗ.Колонки.Добавить("Годность",	Новый ОписаниеТипов("Дата"));        
	
	Первая = Истина;
	Для Каждого Стр из МассивСтрок Цикл     
		Если Первая Или Стр[0]="" Тогда  
			Первая = Ложь;
			Продолжить;	
		КонецЕсли;	
		НовСтр = ТЗ.Добавить();
		НовСтр.Товар = Стр[0];    
		НовСтр.Количетсво = Стр[1];
		НовСтр.Цена = Стр[2];     
		НовСтр.Годность = Стр[3]+" 00:00:00";
	КонецЦикла;
	
	Возврат ТЗ;
КонецФункции

 

В результате получаем Таблицу значений

 

 

Тестировал: 

  • 1С:Комплексная автоматизация 2 (2.4.13.209)
  • Платформа 1С:Предприятие 8.3 (8.3.19.1467)

google sheets таблицы api key

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16018    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18049    10    15    

14

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    85241    26    51    

50

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

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

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

22656 руб.

25.05.2021    12948    32    8    

12

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    89513    163    217    

320
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ClickUp 684 26.12.23 12:49 Сейчас в теме
2. Antoska 17 26.12.23 15:58 Сейчас в теме
3. John_d 5425 26.12.23 16:32 Сейчас в теме
(2) можно обращаться к google таблицам без api получая в ответ csv с разделителем запятая.
У этого способа есть минусы, если в таблице есть запятые, то колонки сбиваются
5. Antoska 17 26.12.23 17:35 Сейчас в теме
(3) Понятно. Там через файл обмен. Забыл. Увидел практически то же название у новой публикации, что и у старой, потому среагировал.
4. akor77 197 26.12.23 17:17 Сейчас в теме
А вы можете в таблицах Google сделать синхронизацию со списком документов в 1С?
Есть книга с листами, один лист - один календарный месяц.
При создании нового документа, или после изменения, данный документ отражается новой строкой на соответствующем месяцу листе.
При изменении документа или пометке удаления и т.п. отразить данные изменения на листе.
На листе Google таблицы сделать изменения (подобие флага, единички) и по изменении оповестить 1С и сделать отметку в самом документе.
Слабо?
6. John_d 5425 26.12.23 18:07 Сейчас в теме
(4) Да, это интересно. Возможно сделаю это в следующей статье.
7. akor77 197 26.12.23 18:45 Сейчас в теме
(6) Я перечитал свой комментарий, хочу уточнить, что требуется изначально создавать документы в 1С, например, реализации товаров.
После сохранения/изменения документа в 1С данные о нём необходимо записать/обновить на листе таблицы Google.
Кроме того, задача осложнена тем, что на данных листах имеются пользовательские формулы в колонках правее от загружаемых на страницу данных, их нельзя затереть, они создаются пользователем. Такие листы делаются из одного шаблона, там примерно заготовлено X строк с формулами.
Кладовщики, собрав заказ и загрузив в машину на доставку, делают в определенной колонке таблицы пометку которая из листа должна попасть обратно в документ 1С, например, проставить флаг "отгружено".
При этом, добавлять новые записи на листе таблицы Google надо новой строкой, а изменять в имеющейся строке (в которую была сделана изначальная запись после создания документа) т.к. на других листах будут формулы, которые будут привязаны к физическому номеру строки.
12. ixijixi 1803 27.12.23 09:51 Сейчас в теме
(7) Любопытно у вас бизнес-процессы организованы... А АРМ кладовщика в 1С не проще сделать?
13. akor77 197 27.12.23 10:30 Сейчас в теме
(12) Вообще можно, но ... )))) мы поняли друг-друга )
14. akor77 197 27.12.23 14:34 Сейчас в теме
(12) ещё добавлю, пользователям необходим функционал Google-таблиц. они создают свои таблицы на новых листах с формулами, где подбирают заказы по "временным воротам", автомобилям и т.д.
Они могут на ходу поменять формулы, структуру таблиц и т.д. - полная свобода действий для творчества без оков!
8. John_d 5425 26.12.23 21:58 Сейчас в теме
(7) Прочитать изменения, которые происходят в таблице google очень просто можно воспользоваться функцией ПолучитьДанныеИзГуглТаблицы (из статьи).
Вызывать ее регламентным заданием каждую минуту.
В 1с создать регистр сведений с такими же колонками как в гугл таблице.
Сравнивать в запросе этот регистр с Таблицей значений, которую получаем функцией ПолучитьТЗ (из статьи). Даже если там будет 10000 строк мы найдем именно те в которых были изменения.
Записать эти записи в регистр сведений и если нужно в документ.
9. akor77 197 26.12.23 23:13 Сейчас в теме
(8)Спасибо! Значит, надо будет постоянно выгружать весь диапазон ячеек Google-таблицы и делать запрос к базе данных 1С для поиска отличий. Думаю, этот вариант тяжеловат, но, я так понимаю, другого варианта Вы не видите?
10. John_d 5425 26.12.23 23:25 Сейчас в теме
(9) Такой вариант у меня работает в продакшен. Мне кажется других вариантов тут нет.
Но остается еще записать изменения из 1с в google таблицу.
15. aleksey2 86 27.12.23 15:29 Сейчас в теме
(10) зачем тянуть все строки, когда можно только там где единички. когда мы меняем строку в столбец А пишем 1.
16. John_d 5425 27.12.23 17:56 Сейчас в теме
(15) в итоге больше проблем будет.
Забрать все равно придется все и делать фильтр уже в 1с, а потом еще нужно убрать 1 из google из обработанных строк.
11. akor77 197 27.12.23 00:23 Сейчас в теме
17. xlmel 28.12.23 10:15 Сейчас в теме
Вы можете написать скрипт на Google Apps Script, в котором провести все необходимые манипуляции с данными и затем вернуть уже отфильтрованные строки. Этот скрипт публикуете как web-приложение. Если Вы можете работать через API c Google Sheets, то не будет никаких проблем с запуском скрипта. В итоге получите только те строки, в которых 1, и при этом, по факту того, что обмен выполнен, сразу сможете убрать 1, чтобы при следующем обмене не тянуть эти строки повторно. А если нет строк с 1, то нет необходимости тянуть весь массив данных.
Дмитрий74Чел; +1 Ответить
18. akor77 197 22.01.24 19:29 Сейчас в теме
(17)Я решил данную задачу. Но мне хотелось узнать, есть ли кто уже выполнил данную реализацию. Пока реализаций я не встречал. То, что имеется в на просторах интернет меня не устраивало. В итоге я реализовал свой механизм регистрации изменённых данных и отправки только изменённых данных из 1С в Google-Таблицу и обратное получение только изменённых данных. Рабочая база имела очень высокую нагрузку и закачивать в 1С всю Google-Таблицу и сравнивать запросом - это недопустимая роскошь.
19. xlmel 23.01.24 08:58 Сейчас в теме
(18) Реализацию чего? Скрипта, который считает таблицу? Я не эксперт в GAS, может плохо сделал, у меня выглядит так:

function doGet(e) {
const templateDocId = e.parameter.templateDocId;
const sheetName = e.parameter.sheetName;
if(templateDocId == NaN || String(templateDocId) == "") {
return createResponse(400, "Bad templateDocId");
}

return createResponse(200, getDocumentStructure(templateDocId, sheetName));
}

function getDocumentStructure(docId, sheetName) {
var ss = SpreadsheetApp.openById(docId);
response = [];

var sheet = ss.getSheetByName(sheetName);
response.push({
index: 0,
sheetName: sheet.getName(),
values: sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues()
});

return response;
}

function createResponse(status = 400, data = "", id = "", responseType = "HTTP") {
response = {
status: status,
data: data,
docId: id
};

const stringResponse = JSON.stringify(response);

return ContentService.createTextOutput(stringResponse).setMimeType(ContentService.MimeType.JSON);
}

Первая функция - метод для обработки GET-запроса. ID таблицы и имя листа передается в параметрах запроса.
Вторая - получает данные с листа. Третья - возвращает их. Я считываю все данные, но можно и сделать проверку.
20. akor77 197 23.01.24 11:55 Сейчас в теме
(19) В моей реализации я делал POST-запрос из 1С, там сразу велись передача и приём одним запросом, потом на стороне 1С контроль что всё отправленное записалось таблицу, полученное отразилось в документах.
Оставьте свое сообщение