1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-11-24 08:52:18 +02:00

Преобразование OPI -> OInt (workflow)

This commit is contained in:
Vitaly the Alpaca 2024-05-31 21:05:52 +00:00 committed by Vitaly the Alpaca (bot)
parent 4474479c07
commit 658281c282
21 changed files with 18273 additions and 18273 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,409 +1,409 @@
// Расположение OS: ./OInt/core/Modules/OPI_GoogleSheets.os // Расположение OS: ./OInt/core/Modules/OPI_GoogleSheets.os
// Библиотека: Google Sheets // Библиотека: Google Sheets
// Команда CLI: gsheets // Команда CLI: gsheets
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "../../tools" #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область РаботаСКнигами #Область РаботаСКнигами
// Создать книгу // Создать книгу
// Создает новую книгу // Создает новую книгу
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Наименование - Строка - Наименование - title // Наименование - Строка - Наименование - title
// МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets // МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets"; URL = "https://sheets.googleapis.com/v4/spreadsheets";
Свойства = Новый Структура("title" , Наименование); Свойства = Новый Структура("title" , Наименование);
Листы = Новый Массив; Листы = Новый Массив;
ЗаполнитьМассивЛистов(МассивИменЛистов, Листы); ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить книгу // Получить книгу
// Получает информацию о книге по ID // Получает информацию о книге по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Идентификатор - Строка - Идентификатор книги - spreadsheet // Идентификатор - Строка - Идентификатор книги - spreadsheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор); OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Изменить наименование книги // Изменить наименование книги
// Изменяет наименование существующей книги // Изменяет наименование существующей книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// Наименование - Строка - Новое наименование - title // Наименование - Строка - Новое наименование - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Изменение = Новый Структура("title", Наименование); Изменение = Новый Структура("title", Наименование);
ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title"); ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения); Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
МассивЗапросов = Новый Массив; МассивЗапросов = Новый Массив;
МассивЗапросов.Добавить(Запрос); МассивЗапросов.Добавить(Запрос);
Параметры = Новый Структура("requests", МассивЗапросов); Параметры = Новый Структура("requests", МассивЗапросов);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Область РаботаСЛистами #Область РаботаСЛистами
// Добавить лист // Добавить лист
// Добавляет новый лист в книгу // Добавляет новый лист в книгу
// //
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Наименование - Строка - Наименование нового листа - title // Наименование - Строка - Наименование нового листа - title
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Лист = СоздатьЛист(Наименование); Лист = СоздатьЛист(Наименование);
Запросы = Новый Массив; Запросы = Новый Массив;
Изменение = Новый Структура("addSheet", Лист); Изменение = Новый Структура("addSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Удалить лист // Удалить лист
// Удаляет лист из книги // Удаляет лист из книги
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - Идентификатор книги - spreadsheet // Книга - Строка - Идентификатор книги - spreadsheet
// Лист - Строка - Идентификатор удаляемого листа - sheet // Лист - Строка - Идентификатор удаляемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
Запросы = Новый Массив; Запросы = Новый Массив;
Лист = Новый Структура("sheetId" , Лист); Лист = Новый Структура("sheetId" , Лист);
Изменение = Новый Структура("deleteSheet", Лист); Изменение = Новый Структура("deleteSheet", Лист);
Запросы.Добавить(Изменение); Запросы.Добавить(Изменение);
Параметры = Новый Структура("requests", Запросы); Параметры = Новый Структура("requests", Запросы);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Копировать лист // Копировать лист
// Копирует лист из одной книги в другую // Копирует лист из одной книги в другую
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Откуда - Строка - ID книги источника - from // Откуда - Строка - ID книги источника - from
// Куда - Строка - ID книги приемника - to // Куда - Строка - ID книги приемника - to
// Лист - Строка - ID копируемого листа - sheet // Лист - Строка - ID копируемого листа - sheet
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда); OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ Откуда + Откуда
+ "/sheets/" + "/sheets/"
+ Лист + Лист
+ ":copyTo"; + ":copyTo";
Параметры = Новый Структура("destinationSpreadsheetId", Куда); Параметры = Новый Структура("destinationSpreadsheetId", Куда);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Область РаботаСДанными #Область РаботаСДанными
// Установить значения ячеек // Установить значения ячеек
// Устанавливает значения ячеек листа // Устанавливает значения ячеек листа
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data // СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim // ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция УстановитьЗначенияЯчеек(Знач Токен Функция УстановитьЗначенияЯчеек(Знач Токен
, Знач Книга , Знач Книга
, Знач СоответствиеЗначений , Знач СоответствиеЗначений
, Знач Лист = "" , Знач Лист = ""
, Знач ОсновноеИзмерение = "COLUMNS") Экспорт , Знач ОсновноеИзмерение = "COLUMNS") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура") Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
Возврат "Не удалось привести структуру значений к коллекции"; Возврат "Не удалось привести структуру значений к коллекции";
КонецЕсли; КонецЕсли;
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист); МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED"); Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Очистить ячейки // Очистить ячейки
// Очищает значение в ячейках // Очищает значение в ячейках
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Параметры = Новый Структура("ranges", МассивЯчеек); Параметры = Новый Структура("ranges", МассивЯчеек);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить значения ячеек // Получить значения ячеек
// Получает значения ячеек таблицы // Получает значения ячеек таблицы
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Книга - Строка - ID книги - spreadsheet // Книга - Строка - ID книги - spreadsheet
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells // МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname // Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга); OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен); Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet"; URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
Если ЗначениеЗаполнено(МассивЯчеек) Тогда Если ЗначениеЗаполнено(МассивЯчеек) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
СформироватьМассивИменЯчеек(МассивЯчеек, Лист); СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
Первый = Истина; Первый = Истина;
Для Каждого Ячейка Из МассивЯчеек Цикл Для Каждого Ячейка Из МассивЯчеек Цикл
Разделитель = ?(Первый, "?", "&"); Разделитель = ?(Первый, "?", "&");
URL = URL + Разделитель + "ranges=" + Ячейка; URL = URL + Разделитель + "ranges=" + Ячейка;
Первый = Ложь; Первый = Ложь;
КонецЦикла; КонецЦикла;
Иначе Иначе
URL = URL + "?ranges='" + Лист + "'"; URL = URL + "?ranges='" + Лист + "'";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get(URL, , Заголовки); Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов) Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
Для Каждого ИмяЛиста Из МассивИмен Цикл Для Каждого ИмяЛиста Из МассивИмен Цикл
Лист = СоздатьЛист(ИмяЛиста); Лист = СоздатьЛист(ИмяЛиста);
МассивЛистов.Добавить(Лист); МассивЛистов.Добавить(Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист) Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
Если ЗначениеЗаполнено(Лист) Тогда Если ЗначениеЗаполнено(Лист) Тогда
Ячейка = "'" + Лист + "'!" + Ячейка; Ячейка = "'" + Лист + "'!" + Ячейка;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Функция СоздатьЛист(Знач Наименование) Функция СоздатьЛист(Знач Наименование)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
СвойстваЛиста = Новый Структура("title" , Наименование); СвойстваЛиста = Новый Структура("title" , Наименование);
Лист = Новый Структура("properties", СвойстваЛиста); Лист = Новый Структура("properties", СвойстваЛиста);
Возврат Лист; Возврат Лист;
КонецФункции КонецФункции
Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист) Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
МассивДанных = Новый Массив; МассивДанных = Новый Массив;
Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
ТекущееЗначение = ДанныеЯчейки.Значение; ТекущееЗначение = ДанныеЯчейки.Значение;
ТекущийКлюч = ДанныеЯчейки.Ключ; ТекущийКлюч = ДанныеЯчейки.Ключ;
ДобавитьИмяЛиста(ТекущийКлюч, Лист); ДобавитьИмяЛиста(ТекущийКлюч, Лист);
OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение); OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
ТекущиеДанные = Новый Соответствие; ТекущиеДанные = Новый Соответствие;
ТекущийМассив = Новый Массив; ТекущийМассив = Новый Массив;
ТекущийМассив.Добавить(ТекущееЗначение); ТекущийМассив.Добавить(ТекущееЗначение);
OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные);
OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные); OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
МассивДанных.Добавить(ТекущиеДанные); МассивДанных.Добавить(ТекущиеДанные);
КонецЦикла; КонецЦикла;
Возврат МассивДанных; Возврат МассивДанных;
КонецФункции КонецФункции
Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист) Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист); OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
Для Н = 0 По МассивИмен.ВГраница() Цикл Для Н = 0 По МассивИмен.ВГраница() Цикл
ДобавитьИмяЛиста(МассивИмен[Н], Лист); ДобавитьИмяЛиста(МассивИмен[Н], Лист);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -1,173 +1,173 @@
// Расположение OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os // Расположение OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os
// Библиотека: Google Workspace // Библиотека: Google Workspace
// Команда CLI: google // Команда CLI: google
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "../../tools" #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
// Сформировать ссылку получения кода // Сформировать ссылку получения кода
// Возвращает URL для авторизации в браузере // Возвращает URL для авторизации в браузере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// Calendar - Булево - разрешение на методы Calendar - calendar // Calendar - Булево - разрешение на методы Calendar - calendar
// Drive - Булево - разрешение на методы Drive - drive // Drive - Булево - разрешение на методы Drive - drive
// Sheets - Булево - разрешение на методы Sheets - sheets // Sheets - Булево - разрешение на методы Sheets - sheets
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка - Ссылка получения кода // Строка - Ссылка получения кода
Функция СформироватьСсылкуПолученияКода(Знач ClientID Функция СформироватьСсылкуПолученияКода(Знач ClientID
, Знач Calendar = Истина , Знач Calendar = Истина
, Знач Drive = Истина , Знач Drive = Истина
, Знач Sheets = Истина) Экспорт , Знач Sheets = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar); OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets); OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
OPI_ПреобразованиеТипов.ПолучитьБулево(Drive); OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
URL = "https://accounts.google.com/o/oauth2/auth"; URL = "https://accounts.google.com/o/oauth2/auth";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("response_type", "code"); ПараметрыURL.Вставить("response_type", "code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("access_type" , "offline"); ПараметрыURL.Вставить("access_type" , "offline");
ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets)); ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Возврат URL; Возврат URL;
КонецФункции КонецФункции
// Получить токен по коду // Получить токен по коду
// Получает токен по коду из авторизации в бразуере // Получает токен по коду из авторизации в бразуере
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// Code - Строка - Code из браузера - code // Code - Строка - Code из браузера - code
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Code); OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "authorization_code"); ПараметрыURL.Вставить("grant_type" , "authorization_code");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
ПараметрыURL.Вставить("code" , Code); ПараметрыURL.Вставить("code" , Code);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientID - Строка - Client ID - id // ClientID - Строка - Client ID - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token"; URL = "https://accounts.google.com/o/oauth2/token";
ПараметрыURL = Новый Структура; ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("grant_type" , "refresh_token"); ПараметрыURL.Вставить("grant_type" , "refresh_token");
ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("client_id" , ClientID);
ПараметрыURL.Вставить("client_secret", ClientSecret); ПараметрыURL.Вставить("client_secret", ClientSecret);
ПараметрыURL.Вставить("refresh_token", RefreshToken); ПараметрыURL.Вставить("refresh_token", RefreshToken);
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь); Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие; Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен); Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки; Возврат Заголовки;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИфункции #Область СлужебныеПроцедурыИфункции
Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets) Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
МассивРазрешений = Новый Массив; МассивРазрешений = Новый Массив;
Если Calendar Тогда Если Calendar Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
КонецЕсли; КонецЕсли;
Если Drive Тогда Если Drive Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
КонецЕсли; КонецЕсли;
Если Sheets Тогда Если Sheets Тогда
МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets"); МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
КонецЕсли; КонецЕсли;
Возврат СтрСоединить(МассивРазрешений, " "); Возврат СтрСоединить(МассивРазрешений, " ");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,414 +1,414 @@
// Расположение OS: ./OInt/core/Modules/OPI_Viber.os // Расположение OS: ./OInt/core/Modules/OPI_Viber.os
// Библиотека: Viber // Библиотека: Viber
// Команда CLI: viber // Команда CLI: viber
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "../../tools" #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область НастройкиИИнформация #Область НастройкиИИнформация
// Установить Webhook // Установить Webhook
// ВАЖНО: Установка Webhook обязательна по правилам Viber. Для этого надо иметь свободный URL, // ВАЖНО: Установка Webhook обязательна по правилам Viber. Для этого надо иметь свободный URL,
// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована // который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях // на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать // Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// URL - Строка - URL для установки Webhook - url // URL - Строка - URL для установки Webhook - url
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры);
Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры); Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
КонецФункции КонецФункции
// Получить информацию о канале // Получить информацию о канале
// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook // Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные // ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
URL = "https://chatapi.viber.com/pa/get_account_info"; URL = "https://chatapi.viber.com/pa/get_account_info";
Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен)); Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
КонецФункции КонецФункции
// Получить данные пользователя // Получить данные пользователя
// Получает информацию о пользователе по ID // Получает информацию о пользователе по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// IDПользователя - Строка, Число - ID пользователя Viber - user // IDПользователя - Строка, Число - ID пользователя Viber - user
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
URL = "https://chatapi.viber.com/pa/get_user_details"; URL = "https://chatapi.viber.com/pa/get_user_details";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить онлайн пользователей // Получить онлайн пользователей
// Получает статус пользователя или нескольких пользователей по ID // Получает статус пользователя или нескольких пользователей по ID
// //
// Параметры: // Параметры:
// Токен - Строка - Токен Viber - token // Токен - Строка - Токен Viber - token
// IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users // IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
URL = "https://chatapi.viber.com/pa/get_online"; URL = "https://chatapi.viber.com/pa/get_online";
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры); OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#Область ОтправкаСообщений #Область ОтправкаСообщений
// Отправить текстовое сообщение // Отправить текстовое сообщение
// Отправляет текстовое сообщение в чат или канал // Отправляет текстовое сообщение в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Текст - Строка - Текст сообщения - text // Текст - Строка - Текст сообщения - text
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard // Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьТекстовоеСообщение(Знач Токен Функция ОтправитьТекстовоеСообщение(Знач Токен
, Знач Текст , Знач Текст
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Клавиатура = "") Экспорт , Знач Клавиатура = "") Экспорт
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура); Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
КонецФункции КонецФункции
// Отправить картинку // Отправить картинку
// Отправляет картинку в чат или канал // Отправляет картинку в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL картинки - picture // URL - Строка - URL картинки - picture
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel
// Описание - Строка - Аннотация к картинке - description // Описание - Строка - Аннотация к картинке - description
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание); Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
КонецФункции КонецФункции
// Отправить файл // Отправить файл
// Отправляет файл (документ) в чат или канал // Отправляет файл (документ) в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - URL файла - file // URL - Строка - URL файла - file
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// Расширение - Строка - Расширение файла - ext // Расширение - Строка - Расширение файла - ext
// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size // Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьФайл(Знач Токен Функция ОтправитьФайл(Знач Токен
, Знач URL , Знач URL
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал , Знач ОтправкаВКанал
, Знач Расширение , Знач Расширение
, Знач Размер = "") Экспорт , Знач Размер = "") Экспорт
Если Не ЗначениеЗаполнено(Размер) Тогда Если Не ЗначениеЗаполнено(Размер) Тогда
Ответ = OPI_Инструменты.Get(URL); Ответ = OPI_Инструменты.Get(URL);
Размер = Ответ.Размер(); Размер = Ответ.Размер();
КонецЕсли; КонецЕсли;
Строка_ = "Строка"; Строка_ = "Строка";
Расширение = СтрЗаменить(Расширение, ".", ""); Расширение = СтрЗаменить(Расширение, ".", "");
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры); OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить контакт // Отправить контакт
// Отправляет контакт с номером телефона в чат или канал // Отправляет контакт с номером телефона в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// ИмяКонтакта - Строка - Имя контакта - name // ИмяКонтакта - Строка - Имя контакта - name
// НомерТелефона - Строка - Номер телефона - phone // НомерТелефона - Строка - Номер телефона - phone
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьКонтакт(Знач Токен Функция ОтправитьКонтакт(Знач Токен
, Знач ИмяКонтакта , Знач ИмяКонтакта
, Знач НомерТелефона , Знач НомерТелефона
, Знач IDПользователя , Знач IDПользователя
, Знач ОтправкаВКанал) Экспорт , Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить локацию // Отправить локацию
// Отправляет географические координаты в чат или канал // Отправляет географические координаты в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// Широта - Строка,Число - Географическая широта - lat // Широта - Строка,Число - Географическая широта - lat
// Долгота - Строка,Число - Географическая долгота - long // Долгота - Строка,Число - Географическая долгота - long
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры); OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры); Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
КонецФункции КонецФункции
// Отправить ссылку // Отправить ссылку
// Отправляет URL с предпросмотром в чат или канал // Отправляет URL с предпросмотром в чат или канал
// //
// Параметры: // Параметры:
// Токен - Строка - Токен - token // Токен - Строка - Токен - token
// URL - Строка - Отправляемая ссылка - url // URL - Строка - Отправляемая ссылка - url
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user // IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel // ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL); Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
КонецФункции КонецФункции
// Сформировать клавиатуру из массива кнопок // Сформировать клавиатуру из массива кнопок
// Возвращает структура клавиатуры для сообщений // Возвращает структура клавиатуры для сообщений
// //
// Параметры: // Параметры:
// МассивКнопок - Массив из Строка - Массив кнопок - buttons // МассивКнопок - Массив из Строка - Массив кнопок - buttons
// ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color // ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - Сформировать клавиатуру из массива кнопок: // Структура - Сформировать клавиатуру из массива кнопок:
// * Buttons - Массив из Структура - Массив сформированных кнопок // * Buttons - Массив из Структура - Массив сформированных кнопок
// * Type - Строка - Тип клавиатуры // * Type - Строка - Тип клавиатуры
Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок); OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
МассивСтруктурКнопок = Новый Массив; МассивСтруктурКнопок = Новый Массив;
СтруктураКлавиатуры = Новый Структура; СтруктураКлавиатуры = Новый Структура;
Для Каждого ТекстКнопки Из МассивКнопок Цикл Для Каждого ТекстКнопки Из МассивКнопок Цикл
СтруктураКнопки = Новый Структура; СтруктураКнопки = Новый Структура;
СтруктураКнопки.Вставить("ActionType", "reply"); СтруктураКнопки.Вставить("ActionType", "reply");
СтруктураКнопки.Вставить("ActionBody", ТекстКнопки); СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
СтруктураКнопки.Вставить("Text" , ТекстКнопки); СтруктураКнопки.Вставить("Text" , ТекстКнопки);
СтруктураКнопки.Вставить("BgColor" , ЦветКнопок); СтруктураКнопки.Вставить("BgColor" , ЦветКнопок);
СтруктураКнопки.Вставить("Coloumns" , 3); СтруктураКнопки.Вставить("Coloumns" , 3);
МассивСтруктурКнопок.Добавить(СтруктураКнопки); МассивСтруктурКнопок.Добавить(СтруктураКнопки);
КонецЦикла; КонецЦикла;
СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок); СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
СтруктураКлавиатуры.Вставить("Type" , "keyboard"); СтруктураКлавиатуры.Вставить("Type" , "keyboard");
Возврат СтруктураКлавиатуры; Возврат СтруктураКлавиатуры;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Отправить сообщение. // Отправить сообщение.
// //
// Параметры: // Параметры:
// Токен - Строка - Токен // Токен - Строка - Токен
// Тип - Строка - Тип отправляемого сообщения // Тип - Строка - Тип отправляемого сообщения
// IDПользователя - Строка,Число - ID пользователя Viber // IDПользователя - Строка,Число - ID пользователя Viber
// ЭтоКанал - Булево - Отправка в канал или чат с ботом // ЭтоКанал - Булево - Отправка в канал или чат с ботом
// Значение - Строка, Структура - Значение: // Значение - Строка, Структура - Значение:
// * URL - Строка - При отправке URL // * URL - Строка - При отправке URL
// * Размер - Число, Строка - Размер файла в случае отправке // * Размер - Число, Строка - Размер файла в случае отправке
// * Расширение - Строка - Расширение файла в случае отправки // * Расширение - Строка - Расширение файла в случае отправки
// Текст - Строка - Текст сообщения // Текст - Строка - Текст сообщения
// Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок // Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Отправить сообщение // Произвольный, HTTPОтвет - Отправить сообщение
Функция ОтправитьСообщение(Знач Токен Функция ОтправитьСообщение(Знач Токен
, Знач Тип , Знач Тип
, Знач IDПользователя , Знач IDПользователя
, Знач ЭтоКанал , Знач ЭтоКанал
, Знач Значение = "" , Знач Значение = ""
, Знач Текст = "" , Знач Текст = ""
, Знач Клавиатура = "") , Знач Клавиатура = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя); OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал); OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
СтруктураПараметров = ВернутьСтандартныеПараметры(); СтруктураПараметров = ВернутьСтандартныеПараметры();
СтруктураПараметров.Вставить("type", Тип); СтруктураПараметров.Вставить("type", Тип);
Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
СтруктураПараметров.Вставить("text", Текст); СтруктураПараметров.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
СтруктураПараметров.Вставить("keyboard", Клавиатура); СтруктураПараметров.Вставить("keyboard", Клавиатура);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда Если ЗначениеЗаполнено(Значение) Тогда
Если Тип = "file" Тогда Если Тип = "file" Тогда
СтруктураПараметров.Вставить("media" , Значение["URL"]); СтруктураПараметров.Вставить("media" , Значение["URL"]);
СтруктураПараметров.Вставить("size" , Значение["Размер"]); СтруктураПараметров.Вставить("size" , Значение["Размер"]);
СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]); СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
ИначеЕсли Тип = "contact" Тогда ИначеЕсли Тип = "contact" Тогда
СтруктураПараметров.Вставить("contact" , Значение); СтруктураПараметров.Вставить("contact" , Значение);
ИначеЕсли Тип = "location" Тогда ИначеЕсли Тип = "location" Тогда
СтруктураПараметров.Вставить("location" , Значение); СтруктураПараметров.Вставить("location" , Значение);
Иначе Иначе
СтруктураПараметров.Вставить("media" , Значение); СтруктураПараметров.Вставить("media" , Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ЭтоКанал Тогда Если ЭтоКанал Тогда
СтруктураПараметров.Вставить("from", IDПользователя); СтруктураПараметров.Вставить("from", IDПользователя);
URL = "https://chatapi.viber.com/pa/post"; URL = "https://chatapi.viber.com/pa/post";
Иначе Иначе
СтруктураПараметров.Вставить("receiver", IDПользователя); СтруктураПараметров.Вставить("receiver", IDПользователя);
URL = "https://chatapi.viber.com/pa/send_message"; URL = "https://chatapi.viber.com/pa/send_message";
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен)); Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
Попытка Попытка
Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()); Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
Исключение Исключение
Возврат Ответ; Возврат Ответ;
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция ВернутьСтандартныеПараметры() Функция ВернутьСтандартныеПараметры()
СтруктураОтправителя = Новый Структура; СтруктураОтправителя = Новый Структура;
СтруктураОтправителя.Вставить("name" , "Bot"); СтруктураОтправителя.Вставить("name" , "Bot");
СтруктураОтправителя.Вставить("avatar", ""); СтруктураОтправителя.Вставить("avatar", "");
СтруктураПараметров = Новый Структура; СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("sender", СтруктураОтправителя); СтруктураПараметров.Вставить("sender", СтруктураОтправителя);
СтруктураПараметров.Вставить("min_api_version", 1); СтруктураПараметров.Вставить("min_api_version", 1);
Возврат СтруктураПараметров; Возврат СтруктураПараметров;
КонецФункции КонецФункции
Функция ТокенВЗаголовки(Знач Токен) Функция ТокенВЗаголовки(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
СтруктураЗаголовков = Новый Соответствие; СтруктураЗаголовков = Новый Соответствие;
СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен); СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
Возврат СтруктураЗаголовков; Возврат СтруктураЗаголовков;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

