Прогресс-бар в Telegram: Можно, а зачем?

22.01.26

Интеграция - Мессенджеры и боты

Код позволяет выводить ход выполнения долгих циклов из 1С прямо в Telegram.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Внешняя обработка для тестирования прогресс-бара.
.epf 8,57Kb
24 Скачать бесплатно

Функционал реализован для контроля многочасовых фоновых процессов.

Универсальный модуль, который встраивается в любой цикл 1С и отправляет «живой» статус в Telegram. Инструмент позволяет удаленно контролировать ход выполнения, видеть реальную скорость обработки и понимать, когда именно процесс завершится.

Тестировал в Бухгалтерия КОРП МСФО (3.3.2.24) на Платформе 8.3.25.1394.

Привел полный исходный код ниже (на форме только 2 реквизита: ИдентификаторЧата и ТокенБота):

 

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура Тест(Команда)
	
	Если НЕ (ЗначениеЗаполнено(ИдентификаторЧата) и ЗначениеЗаполнено(ТокенБота)) Тогда
		
		Сообщить("Заполните идентификатор чата и ТокенБота");
		
		Возврат;
	
	КонецЕсли;
	
	ВыполнитьТестНаСервере(ИдентификаторЧата, ТокенБота);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ВыполнитьТестНаСервере(Знач ИдентификаторЧата, Знач ТокенБота)
	
	КоличествоИтераций = 2000000;
	
	НазваниеПрогрессБара = "Очень важный регламент";
	
	// Инициализация параметров
	ПараметрыВзаимодействия = ИнициализироватьПараметрыTelegram(НазваниеПрогрессБара, КоличествоИтераций, ИдентификаторЧата, ТокенБота);
	
	Для Счетчик = 0 По КоличествоИтераций - 1 Цикл
		
		// ... Здесь выполняется полезная нагрузка ...
		
		ОбновитьПрогрессБар(ПараметрыВзаимодействия, Счетчик);
		
	КонецЦикла;

	// Принудительное обновление для отображения 100%
	ОбновитьПрогрессБар(ПараметрыВзаимодействия, КоличествоИтераций, Истина);

КонецПроцедуры

