#Область ПрограммныйИнтерфейс Функция АктуальнаяВерсияКонфигурации(Конфигурация, ВерсияКонфигурации, ВерсияПлатформы = Неопределено) Экспорт АдресРесурса = АдресРесурсаПоИмениМетода("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"]; Если АктуальнаяВерсияПлатформы <> Неопределено Тогда АктуальнаяВерсияССервера = ТекущаяВерсия; КонецЕсли; КонецЕсли; НоваяСтрока = Кэш.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураОтбора); НоваяСтрока.АктуальнаяВерсия = АктуальнаяВерсияССервера; Возврат АктуальнаяВерсияССервера; КонецЕсли; Возврат Неопределено; КонецФункции #КонецОбласти