Compare commits

...

2 Commits

Author SHA1 Message Date
32e52069e8 - Добавил вывод эмодзи в пункты меню 2025-05-28 17:14:24 +03:00
0954815c56 - Добавил оформление областей в общих модулях
- Декомпозиция процедур и функций общих модулей
2025-05-28 09:59:26 +03:00
10 changed files with 116 additions and 79 deletions

View File

@@ -17,8 +17,8 @@
ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм); ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм);
ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/delete" Тогда ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/delete" Тогда
ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм); ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм);
ИначеЕсли ДанныеПользователя <> Неопределено ИначеЕсли ДанныеПользователя <> Неопределено И ДанныеПользователя.СтатусДиалога =
И ДанныеПользователя.СтатусДиалога = Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда
ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя); ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя);
КонецЕсли; КонецЕсли;
ИначеЕсли ОбновлениеТелеграм.Свойство("ИдКоллбэка") <> Неопределено Тогда ИначеЕсли ОбновлениеТелеграм.Свойство("ИдКоллбэка") <> Неопределено Тогда
@@ -29,7 +29,6 @@
УдалитьКонфигурациюИзСпискаОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата); УдалитьКонфигурациюИзСпискаОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
@@ -56,9 +55,9 @@
"Для корректного отслеживания обновлений нужно ввести версию конфигурации (четыре группы цифр, разделённых точками):" + "Для корректного отслеживания обновлений нужно ввести версию конфигурации (четыре группы цифр, разделённых точками):" +
Символы.ПС + Символы.ПС +
"Например: 3.1.30.197"; "Например: 3.1.30.197";
РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии, РаботаСОбновлениямиВызовСервера.УстановитьДанныеПользователя(ИдЧата, Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии,
ИмяКонфигурации); ИмяКонфигурации);
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -86,7 +85,7 @@
ТекстОтвета = "При удалении данных возникла ошибка"; ТекстОтвета = "При удалении данных возникла ошибка";
КонецПопытки; КонецПопытки;
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -108,7 +107,7 @@
Если НЕ Ответ.Успех Тогда Если НЕ Ответ.Успех Тогда
ТекстОтвета = "При получении данных с сервера произошла ошибка"; ТекстОтвета = "При получении данных с сервера произошла ошибка";
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -116,7 +115,7 @@
Если АктуальнаяВерсия = Неопределено Тогда Если АктуальнаяВерсия = Неопределено Тогда
ТекстОтвета = СтрШаблон("Для указанной версии: %1 нет данных по актуальности", Версия); ТекстОтвета = СтрШаблон("Для указанной версии: %1 нет данных по актуальности", Версия);
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -127,13 +126,13 @@
МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия; МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
Попытка Попытка
МенеджерЗаписи.Записать(); МенеджерЗаписи.Записать();
РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.НачальноеСостояние, ""); РаботаСОбновлениямиВызовСервера.УстановитьДанныеПользователя(ИдЧата, Перечисления.ТелеграмСтатусДиалога.НачальноеСостояние, "");
ТекстОтвета = СтрШаблон("Версия: %1 успешно добавлена", Версия); ТекстОтвета = СтрШаблон("Версия: %1 успешно добавлена", Версия);
Исключение Исключение
ТекстОтвета = "При сохранении данных возникла ошибка"; ТекстОтвета = "При сохранении данных возникла ошибка";
КонецПопытки; КонецПопытки;
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
КонецПроцедуры КонецПроцедуры
@@ -148,7 +147,7 @@
Возврат Ложь; Возврат Ложь;
КонецЕсли; КонецЕсли;
Для Каждого ГруппаЦифрВерсии Из МассивГруппЦифр Цикл Для Каждого ГруппаЦифрВерсии Из МассивГруппЦифр Цикл
Если Не ТолькоЦифрыВСтроке(ГруппаЦифрВерсии) Тогда Если Не ОбщегоНазначенияКлиентСервер.ТолькоЦифрыВСтроке(ГруппаЦифрВерсии) Тогда
Возврат Ложь; Возврат Ложь;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -158,30 +157,6 @@
КонецФункции КонецФункции
Функция ТолькоЦифрыВСтроке(Знач Значение, Знач ПробелыЗапрещены = Истина) Экспорт
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Возврат Ложь;
КонецЕсли;
Если Не ПробелыЗапрещены Тогда
Значение = СтрЗаменить(Значение, " ", "");
КонецЕсли;
Если СтрДлина(Значение) = 0 Тогда
Возврат Истина;
КонецЕсли;
// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
Возврат СтрДлина(
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
КонецФункции
Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм) Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм)
ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС + ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС +
@@ -191,11 +166,11 @@
"- Присылать уведомления о выходе обновлений" + Символы.ПС + "- Присылать уведомления о выходе обновлений" + Символы.ПС +
"- Показывать текущую версию" + Символы.ПС + "- Показывать текущую версию" + Символы.ПС +
Символы.ВК + Символы.ПС + Символы.ВК + Символы.ПС +
"/subscribe - Список конфигураций для отслеживания" + Символы.ПС + "/subscribe - Список конфигураций для отслеживания &#128276" + Символы.ПС +
"/add - Добавить конфигурацию в список отслеживания" + Символы.ПС + "/add - Добавить конфигурацию в список отслеживания &#10133" + Символы.ПС +
"/delete - Удалить конфигурацию из списка отслеживания"; "/delete - Удалить конфигурацию из списка отслеживания &#10134";
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета, Перечисления.ТелеграмРежимРазметки.HTML);
КонецПроцедуры КонецПроцедуры
@@ -208,12 +183,12 @@
ТекстОтвета = "Не удалось получить список конфигураций"; ТекстОтвета = "Не удалось получить список конфигураций";
Иначе Иначе
Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
ТекстОтвета = ТекстОтвета + СтрШаблон("%1 %2%3", ?(ПунктМенюПодписки.Подписка, "[X]", "[ ]"), ТекстОтвета = ТекстОтвета + СтрШаблон("%1 %2%3", ?(ПунктМенюПодписки.Подписка, "✉️", "◼️"),
ПунктМенюПодписки.Наименование,Символы.ПС); ПунктМенюПодписки.Наименование,Символы.ПС);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,); ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета, Перечисления.ТелеграмРежимРазметки.HTML);
КонецПроцедуры КонецПроцедуры
@@ -222,7 +197,7 @@
ИдЧата = ОбновлениеТелеграм.ИдЧата; ИдЧата = ОбновлениеТелеграм.ИдЧата;
Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion); Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion);
МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Ложь); МассивРядов = ТелеграмРаботаСКлавиатурой.МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Ложь);
Если МассивРядов = Неопределено Тогда Если МассивРядов = Неопределено Тогда
ТекстОтвета = "Не удалось получить список конфигураций"; ТекстОтвета = "Не удалось получить список конфигураций";
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
@@ -239,7 +214,7 @@
ИдЧата = ОбновлениеТелеграм.ИдЧата; ИдЧата = ОбновлениеТелеграм.ИдЧата;
Команда = XMLстрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion); Команда = XMLстрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion);
МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Истина); МассивРядов = ТелеграмРаботаСКлавиатурой.МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Истина);
Если МассивРядов = Неопределено Тогда Если МассивРядов = Неопределено Тогда
ТекстОтвета = "Не удалось получить список конфигураций"; ТекстОтвета = "Не удалось получить список конфигураций";
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
@@ -252,32 +227,4 @@
КонецПроцедуры КонецПроцедуры
Функция МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Подписка = Неопределено)
СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ИдЧата);
Если СписокКонфигураций.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
МассивРядов = Новый Массив;
Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
Если Подписка = Неопределено
ИЛИ (Подписка И ПунктМенюПодписки.Подписка)
ИЛИ (НЕ Подписка И НЕ ПунктМенюПодписки.Подписка) Тогда
МассивКнопок = Новый Массив;
МассивКнопок.Добавить(ТелеграмРаботаСКлавиатурой.КнопкаКлавиатурыВстроенной(
ПунктМенюПодписки.Наименование
,
,
СтрШаблон("%1 %2", Команда, ПунктМенюПодписки.Имя)
));
МассивРядов.Добавить(МассивКнопок);
КонецЕсли;
КонецЦикла;
Возврат МассивРядов;
КонецЕсли;
КонецФункции
#КонецОбласти #КонецОбласти

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="6369b63c-3a4f-418b-8ae9-4cf9a6742883">
<Properties>
<Name>ОбщегоНазначенияКлиентСервер</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Общего назначения клиент сервер</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>true</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,26 @@
#Область ПрограммныйИнтерфейс
Функция ТолькоЦифрыВСтроке(Знач Значение, Знач ПробелыЗапрещены = Истина) Экспорт
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Возврат Ложь;
КонецЕсли;
Если Не ПробелыЗапрещены Тогда
Значение = СтрЗаменить(Значение, " ", "");
КонецЕсли;
Если СтрДлина(Значение) = 0 Тогда
Возврат Истина;
КонецЕсли;
// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
Возврат СтрДлина(
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
КонецФункции
#КонецОбласти

View File

@@ -170,7 +170,7 @@
КонецФункции КонецФункции
Процедура УстановитьСтатусДиалога(ИдЧата, НовыйСтатус, ДополнительнаяИнформация) Экспорт Процедура УстановитьДанныеПользователя(ИдЧата, НовыйСтатус, ДополнительнаяИнформация) Экспорт
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Текст = Запрос.Текст =

View File

@@ -1,4 +1,6 @@
Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт #Область ПрограммныйИнтерфейс
Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт
РасширениеФайла = ""; РасширениеФайла = "";
МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь);
@@ -8,3 +10,5 @@
Возврат РасширениеФайла; Возврат РасширениеФайла;
КонецФункции КонецФункции
#КонецОбласти