// Инициализирует структуру параметров и устанавливает HTTP соединение.
//
// ПараметрыTelegram:
//  КоличествоСтрок   - Число  - Общее количество итераций цикла.
//  ИдентификаторЧата - Строка - ID чата или канала в Telegram.
//  ТокенБота         - Строка - Токен доступа к API бота.
//
// Возвращаемое значение:
//  Структура - Инициализированные параметры.
//
Функция ИнициализироватьПараметрыTelegram(НазваниеПрогрессБара, КоличествоСтрок, ИдентификаторЧата, ТокенБота)
	
	СоединениеHTTP = Новый HTTPСоединение("api.telegram.org", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
	
	ПараметрыTelegram = Новый Структура;
	ПараметрыTelegram.Вставить("НазваниеПрогрессБара",   НазваниеПрогрессБара);
	
	ПараметрыTelegram.Вставить("ИдентификаторЧата",      ИдентификаторЧата);
	ПараметрыTelegram.Вставить("ТокенБота",              ТокенБота);
	ПараметрыTelegram.Вставить("ЗадержкаОбновления",     3); // Секунды между отправкой запросов
	ПараметрыTelegram.Вставить("СоединениеHTTP",         СоединениеHTTP);
	ПараметрыTelegram.Вставить("КоличествоСтрок",        КоличествоСтрок);
	
	ПараметрыTelegram.Вставить("ДатаНачала",             ТекущаяДата());
	ПараметрыTelegram.Вставить("ДатаПоследнейОтправки", '00010101'); 
	ПараметрыTelegram.Вставить("ИдентификаторСообщения", Неопределено);
	
	ПараметрыTelegram.Вставить("ШкалаПолная", 			 "`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;`08;"); 
	ПараметрыTelegram.Вставить("ШкалаПустая", 			 "`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;`17;"); 
	
	Возврат ПараметрыTelegram;
	
КонецФункции

// Проверяет необходимость обновления и отправляет запрос в Telegram.
//
// ПараметрыTelegram:
//  ПараметрыTelegram         - Структура - ПараметрыTelegram взаимодействия (см. ИнициализироватьПараметрыTelegram).
//  ТекущийСчетчик    - Число     - Текущая итерация цикла.
//  Принудительно     - Булево    - Если Истина, сообщение будет отправлено без проверки задержки.
//
Процедура ОбновитьПрогрессБар(ПараметрыTelegram, Знач ТекущийСчетчик, Знач Принудительно = Ложь)

	ТекущаяДатаСеанса = ТекущаяДата();
	
	Если Принудительно Или (ТекущаяДатаСеанса - ПараметрыTelegram.ДатаПоследнейОтправки) >= ПараметрыTelegram.ЗадержкаОбновления Тогда
		
		ТекстСообщения = СформироватьТекстСообщения(ПараметрыTelegram, ТекущийСчетчик, ТекущаяДатаСеанса, Принудительно);
		Идентификатор  = ОтправитьЗапрос(ПараметрыTelegram, ТекстСообщения);
		
		Если Идентификатор <> Неопределено И ПараметрыTelegram.ИдентификаторСообщения = Неопределено Тогда
			ПараметрыTelegram.ИдентификаторСообщения = Идентификатор;
		КонецЕсли;
		
		ПараметрыTelegram.ДатаПоследнейОтправки = ТекущаяДатаСеанса;
		
	КонецЕсли;
	
КонецПроцедуры

// Формирует текст сообщения с прогресс-баром и статистикой.
Функция СформироватьТекстСообщения(ПараметрыTelegram, ТекущийСчетчик, ТекущаяДатаСеанса, Принудительно)
	
	Если ПараметрыTelegram.КоличествоСтрок = 0 Тогда 
		Возврат "Нет данных для обработки"; 
	КонецЕсли;

	ПроцентВыполнения 	  = Цел((ТекущийСчетчик / ПараметрыTelegram.КоличествоСтрок) * 100);
	КоличествоЗакрашенных = Цел(ПроцентВыполнения / 5); 
	ВизуальнаяШкала 	  = Лев(ПараметрыTelegram.ШкалаПолная, КоличествоЗакрашенных) + Лев(ПараметрыTelegram.ШкалаПустая, 20 - КоличествоЗакрашенных);
	ПрошлоСекунд 		  = ТекущаяДатаСеанса - ПараметрыTelegram.ДатаНачала;
	СкоростьОбработки     = ТекущийСчетчик / ?(ПрошлоСекунд = 0, 1, ПрошлоСекунд);
	ОсталосьСтрок         = ПараметрыTelegram.КоличествоСтрок - ТекущийСчетчик;
	ОсталосьСекунд        = ?(СкоростьОбработки = 0, 0, ОсталосьСтрок / СкоростьОбработки);
	СтрокаИтогов          = ?(Принудительно, "Выполнено за", "Осталось:");
	СекундыДляИтогов      = ?(Принудительно, ПрошлоСекунд, ОсталосьСекунд); 
	
	ШаблонСообщения = 
		"%1		
		|%2 %3%%
		|%4/%5 шт.
		|Скорость: %6 шт/сек
		|%7 %8";
		
	Результат = СтрШаблон(
		ШаблонСообщения,
		ПараметрыTelegram.НазваниеПрогрессБара,
		ВизуальнаяШкала,
		ПроцентВыполнения,
		Формат(ТекущийСчетчик, "ЧГ=0"),
		Формат(ПараметрыTelegram.КоличествоСтрок, "ЧГ=0"),
		Формат(СкоростьОбработки, "ЧДЦ=0; ЧГ=0"),
		СтрокаИтогов,
		ПредставлениеВремени(СекундыДляИтогов));
		
	Возврат Результат;

КонецФункции

// Отправляет или редактирует сообщение через API Telegram.
Функция ОтправитьЗапрос(ПараметрыTelegram, ТекстСообщения)
	
	ТекстКодированный = КодироватьСтроку(ТекстСообщения, СпособКодированияСтроки.URLВКодировкеURL);
	
	Если ПараметрыTelegram.ИдентификаторСообщения = Неопределено Тогда
		// Отправка нового сообщения
		АдресРесурса = СтрШаблон("/bot%1/sendMessage?chat_id=%2&text=%3", 
			ПараметрыTelegram.ТокенБота, 
			ПараметрыTelegram.ИдентификаторЧата, 
			ТекстКодированный);
	Иначе 
		// Редактирование существующего
		АдресРесурса = СтрШаблон("/bot%1/editMessageText?chat_id=%2&message_id=%3&text=%4", 
			ПараметрыTelegram.ТокенБота, 
			ПараметрыTelegram.ИдентификаторЧата, 
			ПараметрыTelegram.ИдентификаторСообщения, 
			ТекстКодированный);	
	КонецЕсли;
	
	ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса);
	
	Попытка
		
		Ответ = ПараметрыTelegram.СоединениеHTTP.Получить(ЗапросHTTP);
		
		// Разбор ответа нужен только при первой отправке, чтобы получить ID сообщения
		Если ПараметрыTelegram.ИдентификаторСообщения = Неопределено И Ответ.КодСостояния = 200 Тогда
			
			ЧтениеJSON = Новый ЧтениеJSON;
			ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
			СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
			ЧтениеJSON.Закрыть();
			
			Возврат СтруктураОтвета.result.message_id;
			
		КонецЕсли;
		
	Исключение
		//ЗаписьЖурналаРегистрации("TelegramBot", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
	Возврат ПараметрыTelegram.ИдентификаторСообщения;

