Расширил функциональность бота новыми командами

- Периодическая проверка актуальности конфигураций
- Автоматическое оповещение о версиях, требующих обновления
- Получение статуса указанной конфигурации
- Включение и выключение уведомлений о версиях, требующих обновления
This commit is contained in:
2025-06-26 17:12:32 +03:00
parent 77535f6a73
commit ddb0c43e97
16 changed files with 564 additions and 100 deletions

View File

@@ -52,6 +52,39 @@
КонецФункции
Функция СтатусКонфигурацииИзПодписки(ИдЧата, Конфигурация) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Наименование КАК Наименование,
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|ИЗ
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций
|ГДЕ
| ОтслеживаниеВерсийКонфигураций.ИдЧата = &ИдЧата
| И ОтслеживаниеВерсийКонфигураций.Конфигурация = &Конфигурация";
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
Запрос.УстановитьПараметр("Конфигурация", Конфигурация);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Результат = Новый Структура("Наименование, ТекущаяВерсия, АктуальнаяВерсия",
ВыборкаДетальныеЗаписи.Наименование,
ВыборкаДетальныеЗаписи.ТекущаяВерсия,
ВыборкаДетальныеЗаписи.АктуальнаяВерсия);
Возврат Результат;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция СписокКонфигураций(ИдЧата) Экспорт
Запрос = Новый Запрос;
@@ -97,54 +130,6 @@
КонецФункции
Функция АктуализироватьВерсииКонфигураций()Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтслеживаниеВерсийКонфигураций.Конфигурация КАК Конфигурация,
| ОтслеживаниеВерсийКонфигураций.ИдЧата КАК ИдЧата,
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|ИЗ
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
КэшАктуальныхВерсий = РезультатЗапроса.Выгрузить().СкопироватьКолонки();
КэшАктуальныхВерсий.Колонки.Удалить("ИдЧата");
ОбработаноЗаписей = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Конфигурация = ВыборкаДетальныеЗаписи.Конфигурация;
ТекущаяВерсия = ВыборкаДетальныеЗаписи.ТекущаяВерсия;
ИдЧата = ВыборкаДетальныеЗаписи.ИдЧата;
АктуальнаяВерсия = ПолучитьИзКэшаАктуальнуюВерсию(КэшАктуальныхВерсий, Конфигурация, ТекущаяВерсия);
Если АктуальнаяВерсия = Неопределено Тогда
Продолжить;
КонецЕсли;
Если АктуальнаяВерсия = ВыборкаДетальныеЗаписи.АктуальнаяВерсия Тогда
Продолжить;
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Конфигурация = Конфигурация;
МенеджерЗаписи.ИдЧата = ИдЧата;
МенеджерЗаписи.ТекущаяВерсия = ТекущаяВерсия;
МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
МенеджерЗаписи.Записать();
ОбработаноЗаписей = ОбработаноЗаписей + 1;
КонецЦикла;
Возврат ОбработаноЗаписей;
КонецФункции
Функция КонфигурацияПоИмени(ИмяКонфигурации) Экспорт
Запрос = Новый Запрос;
@@ -189,17 +174,17 @@
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ПользовательОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Если ПользовательОбъект <> Неопределено Тогда
ПользовательОбъект.СтатусДиалога = НовыйСтатус;
ПользовательОбъект.ДополнительнаяИнформация = ДополнительнаяИнформация;
ПользовательОбъект.Записать();
КонецЕсли;
ПользовательОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Если ПользовательОбъект <> Неопределено Тогда
ПользовательОбъект.СтатусДиалога = НовыйСтатус;
ПользовательОбъект.ДополнительнаяИнформация = ДополнительнаяИнформация;
ПользовательОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьДанныеПользователя(ИдЧата) Экспорт
Функция ДанныеПользователя(ИдЧата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
@@ -226,6 +211,61 @@
КонецФункции
Функция СписокНеактуальныхКонфигурацийДляУведомления() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УведомленияОНовыхВерсиях.ИдЧата КАК ИдЧата
|ПОМЕСТИТЬ ВТатыПолучающиеУведомления
|ИЗ
| РегистрСведений.УведомленияОНовыхВерсиях КАК УведомленияОНовыхВерсиях
|ГДЕ
| УведомленияОНовыхВерсиях.ОтправлятьУведомления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОтслеживаниеВерсийКонфигураций.ИдЧата КАК ИдЧата,
| ПРЕДСТАВЛЕНИЕССЫЛКИ(ОтслеживаниеВерсийКонфигураций.Конфигурация) КАК КонфигурацияПредставление,
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|ИЗ
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций
|ГДЕ
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия <> ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия
| И ОтслеживаниеВерсийКонфигураций.ИдЧата В
| (ВЫБРАТЬ
| Т.ИдЧата
| ИЗ
| ВТатыПолучающиеУведомления КАК Т)
|ИТОГИ ПО
| ИдЧата";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаИдЧата = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ДанныеДляУведомлений = Новый Массив;
Пока ВыборкаИдЧата.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаИдЧата.Выбрать();
ДанныеВерсийКонфигураций = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДанныеВерсийКонфигураций.Добавить(Новый Структура("КонфигурацияПредставление, ТекущаяВерсия, АктуальнаяВерсия",
ВыборкаДетальныеЗаписи.КонфигурацияПредставление,
ВыборкаДетальныеЗаписи.ТекущаяВерсия,
ВыборкаДетальныеЗаписи.АктуальнаяВерсия));
КонецЦикла;
ДанныеДляУведомлений.Добавить(Новый Структура("ИдЧата, Конфигурации", ВыборкаИдЧата.ИдЧата, ДанныеВерсийКонфигураций));
КонецЦикла;
Возврат ДанныеДляУведомлений;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -242,35 +282,4 @@
КонецФункции
Функция ПолучитьИзКэшаАктуальнуюВерсию(Кэш, Конфигурация, ТекущаяВерсия)
СтруктураОтбора = Новый Структура("Конфигурация, ТекущаяВерсия", Конфигурация, ТекущаяВерсия);
МассивСтрок = Кэш.НайтиСтроки(СтруктураОтбора);
Если МассивСтрок.Количество() <> 0 Тогда
Возврат МассивСтрок[0].АктуальнаяВерсия;
КонецЕсли;
Ответ = АктуальнаяВерсияКонфигурации(Конфигурация, ТекущаяВерсия);
Если Ответ.Успех Тогда
АктуальнаяВерсияССервера = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"];
Если АктуальнаяВерсияССервера = Неопределено Тогда
//Если запрос выполнен без ошибок и в запросе была передана актуальная версия - с сервера обновлений приходит null.
// Дополнительно проверим версию платформы, если что-то пришло, значит текущая версия существует
// и её назначаем актуальной. Таким образом отличаем некорректную версию текущей конфигурации от совпадения текущей и актуальной.
АктуальнаяВерсияПлатформы = Ответ["Тело"]["platformUpdateResponse"]["platformVersion"];
Если АктуальнаяВерсияПлатформы <> Неопределено Тогда
АктуальнаяВерсияССервера = ТекущаяВерсия;
КонецЕсли;
КонецЕсли;
НоваяСтрока = Кэш.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураОтбора);
НоваяСтрока.АктуальнаяВерсия = АктуальнаяВерсияССервера;
Возврат АктуальнаяВерсияССервера;
КонецЕсли;
Возврат Неопределено;
КонецФункции
#КонецОбласти