diff --git a/OInt/core/Modules/OPI_YandexDisk.os b/OInt/core/Modules/OPI_YandexDisk.os index 24194f366..2b0d817aa 100644 --- a/OInt/core/Modules/OPI_YandexDisk.os +++ b/OInt/core/Modules/OPI_YandexDisk.os @@ -234,22 +234,33 @@ // Строка, Произвольный, ДвоичныеДанные, HTTPОтвет, Неопределено - Ответ сервера Yandex Функция ПереместитьОбъект(Знач Токен, Знач Оригинал, Знач Путь, Знач Перезаписывать = Ложь) Экспорт - Заголовки = ЗаголовокАвторизации(Токен); - URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; - Href = "href"; + Попытка + + Заголовки = ЗаголовокАвторизации(Токен); + URL = "https://cloud-api.yandex.net/v1/disk/resources/move"; + Href = "href"; + Ответ = ""; + Этап = ""; + + Параметры = Новый Структура; + Параметры.Вставить("from" , Оригинал); + Параметры.Вставить("path" , Путь); + Параметры.Вставить("overwrite" , Перезаписывать); + + Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); + + Этап = "POST запрос к " + URL; + Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); + URLОтвета = Ответ[Href]; + + Этап = "GET запрос к " + Строка(URLОтвета); + Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); + + Возврат Ответ; - Параметры = Новый Структура; - Параметры.Вставить("from" , Оригинал); - Параметры.Вставить("path" , Путь); - Параметры.Вставить("overwrite" , Перезаписывать); - - Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); - Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); - - URLОтвета = Ответ[Href]; - Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); - - Возврат Ответ; + Исключение + ВызватьИсключение OPI_Инструменты.ИсключениеМногошаговойОперации(Этап, ОписаниеОшибки(), Ответ); + КонецПопытки; КонецФункции diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index 114fc79d1..22be2e967 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -94,89 +94,6 @@ #КонецОбласти -Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт - - СоответствиеВозврата = Новый Соответствие; - КоличествоЧастей = 2; - МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь); - - Для Каждого Параметр Из МассивПараметров Цикл - - МассивКлючЗначение = СтрРазделить(Параметр, "="); - - Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда - СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]); - КонецЕсли; - - КонецЦикла; - - Возврат СоответствиеВозврата; - -КонецФункции - -Функция ПолучитьТекущуюДату() Экспорт - Возврат МестноеВремя(ТекущаяУниверсальнаяДата()); -КонецФункции - -Функция UNIXTime(Знач Дата) Экспорт - - ОТД = Новый ОписаниеТипов("Дата"); - Дата = ОТД.ПривестиЗначение(Дата); - - Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0"); - -КонецФункции - -Процедура ЗаменитьСпецСимволы(Текст) Экспорт - - МассивСимволов = Новый Соответствие; - МассивСимволов.Вставить("<", "<"); - МассивСимволов.Вставить(">", ">"); - МассивСимволов.Вставить("&", "&"); - МассивСимволов.Вставить("_", " "); - МассивСимволов.Вставить("[", "("); - МассивСимволов.Вставить("]", ")"); - - Для Каждого СимволМассива Из МассивСимволов Цикл - Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура УдалитьПустыеПоляКоллекции(Коллекция) Экспорт - - ТипКоллекции = ТипЗнч(Коллекция); - ВыходнаяКоллекция = Новый(ТипКоллекции); - - Если ТипКоллекции = Тип("Соответствие") Или ТипКоллекции = Тип("Структура") Тогда - - УдалитьПустыеКлючиЗначения(Коллекция, ВыходнаяКоллекция); - - ИначеЕсли ТипКоллекции = Тип("Массив") Тогда - - УдалитьПустыеЭлементыМассива(Коллекция, ВыходнаяКоллекция); - - Иначе - - ВыходнаяКоллекция = Коллекция; - - КонецЕсли; - - Коллекция = ВыходнаяКоллекция; - -КонецПроцедуры - -Процедура Пауза(Знач Секунды) Экспорт - - Соединение = Новый HTTPСоединение("1C.ru", 11111, , , , Секунды); - Попытка - Соединение.Получить(Новый HTTPЗапрос("")); - Исключение - Возврат; - КонецПопытки; - -КонецПроцедуры - #КонецОбласти #Область Служебные @@ -256,11 +173,17 @@ , Ложь , Ложь); - ЗаписьJSON = Новый ЗаписьJSON; - ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); - - ЗаписатьJSON(ЗаписьJSON, Данные); - Возврат ЗаписьJSON.Закрыть(); + Попытка + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); + + ЗаписатьJSON(ЗаписьJSON, Данные); + Возврат ЗаписьJSON.Закрыть(); + + Исключение + Возврат "НЕ JSON: " + Строка(Данные); + КонецПопытки; КонецФункции @@ -280,6 +203,65 @@ КонецФункции +Функция ИсключениеМногошаговойОперации(Знач Этап, Знач ОписаниеОшибки, Знач ПоследнийОтвет = "") Экспорт + + ТекстОшибки = "Ошибка на одном из шагов выполнения операции!"; + ТекстОшибки = ТекстОшибки + Символы.ПС + "Промежуточный этап: " + Этап; + + Если ЗначениеЗаполнено(ПоследнийОтвет) Тогда + + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + "Последний ответ: " + Символы.ПС; + + Если ТипЗнч(ПоследнийОтвет) = Тип("Структура") + Или ТипЗнч(ПоследнийОтвет) = Тип("Соответствие") Тогда + + ТекстОшибки = ТекстОшибки + JSONСтрокой(ПоследнийОтвет); + + Иначе + ТекстОшибки = ТекстОшибки + ?(ЗначениеЗаполнено(ПоследнийОтвет), Строка(ПоследнийОтвет), "<отсутствует>"); + КонецЕсли; + + КонецЕсли; + + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + "Описание ошибки: " + Символы.ПС + ОписаниеОшибки; + + Возврат ТекстОшибки; + +КонецФункции + +Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт + + СоответствиеВозврата = Новый Соответствие; + КоличествоЧастей = 2; + МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь); + + Для Каждого Параметр Из МассивПараметров Цикл + + МассивКлючЗначение = СтрРазделить(Параметр, "="); + + Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда + СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]); + КонецЕсли; + + КонецЦикла; + + Возврат СоответствиеВозврата; + +КонецФункции + +Функция ПолучитьТекущуюДату() Экспорт + Возврат МестноеВремя(ТекущаяУниверсальнаяДата()); +КонецФункции + +Функция UNIXTime(Знач Дата) Экспорт + + ОТД = Новый ОписаниеТипов("Дата"); + Дата = ОТД.ПривестиЗначение(Дата); + + Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0"); + +КонецФункции + Процедура ЗначениеВМассив(Значение) Экспорт Значение_ = Новый Массив; @@ -288,6 +270,57 @@ КонецПроцедуры +Процедура ЗаменитьСпецСимволы(Текст) Экспорт + + МассивСимволов = Новый Соответствие; + МассивСимволов.Вставить("<", "<"); + МассивСимволов.Вставить(">", ">"); + МассивСимволов.Вставить("&", "&"); + МассивСимволов.Вставить("_", " "); + МассивСимволов.Вставить("[", "("); + МассивСимволов.Вставить("]", ")"); + + Для Каждого СимволМассива Из МассивСимволов Цикл + Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьПустыеПоляКоллекции(Коллекция) Экспорт + + ТипКоллекции = ТипЗнч(Коллекция); + ВыходнаяКоллекция = Новый(ТипКоллекции); + + Если ТипКоллекции = Тип("Соответствие") Или ТипКоллекции = Тип("Структура") Тогда + + УдалитьПустыеКлючиЗначения(Коллекция, ВыходнаяКоллекция); + + ИначеЕсли ТипКоллекции = Тип("Массив") Тогда + + УдалитьПустыеЭлементыМассива(Коллекция, ВыходнаяКоллекция); + + Иначе + + ВыходнаяКоллекция = Коллекция; + + КонецЕсли; + + Коллекция = ВыходнаяКоллекция; + +КонецПроцедуры + +Процедура Пауза(Знач Секунды) Экспорт + + Соединение = Новый HTTPСоединение("1C.ru", 11111, , , , Секунды); + Попытка + Соединение.Получить(Новый HTTPЗапрос("")); + Исключение + Возврат; + КонецПопытки; + +КонецПроцедуры + + #КонецОбласти #КонецОбласти