File diff suppressed because it is too large Load Diff

View File

@ -1,112 +1,112 @@
// Расположение OS: ./OInt/core/Modules/OPI_YandexID.os // Расположение OS: ./OInt/core/Modules/OPI_YandexID.os
// Библиотека: Yandex ID // Библиотека: Yandex ID
// Команда CLI: yandex // Команда CLI: yandex
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "../../tools" #Использовать "../../tools"
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
// Получить код подтверждения // Получить код подтверждения
// Получает код подтверждения и адрес страницы, на которой его необходимо ввести // Получает код подтверждения и адрес страницы, на которой его необходимо ввести
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
Параметры = Новый Структура("client_id", ClientId); Параметры = Новый Структура("client_id", ClientId);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Преобразовать код в токен // Преобразовать код в токен
// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения // Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device // КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства); OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "device_code"); Параметры.Вставить("grant_type" , "device_code");
Параметры.Вставить("code" , КодУстройства); Параметры.Вставить("code" , КодУстройства);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Обновить токен // Обновить токен
// Обновляет токен по Refresh token // Обновляет токен по Refresh token
// //
// Параметры: // Параметры:
// ClientId - Строка - Client id - id // ClientId - Строка - Client id - id
// ClientSecret - Строка - Client secret - secret // ClientSecret - Строка - Client secret - secret
// RefreshToken - Строка - Refresh token - refresh // RefreshToken - Строка - Refresh token - refresh
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret); OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken); OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("grant_type" , "refresh_token"); Параметры.Вставить("grant_type" , "refresh_token");
Параметры.Вставить("refresh_token" , RefreshToken); Параметры.Вставить("refresh_token" , RefreshToken);
Параметры.Вставить("client_id" , ClientId); Параметры.Вставить("client_id" , ClientId);
Параметры.Вставить("client_secret" , ClientSecret); Параметры.Вставить("client_secret" , ClientSecret);
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,20 +1,20 @@
<package-def> <package-def>
<module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/> <module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/>
<module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/> <module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/>
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/> <module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/> <module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/> <module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/> <module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/> <module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/> <module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/> <module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
<module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/> <module name="OPI_GoogleWorkspace" file="core/Modules/OPI_GoogleWorkspace.os"/>
<module name="OPI_YandexDisk" file="core/Modules/OPI_YandexDisk.os"/> <module name="OPI_YandexDisk" file="core/Modules/OPI_YandexDisk.os"/>
<module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/> <module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/>
<module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/> <module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/>
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/> <module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
<module name="OPI_GoogleSheets" file="core/Modules/OPI_GoogleSheets.os"/> <module name="OPI_GoogleSheets" file="core/Modules/OPI_GoogleSheets.os"/>
<module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/> <module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/>
<module name="OPI_VK" file="core/Modules/OPI_VK.os"/> <module name="OPI_VK" file="core/Modules/OPI_VK.os"/>
<module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/> <module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/>
</package-def> </package-def>

