diff --git a/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl b/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl index 281ebd2cab..7424eb6db3 100644 --- a/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl +++ b/OPI/src/CommonModules/OPI_GoogleSheets/Module.bsl @@ -197,20 +197,19 @@ // Параметры: // Токен - Строка - Токен - token // Книга - Строка - ID книги - spreadsheet -// Лист - Строка - ID листа - sheet // СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data +// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim // // Возвращаемое значение: // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google Функция УстановитьЗначенияЯчеек(Знач Токен , Знач Книга - , Знач Лист , Знач СоответствиеЗначений - , Знач ОсновноеИзмерение = "COLOUMNS") Экспорт + , Знач Лист = "" + , Знач ОсновноеИзмерение = "COLUMNS") Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); - OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений); Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура") @@ -220,7 +219,7 @@ Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate"; - МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение); + МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист); Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED"); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); @@ -233,25 +232,59 @@ // Очищает значение в ячейках // // Параметры: -// Токен - Строка - Токен - token -// Книга - Строка - ID книги - spreadsheet -// Лист - Строка - ID листа - sheet -// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells +// Токен - Строка - Токен - token +// Книга - Строка - ID книги - spreadsheet +// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells +// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // // Возвращаемое значение: // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google -Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач Лист, Знач МассивЯчеек) Экспорт +Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); + OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear"; - Параметры = Новый Структура(); - OPI_Инструменты.ДобавитьПоле("spreadsheetId", Лист , "Строка", Параметры); - OPI_Инструменты.ДобавитьПоле("clearedRanges", МассивЯчеек, "Массив", Параметры); + СформироватьМассивИменЯчеек(МассивЯчеек, Лист); + + Параметры = Новый Структура("ranges", МассивЯчеек); + Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); - Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); + Возврат Ответ; + +КонецФункции + +// Получить значения ячеек +// Получает значения ячеек таблицы +// +// Параметры: +// Токен - Строка - Токен - token +// Книга - Строка - ID книги - spreadsheet +// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения - cells +// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google +Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); + OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); + + Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); + URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet"; + + СформироватьМассивИменЯчеек(МассивЯчеек, Лист); + + Первый = Истина; + Для Каждого Ячейка Из МассивЯчеек Цикл + Разделитель = ?(Первый, "?", "&"); + URL = URL + Разделитель + "ranges=" + Ячейка; + Первый = Ложь; + КонецЦикла; + + Ответ = OPI_Инструменты.Get(URL, , Заголовки); Возврат Ответ; @@ -274,6 +307,14 @@ КонецПроцедуры +Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист) + + Если ЗначениеЗаполнено(Лист) Тогда + Ячейка = "'" + Лист + "'!" + Ячейка; + КонецЕсли; + +КонецПроцедуры + Функция СоздатьЛист(Знач Наименование) OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); @@ -285,13 +326,18 @@ КонецФункции -Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение) +Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист) + + OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); МассивДанных = Новый Массив; Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл ТекущееЗначение = ДанныеЯчейки.Значение; + ТекущийКлюч = ДанныеЯчейки.Ключ; + + ДобавитьИмяЛиста(ТекущийКлюч, Лист); OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение); @@ -300,7 +346,7 @@ ТекущийМассив.Добавить(ТекущееЗначение); - OPI_Инструменты.ДобавитьПоле("range" , ДанныеЯчейки.Ключ, "Строка", ТекущиеДанные); + OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные); @@ -311,4 +357,15 @@ Возврат МассивДанных; КонецФункции + +Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист) + + OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); + + Для Н = 0 По МассивИмен.ВГраница() Цикл + ДобавитьИмяЛиста(МассивИмен[Н], Лист); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl index b193e0dcb9..d1240f89b3 100644 --- a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl +++ b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl @@ -150,7 +150,7 @@ НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы); - НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьЯчейки" , "Заполнить ячейки" , Таблицы); + НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы); НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер); diff --git a/OPI/src/CommonModules/OPI_Тесты/Module.bsl b/OPI/src/CommonModules/OPI_Тесты/Module.bsl index 83ed14b74c..c1dc773d29 100644 --- a/OPI/src/CommonModules/OPI_Тесты/Module.bsl +++ b/OPI/src/CommonModules/OPI_Тесты/Module.bsl @@ -2545,11 +2545,11 @@ КонецПроцедуры -Процедура ГТ_ЗаполнитьЯчейки() Экспорт +Процедура ГТ_ЗаполнитьОчиститьЯчейки() Экспорт Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); Книга = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Spreadsheet"); - Лист = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Sheet"); + Лист = "Лист2"; СтруктураЯчеек = Новый Соответствие; СтруктураЯчеек.Вставить("A1", "Это A1"); @@ -2560,10 +2560,37 @@ СтруктураЯчеек.Вставить("A4", "Это A4"); СтруктураЯчеек.Вставить("B1", "Это B1"); СтруктураЯчеек.Вставить("B4", "Это B4"); - - Результат = OPI_GoogleSheets.УстановитьЗначенияЯчеек(Токен, Книга, Лист, СтруктураЯчеек); - // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТаблицу"); + МассивЯчеек = Новый Массив; + МассивЯчеек.Добавить("B2"); + МассивЯчеек.Добавить("A3"); + МассивЯчеек.Добавить("B4"); + + Результат = OPI_GoogleSheets.УстановитьЗначенияЯчеек(Токен, Книга, СтруктураЯчеек, Лист); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьЗначенияЯчеек"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["totalUpdatedCells"]).Равно(СтруктураЯчеек.Количество()); + + Результат = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, МассивЯчеек, Лист); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗначенияЯчеек"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["valueRanges"].Количество()).Равно(МассивЯчеек.Количество()); + + МассивЯчеек = Новый Массив; + МассивЯчеек.Добавить("B2"); + МассивЯчеек.Добавить("A3"); + МассивЯчеек.Добавить("B4"); + + Результат = OPI_GoogleSheets.ОчиститьЯчейки(Токен, Книга, МассивЯчеек, Лист); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьЯчейки"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["clearedRanges"].Количество()).Равно(МассивЯчеек.Количество()); КонецПроцедуры