1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-25 02:42:28 +02:00

Начало унификации с OneScript, методы форума Telegram

This commit is contained in:
Anton Titovets 2024-03-01 11:14:30 +03:00
parent 4e01dfbdad
commit a34d35f789
15 changed files with 1011 additions and 646 deletions

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область РаботаСМетаданнымиКалендарей #Область РаботаСМетаданнымиКалендарей
@ -257,14 +260,15 @@
// Соответствие Из КлючИЗначение - Пустой макет события // Соответствие Из КлючИЗначение - Пустой макет события
Функция ПолучитьОписаниеСобытия() Экспорт Функция ПолучитьОписаниеСобытия() Экспорт
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДата();
Час = 3600; Час = 3600;
Событие = Новый Соответствие; Событие = Новый Соответствие;
Событие.Вставить("Описание" , ""); // Описание события Событие.Вставить("Описание" , ""); // Описание события
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
Событие.Вставить("ДатаНачала" , ТекущаяДатаСеанса()); // Дата начала события Событие.Вставить("ДатаНачала" , ТекущаяДата); // Дата начала события
Событие.Вставить("ДатаОкончания" , Событие["ДатаНачала"] + Час); // Дата окончания события Событие.Вставить("ДатаОкончания" , ТекущаяДата + Час); // Дата окончания события
Событие.Вставить("МассивURLФайловВложений", Новый Соответствие); // Ключ - название, Значение - URL к файлу Событие.Вставить("МассивURLФайловВложений", Новый Соответствие); // Ключ - название, Значение - URL к файлу
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
// Сформировать ссылку получения кода. // Сформировать ссылку получения кода.

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область РаботаСоСтраницами #Область РаботаСоСтраницами

View File