View File

@ -1,13 +1,13 @@
Описание.Имя("oint") Описание.Имя("oint")
.Версия("1.9.0") .Версия("1.9.0")
.Автор("bayselonarrend") .Автор("bayselonarrend")
.АдресАвтора("bayselonarrend@gmail.com") .АдресАвтора("bayselonarrend@gmail.com")
.Описание("Открытый пакет интеграций с популярными API") .Описание("Открытый пакет интеграций с популярными API")
.ВерсияСреды("1.0.7") .ВерсияСреды("1.0.7")
.ВключитьФайл("core") .ВключитьФайл("core")
.ВключитьФайл("tools") .ВключитьФайл("tools")
.ВключитьФайл("tests") .ВключитьФайл("tests")
.ВключитьФайл("lib.config") .ВключитьФайл("lib.config")
.ВключитьФайл("../README.MD") .ВключитьФайл("../README.MD")
.ВключитьФайл("../LICENSE") .ВключитьФайл("../LICENSE")
.ЗависитОт("asserts", "1.3.0") .ЗависитОт("asserts", "1.3.0")

File diff suppressed because it is too large Load Diff

View File

@ -1,470 +1,470 @@
// Расположение OS: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os // Расположение OS: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// BSLLS:UsingHardcodePath-off // BSLLS:UsingHardcodePath-off
// BSLLS:Typo-off // BSLLS:Typo-off
// BSLLS:DeprecatedMessage-off // BSLLS:DeprecatedMessage-off
// BSLLS:UsingServiceTag-off // BSLLS:UsingServiceTag-off
// BSLLS:ExecuteExternalCodeInCommonModule-off // BSLLS:ExecuteExternalCodeInCommonModule-off
// BSLLS:DuplicateStringLiteral-off // BSLLS:DuplicateStringLiteral-off
//@skip-check use-non-recommended-method //@skip-check use-non-recommended-method
// Раскомментировать, если выполняется OneScript // Раскомментировать, если выполняется OneScript
#Использовать "./internal" #Использовать "./internal"
#Использовать asserts #Использовать asserts
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Функция ПолучитьСоответствиеРазделовТестирования() Экспорт Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
СтандартныеЗависимости = "[Decode, Build]"; СтандартныеЗависимости = "[Decode, Build]";
ЗависимостиГугл = "Testing-GoogleWorkspace"; ЗависимостиГугл = "Testing-GoogleWorkspace";
Разделы = Новый Структура; Разделы = Новый Структура;
Разделы.Вставить("Telegram" , СтандартныеЗависимости); Разделы.Вставить("Telegram" , СтандартныеЗависимости);
Разделы.Вставить("VK" , СтандартныеЗависимости); Разделы.Вставить("VK" , СтандартныеЗависимости);
Разделы.Вставить("Viber" , СтандартныеЗависимости); Разделы.Вставить("Viber" , СтандартныеЗависимости);
Разделы.Вставить("Twitter" , СтандартныеЗависимости); Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости); Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл); Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл); Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
Разделы.Вставить("Notion" , СтандартныеЗависимости); Разделы.Вставить("Notion" , СтандартныеЗависимости);
Разделы.Вставить("Slack" , СтандартныеЗависимости); Разделы.Вставить("Slack" , СтандартныеЗависимости);
Разделы.Вставить("Airtable" , СтандартныеЗависимости); Разделы.Вставить("Airtable" , СтандартныеЗависимости);
Разделы.Вставить("Dropbox" , СтандартныеЗависимости); Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
Возврат Разделы; Возврат Разделы;
КонецФункции КонецФункции
Функция ПолучитьТаблицуТестов() Экспорт Функция ПолучитьТаблицуТестов() Экспорт
Телеграм = "Telegram"; Телеграм = "Telegram";
ВКонтакте = "VK"; ВКонтакте = "VK";
ЯДиск = "YandexDisk"; ЯДиск = "YandexDisk";
Календарь = "GoogleCalendar"; Календарь = "GoogleCalendar";
Твиттер = "Twitter"; Твиттер = "Twitter";
Вайбер = "Viber"; Вайбер = "Viber";
Драйв = "GoogleDrive"; Драйв = "GoogleDrive";
ВСпейс = "GoogleWorkspace"; ВСпейс = "GoogleWorkspace";
Ноушн = "Notion"; Ноушн = "Notion";
Слак = "Slack"; Слак = "Slack";
Таблицы = "GoogleSheets"; Таблицы = "GoogleSheets";
АирТ = "Airtable"; АирТ = "Airtable";
ДропБокс = "Dropbox"; ДропБокс = "Dropbox";
ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Метод");
ТаблицаТестов.Колонки.Добавить("Синоним"); ТаблицаТестов.Колонки.Добавить("Синоним");
ТаблицаТестов.Колонки.Добавить("Раздел"); ТаблицаТестов.Колонки.Добавить("Раздел");
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио" , "Отправить аудио" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио" , "Отправить аудио" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент" , "Отправить документ" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент" , "Отправить документ" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку" , "Отправить гифку" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку" , "Отправить гифку" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение" , "Отправить местоположение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение" , "Отправить местоположение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт" , "Отправить контакт" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт" , "Отправить контакт" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос" , "Отправить опрос" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос" , "Отправить опрос" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение" , "Переслать сообщение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение" , "Переслать сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан" , "Бан/Разбан" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан" , "Бан/Разбан" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений" , "Действия с обсуждениями" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений" , "Действия с обсуждениями" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику" , "Получить статистику" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику" , "Получить статистику" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов" , "Получить статистику постов" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов" , "Получить статистику постов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение" , "Отправить сообщение" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение" , "Отправить сообщение" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку" , "Создать товар и подборку" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку" , "Создать товар и подборку" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами" , "Создать товар со свойствами" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами" , "Создать товар со свойствами" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров" , "Получить список товаров" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров" , "Получить список товаров" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок" , "Получить список подборок" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок" , "Получить список подборок" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте); НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта" , "Создать копию объекта" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта" , "Создать копию объекта" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание" , "Получить ссылку на скачивание" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание" , "Получить ссылку на скачивание" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов" , "Получить список файлов" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов" , "Получить список файлов" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск); НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс); НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь); НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь); НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв); НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв);
НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв);
НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы);
НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы); НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы);
НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСКартинкой" , "Твит с картинкой" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСКартинкой" , "Твит с картинкой" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер);
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКартинку" , "Отправить картинку" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКартинку" , "Отправить картинку" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьФайл" , "Отправить файл" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьФайл" , "Отправить файл" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер);
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер); НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОБазе" , "Получить информацию о базе" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОБазе" , "Получить информацию о базе" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницуВБазу" , "Создать страницу в базу" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницуВБазу" , "Создать страницу в базу" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ИзменитьСвойстваСтраницы" , "Изменить свойства страницы" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ИзменитьСвойстваСтраницы" , "Изменить свойства страницы" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн);
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьСообщение" , "Отправить/Удалить сообщение" , Слак); НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьСообщение" , "Отправить/Удалить сообщение" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьЭфемерное" , "Отправить/Удалить эфемерное" , Слак); НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьЭфемерное" , "Отправить/Удалить эфемерное" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьОтложенныеСообщения" , "Получить отложенные сообщения" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьОтложенныеСообщения" , "Получить отложенные сообщения" , Слак);
НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал" , "Создать/Архивировать канал" , Слак); НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал" , "Создать/Архивировать канал" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов" , "Получить список каналов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов" , "Получить список каналов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак); НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ); НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог" , "Создать каталог" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог" , "Создать каталог" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег" , "Создать/Удалить тег" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег" , "Создать/Удалить тег" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс);
НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс);
Возврат ТаблицаТестов; Возврат ТаблицаТестов;
КонецФункции КонецФункции
Функция ОжидаетЧто(Значение) Экспорт Функция ОжидаетЧто(Значение) Экспорт
Попытка Попытка
Модуль = ПолучитьОбщийМодуль("ЮТест"); Модуль = ПолучитьОбщийМодуль("ЮТест");
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль"); Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
Возврат Модуль.ОжидаетЧто(Значение); Возврат Модуль.ОжидаетЧто(Значение);
Исключение Исключение
Возврат Ожидаем.Что(Значение); Возврат Ожидаем.Что(Значение);
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
Функция СформироватьТестыЯкс() Экспорт Функция СформироватьТестыЯкс() Экспорт
Модуль = ПолучитьОбщийМодуль("ЮТТесты"); Модуль = ПолучитьОбщийМодуль("ЮТТесты");
Разделы = ПолучитьСоответствиеРазделовТестирования(); Разделы = ПолучитьСоответствиеРазделовТестирования();
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
Для Каждого Раздел Из Разделы Цикл Для Каждого Раздел Из Разделы Цикл
ТекущийРаздел = Раздел.Ключ; ТекущийРаздел = Раздел.Ключ;
Отбор = Новый Структура("Раздел", ТекущийРаздел); Отбор = Новый Структура("Раздел", ТекущийРаздел);
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор); ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел); Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
Для Каждого Тест Из ТестыРаздела Цикл Для Каждого Тест Из ТестыРаздела Цикл
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним); Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
Возврат ""; Возврат "";
КонецФункции КонецФункции
Функция СформироватьТестыАссертс() Экспорт Функция СформироватьТестыАссертс() Экспорт
ТаблицаТестов = ПолучитьТаблицуТестов(); ТаблицаТестов = ПолучитьТаблицуТестов();
МассивТестов = Новый Массив; МассивТестов = Новый Массив;
Для Каждого Тест Из ТаблицаТестов Цикл Для Каждого Тест Из ТаблицаТестов Цикл
МассивТестов.Добавить(Тест.Метод); МассивТестов.Добавить(Тест.Метод);
КонецЦикла; КонецЦикла;
Возврат МассивТестов; Возврат МассивТестов;
КонецФункции КонецФункции
Функция ПолучитьПараметр(Параметр) Экспорт Функция ПолучитьПараметр(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь); Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
КонецФункции КонецФункции
Функция ПолучитьДвоичные(Параметр) Экспорт Функция ПолучитьДвоичные(Параметр) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ПараметрЛокальный = Параметр + "Local"; ПараметрЛокальный = Параметр + "Local";
ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь); ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь);
ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь); ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
ФайлЛокальный = Новый Файл(ЗначениеЛокальный); ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
Если ФайлЛокальный.Существует() Тогда Если ФайлЛокальный.Существует() Тогда
Значение = Новый ДвоичныеДанные(ЗначениеЛокальный); Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
Иначе Иначе
Значение = ЗначениеОсновной; Значение = ЗначениеОсновной;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Тогда Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный); Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);
КонецЕсли; КонецЕсли;
Возврат Значение; Возврат Значение;
КонецФункции КонецФункции
Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
Если СтрНайти(Путь, "http") > 0 Если СтрНайти(Путь, "http") > 0
Или СтрНайти(Путь, "www") > 0 Тогда Или СтрНайти(Путь, "www") > 0 Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Путь, ИВФ); КопироватьФайл(Путь, ИВФ);
Путь = ИВФ; Путь = ИВФ;
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
Если СохранятьЛокально Тогда Если СохранятьЛокально Тогда
ЗаписатьПараметр(ПараметрЛокальный, ИВФ); ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
Иначе Иначе
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
КонецЕсли; КонецЕсли;
Иначе Иначе
Двоичные = Новый ДвоичныеДанные(Путь); Двоичные = Новый ДвоичныеДанные(Путь);
КонецЕсли; КонецЕсли;
Возврат Двоичные; Возврат Двоичные;
КонецФункции КонецФункции
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьПараметр(Параметр); Значение = ПолучитьПараметр(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
Значение = ПолучитьДвоичные(Параметр); Значение = ПолучитьДвоичные(Параметр);
Коллекция.Вставить(Параметр, Значение); Коллекция.Вставить(Параметр, Значение);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
Путь = ПутьКФайлуДанных(); Путь = ПутьКФайлуДанных();
ЗаписатьПараметрВФайл(Параметр, Значение, Путь); ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод; Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
Попытка Попытка
Данные = OPI_Инструменты.JSONСтрокой(Результат); Данные = OPI_Инструменты.JSONСтрокой(Результат);
Исключение Исключение
Данные = "Не JSON: " + Строка(Результат); Данные = "Не JSON: " + Строка(Результат);
КонецПопытки; КонецПопытки;
Данные = " " + Данные; Данные = " " + Данные;
Сообщить(Шапка); Сообщить(Шапка);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить(Данные); Сообщить(Данные);
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Сообщить("---------------------------------"); Сообщить("---------------------------------");
Сообщить(Символы.ПС); Сообщить(Символы.ПС);
Если ЗначениеЗаполнено(Библиотека) Тогда Если ЗначениеЗаполнено(Библиотека) Тогда
ЗаписатьФайлЛога(Данные, Метод, Библиотека); ЗаписатьФайлЛога(Данные, Метод, Библиотека);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗначениеИзФайла(Параметр, Путь) Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], ""); Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
КонецФункции КонецФункции
Функция ПутьКФайлуДанных() Функция ПутьКФайлуДанных()
Путь = ""; Путь = "";
ВозможныеПути = Новый Массив; ВозможныеПути = Новый Массив;
ВозможныеПути.Добавить("./data.json"); ВозможныеПути.Добавить("./data.json");
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json"); ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
ВозможныеПути.Добавить("D:\GD\Мой диск\data.json"); ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
Для Каждого ВозможныйПуть Из ВозможныеПути Цикл Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
ФайлРепозитория = Новый Файл(ВозможныйПуть); ФайлРепозитория = Новый Файл(ВозможныйПуть);
Если ФайлРепозитория.Существует() Тогда Если ФайлРепозитория.Существует() Тогда
Путь = ВозможныйПуть; Путь = ВозможныйПуть;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Возврат Путь; Возврат Путь;
КонецФункции КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя) Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя); Модуль = Вычислить(Имя);
Возврат Модуль; Возврат Модуль;
КонецФункции КонецФункции
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел) Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
НовыйТест = ТаблицаЗначений.Добавить(); НовыйТест = ТаблицаЗначений.Добавить();
НовыйТест.Метод = Метод; НовыйТест.Метод = Метод;
НовыйТест.Синоним = Синоним; НовыйТест.Синоним = Синоним;
НовыйТест.Раздел = Раздел; НовыйТест.Раздел = Раздел;
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь) Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Значения.Вставить(Параметр, Значение); Значения.Вставить(Параметр, Значение);
Запись = Новый ЗаписьJSON; Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON); Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, Значения); ЗаписатьJSON(Запись, Значения);
Запись.Закрыть(); Запись.Закрыть();
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека) Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
Попытка Попытка
ПутьЛогов = "./docs/results"; ПутьЛогов = "./docs/results";
ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека; ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
КаталогЛогов = Новый Файл(ПутьЛогов); КаталогЛогов = Новый Файл(ПутьЛогов);
Если Не КаталогЛогов.Существует() Тогда Если Не КаталогЛогов.Существует() Тогда
СоздатьКаталог(ПутьЛогов); СоздатьКаталог(ПутьЛогов);
КонецЕсли; КонецЕсли;
КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки); КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
Если Не КаталогЛоговБиблиотеки.Существует() Тогда Если Не КаталогЛоговБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьЛоговБиблиотеки); СоздатьКаталог(ПутьЛоговБиблиотеки);
КонецЕсли; КонецЕсли;
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log"; ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
ФайлЛога = Новый Файл(ПутьКФайлу); ФайлЛога = Новый Файл(ПутьКФайлу);
Если Не ФайлЛога.Существует() Тогда Если Не ФайлЛога.Существует() Тогда
ДокументЛога = Новый ТекстовыйДокумент; ДокументЛога = Новый ТекстовыйДокумент;
ДокументЛога.УстановитьТекст(Данные); ДокументЛога.УстановитьТекст(Данные);
ДокументЛога.Записать(ПутьКФайлу); ДокументЛога.Записать(ПутьКФайлу);
КонецЕсли; КонецЕсли;
Исключение Исключение
Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки()); Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти

