Files
kashey 91ef839c7f - Добавил подсистему работы с обновлениями
- Сделал процедуры http запросов более универсальными
2025-05-21 12:04:34 +03:00

151 lines
9.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#Область ПрограммныйИнтерфейс
Функция АктуальнаяВерсияКонфигурации(Конфигурация, ВерсияКонфигурации, ВерсияПлатформы = Неопределено) Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("info");
ТелоЗапроса = Новый Структура("programName", Конфигурация.Имя);
ТелоЗапроса.Вставить("versionNumber", ВерсияКонфигурации);
ТелоЗапроса.Вставить("updateType", "NewConfigurationAndOrPlatform");
Если ВерсияПлатформы <> Неопределено Тогда
ТелоЗапроса.Вставить("platformVersion", ВерсияПлатформы);
Иначе
ТелоЗапроса.Вставить("platformVersion", "1.1.1.1");
КонецЕсли;
Соединение = Новый HTTPСоединение("update-api.1c.ru",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(Соединение, АдресРесурса, , ТелоЗапроса);
КонецФункции
Функция КонфигурацииИзПодписки(ИдЧата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Наименование КАК КонфигурацияНаименование,
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Имя КАК КонфигурацияИмя,
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|ИЗ
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций
|ГДЕ
| ОтслеживаниеВерсийКонфигураций.ИдЧата = &ИдЧата";
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
МассивКонфигураций = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Конфигурация = Новый Структура("Наименование, Имя, ТекущаяВерсия, АктуальнаяВерсия",
ВыборкаДетальныеЗаписи.КонфигурацияНаименование,ВыборкаДетальныеЗаписи.КонфигурацияИмя,
ВыборкаДетальныеЗаписи.ТекущаяВерсия, ВыборкаДетальныеЗаписи.АктуальнаяВерсия);
МассивКонфигураций.Добавить(Конфигурация);
КонецЦикла;
Возврат МассивКонфигураций;
КонецФункции
Функция АктуализироватьВерсииКонфигураций()Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтслеживаниеВерсийКонфигураций.Конфигурация КАК Конфигурация,
| ОтслеживаниеВерсийКонфигураций.ИдЧата КАК ИдЧата,
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|ИЗ
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
КэшАктуальныхВерсий = РезультатЗапроса.Выгрузить().СкопироватьКолонки();
КэшАктуальныхВерсий.Колонки.Удалить("ИдЧата");
ОбработаноЗаписей = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Конфигурация = ВыборкаДетальныеЗаписи.Конфигурация;
ТекущаяВерсия = ВыборкаДетальныеЗаписи.ТекущаяВерсия;
ИдЧата = ВыборкаДетальныеЗаписи.ИдЧата;
АктуальнаяВерсия = ПолучитьИзКэшаАктуальнуюВерсию(КэшАктуальныхВерсий, Конфигурация, ТекущаяВерсия);
Если АктуальнаяВерсия = Неопределено Тогда
Продолжить;
КонецЕсли;
Если АктуальнаяВерсия = ВыборкаДетальныеЗаписи.АктуальнаяВерсия Тогда
Продолжить;
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Конфигурация = Конфигурация;
МенеджерЗаписи.ИдЧата = ИдЧата;
МенеджерЗаписи.ТекущаяВерсия = ТекущаяВерсия;
МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
МенеджерЗаписи.Записать();
ОбработаноЗаписей = ОбработаноЗаписей + 1;
КонецЦикла;
Возврат ОбработаноЗаписей;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция БазовыйАдрес()
Возврат "update-platform/programs/update";
КонецФункции
Функция АдресРесурсаПоИмениМетода(ИмяМетода)
Возврат СтрШаблон("%1/%2", БазовыйАдрес(), ИмяМетода);
КонецФункции
Функция ПолучитьИзКэшаАктуальнуюВерсию(Кэш, Конфигурация, ТекущаяВерсия)
СтруктураОтбора = Новый Структура("Конфигурация, ТекущаяВерсия", Конфигурация, ТекущаяВерсия);
МассивСтрок = Кэш.НайтиСтроки(СтруктураОтбора);
Если МассивСтрок.Количество() <> 0 Тогда
Возврат МассивСтрок[0].АктуальнаяВерсия;
КонецЕсли;
Ответ = АктуальнаяВерсияКонфигурации(Конфигурация, ТекущаяВерсия);
Если Ответ.Успех Тогда
АктуальнаяВерсияССервера = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"];
Если АктуальнаяВерсияССервера = Неопределено Тогда
//Если запрос выполнен без ошибок и в запросе была передана актуальная версия - с сервера обновлений приходит null.
// Дополнительно проверим версию платформы, если что-то пришло, значит текущая версия существует
// и её назначаем актуальной. Таким образом отличаем некорректную версию текущей конфигурации от совпадения текущей и актуальной.
АктуальнаяВерсияПлатформы = Ответ["Тело"]["platformUpdateResponse"]["platformVersion"];
Если АктуальнаяВерсияПлатформы <> Неопределено Тогда
АктуальнаяВерсияССервера = ТекущаяВерсия;
КонецЕсли;
КонецЕсли;
НоваяСтрока = Кэш.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураОтбора);
НоваяСтрока.АктуальнаяВерсия = АктуальнаяВерсияССервера;
Возврат АктуальнаяВерсияССервера;
КонецЕсли;
Возврат Неопределено;
КонецФункции
#КонецОбласти