@ -24,6 +24,9 @@
// BSLLS:Typo-off // BSLLS:Typo-off
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область ДанныеИНастройка #Область ДанныеИНастройка
@ -94,102 +97,6 @@
КонецФункции КонецФункции
// Обработать данные, полученные на Webhook.
//
// Параметры:
// Запрос - HTTPСервисЗапрос - Запрос на http-сервис от Telegram
//
// Возвращаемое значение:
// Структура - Обработанный запрос на http-сервис от Telegram:
// * Вид - Строка - Вид запроса от телеграм
// * Никнейм - Строка - Никнейм пользователя
// * IDПользователя - Строка - ID пользователя
// * IDСообщения - Строка - ID сообщения
// * IDЧата - Строка - ID чата
// * Сообщение - Строка - Текст сообщения
// * Дата - Дата - Дата запроса
// * БотОтключен - Булево - Истина, если запрос - запрос остановки бота
Функция ОбработатьДанные(Знач Запрос) Экспорт
// BSLLS:DuplicateStringLiteral-off
Message = "message";
From = "from";
Chat = "chat";
Id_ = "id";
Username = "username";
MessageId = "message_id";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
СтруктураПараметровВходная = ПрочитатьJSON(ЧтениеJSON);
СтруктураПараметровВыходная = Новый Структура;
Если СтруктураПараметровВходная.Свойство(Message) Тогда
СтруктураСообщения = СтруктураПараметровВходная[Message];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Вид", "Сообщение");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", СтруктураСообщения[MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["text"]);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
ИначеЕсли СтруктураПараметровВходная.Свойство("my_chat_member") Тогда
СтруктураСообщения = СтруктураПараметровВходная["my_chat_member"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Вид", "Запуск/Остановка");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", "");
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["new_chat_member"]["status"]);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("БотОтключен", ?(СтруктураСообщения["new_chat_member"]["status"]
= "kicked", Истина, Ложь));
ИначеЕсли СтруктураПараметровВходная.Свойство("callback_query") Тогда
СтруктураСообщения = СтруктураПараметровВходная["callback_query"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураПараметровВыходная.Вставить("Вид", "Кнопка под сообщением");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", СтруктураСообщения[Message][MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураСообщения[Message][Chat][Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["data"]);
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения[Message]["date"]);
Иначе
СтруктураПараметровВыходная.Вставить("Вид", "");
СтруктураПараметровВыходная.Вставить("Никнейм", "");
СтруктураПараметровВыходная.Вставить("IDПользователя", "");
СтруктураПараметровВыходная.Вставить("IDСообщения", "");
СтруктураПараметровВыходная.Вставить("IDЧата", "");
СтруктураПараметровВыходная.Вставить("Сообщение", "");
СтруктураПараметровВыходная.Вставить("Дата", ТекущаяДатаСеанса());
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
КонецЕсли;
Возврат СтруктураПараметровВыходная;
// BSLLS:DuplicateStringLiteral-on
КонецФункции
#КонецОбласти #КонецОбласти
#Область ОтправкаДанных #Область ОтправкаДанных
@ -558,8 +465,9 @@
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("name" , Заголовок); Параметры_.Вставить("name" , Заголовок);
Если ЗначениеЗаполнено(ДатаИстечения) Тогда Если ЗначениеЗаполнено(ДатаИстечения) Тогда
Параметры_.Вставить("expire_date", Формат(ДатаИстечения - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0")); ДатаИстечения = OPI_Инструменты.UNIXTime(ДатаИстечения);
Параметры_.Вставить("expire_date", ДатаИстечения);
КонецЕсли; КонецЕсли;
Параметры_.Вставить("member_limit", ЛимитПользователей); Параметры_.Вставить("member_limit", ЛимитПользователей);
@ -682,7 +590,7 @@
ТЗнач.Сортировать("Ключ"); ТЗнач.Сортировать("Ключ");
СоответствиеВозврата = Новый Соответствие; СоответствиеВозврата = Новый Соответствие;
DCS = ""; DCS = "";
Для Каждого СтрокаТЗ Из ТЗнач Цикл Для Каждого СтрокаТЗ Из ТЗнач Цикл
@ -782,8 +690,8 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Неопределено, HTTPОтвет - Ответ сервера Telegram // Неопределено, HTTPОтвет - Ответ сервера Telegram
Функция ЗакрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт Функция ЗакрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 2); Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 2, IDТемы);
КонецФункции КонецФункции
// Открыть тему форума. // Открыть тему форума.
@ -795,8 +703,8 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Неопределено, HTTPОтвет - Ответ сервера Telegram // Неопределено, HTTPОтвет - Ответ сервера Telegram
Функция ОткрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт Функция ОткрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 1); Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 1, IDТемы);
КонецФункции КонецФункции
// Удалить тему форума. // Удалить тему форума.
@ -809,7 +717,84 @@
// Возвращаемое значение: // Возвращаемое значение:
// Неопределено, HTTPОтвет - Ответ сервера Telegram // Неопределено, HTTPОтвет - Ответ сервера Telegram
Функция УдалитьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт Функция УдалитьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 3); Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 3, IDТемы);
КонецФункции
// Скрыть главную тему форума.
//
// Параметры:
// Токен - Строка - Токен
// IDЧата - Строка,Число - ID чата темы
//
// Возвращаемое значение:
// HTTPОтвет - Ответ сервера Telegram
Функция СкрытьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Истина);
КонецФункции
// Показать главную тему форума.
//
// Параметры:
// Токен - Строка - Токен
// IDЧата - Строка,Число - ID чата темы
//
// Возвращаемое значение:
// HTTPОтвет - Ответ сервера Telegram
Функция ПоказатьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Ложь);
КонецФункции
// Изменить имя главной темы форума.
//
// Параметры:
// Токен - Строка - Токен
// IDЧата - Строка,Число - ID Чата темы
// Заголовок - Строка - Новый заголовок
//
// Возвращаемое значение:
// HTTPОтвет - Ответ сервера Telegram
Функция ИзменитьИмяГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Заголовок) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("name" , Заголовок);
URL = "api.telegram.org/bot" + Токен + "/editGeneralForumTopic";
Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
КонецФункции
// Очистить список закрепленных сообщений темы.
//
// Параметры:
// Токен - Строка - Токен
// IDЧата - Строка,Число - ID чата темы
// IDТемы - Строка - ID темы. Главная, если не заполнено
//
// Возвращаемое значение:
// HTTPОтвет - Очистить список закрепленных сообщений темы
Функция ОчиститьСписокЗакрепленныхСообщенийТемы(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
IDТемы = OPI_Инструменты.ЧислоВСтроку(IDТемы);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id", IDЧата);
Если ЗначениеЗаполнено(IDТемы) Тогда
Метод = "/unpinAllForumTopicMessages";
Параметры_.Вставить("message_thread_id", IDТемы);
Иначе
Метод = "/unpinAllGeneralForumTopicMessages";
КонецЕсли;
URL = "api.telegram.org/bot" + Токен + Метод;
Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -830,27 +815,9 @@
, Знач ОднаПодОдной = Истина) Экспорт , Знач ОднаПодОдной = Истина) Экспорт
Если ОднаПодОдной Тогда Если ОднаПодОдной Тогда
Строки = СоздатьВысокуюКлавиатуру(МассивКнопок);
Строки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопки = Новый Массив;
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
Строки.Добавить(Кнопки);
КонецЦикла;
Иначе Иначе
Строки = СоздатьДлиннуюКлваиатуру(МассивКнопок);
Строки = Новый Массив;
Кнопки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
КонецЦикла;
Строки.Добавить(Кнопки);
КонецЕсли; КонецЕсли;
Если ПодСообщением Тогда Если ПодСообщением Тогда
@ -915,7 +882,8 @@
, Знач IDИконки = Неопределено , Знач IDИконки = Неопределено
, Знач IDТемы = "") , Знач IDТемы = "")
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); IDТемы = OPI_Инструменты.ЧислоВСтроку(IDТемы);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("name" , Заголовок); Параметры_.Вставить("name" , Заголовок);
@ -923,16 +891,10 @@
Параметры_.Вставить("icon_custom_emoji_id", IDИконки); Параметры_.Вставить("icon_custom_emoji_id", IDИконки);
Если ЗначениеЗаполнено(IDТемы) Тогда Если ЗначениеЗаполнено(IDТемы) Тогда
IDТемы = OPI_Инструменты.ЧислоВСтроку(IDТемы);
Метод = "/editForumTopic"; Метод = "/editForumTopic";
Параметры_.Вставить("message_thread_id", IDТемы); Параметры_.Вставить("message_thread_id", IDТемы);
Иначе Иначе
Метод = "/createForumTopic"; Метод = "/createForumTopic";
КонецЕсли; КонецЕсли;
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры_); OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры_);
@ -942,28 +904,102 @@
КонецФункции КонецФункции
Функция УправлениеСостояниемТемыФорума(Знач Токен, Знач IDЧата, Знач IDТемы, Знач Статус) Функция УправлениеСостояниемТемыФорума(Знач Токен, Знач IDЧата, Знач Статус, Знач IDТемы = "")
Если Статус = 1 Тогда Если ЗначениеЗаполнено(IDТемы) Тогда
Метод = "/reopenForumTopic"; Форум = "Forum";
ИначеЕсли Статус = 2 Тогда
Метод = "/closeForumTopic";
ИначеЕсли Статус = 3 Тогда
Метод = "/deleteForumTopic";
Иначе Иначе
Возврат Неопределено; Форум = "GeneralForum";
КонецЕсли;
IDТемы = OPI_Инструменты.ЧислоВСтроку(IDТемы);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Метод = ОпределитьМетодУправленияФорумом(Статус, Форум);
Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id", IDЧата);
Если ЗначениеЗаполнено(IDТемы) Тогда
Параметры_.Вставить("message_thread_id", IDТемы);
КонецЕсли;
URL = "api.telegram.org/bot" + Токен + Метод;
Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
КонецФункции
Функция УправлениеВидимостьюГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Скрыть)
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Если Скрыть Тогда
Метод = "/hideGeneralForumTopic";
Иначе
Метод = "/unhideGeneralForumTopic";
КонецЕсли; КонецЕсли;
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("message_thread_id", IDТемы);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры_); URL = "api.telegram.org/bot" + Токен + Метод;
Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
Функция ОпределитьМетодУправленияФорумом(Знач Статус, Знач Форум)
Открыть = 1;
Закрыть = 2;
Удалить = 3;
Если Статус = Открыть Тогда
Метод = "/reopen" + Форум + "Topic";
ИначеЕсли Статус = Закрыть Тогда
Метод = "/close" + Форум + "Topic";
ИначеЕсли Статус = Удалить Тогда
Метод = "/deleteForumTopic";
Иначе
ВызватьИсключение "Некорректный статус управления форумом";
КонецЕсли;
Возврат Метод;
КонецФункции
Функция СоздатьВысокуюКлавиатуру(Знач МассивКнопок)
Строки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопки = Новый Массив;
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
Строки.Добавить(Кнопки);
КонецЦикла;
Возврат Строки;
КонецФункции
Функция СоздатьДлиннуюКлваиатуру(Знач МассивКнопок)
Строки = Новый Массив;
Кнопки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
КонецЦикла;
Строки.Добавить(Кнопки);
Возврат Строки;
КонецФункции
Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа) Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа)
Счетчик = 0; Счетчик = 0;