View File

@ -1,320 +1,320 @@
// Расположение OS: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os // Расположение OS: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// BSLLS:UnusedLocalVariable-off // BSLLS:UnusedLocalVariable-off
#Использовать "./internal" #Использовать "./internal"
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Возврат; Возврат;
Иначе Иначе
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение); Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНайти(Значение, "//") Тогда ИначеЕсли СтрНайти(Значение, "//") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
Иначе Иначе
Значение = Base64Значение(Значение); Значение = Base64Значение(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки(); ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) <> Тип("Строка") Тогда Если ТипЗнч(Значение) <> Тип("Строка") Тогда
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть); Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);
Иначе Иначе
ПолучитьДвоичныеДанные(Значение); ПолучитьДвоичныеДанные(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьКоллекцию(Значение) Экспорт Процедура ПолучитьКоллекцию(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
ИсходноеЗначение = Значение; ИсходноеЗначение = Значение;
Если ЭтоКоллекция(Значение) Тогда Если ЭтоКоллекция(Значение) Тогда
Возврат; Возврат;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе Иначе
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеJSON.ОткрытьФайл(Значение); ЧтениеJSON.ОткрытьФайл(Значение);
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеJSON.ОткрытьФайл(ИВФ); ЧтениеJSON.ОткрытьФайл(ИВФ);
ЧтениеJSON.Прочитать(); ЧтениеJSON.Прочитать();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение)); ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
КонецЕсли; КонецЕсли;
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
ЧтениеJSON.Закрыть(); ЧтениеJSON.Закрыть();
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = ИсходноеЗначение; Значение = ИсходноеЗначение;
ПолучитьМассив(Значение); ПолучитьМассив(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьМассив(Значение) Экспорт Процедура ПолучитьМассив(Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Массив") Тогда Если ТипЗнч(Значение) = Тип("Массив") Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Значение) = Тип("Строка") Если ТипЗнч(Значение) = Тип("Строка")
И СтрНачинаетсяС(Значение, "[") И СтрНачинаетсяС(Значение, "[")
И СтрЗаканчиваетсяНа(Значение, "]") Тогда И СтрЗаканчиваетсяНа(Значение, "]") Тогда
ЗапятаяВКавычках = "','"; ЗапятаяВКавычках = "','";
Значение = СтрЗаменить(Значение, "['" , ""); Значение = СтрЗаменить(Значение, "['" , "");
Значение = СтрЗаменить(Значение, "']" , ""); Значение = СтрЗаменить(Значение, "']" , "");
Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках); Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь); Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
Для Н = 0 По Значение.ВГраница() Цикл Для Н = 0 По Значение.ВГраница() Цикл
Значение[Н] = СокрЛП(Значение[Н]); Значение[Н] = СокрЛП(Значение[Н]);
КонецЦикла; КонецЦикла;
Иначе Иначе
Если ТипЗнч(Значение) = Тип("Число") Тогда Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
КонецЕсли; КонецЕсли;
OPI_Инструменты.ЗначениеВМассив(Значение); OPI_Инструменты.ЗначениеВМассив(Значение);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьБулево(Значение) Экспорт Процедура ПолучитьБулево(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ТипЗнч(Значение) = Тип("Булево") Тогда Если ТипЗнч(Значение) = Тип("Булево") Тогда
Возврат; Возврат;
Иначе Иначе
Значение = Булево(Значение); Значение = Булево(Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ВызватьИсключение "Ошибка получения данных булево из параметра"; ВызватьИсключение "Ошибка получения данных булево из параметра";
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
Если ЭтоСимвольное(Значение) Тогда Если ЭтоСимвольное(Значение) Тогда
Если Не ИзИсточника Тогда Если Не ИзИсточника Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Значение = OPI_Инструменты.ЧислоВСтроку(Значение); Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
ЧтениеТекста = Новый ЧтениеТекста(Значение); ЧтениеТекста = Новый ЧтениеТекста(Значение);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла(); ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ); КопироватьФайл(Значение, ИВФ);
ЧтениеТекста = Новый ЧтениеТекста(ИВФ); ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
Значение = ЧтениеТекста.Прочитать(); Значение = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть(); ЧтениеТекста.Закрыть();
УдалитьФайлы(ИВФ); УдалитьФайлы(ИВФ);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
ИначеЕсли ЭтоКоллекция(Значение) Тогда ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение); Значение = OPI_Инструменты.JSONСтрокой(Значение);
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Исключение Исключение
Значение = Строка(Значение); Значение = Строка(Значение);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьДату(Значение) Экспорт Процедура ПолучитьДату(Значение) Экспорт
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Дата = "Дата"; Дата = "Дата";
Попытка Попытка
Если ТипЗнч(Значение) = Тип(Дата) Тогда Если ТипЗнч(Значение) = Тип(Дата) Тогда
Возврат; Возврат;
Иначе Иначе
Значение = XMLЗначение(Тип(Дата), Значение); Значение = XMLЗначение(Тип(Дата), Значение);
КонецЕсли; КонецЕсли;
Исключение Исключение
ООД = Новый ОписаниеТипов(Дата); ООД = Новый ОписаниеТипов(Дата);
Значение = ООД.ПривестиЗначение(Значение); Значение = ООД.ПривестиЗначение(Значение);
КонецПопытки; КонецПопытки;
КонецПроцедуры КонецПроцедуры
Процедура ПолучитьЧисло(Значение) Экспорт Процедура ПолучитьЧисло(Значение) Экспорт
ОписаниеТипа = Новый ОписаниеТипов("Число"); ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение(Значение); Значение = ОписаниеТипа.ПривестиЗначение(Значение);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ЭтоКоллекция(Знач Значение) Функция ЭтоКоллекция(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Массив") Возврат ТипЗнч(Значение) = Тип("Массив")
Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Структура")
Или ТипЗнч(Значение) = Тип("Соответствие"); Или ТипЗнч(Значение) = Тип("Соответствие");
КонецФункции КонецФункции
Функция ЭтоСимвольное(Знач Значение) Функция ЭтоСимвольное(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Строка") Возврат ТипЗнч(Значение) = Тип("Строка")
Или ТипЗнч(Значение) = Тип("Число") Или ТипЗнч(Значение) = Тип("Число")
Или ТипЗнч(Значение) = Тип("Дата"); Или ТипЗнч(Значение) = Тип("Дата");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -1,110 +1,110 @@
// Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os // Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
// MIT License // MIT License
// Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software. // copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off // BSLLS:IncorrectLineBreak-off
// BSLLS:UnusedLocalVariable-off // BSLLS:UnusedLocalVariable-off
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
#Область БСП #Область БСП
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт // Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются // Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке: // Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode // https://creativecommons.org/licenses/by/4.0/legalcode
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64); Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
КонецФункции КонецФункции
Функция Хеш(ДвоичныеДанные, Тип) Экспорт Функция Хеш(ДвоичныеДанные, Тип) Экспорт
Хеширование = Новый ХешированиеДанных(Тип); Хеширование = Новый ХешированиеДанных(Тип);
Хеширование.Добавить(ДвоичныеДанные); Хеширование.Добавить(ДвоичныеДанные);
Возврат Хеширование.ХешСумма; Возврат Хеширование.ХешСумма;
КонецФункции КонецФункции
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
Дважды = 2; Дважды = 2;
Если Ключ.Размер() > РазмерБлока Тогда Если Ключ.Размер() > РазмерБлока Тогда
Ключ = Хеш(Ключ, Тип); Ключ = Хеш(Ключ, Тип);
КонецЕсли; КонецЕсли;
Если Ключ.Размер() <= РазмерБлока Тогда Если Ключ.Размер() <= РазмерБлока Тогда
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ); Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды); Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
КонецЕсли; КонецЕсли;
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ)); Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока)); Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока)); Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad); Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ); Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad); Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип); Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
КонецФункции КонецФункции
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
МассивДвоичныхДанных = Новый Массив; МассивДвоичныхДанных = Новый Массив;
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1); МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2); МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных); Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
КонецФункции КонецФункции
Функция ПовторитьСтроку(Строка, Количество) Экспорт Функция ПовторитьСтроку(Строка, Количество) Экспорт
Части = Новый Массив(Количество); Части = Новый Массив(Количество);
Для К = 1 По Количество Цикл Для К = 1 По Количество Цикл
Части.Добавить(Строка); Части.Добавить(Строка);
КонецЦикла; КонецЦикла;
Возврат СтрСоединить(Части, ""); Возврат СтрСоединить(Части, "");
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти