#Область ПрограммныйИнтерфейс Функция АктуализироватьВерсииКонфигураций() Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтслеживаниеВерсийКонфигураций.Конфигурация КАК Конфигурация, | ОтслеживаниеВерсийКонфигураций.ИдЧата КАК ИдЧата, | ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия, | ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия |ИЗ | РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); КэшАктуальныхВерсий = РезультатЗапроса.Выгрузить().СкопироватьКолонки(); КэшАктуальныхВерсий.Колонки.Удалить("ИдЧата"); ОбработаноЗаписей = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Конфигурация = ВыборкаДетальныеЗаписи.Конфигурация; ТекущаяВерсия = ВыборкаДетальныеЗаписи.ТекущаяВерсия; ИдЧата = ВыборкаДетальныеЗаписи.ИдЧата; АктуальнаяВерсия = ПолучитьИзКэшаАктуальнуюВерсию(КэшАктуальныхВерсий, Конфигурация, ТекущаяВерсия); Если АктуальнаяВерсия = Неопределено Тогда Продолжить; КонецЕсли; Если АктуальнаяВерсия = ВыборкаДетальныеЗаписи.АктуальнаяВерсия Тогда Продолжить; КонецЕсли; МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Конфигурация = Конфигурация; МенеджерЗаписи.ИдЧата = ИдЧата; МенеджерЗаписи.ТекущаяВерсия = ТекущаяВерсия; МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия; МенеджерЗаписи.Записать(); ОбработаноЗаписей = ОбработаноЗаписей + 1; КонецЦикла; Возврат ОбработаноЗаписей; КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция ПолучитьИзКэшаАктуальнуюВерсию(Кэш, Конфигурация, ТекущаяВерсия) СтруктураОтбора = Новый Структура("Конфигурация, ТекущаяВерсия", Конфигурация, ТекущаяВерсия); МассивСтрок = Кэш.НайтиСтроки(СтруктураОтбора); Если МассивСтрок.Количество() <> 0 Тогда Возврат МассивСтрок[0].АктуальнаяВерсия; КонецЕсли; Ответ = РаботаСОбновлениямиВызовСервера.АктуальнаяВерсияКонфигурации(Конфигурация, ТекущаяВерсия); Если Ответ.Успех Тогда АктуальнаяВерсияССервера = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"]; Если АктуальнаяВерсияССервера = Неопределено Тогда // Если запрос выполнен без ошибок и в запросе была передана актуальная версия - с сервера обновлений приходит null. // Дополнительно проверим версию платформы, если что-то пришло, значит текущая версия существует // и её назначаем актуальной. Таким образом отличаем некорректную версию текущей конфигурации // от совпадения текущей и актуальной. АктуальнаяВерсияПлатформы = Ответ["Тело"]["platformUpdateResponse"]["platformVersion"]; Если АктуальнаяВерсияПлатформы <> Неопределено Тогда АктуальнаяВерсияССервера = ТекущаяВерсия; КонецЕсли; КонецЕсли; НоваяСтрока = Кэш.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураОтбора); НоваяСтрока.АктуальнаяВерсия = АктуальнаяВерсияССервера; Возврат АктуальнаяВерсияССервера; КонецЕсли; Возврат Неопределено; КонецФункции #КонецОбласти