View File

@ -26,6 +26,9 @@
// BSLLS:Typo-off // BSLLS:Typo-off
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область ДанныеИНастройка #Область ДанныеИНастройка
@ -490,6 +493,7 @@
Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL) Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДата();
ЗаголовокАвторизации = ""; ЗаголовокАвторизации = "";
МетодХэширования = "HMAC-SHA1"; МетодХэширования = "HMAC-SHA1";
ВерсияАпи = "1.0"; ВерсияАпи = "1.0";
@ -497,7 +501,7 @@
Подпись = ""; Подпись = "";
OCK = "oauth_consumer_key"; OCK = "oauth_consumer_key";
OTK = "oauth_token"; OTK = "oauth_token";
ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДатаСеанса()); ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДата);
ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX); ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
ТаблицаПараметров = Новый ТаблицаЗначений; ТаблицаПараметров = Новый ТаблицаЗначений;
ТаблицаПараметров.Колонки.Добавить("Ключ"); ТаблицаПараметров.Колонки.Добавить("Ключ");

View File

@ -26,6 +26,9 @@
// BSLLS:NumberOfOptionalParams-off // BSLLS:NumberOfOptionalParams-off
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область ПолучениеТокена #Область ПолучениеТокена
@ -653,12 +656,13 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера
Функция СоздатьРекламнуюКампанию(Знач IDКабинета, Знач Наименование, Знач Параметры = "") Экспорт Функция СоздатьРекламнуюКампанию(Знач IDКабинета, Знач Наименование, Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДата();
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета)); Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета));
МассивСтруктур = Новый Массив; МассивСтруктур = Новый Массив;
ДатаСтарт = Формат(ТекущаяДатаСеанса() - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); ДатаСтарт = Формат(ТекущаяДата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
ДатаСтоп = Формат(ДобавитьМесяц(ТекущаяДатаСеанса(), 24) - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); ДатаСтоп = Формат(ДобавитьМесяц(ТекущаяДата, 24) - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
СтруктураКампании = Новый Структура; СтруктураКампании = Новый Структура;
СтруктураКампании.Вставить("type" , "promoted_posts"); СтруктураКампании.Вставить("type" , "promoted_posts");

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область НастройкиИИнформация #Область НастройкиИИнформация

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область РаботаСФайламиИПапками #Область РаботаСФайламиИПапками

View File

@ -22,6 +22,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
// Получить код подтверждения. // Получить код подтверждения.

View File

@ -23,6 +23,9 @@
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off // BSLLS:Typo-off
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
#Область HTTPМетоды #Область HTTPМетоды
@ -103,6 +106,13 @@
Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
КонецФункции КонецФункции
Функция ПолучитьТекущуюДата() Экспорт
//@skip-check use-non-recommended-method
Возврат ТекущаяДата();
КонецФункции
Процедура ЗаменитьСпецСимволы(Текст) Экспорт Процедура ЗаменитьСпецСимволы(Текст) Экспорт
МассивСимволов = Новый Соответствие; МассивСимволов = Новый Соответствие;
@ -142,6 +152,17 @@
КонецПроцедуры КонецПроцедуры
Процедура Пауза(Знач Секунды) Экспорт
Соединение = Новый HTTPСоединение("1C.ru", 11111, , , , Секунды);
Попытка
Соединение.Получить(Новый HTTPЗапрос(""));
Исключение
Возврат;
Конецпопытки;
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область Служебные #Область Служебные
@ -155,8 +176,12 @@
СтрокаПараметров = "?"; СтрокаПараметров = "?";
Для Каждого Параметр Из Параметры Цикл Для Каждого Параметр Из Параметры Цикл
СтрокаПараметров = СтрокаПараметров + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СтрокаПараметров = СтрокаПараметров
СпособКодированияСтроки.КодировкаURL) + "&"; + Параметр.Ключ
+ "="
+ КодироватьСтроку(Параметр.Значение,
СпособКодированияСтроки.КодировкаURL)
+ "&";
КонецЦикла; КонецЦикла;
СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1); СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
@ -171,22 +196,32 @@
URL = СтрЗаменить(URL, "http://", ""); URL = СтрЗаменить(URL, "http://", "");
URL = СтрЗаменить(URL, ":443", ""); URL = СтрЗаменить(URL, ":443", "");
Адрес = Прав(URL, СтрДлина(URL) - СтрНайти(URL, "/", НаправлениеПоиска.СНачала) + 1);
Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1);
Попытка
//@skip-check module-unused-local-variable
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Исключение
Сервер = "https://" + Сервер;
КонецПопытки;
СтруктураВозврата = Новый Структура; СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("Сервер", Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1)); СтруктураВозврата.Вставить("Сервер", Сервер);
СтруктураВозврата.Вставить("Адрес", Прав(URL, СтрДлина(URL) - СтрНайти(URL, "/", НаправлениеПоиска.СНачала) + 1)); СтруктураВозврата.Вставить("Адрес" , Адрес);
Возврат СтруктураВозврата; Возврат СтруктураВозврата;
КонецФункции КонецФункции
Функция JsonВСтруктуру(Знач Текст, Знач Кодировка = "utf-8") Экспорт Функция JsonВСтруктуру(Знач Текст) Экспорт
Если Не ЗначениеЗаполнено(Текст) Тогда Если Не ЗначениеЗаполнено(Текст) Тогда
Возврат ""; Возврат "";
КонецЕсли; КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьПоток(Текст.ОткрытьПотокДляЧтения()); ЧтениеJSON.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Текст));
Данные = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); Данные = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
ЧтениеJSON.Закрыть(); ЧтениеJSON.Закрыть();
@ -213,6 +248,18 @@
Возврат СтрЗаменить(Строка(Число), Символы.НПП, ""); Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
КонецФункции КонецФункции
Функция ПрочитатьJSONФайл(Знач Путь) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(Путь);
Значения = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат Значения;
КонецФункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
@ -350,7 +397,14 @@
КонецФункции КонецФункции
Функция СоздатьСоединение(Знач Сервер) Функция СоздатьСоединение(Знач Сервер)
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
Попытка
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, SSL);
Исключение
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300);
КонецПопытки;
КонецФункции КонецФункции
Функция ЭтоПереадресация(Знач Ответ) Функция ЭтоПереадресация(Знач Ответ)