View File

@@ -1,12 +1,15 @@
Функция ТелеграмТокен() Экспорт #Область ПрограммныйИнтерфейс
Функция ТелеграмТокен() Экспорт
Возврат Константы.ТелеграмТокен.Получить(); Возврат Константы.ТелеграмТокен.Получить();
КонецФункции КонецФункции
Функция ЛогироватьHttpЗапросы() Экспорт Функция ЛогироватьHttpЗапросы() Экспорт
Возврат Константы.ЛогироватьHttpЗапросы.Получить(); Возврат Константы.ЛогироватьHttpЗапросы.Получить();
КонецФункции КонецФункции
#КонецОбласти

View File

@@ -1,4 +1,6 @@
Функция КлавиатураОтвета(Клавиатура, Компактная = Ложь, Одноразовая = Ложь) Экспорт #Область ПрограммныйИнтерфейс
Функция КлавиатураОтвета(Клавиатура, Компактная = Ложь, Одноразовая = Ложь) Экспорт
СоответствиеКлавиатуры = Новый Соответствие(); СоответствиеКлавиатуры = Новый Соответствие();
@@ -26,7 +28,6 @@
КонецФункции КонецФункции
Функция КнопкаКлавиатурыВстроенной(Надпись, Url = Неопределено, CallbackData = Неопределено) Экспорт Функция КнопкаКлавиатурыВстроенной(Надпись, Url = Неопределено, CallbackData = Неопределено) Экспорт
СоответствиеКнопка = Новый Соответствие; СоответствиеКнопка = Новый Соответствие;
@@ -69,5 +70,33 @@
КонецФункции КонецФункции
Функция МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Подписка = Неопределено) Экспорт
СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ИдЧата);
Если СписокКонфигураций.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
МассивРядов = Новый Массив;
Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
Если Подписка = Неопределено
ИЛИ (Подписка И ПунктМенюПодписки.Подписка)
ИЛИ (НЕ Подписка И НЕ ПунктМенюПодписки.Подписка) Тогда
МассивКнопок = Новый Массив;
МассивКнопок.Добавить(ТелеграмРаботаСКлавиатурой.КнопкаКлавиатурыВстроенной(
ПунктМенюПодписки.Наименование
,
,
СтрШаблон("%1 %2", Команда, ПунктМенюПодписки.Имя)
));
МассивРядов.Добавить(МассивКнопок);
КонецЕсли;
КонецЦикла;
Возврат МассивРядов;
КонецЕсли;
КонецФункции
#КонецОбласти

View File

@@ -1,4 +1,6 @@
// Получить обновления и обработать их по расписанию #Область ПрограммныйИнтерфейс
// Получить обновления и обработать их по расписанию
Процедура ПроверкаОбновленийПоРасписанию() Экспорт Процедура ПроверкаОбновленийПоРасписанию() Экспорт
// Проверка установлен ли вебхук // Проверка установлен ли вебхук
@@ -17,3 +19,5 @@
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
#КонецОбласти

View File

@@ -257,6 +257,7 @@
<CommonModule>ТелеграмРаботаСКлавиатурой</CommonModule> <CommonModule>ТелеграмРаботаСКлавиатурой</CommonModule>
<CommonModule>ТелеграмРегламент</CommonModule> <CommonModule>ТелеграмРегламент</CommonModule>
<CommonModule>БотОбщегоНазначения</CommonModule> <CommonModule>БотОбщегоНазначения</CommonModule>
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
<HTTPService>HTTPСервис_Telegram</HTTPService> <HTTPService>HTTPСервис_Telegram</HTTPService>
<ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob> <ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob>
<Constant>ТелеграмТокен</Constant> <Constant>ТелеграмТокен</Constant>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<VERSION>8</VERSION> <VERSION>10</VERSION>