КонецФункции

// Преобразует количество секунд в человекочитаемую строку.
Функция ПредставлениеВремени(Знач КоличествоСекунд)
	
	КоличествоСекунд = Цел(КоличествоСекунд);
	
	Если КоличествоСекунд < 60 Тогда
		Возврат СтрШаблон("%1 сек.", КоличествоСекунд);
	ИначеЕсли КоличествоСекунд < 3600 Тогда
		Возврат СтрШаблон("%1 мин. %2 сек.", Цел(КоличествоСекунд / 60), КоличествоСекунд % 60);
	Иначе
		Возврат СтрШаблон("%1 ч. %2 мин.", Цел(КоличествоСекунд / 3600), Цел((КоличествоСекунд % 3600) / 60));
	КонецЕсли;

КонецФункции

#КонецОбласти

 

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия КОРП, редакция 3.0, релизы 3.0.182.33

Вступайте в нашу телеграмм-группу Инфостарт

Telegram Интеграция Уведомления Прогресс-бар

См. также

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта 1С:Предприятие 8 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15250 руб.

18.06.2021    81831    327    275    

402

SALE! 50%

Управление взаимоотношениями с клиентами (CRM) Мессенджеры и боты SMS рассылки Email рассылки Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Расширение 1С с полным набором инструментов для качественных транзакционных, триггерных и маркетинговых рассылок Email, SMS, MAX, WhatsApp, Telegram. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

6100 3050 руб.

07.04.2014    93193    74    200    

156

Мобильная разработка Мессенджеры и боты 1С:Предприятие 8 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13420 руб.

27.12.2021    50125    129    175    

227

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    40493    44    55    

79

Мессенджеры и боты 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Платные (руб)

Универсальное расширение для отправки (напрямую и через прокси) печатных форм, отчетов, присоединённых файлов, табличных документов и произвольных вложений в чат Telegram прямо из 1С. Ручная и автоматическая фоновая загрузка по расписанию идентификаторов получателей Telegram. Хранение истории отправок сообщений с ограничением по времени хранения и с автоматической очисткой по мере истечения срока хранения.

5246 руб.

26.12.2023    5241    6    3    

14

Мессенджеры и боты Программист Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 3.0 Россия Абонемент ($m)

Небольшая публикация-обработка для исследования взаимодействия с ботами по API менеджера TG.

8 стартмани

04.12.2025    2588    4    aximo    0    

19

Мессенджеры и боты 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Расширение позволит вести чат по объектам базы 1С (справочники, документы) на формах объектов, с возможностью оповещения пользователей.

4 стартмани

29.10.2025    1286    5    Rassel8911    2    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. GG_Dots 44 22.01.26 16:09 Сейчас в теме
Спасибо, давно хотел у себя такое сделать! Возьму как пример!
2. Dark_Warrior56 22.01.26 16:25 Сейчас в теме
Супер, спасибо! Очень облегчили жизнь
3. SirAlex 22.01.26 17:03 Сейчас в теме
Прикольная тема, респект!:))
4. CheBurator 3232 24.01.26 19:00 Сейчас в теме
что будет если отвалился канал связи с инетом?
что будет если канал связи с инетом тормозит?
7. irtk 25.01.26 12:26 Сейчас в теме
(4) Думаю, что с учетом того, что это бесплатная разработка то:
что будет если отвалился канал связи с инетом? - просить Минцифры внести твой сайт в белый список.
что будет если канал связи с инетом тормозит? - переходить на Макс
5. bolikov 21 25.01.26 01:42 Сейчас в теме
А обновить прогресс бар на управляемой форме 1с уже научилась? Еще недавно для этого надо было направить запрос на сервер взаимодействия в Москву, а потом уже оно обновляло у тебя на форме. Или это мне приснилось и она и так не могла?
6. irtk 25.01.26 12:22 Сейчас в теме
(5) так вроде бы уже научились с сервера на клиент слать уведомления в прошлом году безо всяких взаимодействий
Для отправки сообщения требуется регистрация/авторизация