View File

@ -0,0 +1,275 @@
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// 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
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
//Раскомментировать, если выполняется OneScript
//#Использовать ".."
// @skip-check undefined-variable
#Область СлужебныйПрограммныйИнтерфейс
Функция ОжидаетЧто(Значение) Экспорт
Попытка
Модуль = ПолучитьОбщийМодуль("ЮТест");
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
Возврат Модуль.ОжидаетЧто(Значение);
Исключение
Возврат Ожидаем.Что(Значение);
КонецПопытки;
КонецФункции
Функция СформироватьТестыЯкс() Экспорт
Модуль = ПолучитьОбщийМодуль("ЮТТесты");
МассивРазделов = ПолучитьМассивРазделовТестирования();
ТаблицаТестов = ПолучитьТаблицуТестов();
Для Каждого Раздел Из МассивРазделов Цикл
Отбор = Новый Структура("Раздел", Раздел);
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Набор = Модуль.ДобавитьТестовыйНабор(Раздел);
Для Каждого Тест Из ТестыРаздела Цикл
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
КонецЦикла;
КонецЦикла;
Возврат "";
КонецФункции
Функция СформироватьТестыАссертс() Экспорт
ТаблицаТестов = ПолучитьТаблицуТестов();
МассивТестов = Новый Массив;
Для Каждого Тест Из ТаблицаТестов Цикл
МассивТестов.Добавить(Тест.Метод);
КонецЦикла;
Возврат МассивТестов;
КонецФункции
Функция ПолучитьПараметр(Параметр) Экспорт
Путь = ПутьКФайлуДанных();
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
КонецФункции
Функция ПолучитьДвоичные(Параметр) Экспорт
Путь = ПутьКФайлуДанных();
Значение = ПолучитьЗначениеИзФайла(Параметр, Путь);
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = ПолучитьФайлПути(Значение);
КонецЕсли;
Возврат Значение;
КонецФункции
Функция ПолучитьФайлПути(Знач Путь) Экспорт
Если СтрНайти(Путь, "http") > 0
Или СтрНайти(Путь, "www") > 0 Тогда
ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Путь, ИВФ);
Путь = ИВФ;
Двоичные = Новый ДвоичныеДанные(Путь);
УдалитьФайлы(ИВФ);
Иначе
Двоичные = Новый ДвоичныеДанные(Путь);
КонецЕсли;
Возврат Двоичные;
КонецФункции
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
Путь = ПутьКФайлуДанных();
ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Возврат Значения[Параметр];
КонецФункции
Функция ПутьКФайлуДанных()
Возврат "C:\data.json";
КонецФункции
Функция ПолучитьМассивРазделовТестирования()
МассивРазделов = Новый Массив;
МассивРазделов.Добавить("Телеграм");
МассивРазделов.Добавить("ВКонтакте");
МассивРазделов.Добавить("Яндекс.Диск");
МассивРазделов.Добавить("Google Calendar");
МассивРазделов.Добавить("Twitter");
Возврат МассивРазделов;
КонецФункции
Функция ПолучитьТаблицуТестов()
Телеграм = "Телеграм";
ВКонтакте = "ВКонтакте";
ЯДиск = "Яндекс.Диск";
Календарь = "Google Calendar";
Твиттер = "Twitter";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
ТаблицаТестов.Колонки.Добавить("Синоним");
ТаблицаТестов.Колонки.Добавить("Раздел");
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_УдалитьWebhook" , "Удалить Webhook" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио" , "Отправить аудио" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент" , "Отправить документ" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку" , "Отправить гифку" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение" , "Отправить местоположение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт" , "Отправить контакт" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос" , "Отправить опрос" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение" , "Переслать сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан" , "Бан/Разбан" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ОткрытьЗакрытьГлавнуюТему" , "Открыть/Закрыть главную тему" , Телеграм);
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений" , "Действия с обсуждениями" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику" , "Получить статистику" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов" , "Получить статистику постов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение" , "Отправить сообщение" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку" , "Создать товар и подборку" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами" , "Создать товар со свойствами" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров" , "Получить список товаров" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок" , "Получить список подборок" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта" , "Создать копию объекта" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание" , "Получить ссылку на скачивание" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов" , "Получить список файлов" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьТокен" , "Получить токен" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ОбновитьТокен" , "Обновить токен" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
Возврат ТаблицаТестов;
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя);
УстановитьБезопасныйРежим(Ложь);
Возврат Модуль;
КонецФункции
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел);
НовыйТест = ТаблицаЗначений.Добавить();
НовыйТест.Метод = Метод;
НовыйТест.Синоним = Синоним;
НовыйТест.Раздел = Раздел;
КонецПроцедуры
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Значения.Вставить(Параметр, Значение);
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, Значения);
Запись.Закрыть();
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="546edcad-c9a0-4823-a44c-fefd7200de6c">
<name>OPI_ПолучениеДанныхТестов</name>
<synonym>
<key></key>
<value>OPI получение данных тестов</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca6868b2-8987-4ae3-9d97-50a8becc72df"> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca6868b2-8987-4ae3-9d97-50a8becc72df">
<name>YAX_Тесты</name> <name>OPI_Тесты</name>
<synonym> <synonym>
<key>ru</key> <key>ru</key>
<value>Тесты для YaxUnit (ОПИ)</value> <value>Тесты для YaxUnit (ОПИ)</value>
</synonym> </synonym>
<synonym>
<key></key>
<value>OPI тесты</value>
</synonym>
<server>true</server> <server>true</server>
<externalConnection>true</externalConnection> <externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -58,5 +58,6 @@
<commonModules>CommonModule.OPI_YandexDisk</commonModules> <commonModules>CommonModule.OPI_YandexDisk</commonModules>
<commonModules>CommonModule.OPI_GoogleWorkspace</commonModules> <commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
<commonModules>CommonModule.OPI_GoogleCalendar</commonModules> <commonModules>CommonModule.OPI_GoogleCalendar</commonModules>
<commonModules>CommonModule.YAX_Тесты</commonModules> <commonModules>CommonModule.OPI_Тесты</commonModules>
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
</mdclass:Configuration> </mdclass:Configuration>