From 9b13c6a98e6af5e9921326dc82c8721af81d4119 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Tue, 8 Sep 2020 23:31:21 +0300
Subject: [PATCH 1/8] =?UTF-8?q?#240=20=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20?=
 =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=20=D1=82?=
 =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B3=D1=80=D0=B0=D0=BC=D0=BC-=D0=B1=D0=BE?=
 =?UTF-8?q?=D1=82=D0=B0=20=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?=
 =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B5=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BC?=
 =?UTF-8?q?=D0=B0=D0=BD=D0=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/cf/CommonModules/узТелеграмБот.xml        |  23 +
 .../узТелеграмБот/Ext/Module.bsl              | 577 ++++++++++++++++++
 src/cf/CommonModules/узТелеграмБотКоманды.xml |  23 +
 .../узТелеграмБотКоманды/Ext/Module.bsl       | 225 +++++++
 src/cf/Configuration.xml                      |   3 +
 ...�олучениеИОбработкаСообщенийТелеграммБота.xml |  22 +
 .../Ext/Schedule.xml                          |   7 +
 7 files changed, 880 insertions(+)
 create mode 100644 src/cf/CommonModules/узТелеграмБот.xml
 create mode 100644 src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
 create mode 100644 src/cf/CommonModules/узТелеграмБотКоманды.xml
 create mode 100644 src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
 create mode 100644 src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота.xml
 create mode 100644 src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота/Ext/Schedule.xml

diff --git a/src/cf/CommonModules/узТелеграмБот.xml b/src/cf/CommonModules/узТелеграмБот.xml
new file mode 100644
index 000000000..c1488c6f8
--- /dev/null
+++ b/src/cf/CommonModules/узТелеграмБот.xml
@@ -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.10">
+	<CommonModule uuid="a09a4d95-e432-43c6-b8ec-1e5fe87fb22b">
+		<Properties>
+			<Name>узТелеграмБот</Name>
+			<Synonym>
+				<v8:item>
+					<v8:lang>ru</v8:lang>
+					<v8:content>Уз телеграм бот</v8:content>
+				</v8:item>
+			</Synonym>
+			<Comment/>
+			<Global>false</Global>
+			<ClientManagedApplication>false</ClientManagedApplication>
+			<Server>true</Server>
+			<ExternalConnection>false</ExternalConnection>
+			<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
+			<ServerCall>false</ServerCall>
+			<Privileged>false</Privileged>
+			<ReturnValuesReuse>DontUse</ReturnValuesReuse>
+		</Properties>
+	</CommonModule>
+</MetaDataObject>
\ No newline at end of file
diff --git a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
new file mode 100644
index 000000000..1aafc2ed1
--- /dev/null
+++ b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
@@ -0,0 +1,577 @@
+#Область ПрограммныйИнтерфейс
+
+// #240 Пиганов Г.В. 2020-09-08
+// Возвращает настройки бота
+//
+// Возвращаемое значение:
+// Структура - структура с параметрами
+// * ТокенБота - Строка - токен телеграмм-бота
+// * ТекущийПрокси - Неопределено - текущий индекс прокси. Заполняется в ЗаполнитьНастройкиПрокси
+//
+Функция НастройкиБота() Экспорт
+	
+	НастройкиБота = Новый Структура;
+	НастройкиБота.Вставить("ТокенБота", Константы.узТелеграмм_ТокенБота.Получить());
+	НастройкиБота.Вставить("ТекущийПрокси", Неопределено);
+	
+	Возврат НастройкиБота;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+// Добавляет в настройки бота данные прокси
+//
+// Параметры:
+//  НастройкиБота - Структура - структура настроек для заполнения
+//
+// Возвращаемое значение:
+//  НастройкиБота - Структура - входящие настройки бота
+//   * ТекущийПрокси - Число - Индекс текущего прокси. Равен 0 и изменяется при выполнении запросов
+//   * Прокси - Массив структур - Массив доступных прокси. Задаются в регистре сведений узПроксиСерверы
+//   ** Адрес - Строка - адрес прокси
+//   ** Порт - Число - порт прокси
+//   ** Логин - Строка - логин прокси
+//   ** Пароль - Строка - пароль прокси
+//
+Процедура ЗаполнитьНастройкиПрокси(НастройкиБота) Экспорт
+	
+	Прокси = РегистрыСведений.узПроксиСерверы.ПолучитьМассивНастроекПроксиСерверов();
+	Если Прокси.Количество() > 0 Тогда
+		НастройкиБота.Вставить("Прокси", Прокси);
+		НастройкиБота.ТекущийПрокси = 0;
+	КонецЕсли;
+	
+КонецПроцедуры
+
+// #240 Пиганов Г.В. 2020-09-08
+// Возвращает новые сообщения относительно переданного ИД
+//
+// Параметры:
+//  MaxMessageID - Необязательное. Идентификатор последнего полученного сообщения (не номер в чате).
+//                 Сообщения получаются после этого номера. Если не указано, то значение
+//                 получается из элемента-константы ТелеграмMaxMessangeID.
+//  Ответ - HTTPОтвет - если указана переменная, то в нее помещается ответ, полученный при запросе
+//  НеПолучатьПовторно - Булево - Если Истина, то последний идентификатор сообщения
+//                                будет сохранен в элемент-константу ТелеграмMaxMessangeID
+//
+// Возвращаемое значение: 
+//  Массив структур - Данные полученных сообщений:
+//    * Номер - Строка - Номер сообщения в чате
+//    * ДатаУниверсальная - Дата и время - дата сообщения GMT
+//    * Дата - Дата и время - дата сообщения приведенная к текущему часовому поясу сеанса
+//    * ПользовательПредставление - Строка - представление пользователя в телеграмм
+//    * ПользовательИД - Строка - идентификатор пользователя телеграмм
+//    * ПользовательИмя - Строка - имя пользователя в телеграмм. Может быть пустым
+//    * Текст - Строка - Текст сообщения
+//    * Пользователь - СправочникСсылка.Пользователи - ссылка на пользователя, найденная по данным ПользовательИД
+//    * Файлы - Массив структур - Массив файлов сообщения:
+//    ** Имя - Строка - имя файла с расширением. Для фото не задано
+//    ** ИД - Строка - идентификатор файла. Используется для получения файла
+//    ** Размер - Число - размер файла
+//    ** Ширина - Число - ширина изображения. Задано только для фото
+//    ** Высота - Число - высота изображения. Задано только для фото
+//
+Функция ПолучитьНовыеСообщения(MaxMessageID = "", Ответ = Неопределено, НеПолучатьПовторно = Истина) Экспорт
+	
+	ПолученныеСообщения = Новый Массив;
+	
+	НастройкиБота = НастройкиБота();
+	Если ПустаяСтрока(НастройкиБота.ТокенБота) Тогда
+		Возврат ПолученныеСообщения;
+	КонецЕсли;
+	ЗаполнитьНастройкиПрокси(НастройкиБота);
+	
+	Если ПустаяСтрока(MaxMessageID) Тогда
+		ИДПоследнегоПринятогоСообщения = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("ТелеграмMaxMessangeID", Тип("Строка"), , Ложь);
+	Иначе
+		ИДПоследнегоПринятогоСообщения = MaxMessageID;
+	КонецЕсли;
+	
+	ПараметрыЗапроса = Новый Соответствие;
+	Если НЕ ПустаяСтрока(ИДПоследнегоПринятогоСообщения) Тогда
+		ПараметрыЗапроса.Вставить("offset", ИДПоследнегоПринятогоСообщения);
+	КонецЕсли;
+	
+	Если НЕ ВыполнитьЗапросHTTP(НастройкиБота, "getUpdates", ПараметрыЗапроса, Ответ) Тогда
+		ЗаписьЖурналаРегистрации("Телеграм.ПолучениеСообщений", УровеньЖурналаРегистрации.Ошибка,,,
+			"Не смогли получить сообщения телеграм");
+		Возврат ПолученныеСообщения;
+	КонецЕсли;
+	
+	ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
+	ОтветСоответствие = СоответствиеИзСтрокиJSON(ОтветСтрокаJSON);
+	Если ОтветСоответствие["ok"] <> Истина Тогда
+		Возврат ПолученныеСообщения;
+	КонецЕсли;
+	
+	ИндексыКУдалению = Новый СписокЗначений;
+	ИндексыСообщений = Новый Соответствие;
+	ИндексСообщения = 0;
+	
+	КэшПользователей = ВсеПользователиТелеграмм();
+	ОтборПользователя = Новый Структура("ПользовательИД");
+	
+	Для Каждого Update Из ОтветСоответствие["result"] Цикл
+		
+		ИДСообщения = Формат(Update["update_id"] + 1, "ЧГ=");
+		Если ИДПоследнегоПринятогоСообщения < ИДСообщения Тогда
+			ИДПоследнегоПринятогоСообщения = ИДСообщения;
+		КонецЕсли;
+		
+		ДанныеСообщения = Новый Структура;
+		ДанныеСообщения.Вставить("Обработано", Ложь);
+		ДанныеСообщения.Вставить("ИД", ИДСообщения);
+		
+		Message = Update["message"];
+		Если Message = Неопределено Тогда
+			EditedMessage = Update["edited_message"];
+			Если EditedMessage <> Неопределено Тогда
+				// Получено отредактированное сообщение
+				Message = EditedMessage;
+				ИндексИсходногоСообщения = ИндексыСообщений[Message["message_id"]];
+				Если ИндексИсходногоСообщения = Неопределено Тогда
+					// Исходное сообщение было в предыдущем запросе и уже обработано.
+					// При текущей реализации такие отредактированные сообщения не обрабатываем
+					Продолжить;
+				КонецЕсли;
+				// Отредактированные сообщения должны быть удалены после обработки
+				ИндексыКУдалению.Добавить(ИндексИсходногоСообщения);
+			КонецЕсли;
+		КонецЕсли;
+		
+		Если Message <> Неопределено Тогда
+			msgChat = Message["chat"]; // данные чата пользователя
+			//msgFrom = Message["from"]; // данные пользователя сообщения
+			
+			ДанныеСообщения.Вставить("Номер", Message["message_id"]);
+			
+			ДанныеСообщения.Вставить("ДатаУниверсальная", '19700101' + Message["date"]);
+			// Преобразование универсальной даты в местное время сеанса
+			ДанныеСообщения.Вставить("Дата", МестноеВремя(ДанныеСообщения.ДатаУниверсальная));
+			
+			ДанныеСообщения.Вставить("ПользовательПредставление", msgChat["last_name"] + " " + msgChat["first_name"]);
+			ДанныеСообщения.Вставить("ПользовательИД", msgChat["id"]);
+			ДанныеСообщения.Вставить("ПользовательИмя", msgChat["username"]);
+			
+			ДанныеСообщения.Вставить("Текст", Строка(Message["text"]));
+			
+			// Добавление артинок и файлов
+			ПрикрепленныеФайлы = Новый Массив;
+			
+			msgPhoto = Message["photo"]; // прикрепленные фото
+			Если ТипЗнч(msgPhoto) = Тип("Массив") Тогда
+				// Если в массиве 3 картинки, то это "превью маленькое" 320*190, "настоящая картинка", "превью большое" 800*475
+				Если msgPhoto.Количество() = 3 Тогда
+					msgPhoto = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(msgPhoto[1]);
+				КонецЕсли;
+				Для Каждого msgPhotoSize Из msgPhoto Цикл
+					ДанныеФайла = Новый Структура;
+					ДанныеФайла.Вставить("Имя", "");
+					ДанныеФайла.Вставить("ИД", msgPhotoSize["file_id"]);
+					ДанныеФайла.Вставить("Ширина", msgPhotoSize["width"]);
+					ДанныеФайла.Вставить("Высота", msgPhotoSize["height"]);
+					ДанныеФайла.Вставить("Размер", msgPhotoSize["file_size"]);
+					ПрикрепленныеФайлы.Добавить(ДанныеФайла);
+				КонецЦикла;
+			КонецЕсли;
+			
+			msgDocument = Message["document"]; // прикрепленные документы и картинки как файлы
+			Если ТипЗнч(msgDocument) = Тип("Соответствие") Тогда
+				ДанныеФайла = Новый Структура;
+				ДанныеФайла.Вставить("Имя", msgDocument["file_name"]);
+				ДанныеФайла.Вставить("ИД", msgDocument["file_id"]);
+				ДанныеФайла.Вставить("Размер", msgDocument["file_size"]);
+				ПрикрепленныеФайлы.Добавить(ДанныеФайла);
+			КонецЕсли;
+			
+			msgAudio = Message["Audio"]; // прикрепленная запись аудио
+			Если ТипЗнч(msgAudio) = Тип("Соответствие") Тогда
+				ДанныеФайла = Новый Структура;
+				ДанныеФайла.Вставить("Имя", msgAudio["file_name"]);
+				ДанныеФайла.Вставить("ИД", msgAudio["file_id"]);
+				ДанныеФайла.Вставить("Размер", msgAudio["file_size"]);
+				ПрикрепленныеФайлы.Добавить(ДанныеФайла);
+			КонецЕсли;
+			
+			Если ПрикрепленныеФайлы.Количество() > 0 Тогда
+				// Для файлов передается заголовок, а не текст
+				ДанныеСообщения.Текст = Строка(Message["caption"]);
+			КонецЕсли;
+			ДанныеСообщения.Вставить("Файлы", ПрикрепленныеФайлы);
+			
+			// Поиск пользователя по ИД пользователя телеграмм
+			ПользовательСсылка = Неопределено;
+			ОтборПользователя.ПользовательИД = ДанныеСообщения.ПользовательИД;
+			НайденныеСтроки = КэшПользователей.НайтиСтроки(ОтборПользователя);
+			Если НайденныеСтроки.Количество() > 0 Тогда
+				ПользовательСсылка = НайденныеСтроки[0].Ссылка;
+			КонецЕсли;
+			ДанныеСообщения.Вставить("Пользователь", ПользовательСсылка);
+		КонецЕсли;
+		
+		Если НЕ ПустаяСтрока(ДанныеСообщения.Текст) ИЛИ ДанныеСообщения.Файлы.Количество() > 0 Тогда
+			ПолученныеСообщения.Добавить(ДанныеСообщения);
+			
+			ИндексыСообщений[ДанныеСообщения.Номер] = ИндексСообщения;
+			ИндексСообщения = ИндексСообщения + 1;
+		КонецЕсли;
+	КонецЦикла;
+	
+	// Удаление исходных отредактированных сообщений
+	ИндексыКУдалению.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
+	Для Каждого ЭлементСписка Из ИндексыКУдалению Цикл
+		ПолученныеСообщения.Удалить(ЭлементСписка.Значение);
+	КонецЦикла;
+	
+	Если НеПолучатьПовторно Тогда
+		Справочники.узКонстанты.УстановитьЗначениеКонстанты("ТелеграмMaxMessangeID", ИДПоследнегоПринятогоСообщения);
+	КонецЕсли;
+	
+	Возврат ПолученныеСообщения;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+// Скачивает и помещает во временное хранилище файл с указанным ИД
+// Параметры:
+//  ИД - Строка - идентификатор файла телеграмм. Передается с сообщением.
+//  НастройкиБота - Структура - структура с настройками бота. Если передана
+//                  не заполненная переменная, то в нее будут помещены настройки.
+//
+// Возвращаемое значение:
+//  Строка - адрес во временном хранилище с двоичными данными файла
+//
+Функция ПолучитьФайл(ФайлИД, НастройкиБота = Неопределено) Экспорт
+	
+	Если НастройкиБота = Неопределено Тогда
+		НастройкиБота = НастройкиБота();
+	КонецЕсли;
+	
+	ПараметрыЗапроса = Новый Соответствие;
+	ПараметрыЗапроса.Вставить("file_id", ФайлИД);
+	
+	Ответ = Неопределено;
+	
+	Если НЕ ВыполнитьЗапросHTTP(НастройкиБота, "getFile", ПараметрыЗапроса, Ответ) Тогда
+		ЗаписьЖурналаРегистрации("Телеграм.ПолучениеСообщений", УровеньЖурналаРегистрации.Ошибка,,
+			, "Не смогли получить файл телеграм");
+		Возврат Неопределено;
+	КонецЕсли;
+	
+	ОтветСоответствие = СоответствиеИзСтрокиJSON(Ответ.ПолучитьТелоКакСтроку());
+	
+	msgFile = ОтветСоответствие["result"];
+	
+	ФайлURL = "https://api.telegram.org/file/bot" + НастройкиБота.ТокенБота + "/" + msgFile["file_path"];
+	
+	ПараметрыПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла();
+	ПараметрыПолучения.ЗащищенноеСоединение = Истина;
+	ДанныеФайла = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(ФайлURL, ПараметрыПолучения, Истина);
+	
+	АдресФайла = ?(ДанныеФайла.Статус, ДанныеФайла.Путь, Неопределено);
+	
+	Возврат АдресФайла;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+// Отправляет текстовое чообщение переданным пользователям
+//
+// Параметры:
+//  ТекстСообщения - Строка - Текст сообщения в формате markdown
+//  Получатели - Массив или СправочникСсылка.Пользователь - массив пользователей для получения сообщения.
+//               Сообщение отправляется только пользователям с заполненным ИД телеграмма
+//               и с установленным флагом "Использовать рассылку через телеграмм"
+//  Ответ - Структура или Соответствие - доп параметры, которые должны быть переданы в параметры запроса
+//
+Процедура ОтправитьСообщение(ТекстСообщения, Получатели, УведомлятьПользователя = Ложь, Ответ = Неопределено) Экспорт
+	
+	Ответ = Неопределено;
+	
+	НастройкиБота = НастройкиБота();
+	Если ПустаяСтрока(НастройкиБота.ТокенБота) Тогда
+		Если УведомлятьПользователя Тогда
+			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+				"Сообщение не отправлено, т.к. не задан токен телеграмм-бота");
+		КонецЕсли;
+		Возврат;
+	КонецЕсли;
+	
+	Выборка = ВыборкаПользователейТелеграмДляОтправки(Получатели);
+	Если Выборка.Количество() = 0 Тогда
+		Если УведомлятьПользователя Тогда
+			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+				"Сообщение не отправлено, т.к. не заданы получатели или у получателей не включена рассылка через телеграмм");
+		КонецЕсли;
+		Возврат;
+	КонецЕсли;
+	
+	ИспользоватьПрокси = Справочники.узКонстанты.ПолучитьЗначениеКонстанты(
+		"ТелеграммИспользоватьПроксиДляОтправки", Тип("Булево"), Ложь, Истина, Истина);
+	Если ИспользоватьПрокси Тогда
+		ЗаполнитьНастройкиПрокси(НастройкиБота);
+	КонецЕсли;
+	
+	ПараметрыЗапроса = Новый Соответствие;
+	ПараметрыЗапроса.Вставить("parse_mode", "Markdown");
+	ПараметрыЗапроса.Вставить("disable_web_page_preview", "true");
+	ПараметрыЗапроса.Вставить("text", ТекстСообщения);
+	
+	Пока Выборка.Следующий() Цикл
+		ПараметрыЗапроса.Вставить("chat_id", Формат(Выборка.ПользовательИД, "ЧГ="));
+		ОтветУспешен = ВыполнитьЗапросHTTP(НастройкиБота, "sendMessage", ПараметрыЗапроса, Ответ);
+		Если НЕ ОтветУспешен Тогда
+			ЗаписьЖурналаРегистрации("Телеграмм.Отправка", УровеньЖурналаРегистрации.Ошибка,,
+				, "Не смогли отправить пользователю <" + Выборка.ПользовательИД + ":" + Выборка.Пользователь + ">");
+		КонецЕсли;
+		Если УведомлятьПользователя Тогда
+			Если ОтветУспешен Тогда
+				ТекстСообщения = "Сообщение удачно отправлено" ;
+			Иначе
+				ТекстСообщения = "Не смогли отправить сообщение телеграм пользователю [" + Выборка.ПользовательИД + "]. Подробнее смотрите в журнале регистрации."
+			КонецЕсли;
+			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
+		КонецЕсли;
+	КонецЦикла;
+	
+КонецПроцедуры
+
+// #240 Пиганов Г.В. 2020-09-08
+// Заменяет в переданной строки символы для корректного отражения в строке URL
+// Может быть использована при выполнении GET-запросов
+//
+Функция ЗаменитьЗарезервированныеСимволыURL(ОбрабатываемаяСтрока) Экспорт
+	Если ПустаяСтрока(ОбрабатываемаяСтрока) Тогда
+		Возврат ОбрабатываемаяСтрока;
+	КонецЕсли;
+	
+	пТелеграммИспользоватьЗаменуСимволовВДругуюКодировку = Справочники.узКонстанты.ПолучитьЗначениеКонстанты(
+		"ТелеграммИспользоватьЗаменуСимволовВДругуюКодировку",Тип("Булево"),,Истина,Истина);
+	
+	Если пТелеграммИспользоватьЗаменуСимволовВДругуюКодировку Тогда
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(37),"%25"); // "%"
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(33),"%21"); // "!"
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(34),"%22"); // """  (кавычка)
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(35),"%23"); // "#" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(36),"%24"); // "$"	
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(38),"%26"); // "&" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(39),"%27"); // "'" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(42),"%2A"); // "*" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(44),"%2C"); // "," 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(58),"%3A"); // ":" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(59),"%3B"); // ";" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(60),"%3C"); // "<" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(61),"%3D"); // "=" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(62),"%3E"); // ">" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(63),"%3F"); // "?" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(91),"%5B"); // "[" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(93),"%5D"); // "]" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(94),"%5E"); // "^" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(96),"%60"); // "`" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(123),"%7B"); // "{" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(124),"%7C"); // "|" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(125),"%7D"); // "}" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(32),"%20"); // " "  (пробел)
+	Иначе
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%25",Символ(37) ); // "%"
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%21",Символ(33) ); // "!"
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%22",Символ(34) ); // """  (кавычка)
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%23",Символ(35) ); // "#" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%24",Символ(36) ); // "$"	
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%26",Символ(38) ); // "&" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%27",Символ(39) ); // "'" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%2A",Символ(42) ); // "*" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%2C",Символ(44) ); // "," 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3A",Символ(58) ); // ":" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3B",Символ(59) ); // ";" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3C",Символ(60) ); // "<" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3D",Символ(61) ); // "=" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3E",Символ(62) ); // ">" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3F",Символ(63) ); // "?" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5B",Символ(91) ); // "[" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5D",Символ(93) ); // "]" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5E",Символ(94) ); // "^" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%60",Символ(96) ); // "`" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7B",Символ(123)); // "{" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7C",Символ(124)); // "|" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7D",Символ(125)); // "}" 
+		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%20",Символ(32) ); // " "  (пробел)
+	КонецЕсли;
+	
+	Возврат ОбрабатываемаяСтрока;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ВыполнитьЗапросHTTP(НастройкиБота, Команда, ПараметрыЗапроса, Ответ, ЭтоЗапросPOST = Истина) Экспорт
+	
+	ЕстьПрокси = НастройкиБота.ТекущийПрокси <> Неопределено;
+	
+	// Цикл обхода прокси, если они есть или запрос без прокси
+	Пока Истина Цикл
+		
+		СоединениеHTTP = НовоеСоединениеHTTP(НастройкиБота);
+		
+		Ресурс = "bot" + НастройкиБота.ТокенБота + "/" + Команда;
+		
+		Если ЭтоЗапросPOST Тогда
+			
+			// Запрос POST. Параметры в теле запроса
+			СтрокаJSON = СтрокаJSONИзСоответствия(ПараметрыЗапроса);
+			
+			ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
+			ЗапросHTTP.Заголовки.Вставить("Content-type", "keep-alive");
+			ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");
+			ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаJSON);
+			
+			Попытка
+				Ответ = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
+			Исключение
+				ЗаписьЖурналаРегистрации("Телеграмм.Отправка", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
+				Ответ = Неопределено;
+			КонецПопытки;
+		Иначе
+			// Запрос GET. Параметры в строке URL запроса
+			Если ПараметрыЗапроса.Количество() > 0 Тогда
+				Ресурс = Ресурс + "?";
+				Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
+					Ресурс = Ресурс + "&" + КлючИЗначение.Ключ + "=" + КлючИЗначение.Значение;
+				КонецЦикла;
+			КонецЕсли;
+			
+			ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
+			ЗапросHTTP.Заголовки.Вставить("Content-type", "keep-alive");
+			Попытка
+				Ответ = СоединениеHTTP.Получить(ЗапросHTTP);
+			Исключение
+				Ответ = Неопределено;
+			КонецПопытки;
+		КонецЕсли;
+		
+		ОтветУспешен = Ответ <> Неопределено И (Ответ.КодСостояния = 200 ИЛИ Ответ.КодСостояния = 300);
+		
+		Если НЕ ЕстьПрокси Тогда
+			Прервать; // Ответ получен успешный или нет
+		КонецЕсли;
+		
+		Если ОтветУспешен Тогда
+			ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
+			// прокси может уже не работать, или внесен в гос реестр
+			Если СтрНайти(НРег(ОтветСтрокаJSON), "<html>") = 0 Тогда 
+				// Прокси успешно отработал
+				НастройкиПрокси = НастройкиБота.Прокси[НастройкиБота.ТекущийПрокси];
+				РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, 1);
+				Прервать;
+			КонецЕсли;
+		КонецЕсли;
+		
+		// Прокси не отработал
+		НастройкиПрокси = НастройкиБота.Прокси[НастройкиБота.ТекущийПрокси];
+		РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
+		
+		// Переход к следующему прокси
+		Если НастройкиБота.ТекущийПрокси + 1 = НастройкиБота.Прокси.Количество() Тогда
+			// Закончились рабочие прокси
+			НастройкиБота.ТекущийПрокси = 0;
+			ОтветУспешен = Ложь;
+			Ответ = Неопределено;
+			Прервать;
+		КонецЕсли;
+		НастройкиБота.ТекущийПрокси = НастройкиБота.ТекущийПрокси + 1;
+	КонецЦикла;
+	
+	Возврат ОтветУспешен;
+	
+КонецФункции
+
+#КонецОбласти
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция НовоеСоединениеHTTP(НастройкиБота)
+	
+	Если НастройкиБота.ТекущийПрокси = Неопределено Тогда
+		ИнтернетПрокси = Неопределено;
+	Иначе
+		НастройкиПрокси = НастройкиБота.Прокси[НастройкиБота.ТекущийПрокси];
+		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
+		ИнтернетПрокси.Установить("https", НастройкиПрокси.Адрес, НастройкиПрокси.Порт, НастройкиПрокси.Логин, НастройкиПрокси.Пароль, Ложь);
+	КонецЕсли;
+	Соединение = Новый HTTPСоединение("api.telegram.org", 443,,, ИнтернетПрокси, 30, Новый ЗащищенноеСоединениеOpenSSL());
+	
+	Возврат Соединение;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Процедура РегламентноеПолучениеИОбработкаСообщений() Экспорт
+	
+	НастройкиБота = НастройкиБота();
+	
+	Сообщения = ПолучитьНовыеСообщения();
+	Для Каждого Сообщение Из Сообщения Цикл
+		узТелеграмБотКоманды.ОбработатьКомандыСообщения(НастройкиБота, Сообщение);
+	КонецЦикла;
+	
+КонецПроцедуры
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ВсеПользователиТелеграмм()
+	
+	Запрос = Новый Запрос;
+	Запрос.Текст =
+	"ВЫБРАТЬ
+	|	Пользователи.узИДПользователяТелеграмм КАК ПользовательИД,
+	|	МАКСИМУМ(Пользователи.Ссылка) КАК Ссылка
+	|ИЗ
+	|	Справочник.Пользователи КАК Пользователи
+	|ГДЕ
+	|	Пользователи.узИДПользователяТелеграмм <> 0
+	|
+	|СГРУППИРОВАТЬ ПО
+	|	Пользователи.узИДПользователяТелеграмм";
+	Возврат Запрос.Выполнить().Выгрузить();
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ВыборкаПользователейТелеграмДляОтправки(Пользователи)
+	
+	Запрос = Новый Запрос;
+	Запрос.Текст =
+	"ВЫБРАТЬ
+	|	Пользователи.Ссылка КАК Пользователь,
+	|	Пользователи.узИДПользователяТелеграмм КАК ПользовательИД
+	|ИЗ
+	|	Справочник.Пользователи КАК Пользователи
+	|ГДЕ
+	|	Пользователи.Ссылка В(&Пользователи)
+	|	И Пользователи.узИспользоватьРассылкуЧерезТелеграмм
+	|	И Пользователи.узИДПользователяТелеграмм <> 0";
+	Запрос.УстановитьПараметр("Пользователи", Пользователи);
+	
+	Возврат Запрос.Выполнить().Выбрать();
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция СоответствиеИзСтрокиJSON(СтрокаJSON)
+	
+	ЧтениеJSON = Новый ЧтениеJSON;
+	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
+	ОтветСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
+	ЧтениеJSON.Закрыть();
+	
+	Возврат ОтветСоответствие;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция СтрокаJSONИзСоответствия(СоответствиеДанных)
+	
+	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
+	ЗаписьJSON = Новый ЗаписьJSON;
+	ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
+	ЗаписатьJSON(ЗаписьJSON, СоответствиеДанных);
+	Возврат ЗаписьJSON.Закрыть();
+	
+КонецФункции
diff --git a/src/cf/CommonModules/узТелеграмБотКоманды.xml b/src/cf/CommonModules/узТелеграмБотКоманды.xml
new file mode 100644
index 000000000..62365829b
--- /dev/null
+++ b/src/cf/CommonModules/узТелеграмБотКоманды.xml
@@ -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.10">
+	<CommonModule uuid="090c5973-fdd3-499f-a4b7-e6199117b0f9">
+		<Properties>
+			<Name>узТелеграмБотКоманды</Name>
+			<Synonym>
+				<v8:item>
+					<v8:lang>ru</v8:lang>
+					<v8:content>уз телеграм бот правила</v8:content>
+				</v8:item>
+			</Synonym>
+			<Comment/>
+			<Global>false</Global>
+			<ClientManagedApplication>false</ClientManagedApplication>
+			<Server>true</Server>
+			<ExternalConnection>false</ExternalConnection>
+			<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
+			<ServerCall>false</ServerCall>
+			<Privileged>false</Privileged>
+			<ReturnValuesReuse>DontUse</ReturnValuesReuse>
+		</Properties>
+	</CommonModule>
+</MetaDataObject>
\ No newline at end of file
diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
new file mode 100644
index 000000000..7e98af488
--- /dev/null
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -0,0 +1,225 @@
+
+// #240 Пиганов Г.В. 2020-09-08
+Процедура ОбработатьКомандыСообщения(Сообщение) Экспорт
+	
+	НастройкиБота = Неопределено; // Для сохранения настроек при необходимости
+	
+	Если ПроверитьНовоеДело(Сообщение)
+	ИЛИ ПроверитьНовыйВопрос(Сообщение) Тогда
+		Возврат;
+	КонецЕсли;
+	
+	// Команды связанные с указанной задачей в начале сообщения
+	ЗадачаСсылка = Неопределено;
+	Если НачинаетсяСНомераЗадачи(Сообщение, ЗадачаСсылка) Тогда
+		Если ПроверитьНовыйФайл(Сообщение, ЗадачаСсылка, НастройкиБота)
+		ИЛИ ПроверитьНовыйВопрос(Сообщение, ЗадачаСсылка)
+		ИЛИ ПроверитьНовыйКомментарий(Сообщение, ЗадачаСсылка) Тогда
+			Возврат;
+		КонецЕсли;
+	КонецЕсли;
+	
+КонецПроцедуры
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ПроверитьНовоеДело(Сообщение)
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	//НовоеДело - "!ТекстОписания"
+	
+	Если СтрНачинаетсяС(Сообщение.Текст, "!") Тогда
+		Сообщение.Текст = СокрЛ(Сред(Сообщение.Текст, 2));
+	Иначе
+		Возврат Ложь;
+	КонецЕсли;
+	
+	ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
+	ТекущиеДелаОбъект.Автор = Сообщение.Пользователь;
+	ТекущиеДелаОбъект.ТекстСодержания = СокрЛ(Сообщение.Текст);
+	ТекущиеДелаОбъект.Записать();
+	
+	Возврат Истина;
+	
+Конецфункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ПроверитьНовыйВопрос(Сообщение, ЗадачаСсылка = Неопределено)
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	//НовыйВопрос - "?ТекстВопроса"
+	//НовыйВопросКЗадаче - "#НомерЗадачи ?ТекстВопроса"
+	
+	Если СтрНачинаетсяС(Сообщение.Текст, "?") Тогда
+		Сообщение.Текст = СокрЛ(Сред(Сообщение.Текст, 2));
+	Иначе
+		Возврат Ложь;
+	КонецЕсли;
+	
+	// Новый вопрос
+	ВопросОбъект = Справочники.узВопросыОтветы.СоздатьЭлемент();
+	ВопросОбъект.Задача = ЗадачаСсылка;
+	ВопросОбъект.Автор = Сообщение.Пользователь;
+	ВопросОбъект.Вопрос = Сообщение.Текст;
+	ВопросОбъект.ДатаСоздания = Сообщение.Дата;
+	ВопросОбъект.Наименование = Сообщение.Текст;
+	ВопросОбъект.Записать();
+	
+	Возврат Истина;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ПроверитьНовыйФайл(Сообщение, ЗадачаСсылка, НастройкиБота = Неопределено)
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	Если Сообщение.Файлы.Количество() = 0 Тогда
+		Возврат Ложь;
+	КонецЕсли;
+	
+	Если НастройкиБота = Неопределено Тогда
+		НастройкиБота = узТелеграмБот.НастройкиБота();
+	КонецЕсли;
+	
+	Для Каждого ДанныеФайла Из Сообщение.Файлы Цикл
+		АдресФайла = узТелеграмБот.ПолучитьФайл(ДанныеФайла.ИД, НастройкиБота);
+		Если АдресФайла <> Неопределено Тогда
+			
+			Если ПустаяСтрока(ДанныеФайла.Имя) Тогда
+				// Картинка добавленная как фото не имеет имени
+				ИмяБезРасширения = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
+				Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(АдресФайла));
+				КартинкаФормат = Картинка.Формат();
+				Если КартинкаФормат = ФорматКартинки.PNG Тогда
+					РасширениеБезТочки = "png";
+				ИначеЕсли КартинкаФормат = ФорматКартинки.GIF Тогда
+					РасширениеБезТочки = "gif";
+				ИначеЕсли КартинкаФормат = ФорматКартинки.JPEG Тогда
+					РасширениеБезТочки = "jpeg";
+				ИначеЕсли КартинкаФормат = ФорматКартинки.SVG Тогда
+					РасширениеБезТочки = "svg";
+				ИначеЕсли КартинкаФормат = ФорматКартинки.TIFF Тогда
+					РасширениеБезТочки = "tiff";
+				Иначе
+					РасширениеБезТочки = "";
+				КонецЕсли;
+			Иначе
+				// Файл добавленный как документ
+				ПозТочки = СтрНайти(ДанныеФайла.Имя, ".", НаправлениеПоиска.СКонца);
+				Если ПозТочки = 0 Тогда
+					ИмяБезРасширения = Лев(ДанныеФайла.Имя, ПозТочки - 1);
+					РасширениеБезТочки = Сред(ДанныеФайла.Имя, ПозТочки + 1);
+				Иначе
+					ИмяБезРасширения = ДанныеФайла.Имя;
+					РасширениеБезТочки = "";
+				КонецЕсли;
+			КонецЕсли;
+			
+			ПараметрыФайла = Новый Структура;
+			ПараметрыФайла.Вставить("Автор", Сообщение.Пользователь);
+			ПараметрыФайла.Вставить("ВладелецФайлов", ЗадачаСсылка);
+			ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Сообщение.ДатаУниверсальная);
+			ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения);
+			ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки);
+			РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайла);
+		КонецЕсли;
+	КонецЦикла;
+	
+	Сообщение.Обработано = Истина;
+	
+	Возврат Истина;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция ПроверитьНовыйКомментарий(Сообщение, ЗадачаСсылка)
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	Если ПустаяСтрока(Сообщение.Текст) Тогда
+		// Был указан только номер задачи
+		Возврат Ложь;
+	КонецЕсли;
+	
+	//НовыйКомментарий - #НомерЗадачи ТекстКомментария"
+	
+	ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект();
+	
+	// Ключ строки нового комментария
+	НовыйКлючСтроки = 1;
+	Если ЗадачаОбъект.Комментарии.Количество() = 0 Тогда
+		НовыйКлючСтроки = 1;
+	Иначе
+		ТЗ = ЗадачаОбъект.Комментарии.Выгрузить();
+		ТЗ.Сортировать("КлючСтроки УБЫВ");
+		НовыйКлючСтроки = ТЗ[0].КлючСтроки + 1;
+	Конецесли;
+	
+	// Новый комментарий
+	СтрокаКомментария = ЗадачаОбъект.Комментарии.Добавить();
+	СтрокаКомментария.КлючСтроки = НовыйКлючСтроки;
+	СтрокаКомментария.ДатаКомментария = Сообщение.Дата;
+	СтрокаКомментария.Автор = Сообщение.Пользователь;
+	СтрокаКомментария.Комментарий = Сообщение.Текст;
+	ЗадачаОбъект.Записать();
+	
+	Сообщение.Обработано = Истина;
+	
+	Возврат Истина;
+	
+КонецФункции
+
+// #240 Пиганов Г.В. 2020-09-08
+Функция НачинаетсяСНомераЗадачи(Сообщение, ЗадачаСсылка)
+	
+	ТекстСообщения = Сообщение.Текст;
+	
+	НомерЗадачи = "";
+	Если Лев(ТекстСообщения, 1) = "#" Тогда
+		Для ПозЧисла = 2 По СтрДлина(ТекстСообщения) Цикл
+			КодСимволаЧисла = КодСимвола(ТекстСообщения, ПозЧисла);
+			Если КодСимволаЧисла < 48 ИЛИ КодСимволаЧисла > 57 Тогда // "0" - "9"
+				Если НЕ ПустаяСтрока(Символ(КодСимволаЧисла)) Тогда
+					// После номера найден не пробельный символ и значит начинается не с номера задачи
+					НомерЗадачи = "";
+				ИначеЕсли ПозЧисла > 1 Тогда
+					// Удаление из текста сообщения номера задачи
+					Сообщение.Текст = СокрЛ(Сред(ТекстСообщения, ПозЧисла));
+				КонецЕсли;
+				Прервать;
+			КонецЕсли;
+			НомерЗадачи = НомерЗадачи + Символ(КодСимволаЧисла);
+		КонецЦикла;
+	КонецЕсли;
+	Если НомерЗадачи = "" Тогда
+		Возврат Ложь;
+	КонецЕсли;
+	
+	Запрос = Новый Запрос;
+	Запрос.Текст =
+	"ВЫБРАТЬ
+	|	узЗадачи.Ссылка КАК Ссылка
+	|ИЗ
+	|	Справочник.узЗадачи КАК узЗадачи
+	|ГДЕ
+	|	узЗадачи.Код = &НомерЗадачи";
+	Запрос.УстановитьПараметр("НомерЗадачи", Число(НомерЗадачи));
+	
+	Выборка = Запрос.Выполнить().Выбрать();
+	Если Выборка.Следующий() Тогда
+		ЗадачаСсылка = Выборка.Ссылка;
+	КонецЕсли;
+	
+	Возврат Истина;
+	
+КонецФункции
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index fbdde5efe..d4faa1c72 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -1007,6 +1007,8 @@
 			<CommonModule>узОбщийМодульСервер</CommonModule>
 			<CommonModule>узТелеграммСервер</CommonModule>
 			<CommonModule>узРаботаСБуферомОбменаКлиент</CommonModule>
+			<CommonModule>узТелеграмБот</CommonModule>
+			<CommonModule>узТелеграмБотКоманды</CommonModule>
 			<ExchangePlan>ОбновлениеИнформационнойБазы</ExchangePlan>
 			<XDTOPackage>ApplicationExtensionsManifest_1_0_0_1</XDTOPackage>
 			<XDTOPackage>EnterpriseData_1_2_3</XDTOPackage>
@@ -1138,6 +1140,7 @@
 			<ScheduledJob>узСозданиеТекущихДелПоРегламенту</ScheduledJob>
 			<ScheduledJob>узФормированиеФайлаЛистаЗадач</ScheduledJob>
 			<ScheduledJob>УстановкаПериодаРассчитанныхИтогов</ScheduledJob>
+			<ScheduledJob>узПолучениеИОбработкаСообщенийТелеграммБота</ScheduledJob>
 			<SettingsStorage>ХранилищеВариантовОтчетов</SettingsStorage>
 			<FunctionalOption>АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО</FunctionalOption>
 			<FunctionalOption>ВариантыВерсионированияОбъектов</FunctionalOption>
diff --git a/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота.xml b/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота.xml
new file mode 100644
index 000000000..f716672f8
--- /dev/null
+++ b/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота.xml
@@ -0,0 +1,22 @@
+<?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.10">
+	<ScheduledJob uuid="a74b8747-cfb3-453f-95d3-5a670b55554d">
+		<Properties>
+			<Name>узПолучениеИОбработкаСообщенийТелеграммБота</Name>
+			<Synonym>
+				<v8:item>
+					<v8:lang>ru</v8:lang>
+					<v8:content>Обработка сообщений телеграмм бота</v8:content>
+				</v8:item>
+			</Synonym>
+			<Comment/>
+			<MethodName>CommonModule.узТелеграмБот.РегламентноеПолучениеИОбработкаСообщений</MethodName>
+			<Description/>
+			<Key/>
+			<Use>false</Use>
+			<Predefined>true</Predefined>
+			<RestartCountOnFailure>3</RestartCountOnFailure>
+			<RestartIntervalOnFailure>10</RestartIntervalOnFailure>
+		</Properties>
+	</ScheduledJob>
+</MetaDataObject>
\ No newline at end of file
diff --git a/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота/Ext/Schedule.xml b/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота/Ext/Schedule.xml
new file mode 100644
index 000000000..6d5bf2deb
--- /dev/null
+++ b/src/cf/ScheduledJobs/узПолучениеИОбработкаСообщенийТелеграммБота/Ext/Schedule.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<JobSchedule xmlns="http://v8.1c.ru/8.3/xcf/extrnprops" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.10">
+	<Schedule BeginDate="0001-01-01" EndDate="0001-01-01" BeginTime="00:00:00" EndTime="00:00:00" CompletionTime="00:00:00" CompletionInterval="0" RepeatPeriodInDay="900" RepeatPause="0" WeekDayInMonth="0" DayInMonth="0" WeeksPeriod="1" DaysRepeatPeriod="1">
+		<ent:WeekDays>1 2 3 4 5 6 7</ent:WeekDays>
+		<ent:Months>1 2 3 4 5 6 7 8 9 10 11 12</ent:Months>
+	</Schedule>
+</JobSchedule>
\ No newline at end of file

From e99bc844c1942dce91783f61577149a98ca76f15 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Tue, 8 Sep 2020 23:50:45 +0300
Subject: [PATCH 2/8] =?UTF-8?q?#240=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
 =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=82=D0=B0=D1=80=D0=BE=D0=B3=D0=BE=20?=
 =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20?=
 =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D0=B3=D1=80=D0=B0=D0=BC=D0=BC-=D0=B1?=
 =?UTF-8?q?=D0=BE=D1=82=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl |  15 +-
 src/cf/CommonModules/узТелеграммСервер.xml    |  23 -
 .../узТелеграммСервер/Ext/Module.bsl          | 186 -----
 src/cf/Configuration.xml                      |   1 -
 .../узРаботаСТелеграм/Ext/ObjectModule.bsl    | 763 +++++++++---------
 .../Forms/Форма/Ext/Form/Module.bsl           |  27 +-
 .../Subsystems/узТелеграмм.xml                |   2 +-
 7 files changed, 414 insertions(+), 603 deletions(-)
 delete mode 100644 src/cf/CommonModules/узТелеграммСервер.xml
 delete mode 100644 src/cf/CommonModules/узТелеграммСервер/Ext/Module.bsl

diff --git a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
index 2f892b608..b291ba0b9 100644
--- a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
+++ b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
@@ -523,9 +523,12 @@
 	КонецЕсли;
 	//- #190 SZ 16.03.2020
 	
+	//+ #240 Пиганов Г.В. 2020-09-08
 	// +++ 79Vlad  20.12.2018
-	узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
+	//узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
 	// --- 79Vlad  20.12.2018
+	узТелеграмБот.ОтправитьСообщение(ДопПараметры.ТекстПисьма, Исполнитель);
+	//- #240 Пиганов Г.В. 2020-09-08
 	
 	
 КонецПроцедуры 
@@ -613,9 +616,12 @@
 	КонецЕсли;
 	//- #190 SZ 16.03.2020
     
+	//+ #240 Пиганов Г.В. 2020-09-08
 	// +++ 79Vlad  20.12.2018
-	узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
+	//узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
 	// --- 79Vlad  20.12.2018
+	узТелеграмБот.ОтправитьСообщение(ДопПараметры.ТекстПисьма, СтарыйИсполнитель);
+	//- #240 Пиганов Г.В. 2020-09-08
 	
 	
 КонецПроцедуры 
@@ -652,8 +658,11 @@
 	
 	узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);
 	
+	//+ #240 Пиганов Г.В. 2020-09-08
 	//Павлюков
-	узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
+	//узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
+	узТелеграмБот.ОтправитьСообщение(ДопПараметры.ТекстСообщения, МассивНаблюдателей);
+	//- #240 Пиганов Г.В. 2020-09-08
 	
 КонецПроцедуры
 
diff --git a/src/cf/CommonModules/узТелеграммСервер.xml b/src/cf/CommonModules/узТелеграммСервер.xml
deleted file mode 100644
index f3fc03858..000000000
--- a/src/cf/CommonModules/узТелеграммСервер.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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.10">
-	<CommonModule uuid="8f79d0f2-3bdc-43f6-ae0d-3393a1b1c89a">
-		<Properties>
-			<Name>узТелеграммСервер</Name>
-			<Synonym>
-				<v8:item>
-					<v8:lang>ru</v8:lang>
-					<v8:content>Уз телеграмм сервер</v8:content>
-				</v8:item>
-			</Synonym>
-			<Comment/>
-			<Global>false</Global>
-			<ClientManagedApplication>false</ClientManagedApplication>
-			<Server>true</Server>
-			<ExternalConnection>false</ExternalConnection>
-			<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
-			<ServerCall>true</ServerCall>
-			<Privileged>false</Privileged>
-			<ReturnValuesReuse>DontUse</ReturnValuesReuse>
-		</Properties>
-	</CommonModule>
-</MetaDataObject>
\ No newline at end of file
diff --git a/src/cf/CommonModules/узТелеграммСервер/Ext/Module.bsl b/src/cf/CommonModules/узТелеграммСервер/Ext/Module.bsl
deleted file mode 100644
index 675902fce..000000000
--- a/src/cf/CommonModules/узТелеграммСервер/Ext/Module.bsl
+++ /dev/null
@@ -1,186 +0,0 @@
-
-Функция ПолучитьМассивПолучателей(МассивПользователейКому) Экспорт
-	
-	МассивПолучателейТелеграмм = Новый Массив();
-	
-	Для Каждого пПользователь из МассивПользователейКому Цикл
-		
-		Если НЕ пПользователь.узИспользоватьРассылкуЧерезТелеграмм Тогда
-			Продолжить;
-		Конецесли;
-		
-		Если НЕ ЗначениеЗаполнено(пПользователь.узИДПользователяТелеграмм) Тогда
-			Продолжить;
-		Конецесли;
-		
-		НастройкаТелеграмм = Новый Структура();
-		НастройкаТелеграмм.Вставить("ИД",пПользователь.узИДПользователяТелеграмм);
-		НастройкаТелеграмм.Вставить("узИДПользователяТелеграмм",пПользователь.узИДПользователяТелеграмм);
-		НастройкаТелеграмм.Вставить("Пользователь",пПользователь);
-		
-		МассивПолучателейТелеграмм.Добавить(НастройкаТелеграмм);
-		
-	КонецЦикла;
-	
-	Возврат МассивПолучателейТелеграмм;
-		
-КонецФункции
-
-Процедура ВыполнитьРассылку(ДопПараметры) Экспорт
-
-	ТокенБота = Константы.узТелеграмм_ТокенБота.Получить();
-	Если Не ЗначениеЗаполнено(ТокенБота) Тогда
-		Возврат;
-	КонецЕсли;
-	
-	Если НЕ ДопПараметры.Свойство("МассивПользователейКому") Тогда
-		Если ДопПараметры.Свойство("ПользовательКому") Тогда
-			МассивПользователейКому = Новый Массив();
-			МассивПользователейКому.Добавить(ДопПараметры.ПользовательКому);
-			ДопПараметры.Вставить("МассивПользователейКому",МассивПользователейКому);
-		Конецесли;
-	Конецесли;
-	
-	МассивПользователейДляОтправки = ПолучитьМассивПолучателей(ДопПараметры.МассивПользователейКому);
-	
-	Если МассивПользователейДляОтправки.Количество() = 0 Тогда
-		Возврат;
-	КонецЕсли;
-	
-	
-	// +++ Григорьев  12.12.2018
-	//ТекстПисьма = СтрЗаменить(ДопПараметры.ТекстПисьма, "#", "");
-	ТекстПисьма = ЗаменитьЗарезервированныеСимволы(ДопПараметры.ТекстПисьма);
-	// --- Григорьев  12.12.2018
-	
-	ВТДопПараметры = Новый Структура();
-	Для каждого ЭлДопПараметры из ДопПараметры Цикл
-		ВТДопПараметры.Вставить(ЭлДопПараметры.Ключ, ЭлДопПараметры.Значение);		
-	КонецЦикла;
-	
-	ВТДопПараметры.Вставить("МассивПользователейДляОтправки",МассивПользователейДляОтправки);
-	ВТДопПараметры.Вставить("ТекстПисьма",ТекстПисьма);
-	ВТДопПараметры.Вставить("ТокенБота",ТокенБота);
-	
-	ИспользоватьПроксиДляОтправки = Справочники.узКонстанты.ПолучитьЗначениеКонстанты(
-		"ТелеграммИспользоватьПроксиДляОтправки",Тип("Булево"),Ложь,Истина,Истина);
-	
-	Если ИспользоватьПроксиДляОтправки Тогда
-		ВыполнитьРассылку_ЧерезПрокси(ВТДопПараметры);
-	Иначе
-		ВыполнитьРассылку_БезПрокси(ВТДопПараметры);
-	Конецесли;
-	
-КонецПроцедуры
-
-Процедура ВыполнитьРассылку_ЧерезПрокси(ДопПараметры)
-	
-	МассивПользователейДляОтправки = ДопПараметры.МассивПользователейДляОтправки;
-	ТекстПисьма = ДопПараметры.ТекстПисьма;
-	ТемаПисьма = ДопПараметры.ТемаПисьма;
-	
-	пОбработка = Обработки.узРаботаСТелеграм.Создать();
-	пОбработка.ОтправитьСообщениеTelegram(ТекстПисьма, МассивПользователейДляОтправки);
-	
-КонецПроцедуры 
-
-Процедура ВыполнитьРассылку_БезПрокси(ДопПараметры)
-	
-	МассивПользователейДляОтправки = ДопПараметры.МассивПользователейДляОтправки;
-	ТекстПисьма = ДопПараметры.ТекстПисьма;
-	ТемаПисьма = ДопПараметры.ТемаПисьма;
-	ТокенБота = ДопПараметры.ТокенБота;
-	
-	Для Каждого элемПолучатель Из МассивПользователейДляОтправки Цикл
-		
-		Ресурс 		= "bot" + ТокенБота + "/sendMessage?chat_id=" + Формат(элемПолучатель.ИД, "ЧГ=") + "&text=" + ТекстПисьма+"&parse_mode=Markdown&disable_web_page_preview=true";
-		//Ресурс 		= "bot" + ТокенБота + "/sendMessage?chat_id=" + Формат(элемПолучатель.ИД, "ЧГ=") + "&text=" + ТекстПисьма+"&disable_web_page_preview=true";
-		Соединение  = Новый HTTPСоединение("api.telegram.org", 443,,,,30,Новый ЗащищенноеСоединениеOpenSSL());
-		ЗапросHTTP 	= Новый HTTPЗапрос(Ресурс);
-		Ответ 		= Соединение.Получить(ЗапросHTTP);
-		
-		Если Не Ответ.КодСостояния = 200 Тогда
-			ЗаписьЖурналаРегистрации("Телеграмм.Отправка", УровеньЖурналаРегистрации.Ошибка,,
-				, "Не смогли отправить пользователю <"+элемПолучатель.ИД+":"+элемПолучатель.Пользователь+">");
-		КонецЕсли;
-
-	КонецЦикла;
-	
-КонецПроцедуры // +++ Григорьев  12.12.2018
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Функция ЗаменитьЗарезервированныеСимволы
-//
-// Описание:
-//   Выполняет замену основных зарезервированных символов для протокола URL 
-//
-// Параметры:
-//  ОбрабатываемаяСтрока - <Тип.Строка> - исходная строка для обработки
-//
-// Возвращаемое значение: 
-// 	Результат - <Тип.Строка> - обработанная строка
-//
-Функция ЗаменитьЗарезервированныеСимволы(ОбрабатываемаяСтрока = Неопределено) Экспорт
-	Если ОбрабатываемаяСтрока = Неопределено или НЕ ЗначениеЗаполнено(ОбрабатываемаяСтрока) Тогда
-		Возврат ОбрабатываемаяСтрока;
-	КонецЕсли; 
-	
-	пТелеграммИспользоватьЗаменуСимволовВДругуюКодировку = Справочники.узКонстанты.ПолучитьЗначениеКонстанты(
-		"ТелеграммИспользоватьЗаменуСимволовВДругуюКодировку",Тип("Булево"),,Истина,Истина);
-	
-	Если пТелеграммИспользоватьЗаменуСимволовВДругуюКодировку Тогда
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(37),"%25"); // "%"
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(33),"%21"); // "!"
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(34),"%22"); // """  (кавычка)
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(35),"%23"); // "#" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(36),"%24"); // "$"	
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(38),"%26"); // "&" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(39),"%27"); // "'" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(42),"%2A"); // "*" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(44),"%2C"); // "," 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(58),"%3A"); // ":" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(59),"%3B"); // ";" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(60),"%3C"); // "<" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(61),"%3D"); // "=" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(62),"%3E"); // ">" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(63),"%3F"); // "?" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(91),"%5B"); // "[" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(93),"%5D"); // "]" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(94),"%5E"); // "^" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(96),"%60"); // "`" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(123),"%7B"); // "{" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(124),"%7C"); // "|" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(125),"%7D"); // "}" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,Символ(32),"%20"); // " "  (пробел)
-	Иначе
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%25",Символ(37) ); // "%"
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%21",Символ(33) ); // "!"
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%22",Символ(34) ); // """  (кавычка)
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%23",Символ(35) ); // "#" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%24",Символ(36) ); // "$"	
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%26",Символ(38) ); // "&" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%27",Символ(39) ); // "'" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%2A",Символ(42) ); // "*" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%2C",Символ(44) ); // "," 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3A",Символ(58) ); // ":" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3B",Символ(59) ); // ";" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3C",Символ(60) ); // "<" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3D",Символ(61) ); // "=" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3E",Символ(62) ); // ">" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%3F",Символ(63) ); // "?" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5B",Символ(91) ); // "[" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5D",Символ(93) ); // "]" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%5E",Символ(94) ); // "^" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%60",Символ(96) ); // "`" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7B",Символ(123)); // "{" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7C",Символ(124)); // "|" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%7D",Символ(125)); // "}" 
-		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока,"%20",Символ(32) ); // " "  (пробел)
-	Конецесли;
-	
-	Возврат ОбрабатываемаяСтрока;
-КонецФункции //ЗаменитьЗарезервированныеСимволы // --- Григорьев  12.12.2018
-
-
-
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index d4faa1c72..782063788 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -1005,7 +1005,6 @@
 			<CommonModule>узОбновлениеИнформационнойБазы</CommonModule>
 			<CommonModule>узОбщийМодульКлиент</CommonModule>
 			<CommonModule>узОбщийМодульСервер</CommonModule>
-			<CommonModule>узТелеграммСервер</CommonModule>
 			<CommonModule>узРаботаСБуферомОбменаКлиент</CommonModule>
 			<CommonModule>узТелеграмБот</CommonModule>
 			<CommonModule>узТелеграмБотКоманды</CommonModule>
diff --git a/src/cf/DataProcessors/узРаботаСТелеграм/Ext/ObjectModule.bsl b/src/cf/DataProcessors/узРаботаСТелеграм/Ext/ObjectModule.bsl
index 1ef0a942e..8db909bbf 100644
--- a/src/cf/DataProcessors/узРаботаСТелеграм/Ext/ObjectModule.bsl
+++ b/src/cf/DataProcessors/узРаботаСТелеграм/Ext/ObjectModule.bsl
@@ -1,401 +1,402 @@
 
-Функция ПолучитьНастройкиДляРаботыСТелеграм()
-	
-	пНастройкиДляРаботыСТелеграм = Новый Структура;
-	
-	//ТокенТелеграмБота = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("ТокенТелеграмБота",
-	//	Тип("Строка"),,Ложь);
-	//Если Не ЗначениеЗаполнено(ТокенТелеграмБота) Тогда
-	//	Возврат;
-	//КонецЕсли;
-	
-	пВсеНастройкиПолучены = Истина;
-	пТокенТелеграмБота = Константы.узТелеграмм_ТокенБота.Получить();
-	Если Не ЗначениеЗаполнено(пТокенТелеграмБота) Тогда
-		пВсеНастройкиПолучены = Ложь;
-	КонецЕсли;
+// #240 Пиганов Г.В. 2020-09-08
+//Функция ПолучитьНастройкиДляРаботыСТелеграм()
+//	
+//	пНастройкиДляРаботыСТелеграм = Новый Структура;
+//	
+//	//ТокенТелеграмБота = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("ТокенТелеграмБота",
+//	//	Тип("Строка"),,Ложь);
+//	//Если Не ЗначениеЗаполнено(ТокенТелеграмБота) Тогда
+//	//	Возврат;
+//	//КонецЕсли;
+//	
+//	пВсеНастройкиПолучены = Истина;
+//	пТокенТелеграмБота = Константы.узТелеграмм_ТокенБота.Получить();
+//	Если Не ЗначениеЗаполнено(пТокенТелеграмБота) Тогда
+//		пВсеНастройкиПолучены = Ложь;
+//	КонецЕсли;
 
-	
-	пМассивНастроекПроксиСерверов = РегистрыСведений.узПроксиСерверы.ПолучитьМассивНастроекПроксиСерверов();
-	пМассивНастроекПроксиСерверовКоличество = пМассивНастроекПроксиСерверов.Количество();
-	// + #232 Ruflex @RomanUpworksTeam
-	//Если пМассивНастроекПроксиСерверовКоличество = 0 Тогда
-	//	пВсеНастройкиПолучены = Ложь;
-	//КонецЕсли;
-	// - #232 Ruflex @RomanUpworksTeam
-	
-	пНастройкиДляРаботыСТелеграм.Вставить("ТокенТелеграмБота", пТокенТелеграмБота);
-	пНастройкиДляРаботыСТелеграм.Вставить("МассивНастроекПроксиСерверов", пМассивНастроекПроксиСерверов);
-	пНастройкиДляРаботыСТелеграм.Вставить("НомерТекущейНастройкиПрокси", 0);
-	пНастройкиДляРаботыСТелеграм.Вставить("ВсеНастройкиПолучены", пВсеНастройкиПолучены);
-	Если пВсеНастройкиПолучены = Ложь Тогда
-		ЗаписьЖурналаРегистрации("Телеграмм.Настройки", УровеньЖурналаРегистрации.Ошибка,,
-			, "Не смогли получить настройки телеграм");
+//	
+//	пМассивНастроекПроксиСерверов = РегистрыСведений.узПроксиСерверы.ПолучитьМассивНастроекПроксиСерверов();
+//	пМассивНастроекПроксиСерверовКоличество = пМассивНастроекПроксиСерверов.Количество();
+//	// + #232 Ruflex @RomanUpworksTeam
+//	//Если пМассивНастроекПроксиСерверовКоличество = 0 Тогда
+//	//	пВсеНастройкиПолучены = Ложь;
+//	//КонецЕсли;
+//	// - #232 Ruflex @RomanUpworksTeam
+//	
+//	пНастройкиДляРаботыСТелеграм.Вставить("ТокенТелеграмБота", пТокенТелеграмБота);
+//	пНастройкиДляРаботыСТелеграм.Вставить("МассивНастроекПроксиСерверов", пМассивНастроекПроксиСерверов);
+//	пНастройкиДляРаботыСТелеграм.Вставить("НомерТекущейНастройкиПрокси", 0);
+//	пНастройкиДляРаботыСТелеграм.Вставить("ВсеНастройкиПолучены", пВсеНастройкиПолучены);
+//	Если пВсеНастройкиПолучены = Ложь Тогда
+//		ЗаписьЖурналаРегистрации("Телеграмм.Настройки", УровеньЖурналаРегистрации.Ошибка,,
+//			, "Не смогли получить настройки телеграм");
 
-	КонецЕсли;	
-	
-	Возврат пНастройкиДляРаботыСТелеграм;
-	
-КонецФункции
+//	КонецЕсли;	
+//	
+//	Возврат пНастройкиДляРаботыСТелеграм;
+//	
+//КонецФункции
 
-Процедура ПрочитатьСообщенияTelegram() Экспорт
-	
-	НастройкиДляРаботыСТелеграм = ПолучитьНастройкиДляРаботыСТелеграм();
-	Если НастройкиДляРаботыСТелеграм.ВсеНастройкиПолучены = Ложь Тогда
-		Возврат;
-	КонецЕсли;	
-	
-	Если ЗначениеЗаполнено(MaxMessangeID) Тогда
-		ИДПоследнегоПринятогоСообщения = MaxMessangeID;
-	Иначе
-		ИДПоследнегоПринятогоСообщения = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("ТелеграмMaxMessangeID", Тип("Строка"),,Ложь);
-	КонецЕсли;	
-	
-	
-	Ресурс = "bot" + НастройкиДляРаботыСТелеграм.ТокенТелеграмБота + "/getUpdates" + ?(ЗначениеЗаполнено(ИДПоследнегоПринятогоСообщения), "?offset=" + ИДПоследнегоПринятогоСообщения, "");
-	ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
-	ЗапросHTTP.Заголовки.Вставить("Content-type", "keep-alive");
-	
-	Ответ = Неопределено;
-	ВыполнитьЗапросHTTP_Telegram(Ответ, 
-								ЗапросHTTP, 
-								НастройкиДляРаботыСТелеграм.МассивНастроекПроксиСерверов, 
-								НастройкиДляРаботыСТелеграм.НомерТекущейНастройкиПрокси, 
-								Истина);
-								
-	Если Ответ = Неопределено 
-		Или Ответ.КодСостояния < 200 
-		Или Ответ.КодСостояния >= 300 Тогда
+//Процедура ПрочитатьСообщенияTelegram() Экспорт
+//	
+//	НастройкиДляРаботыСТелеграм = ПолучитьНастройкиДляРаботыСТелеграм();
+//	Если НастройкиДляРаботыСТелеграм.ВсеНастройкиПолучены = Ложь Тогда
+//		Возврат;
+//	КонецЕсли;	
+//	
+//	Если ЗначениеЗаполнено(MaxMessangeID) Тогда
+//		ИДПоследнегоПринятогоСообщения = MaxMessangeID;
+//	Иначе
+//		ИДПоследнегоПринятогоСообщения = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("ТелеграмMaxMessangeID", Тип("Строка"),,Ложь);
+//	КонецЕсли;	
+//	
+//	
+//	Ресурс = "bot" + НастройкиДляРаботыСТелеграм.ТокенТелеграмБота + "/getUpdates" + ?(ЗначениеЗаполнено(ИДПоследнегоПринятогоСообщения), "?offset=" + ИДПоследнегоПринятогоСообщения, "");
+//	ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
+//	ЗапросHTTP.Заголовки.Вставить("Content-type", "keep-alive");
+//	
+//	Ответ = Неопределено;
+//	ВыполнитьЗапросHTTP_Telegram(Ответ, 
+//								ЗапросHTTP, 
+//								НастройкиДляРаботыСТелеграм.МассивНастроекПроксиСерверов, 
+//								НастройкиДляРаботыСТелеграм.НомерТекущейНастройкиПрокси, 
+//								Истина);
+//								
+//	Если Ответ = Неопределено 
+//		Или Ответ.КодСостояния < 200 
+//		Или Ответ.КодСостояния >= 300 Тогда
 
-		ЗаписьЖурналаРегистрации("Телеграм.ПолучениеСообщений", УровеньЖурналаРегистрации.Ошибка,,
-			, "Не смогли получить сообщения телеграм");
-		Возврат;
-	КонецЕсли;
+//		ЗаписьЖурналаРегистрации("Телеграм.ПолучениеСообщений", УровеньЖурналаРегистрации.Ошибка,,
+//			, "Не смогли получить сообщения телеграм");
+//		Возврат;
+//	КонецЕсли;
 
-	
-	ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
-	HTTPОтвет = ОтветСтрокаJSON;	
-	пЧтениеJSON = Новый ЧтениеJSON;
-   	пЧтениеJSON.УстановитьСтроку(ОтветСтрокаJSON);
-   	ОтветСоответсвие = ПрочитатьJSON(пЧтениеJSON, Истина);//(пЧтениеJSON, Ложь, , , "ФункцияВосстановленияJSON", ЭтотОбъект);
-   	пЧтениеJSON.Закрыть();
-	
-	Если ОтветСоответсвие["ok"] <> Истина Тогда
-		Возврат;
-	КонецЕсли;	
-	
-	МассивResult = ОтветСоответсвие["result"];
-	ИДПоследнегоПринятогоСообщения = Неопределено;
+//	
+//	ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
+//	HTTPОтвет = ОтветСтрокаJSON;	
+//	пЧтениеJSON = Новый ЧтениеJSON;
+//   	пЧтениеJSON.УстановитьСтроку(ОтветСтрокаJSON);
+//   	ОтветСоответсвие = ПрочитатьJSON(пЧтениеJSON, Истина);//(пЧтениеJSON, Ложь, , , "ФункцияВосстановленияJSON", ЭтотОбъект);
+//   	пЧтениеJSON.Закрыть();
+//	
+//	Если ОтветСоответсвие["ok"] <> Истина Тогда
+//		Возврат;
+//	КонецЕсли;	
+//	
+//	МассивResult = ОтветСоответсвие["result"];
+//	ИДПоследнегоПринятогоСообщения = Неопределено;
 
-	ТЗПользователиТелеграмм = ПолучитьТЗПользователиТелеграмм();
-	
-	Для Каждого СоответсвиеMessange Из МассивResult Цикл
-		
-		ИДПоследнегоПринятогоСообщения = Формат(СоответсвиеMessange["update_id"] + 1, "ЧГ=");
-		СоответсвиеMessange_message = СоответсвиеMessange.Получить("message");
-		Если СоответсвиеMessange_message = Неопределено Тогда
-			Продолжить;
-		КонецЕсли;	
-		ДатаСообщения = '19700101' + СоответсвиеMessange_message["date"] +7*60*60;
-		СоответсвиеFrom = СоответсвиеMessange_message["from"];
-		пLastName = СоответсвиеFrom["last_name"];
-		пFirstName = СоответсвиеFrom["first_name"];
-		пСhatИД = Формат(СоответсвиеMessange_message["chat"]["id"], "ЧГ=");
-		Если СоответсвиеMessange_message.Получить("text") <> Неопределено Тогда
-			MessageText = СоответсвиеMessange_message.Получить("text");
+//	ТЗПользователиТелеграмм = ПолучитьТЗПользователиТелеграмм();
+//	
+//	Для Каждого СоответсвиеMessange Из МассивResult Цикл
+//		
+//		ИДПоследнегоПринятогоСообщения = Формат(СоответсвиеMessange["update_id"] + 1, "ЧГ=");
+//		СоответсвиеMessange_message = СоответсвиеMessange.Получить("message");
+//		Если СоответсвиеMessange_message = Неопределено Тогда
+//			Продолжить;
+//		КонецЕсли;	
+//		ДатаСообщения = '19700101' + СоответсвиеMessange_message["date"] +7*60*60;
+//		СоответсвиеFrom = СоответсвиеMessange_message["from"];
+//		пLastName = СоответсвиеFrom["last_name"];
+//		пFirstName = СоответсвиеFrom["first_name"];
+//		пСhatИД = Формат(СоответсвиеMessange_message["chat"]["id"], "ЧГ=");
+//		Если СоответсвиеMessange_message.Получить("text") <> Неопределено Тогда
+//			MessageText = СоответсвиеMessange_message.Получить("text");
 
-			// + Иванов А.Б. 2020-07-11  
-	//		Если Найти(MessageText, "/addwork") <> 0 Тогда
-	//			Запрос = Новый Запрос;
-	//			Запрос.Текст = 
-	//				"ВЫБРАТЬ ПЕРВЫЕ 1
-	//				|	Пользователи.Ссылка КАК Пользователь
-	//				|ИЗ
-	//				|	Справочник.Пользователи КАК Пользователи
-	//				|ГДЕ
-	//				|	Пользователи.узИДПользователяТелеграмм = &узИДПользователяТелеграмм";
-	//			
-	//			Запрос.УстановитьПараметр("узИДПользователяТелеграмм", Число(пСhatИД));
-	//			
-	//			РезультатЗапроса = Запрос.Выполнить();
-	//			Если РезультатЗапроса.Пустой() Тогда
-	//				Продолжить;
-	//			КонецЕсли;	
-	//			
-	//			Выборка = РезультатЗапроса.Выбрать();
-	//			Пока Выборка.Следующий() Цикл
-	//				ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
-	//				ТекущиеДелаОбъект.Автор = Выборка.Пользователь;
-	//				ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
-	//				ТекущиеДелаОбъект.Записать();
-	//			КонецЦикла;
-	//
-	//		КонецЕсли;
-			
-			Если Найти(MessageText, "/addwork") = 0 Тогда                              
-		    	Продолжить;
-			КонецЕсли;
-			
-			пузИДПользователяТелеграмм = Число(пСhatИД);
-			
-			ПараметрыОтбора=Новый Структура();
-			ПараметрыОтбора.Вставить("узИДПользователяТелеграмм",пузИДПользователяТелеграмм);
-			НайденныеСтроки = ТЗПользователиТелеграмм.НайтиСтроки(ПараметрыОтбора);
-			ВсегоНайденныеСтроки = НайденныеСтроки.Количество();
-			ТекстОшибки = "";
-			Если ВсегоНайденныеСтроки = 1 тогда
-				СтрокаТЗПользователиТелеграмм = НайденныеСтроки[0];	
-			ИначеЕсли ВсегоНайденныеСтроки > 1 Тогда
-				ТекстОшибки = "Ошибка! Найдено более 1 строки";
-			Иначе
-				ТекстОшибки = "Ошибка! Не найдена строка";
-			Конецесли;
-			
-			Если ЗначениеЗаполнено(ТекстОшибки) Тогда
-				ТекстОшибки = ТекстОшибки  
-					+" в ""ТЗПользователиТелеграмм"" для ";
-				Для каждого ЭлементОтбора из ПараметрыОтбора цикл
-					ТекстОшибки = ТекстОшибки  
-						+" "+ ЭлементОтбора.Ключ + " = ["+ЭлементОтбора.Значение+"]";	
-				Конеццикла;
-				ВызватьИсключение ТекстОшибки;	
-			Конецесли;
-			
-			ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
-			ТекущиеДелаОбъект.Автор = СтрокаТЗПользователиТелеграмм.Пользователь;
-			ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
-			ТекущиеДелаОбъект.Записать();
-			// - Иванов А.Б. 2020-07-11  
-			
-		
-		ИначеЕсли СоответсвиеMessange_message.Получить("photo") <> Неопределено Тогда
-			
-		КонецЕсли;
-		
-	КонецЦикла;
-	
-	
-	Если ЗначениеЗаполнено(ИДПоследнегоПринятогоСообщения) Тогда
-		Справочники.узКонстанты.УстановитьЗначениеКонстанты("ТелеграмMaxMessangeID", ИДПоследнегоПринятогоСообщения);
-		MaxMessangeID = ИДПоследнегоПринятогоСообщения; 
-	КонецЕсли;	
-	
-КонецПроцедуры
+//			// + Иванов А.Б. 2020-07-11  
+//	//		Если Найти(MessageText, "/addwork") <> 0 Тогда
+//	//			Запрос = Новый Запрос;
+//	//			Запрос.Текст = 
+//	//				"ВЫБРАТЬ ПЕРВЫЕ 1
+//	//				|	Пользователи.Ссылка КАК Пользователь
+//	//				|ИЗ
+//	//				|	Справочник.Пользователи КАК Пользователи
+//	//				|ГДЕ
+//	//				|	Пользователи.узИДПользователяТелеграмм = &узИДПользователяТелеграмм";
+//	//			
+//	//			Запрос.УстановитьПараметр("узИДПользователяТелеграмм", Число(пСhatИД));
+//	//			
+//	//			РезультатЗапроса = Запрос.Выполнить();
+//	//			Если РезультатЗапроса.Пустой() Тогда
+//	//				Продолжить;
+//	//			КонецЕсли;	
+//	//			
+//	//			Выборка = РезультатЗапроса.Выбрать();
+//	//			Пока Выборка.Следующий() Цикл
+//	//				ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
+//	//				ТекущиеДелаОбъект.Автор = Выборка.Пользователь;
+//	//				ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
+//	//				ТекущиеДелаОбъект.Записать();
+//	//			КонецЦикла;
+//	//
+//	//		КонецЕсли;
+//			
+//			Если Найти(MessageText, "/addwork") = 0 Тогда                              
+//		    	Продолжить;
+//			КонецЕсли;
+//			
+//			пузИДПользователяТелеграмм = Число(пСhatИД);
+//			
+//			ПараметрыОтбора=Новый Структура();
+//			ПараметрыОтбора.Вставить("узИДПользователяТелеграмм",пузИДПользователяТелеграмм);
+//			НайденныеСтроки = ТЗПользователиТелеграмм.НайтиСтроки(ПараметрыОтбора);
+//			ВсегоНайденныеСтроки = НайденныеСтроки.Количество();
+//			ТекстОшибки = "";
+//			Если ВсегоНайденныеСтроки = 1 тогда
+//				СтрокаТЗПользователиТелеграмм = НайденныеСтроки[0];	
+//			ИначеЕсли ВсегоНайденныеСтроки > 1 Тогда
+//				ТекстОшибки = "Ошибка! Найдено более 1 строки";
+//			Иначе
+//				ТекстОшибки = "Ошибка! Не найдена строка";
+//			Конецесли;
+//			
+//			Если ЗначениеЗаполнено(ТекстОшибки) Тогда
+//				ТекстОшибки = ТекстОшибки  
+//					+" в ""ТЗПользователиТелеграмм"" для ";
+//				Для каждого ЭлементОтбора из ПараметрыОтбора цикл
+//					ТекстОшибки = ТекстОшибки  
+//						+" "+ ЭлементОтбора.Ключ + " = ["+ЭлементОтбора.Значение+"]";	
+//				Конеццикла;
+//				ВызватьИсключение ТекстОшибки;	
+//			Конецесли;
+//			
+//			ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
+//			ТекущиеДелаОбъект.Автор = СтрокаТЗПользователиТелеграмм.Пользователь;
+//			ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
+//			ТекущиеДелаОбъект.Записать();
+//			// - Иванов А.Б. 2020-07-11  
+//			
+//		
+//		ИначеЕсли СоответсвиеMessange_message.Получить("photo") <> Неопределено Тогда
+//			
+//		КонецЕсли;
+//		
+//	КонецЦикла;
+//	
+//	
+//	Если ЗначениеЗаполнено(ИДПоследнегоПринятогоСообщения) Тогда
+//		Справочники.узКонстанты.УстановитьЗначениеКонстанты("ТелеграмMaxMessangeID", ИДПоследнегоПринятогоСообщения);
+//		MaxMessangeID = ИДПоследнегоПринятогоСообщения; 
+//	КонецЕсли;	
+//	
+//КонецПроцедуры
 
-Функция ПолучитьТЗПользователиТелеграмм() 
-	
-	Запрос = Новый Запрос;
-	Запрос.Текст = "ВЫБРАТЬ
-	|	МАКСИМУМ(Пользователи.Ссылка) КАК Пользователь,
-	|	Пользователи.узИДПользователяТелеграмм КАК узИДПользователяТелеграмм
-	|ИЗ
-	|	Справочник.Пользователи КАК Пользователи
-	|ГДЕ
-	|	Пользователи.узИДПользователяТелеграмм <> 0
-	|
-	|СГРУППИРОВАТЬ ПО
-	|	Пользователи.узИДПользователяТелеграмм";
-	
-	ТЗПользователиТелеграмм = Запрос.Выполнить().Выгрузить();
-	
-	Возврат ТЗПользователиТелеграмм;	
-	
-КонецФункции 
+//Функция ПолучитьТЗПользователиТелеграмм() 
+//	
+//	Запрос = Новый Запрос;
+//	Запрос.Текст = "ВЫБРАТЬ
+//	|	МАКСИМУМ(Пользователи.Ссылка) КАК Пользователь,
+//	|	Пользователи.узИДПользователяТелеграмм КАК узИДПользователяТелеграмм
+//	|ИЗ
+//	|	Справочник.Пользователи КАК Пользователи
+//	|ГДЕ
+//	|	Пользователи.узИДПользователяТелеграмм <> 0
+//	|
+//	|СГРУППИРОВАТЬ ПО
+//	|	Пользователи.узИДПользователяТелеграмм";
+//	
+//	ТЗПользователиТелеграмм = Запрос.Выполнить().Выгрузить();
+//	
+//	Возврат ТЗПользователиТелеграмм;	
+//	
+//КонецФункции 
 
-Процедура ОтправитьСообщениеTelegram(ТекстСообщения, МассивПользователейДляОтправки, УведомлятьОРезультате = Ложь) Экспорт
-	
-	Если МассивПользователейДляОтправки.Количество() = 0 Тогда
-		// ++ 79Vlad 20.06.2019 #174  \\
-		Если УведомлятьОРезультате Тогда
-			Сообщение = Новый СообщениеПользователю;
-			Сообщение.Текст = "Сообщение не отправлено, т.к. не указан получатель.";
-			Сообщение.Сообщить();
-		КонецЕсли; 
-		// -- 79Vlad 20.06.2019 #174		
-		Возврат;
-	КонецЕсли;
-	
-	НастройкиДляРаботыСТелеграм = ПолучитьНастройкиДляРаботыСТелеграм();
-	Если НастройкиДляРаботыСТелеграм.ВсеНастройкиПолучены = Ложь Тогда
-		// ++ 79Vlad 20.06.2019 #174  \\
-		Если УведомлятьОРезультате Тогда
-			Сообщение = Новый СообщениеПользователю;
-			Сообщение.Текст = "Сообщение не отправлено, т.к. не смогли получить настройки телеграм.";
-			Сообщение.Сообщить();
-		КонецЕсли; 
-		// -- 79Vlad 20.06.2019 #174		
-		Возврат;
-	КонецЕсли;	
+//Процедура ОтправитьСообщениеTelegram(ТекстСообщения, МассивПользователейДляОтправки, УведомлятьОРезультате = Ложь) Экспорт
+//	
+//	Если МассивПользователейДляОтправки.Количество() = 0 Тогда
+//		// ++ 79Vlad 20.06.2019 #174  \\
+//		Если УведомлятьОРезультате Тогда
+//			Сообщение = Новый СообщениеПользователю;
+//			Сообщение.Текст = "Сообщение не отправлено, т.к. не указан получатель.";
+//			Сообщение.Сообщить();
+//		КонецЕсли; 
+//		// -- 79Vlad 20.06.2019 #174		
+//		Возврат;
+//	КонецЕсли;
+//	
+//	НастройкиДляРаботыСТелеграм = ПолучитьНастройкиДляРаботыСТелеграм();
+//	Если НастройкиДляРаботыСТелеграм.ВсеНастройкиПолучены = Ложь Тогда
+//		// ++ 79Vlad 20.06.2019 #174  \\
+//		Если УведомлятьОРезультате Тогда
+//			Сообщение = Новый СообщениеПользователю;
+//			Сообщение.Текст = "Сообщение не отправлено, т.к. не смогли получить настройки телеграм.";
+//			Сообщение.Сообщить();
+//		КонецЕсли; 
+//		// -- 79Vlad 20.06.2019 #174		
+//		Возврат;
+//	КонецЕсли;	
 
-	Для Каждого Пользователь Из МассивПользователейДляОтправки Цикл
-		
-		ИДПользователяТелеграм = Пользователь.узИДПользователяТелеграмм;
-		
-		Если Не ЗначениеЗаполнено(ИДПользователяТелеграм) Тогда
-			Продолжить;
-		КонецЕсли;
-		
-		//ТекстСообщения = СтрЗаменить(ТекстСообщения, "#", "");
-	    СообщениеОтправлено = Ложь;
+//	Для Каждого Пользователь Из МассивПользователейДляОтправки Цикл
+//		
+//		ИДПользователяТелеграм = Пользователь.узИДПользователяТелеграмм;
+//		
+//		Если Не ЗначениеЗаполнено(ИДПользователяТелеграм) Тогда
+//			Продолжить;
+//		КонецЕсли;
+//		
+//		//ТекстСообщения = СтрЗаменить(ТекстСообщения, "#", "");
+//	    СообщениеОтправлено = Ложь;
 
-		//		Данные = 
-		//		"{
-		//|""chat_id"":"""+Формат(Выборка.ИДПользователяТелеграмм, "ЧГ=")+""",
-		//|""text"":""Текст"",
-		//|""reply_markup"": {
-		//|    ""inline_keyboard"": [
-		//|    [{
-		//|  ""text"": ""ОбъектСогласования"",
-		//|  ""url"":""http://192.168.13.130/BPS/ru_RU/#e1cib/data/Справочник.бпсПредметыСогласований?ref=838318dbf213445c11e8e41681645d42""
-		//|     }]
-		//|]
-		//|}
-		//|} ";
+//		//		Данные = 
+//		//		"{
+//		//|""chat_id"":"""+Формат(Выборка.ИДПользователяТелеграмм, "ЧГ=")+""",
+//		//|""text"":""Текст"",
+//		//|""reply_markup"": {
+//		//|    ""inline_keyboard"": [
+//		//|    [{
+//		//|  ""text"": ""ОбъектСогласования"",
+//		//|  ""url"":""http://192.168.13.130/BPS/ru_RU/#e1cib/data/Справочник.бпсПредметыСогласований?ref=838318dbf213445c11e8e41681645d42""
+//		//|     }]
+//		//|]
+//		//|}
+//		//|} ";
 
-		Структура = Новый Соответствие;
-		Структура.Вставить("chat_id",Формат(ИДПользователяТелеграм, "ЧГ="));
-		Структура.Вставить("text", ТекстСообщения);
-		
-		// ++ 79Vlad 20.06.2019 #174  \\
-		Структура.Вставить("parse_mode","Markdown");
-		Структура.Вставить("disable_web_page_preview","true");
-		// -- 79Vlad 20.06.2019 #174			
-		
-		Массив_reply_markup = Новый Массив;
-		
-		//Пример создания конпки в телеграм
-		//Если ЗначениеЗаполнено(Выборка.ОбъектБД)
-		//	И ЗначениеЗаполнено(АдресПубликации) Тогда
-		//	
-		//	Структура_inline_keyboard = Новый Структура;
-		//	Структура_inline_keyboard.Вставить("text", Строка(Выборка.ОбъектБД));
-		//	Структура_inline_keyboard.Вставить("url", АдресПубликации + "#" + ПолучитьНавигационнуюСсылку(Выборка.ОбъектБД));
-		//                      
-		//	Массив_reply_markup.Добавить(Структура_inline_keyboard);
-		//КонецЕсли;	
-		//Массив_inline_keyboard = Новый Массив;
-		//Массив_inline_keyboard.Добавить(Массив_reply_markup);
-		//
-		//Структура_reply_markup = Новый Структура;
-		//Структура_reply_markup.Вставить("inline_keyboard",Массив_inline_keyboard);
-		//
-		//Структура.Вставить("reply_markup", Структура_reply_markup);
-		
-		ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
-		ЗаписьJSON = Новый ЗаписьJSON;
-		ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
-		ЗаписатьJSON(ЗаписьJSON, Структура);
-		Данные = ЗаписьJSON.Закрыть();
-					
-		Ресурс = "bot" + НастройкиДляРаботыСТелеграм.ТокенТелеграмБота + "/sendMessage";
-		ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
-		ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");
-		ЗапросHTTP.УстановитьТелоИзСтроки(Данные);
+//		Структура = Новый Соответствие;
+//		Структура.Вставить("chat_id",Формат(ИДПользователяТелеграм, "ЧГ="));
+//		Структура.Вставить("text", ТекстСообщения);
+//		
+//		// ++ 79Vlad 20.06.2019 #174  \\
+//		Структура.Вставить("parse_mode","Markdown");
+//		Структура.Вставить("disable_web_page_preview","true");
+//		// -- 79Vlad 20.06.2019 #174			
+//		
+//		Массив_reply_markup = Новый Массив;
+//		
+//		//Пример создания конпки в телеграм
+//		//Если ЗначениеЗаполнено(Выборка.ОбъектБД)
+//		//	И ЗначениеЗаполнено(АдресПубликации) Тогда
+//		//	
+//		//	Структура_inline_keyboard = Новый Структура;
+//		//	Структура_inline_keyboard.Вставить("text", Строка(Выборка.ОбъектБД));
+//		//	Структура_inline_keyboard.Вставить("url", АдресПубликации + "#" + ПолучитьНавигационнуюСсылку(Выборка.ОбъектБД));
+//		//                      
+//		//	Массив_reply_markup.Добавить(Структура_inline_keyboard);
+//		//КонецЕсли;	
+//		//Массив_inline_keyboard = Новый Массив;
+//		//Массив_inline_keyboard.Добавить(Массив_reply_markup);
+//		//
+//		//Структура_reply_markup = Новый Структура;
+//		//Структура_reply_markup.Вставить("inline_keyboard",Массив_inline_keyboard);
+//		//
+//		//Структура.Вставить("reply_markup", Структура_reply_markup);
+//		
+//		ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
+//		ЗаписьJSON = Новый ЗаписьJSON;
+//		ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
+//		ЗаписатьJSON(ЗаписьJSON, Структура);
+//		Данные = ЗаписьJSON.Закрыть();
+//					
+//		Ресурс = "bot" + НастройкиДляРаботыСТелеграм.ТокенТелеграмБота + "/sendMessage";
+//		ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
+//		ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");
+//		ЗапросHTTP.УстановитьТелоИзСтроки(Данные);
 
-		Ответ = Неопределено;
-		ВыполнитьЗапросHTTP_Telegram(Ответ, 
-									ЗапросHTTP, 
-									НастройкиДляРаботыСТелеграм.МассивНастроекПроксиСерверов, 
-									НастройкиДляРаботыСТелеграм.НомерТекущейНастройкиПрокси);
-		Если Ответ = Неопределено 
-			Или Ответ.КодСостояния < 200 
-			Или Ответ.КодСостояния >= 300 Тогда
-		
-			ЗаписьЖурналаРегистрации("Телеграм.ОтправкаСообщений", УровеньЖурналаРегистрации.Ошибка,,
-				, "Не смогли отправить сообщение телеграм пользователю [" + Пользователь.узИДПользователяТелеграмм+"]");
-		Иначе
-			СообщениеОтправлено = Истина;		
-		КонецЕсли;
-		
-		// ++ 79Vlad 20.06.2019 #174  \\
-		Если УведомлятьОРезультате Тогда
-			ТекстУведомления = "Сообщение удачно отправлено" ;
-			Если НЕ СообщениеОтправлено Тогда
-				ТекстУведомления = "Не смогли отправить сообщение телеграм пользователю [" + Пользователь.узИДПользователяТелеграмм+"]. Подробнее смотрите в журнале регистрации."
-			КонецЕсли; 
-			Сообщение = Новый СообщениеПользователю;
-			Сообщение.Текст = ТекстУведомления;
-			Сообщение.Сообщить();
-		КонецЕсли; 
-		// -- 79Vlad 20.06.2019 #174		
-		
-	КонецЦикла;
+//		Ответ = Неопределено;
+//		ВыполнитьЗапросHTTP_Telegram(Ответ, 
+//									ЗапросHTTP, 
+//									НастройкиДляРаботыСТелеграм.МассивНастроекПроксиСерверов, 
+//									НастройкиДляРаботыСТелеграм.НомерТекущейНастройкиПрокси);
+//		Если Ответ = Неопределено 
+//			Или Ответ.КодСостояния < 200 
+//			Или Ответ.КодСостояния >= 300 Тогда
+//		
+//			ЗаписьЖурналаРегистрации("Телеграм.ОтправкаСообщений", УровеньЖурналаРегистрации.Ошибка,,
+//				, "Не смогли отправить сообщение телеграм пользователю [" + Пользователь.узИДПользователяТелеграмм+"]");
+//		Иначе
+//			СообщениеОтправлено = Истина;		
+//		КонецЕсли;
+//		
+//		// ++ 79Vlad 20.06.2019 #174  \\
+//		Если УведомлятьОРезультате Тогда
+//			ТекстУведомления = "Сообщение удачно отправлено" ;
+//			Если НЕ СообщениеОтправлено Тогда
+//				ТекстУведомления = "Не смогли отправить сообщение телеграм пользователю [" + Пользователь.узИДПользователяТелеграмм+"]. Подробнее смотрите в журнале регистрации."
+//			КонецЕсли; 
+//			Сообщение = Новый СообщениеПользователю;
+//			Сообщение.Текст = ТекстУведомления;
+//			Сообщение.Сообщить();
+//		КонецЕсли; 
+//		// -- 79Vlad 20.06.2019 #174		
+//		
+//	КонецЦикла;
 
-КонецПроцедуры
+//КонецПроцедуры
 
-Процедура ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON = Ложь)
-	
-	Ответ = Неопределено;
-	
-	// + #232 Ruflex @RomanUpworksTeam
-	///+Ruflex
-	///-Ruflex
-	//Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество()) )  Тогда
-	//	Возврат;
-	//КонецЕсли;
-	
-	Если (МассивНастроекПроксиСерверов.Количество()>0)  Тогда
-		
-		Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество())   Тогда
-			Возврат;
-		КонецЕсли;
-		
-		НастройкиПрокси = МассивНастроекПроксиСерверов[НомерТекущейНастройкиПрокси];
-		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
-		ИнтернетПрокси.Установить("https",НастройкиПрокси.Адрес,НастройкиПрокси.Порт,НастройкиПрокси.Логин,НастройкиПрокси.Пароль,Ложь);
-		Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,ИнтернетПрокси,30,Новый ЗащищенноеСоединениеOpenSSL());
-		
-	Иначе
-		
-		Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,30,Новый ЗащищенноеСоединениеOpenSSL());
-		
-	КонецЕсли;
-	// + #232 Ruflex @RomanUpworksTeam
+//Процедура ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON = Ложь)
+//	
+//	Ответ = Неопределено;
+//	
+//	// + #232 Ruflex @RomanUpworksTeam
+//	///+Ruflex
+//	///-Ruflex
+//	//Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество()) )  Тогда
+//	//	Возврат;
+//	//КонецЕсли;
+//	
+//	Если (МассивНастроекПроксиСерверов.Количество()>0)  Тогда
+//		
+//		Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество())   Тогда
+//			Возврат;
+//		КонецЕсли;
+//		
+//		НастройкиПрокси = МассивНастроекПроксиСерверов[НомерТекущейНастройкиПрокси];
+//		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
+//		ИнтернетПрокси.Установить("https",НастройкиПрокси.Адрес,НастройкиПрокси.Порт,НастройкиПрокси.Логин,НастройкиПрокси.Пароль,Ложь);
+//		Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,ИнтернетПрокси,30,Новый ЗащищенноеСоединениеOpenSSL());
+//		
+//	Иначе
+//		
+//		Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,30,Новый ЗащищенноеСоединениеOpenSSL());
+//		
+//	КонецЕсли;
+//	// + #232 Ruflex @RomanUpworksTeam
 
-	Попытка 
-		
-		Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
-		Если Ответ.КодСостояния < 200 Или Ответ.КодСостояния >= 300 Тогда
-			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
-			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
-			Ответ = Неопределено;
-			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);			
-			Возврат;
-		КонецЕсли;
-	
-		ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
+//	Попытка 
+//		
+//		Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
+//		Если Ответ.КодСостояния < 200 Или Ответ.КодСостояния >= 300 Тогда
+//			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
+//			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
+//			Ответ = Неопределено;
+//			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);			
+//			Возврат;
+//		КонецЕсли;
+//	
+//		ОтветСтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
 
-		Если ВОтветОжидаемJSON
-			И СтрНайти(НРег(ОтветСтрокаJSON), "<html>") <> 0 Тогда //прокси может уже не работать, или внесен в гос реестр
-		
-			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
-			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
-			Ответ = Неопределено;
-			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);			
-			Возврат;
-			
-		Иначе
+//		Если ВОтветОжидаемJSON
+//			И СтрНайти(НРег(ОтветСтрокаJSON), "<html>") <> 0 Тогда //прокси может уже не работать, или внесен в гос реестр
+//		
+//			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
+//			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
+//			Ответ = Неопределено;
+//			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);			
+//			Возврат;
+//			
+//		Иначе
 
-			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, 1);
-			Возврат;
-			
-		КонецЕсли;
-	
-	Исключение
-		
-		// + #232 Ruflex @RomanUpworksTeam
-		//НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
-		//РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
-		//ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);	
-		
-		Если (МассивНастроекПроксиСерверов.Количество()>0)  Тогда
+//			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, 1);
+//			Возврат;
+//			
+//		КонецЕсли;
+//	
+//	Исключение
+//		
+//		// + #232 Ruflex @RomanUpworksTeam
+//		//НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
+//		//РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
+//		//ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);	
+//		
+//		Если (МассивНастроекПроксиСерверов.Количество()>0)  Тогда
 
-			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
-			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
-			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);
-			
-		Конецесли;
-		// - #232 Ruflex @RomanUpworksTeam
-	КонецПопытки
-	
-КонецПроцедуры
+//			НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
+//			РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
+//			ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);
+//			
+//		Конецесли;
+//		// - #232 Ruflex @RomanUpworksTeam
+//	КонецПопытки
+//	
+//КонецПроцедуры
diff --git a/src/cf/DataProcessors/узРаботаСТелеграм/Forms/Форма/Ext/Form/Module.bsl b/src/cf/DataProcessors/узРаботаСТелеграм/Forms/Форма/Ext/Form/Module.bsl
index e6ba422ee..babee66b8 100644
--- a/src/cf/DataProcessors/узРаботаСТелеграм/Forms/Форма/Ext/Form/Module.bsl
+++ b/src/cf/DataProcessors/узРаботаСТелеграм/Forms/Форма/Ext/Form/Module.bsl
@@ -2,18 +2,21 @@
 &НаСервере
 Процедура ОтправитьСообщениеНаСервере()
 	
+	//+ #240 Пиганов Г.В. 2020-09-08
 	//+ #174 Кравцов А.В. 2019-06-06
 	//МассивПользователейДляОтправки = Новый Массив;
 	//МассивПользователейДляОтправки.Добавить(ЭтотОбъект.ПользовательДляОтправки);
-	МассивПользователейКому = Новый Массив;
-	МассивПользователейКому.Добавить(ЭтотОбъект.ПользовательДляОтправки);
-	МассивПользователейДляОтправки = узТелеграммСервер.ПолучитьМассивПолучателей(МассивПользователейКому); 
+	//МассивПользователейКому = Новый Массив;
+	//МассивПользователейКому.Добавить(ЭтотОбъект.ПользовательДляОтправки);
+	//МассивПользователейДляОтправки = узТелеграммСервер.ПолучитьМассивПолучателей(МассивПользователейКому); 
 	//- #174 Кравцов А.В. 2019-06-06
-	пОбъект = РеквизитФормыВЗначение("Объект");
+	//пОбъект = РеквизитФормыВЗначение("Объект");
 	// ++ 79Vlad 20.06.2019 #174  \\
 	//пОбъект.ОтправитьСообщениеTelegram(ЭтотОбъект.ТескстСообщенияДляОтправки, МассивПользователейДляОтправки);
-	пОбъект.ОтправитьСообщениеTelegram(ЭтотОбъект.ТескстСообщенияДляОтправки, МассивПользователейДляОтправки,Истина);
+	//пОбъект.ОтправитьСообщениеTelegram(ЭтотОбъект.ТескстСообщенияДляОтправки, МассивПользователейДляОтправки,Истина);
 	// -- 79Vlad 20.06.2019 #174
+	узТелеграмБот.ОтправитьСообщение(ЭтотОбъект.ТескстСообщенияДляОтправки, ЭтотОбъект.ПользовательДляОтправки, Истина);
+	//- #240 Пиганов Г.В. 2020-09-08
 	
 КонецПроцедуры
 
@@ -25,9 +28,17 @@
 &НаСервере
 Процедура ПрочитатьСообщенияНаСервере()
 	
-	пОбъект = РеквизитФормыВЗначение("Объект");
-	пОбъект.ПрочитатьСообщенияTelegram();
-	ЗначениеВРеквизитФормы(пОбъект, "Объект");
+	//+ #240 Пиганов Г.В. 2020-09-08
+	//пОбъект = РеквизитФормыВЗначение("Объект");
+	//пОбъект.ПрочитатьСообщенияTelegram();
+	//ЗначениеВРеквизитФормы(пОбъект, "Объект");
+	Ответ = Неопределено;
+	НовыеСообщения = узТелеграмБот.ПолучитьНовыеСообщения(Объект.MaxMessangeID, Ответ);
+	Объект.HTTPОтвет = Ответ.ПолучитьТелоКакСтроку();
+	Для Каждого Сообщение Из НовыеСообщения Цикл
+		узТелеграмБотКоманды.ОбработатьКомандыСообщения(Сообщение);
+	КонецЦикла;
+	//- #240 Пиганов Г.В. 2020-09-08
 	
 КонецПроцедуры
 
diff --git a/src/cf/Subsystems/узУправлениеЗадачами/Subsystems/узТелеграмм.xml b/src/cf/Subsystems/узУправлениеЗадачами/Subsystems/узТелеграмм.xml
index af8545475..d49e34fa6 100644
--- a/src/cf/Subsystems/узУправлениеЗадачами/Subsystems/узТелеграмм.xml
+++ b/src/cf/Subsystems/узУправлениеЗадачами/Subsystems/узТелеграмм.xml
@@ -16,7 +16,7 @@
 			<Picture/>
 			<Content>
 				<xr:Item xsi:type="xr:MDObjectRef">Constant.узТелеграмм_ТокенБота</xr:Item>
-				<xr:Item xsi:type="xr:MDObjectRef">CommonModule.узТелеграммСервер</xr:Item>
+				<xr:Item xsi:type="xr:MDObjectRef">8f79d0f2-3bdc-43f6-ae0d-3393a1b1c89a</xr:Item>
 			</Content>
 		</Properties>
 		<ChildObjects/>

From 270d7a6e76c697a5f9dc241b3b2dfbdbedb33cfe Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Wed, 9 Sep 2020 22:27:53 +0300
Subject: [PATCH 3/8] =?UTF-8?q?#240=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?=
 =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20?=
 =?UTF-8?q?=D0=BF=D0=BE=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B9=20=D0=B7=D0=B0?=
 =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../узТелеграмБотКоманды/Ext/Module.bsl       | 41 ++++++++++++++++++-
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
index 7e98af488..8961f4cf3 100644
--- a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -13,12 +13,15 @@
 	ЗадачаСсылка = Неопределено;
 	Если НачинаетсяСНомераЗадачи(Сообщение, ЗадачаСсылка) Тогда
 		Если ПроверитьНовыйФайл(Сообщение, ЗадачаСсылка, НастройкиБота)
+		ИЛИ ПроверитьНовуюЗадачу(Сообщение, ЗадачаСсылка)
 		ИЛИ ПроверитьНовыйВопрос(Сообщение, ЗадачаСсылка)
 		ИЛИ ПроверитьНовыйКомментарий(Сообщение, ЗадачаСсылка) Тогда
 			Возврат;
 		КонецЕсли;
 	КонецЕсли;
 	
+	ПроверитьНовуюЗадачу(Сообщение);
+	
 КонецПроцедуры
 
 // #240 Пиганов Г.В. 2020-09-08
@@ -139,6 +142,39 @@
 	
 КонецФункции
 
+Функция ПроверитьНовуюЗадачу(Сообщение, ЗадачаСсылка = Неопределено)
+	
+	//НоваяЗадача - "#ТекстОписания"
+	//НоваяПодзадача - "#НомерЗадачи #ТекстОписания"
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	Если СтрНачинаетсяС(Сообщение.Текст, "#") Тогда
+		Сообщение.Текст = СокрЛ(Сред(Сообщение.Текст, 2));
+	//ИначеЕсли СтрНачинаетсяС(Сообщение.Текст, "/#") Тогда
+	//	ТекстСообщения = Сред(Сообщение.Текст, 3);
+	Иначе
+		Возврат Ложь;
+	КонецЕсли;
+	
+	ЗадачаОбъект = Справочники.узЗадачи.СоздатьЭлемент();
+	ЗадачаОбъект.Автор = Сообщение.Пользователь;
+	ЗадачаОбъект.ДатаСоздания = Сообщение.Дата;
+	ЗадачаОбъект.ТекстСодержания = Сообщение.Текст;
+	ЗадачаОбъект.Наименование = Сообщение.Текст;
+	ЗадачаОбъект.ОформлениеТекста = Перечисления.узОформлениеТекста.Текст;
+	ЗадачаОбъект.Статус = Справочники.узКонстанты.ПолучитьЗначениеКонстанты("СтатусЗадачиПоУмолчанию", Тип("СправочникСсылка.узСтатусыЗадачи"), , Ложь);
+	ЗадачаОбъект.Родитель = ЗадачаСсылка;
+	ЗадачаОбъект.Записать();
+	
+	Сообщение.Обработано = Истина;
+	
+	Возврат Истина;
+	
+КонецФункции
+
 // #240 Пиганов Г.В. 2020-09-08
 Функция ПроверитьНовыйКомментарий(Сообщение, ЗадачаСсылка)
 	
@@ -189,8 +225,9 @@
 		Для ПозЧисла = 2 По СтрДлина(ТекстСообщения) Цикл
 			КодСимволаЧисла = КодСимвола(ТекстСообщения, ПозЧисла);
 			Если КодСимволаЧисла < 48 ИЛИ КодСимволаЧисла > 57 Тогда // "0" - "9"
-				Если НЕ ПустаяСтрока(Символ(КодСимволаЧисла)) Тогда
-					// После номера найден не пробельный символ и значит начинается не с номера задачи
+				Если НЕ ПустаяСтрока(Символ(КодСимволаЧисла)) ИЛИ НомерЗадачи = "" Тогда
+					// Если после номера найден не пробельный символ или пробельный при
+					// пустом номере задачи, то сообщение начинается не с номера задачи
 					НомерЗадачи = "";
 				ИначеЕсли ПозЧисла > 1 Тогда
 					// Удаление из текста сообщения номера задачи

From dbba895c18b4139656df9d52dc85c488536f26f0 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Wed, 9 Sep 2020 22:32:36 +0300
Subject: [PATCH 4/8] =?UTF-8?q?#240=20=D0=9F=D0=BE=D0=BA=D0=B0=20=D1=83?=
 =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?=
 =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D0=B7=D0=B2=D1=83=D0=BA=D0=BE=D0=B2?=
 =?UTF-8?q?=D1=8B=D1=85=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?=
 =?UTF-8?q?=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl   | 13 ++-----------
 .../узТелеграмБотКоманды/Ext/Module.bsl             |  2 +-
 2 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
index 1aafc2ed1..cde3c7523 100644
--- a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
@@ -184,15 +184,6 @@
 				ПрикрепленныеФайлы.Добавить(ДанныеФайла);
 			КонецЕсли;
 			
-			msgAudio = Message["Audio"]; // прикрепленная запись аудио
-			Если ТипЗнч(msgAudio) = Тип("Соответствие") Тогда
-				ДанныеФайла = Новый Структура;
-				ДанныеФайла.Вставить("Имя", msgAudio["file_name"]);
-				ДанныеФайла.Вставить("ИД", msgAudio["file_id"]);
-				ДанныеФайла.Вставить("Размер", msgAudio["file_size"]);
-				ПрикрепленныеФайлы.Добавить(ДанныеФайла);
-			КонецЕсли;
-			
 			Если ПрикрепленныеФайлы.Количество() > 0 Тогда
 				// Для файлов передается заголовок, а не текст
 				ДанныеСообщения.Текст = Строка(Message["caption"]);
@@ -554,7 +545,7 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
-Функция СоответствиеИзСтрокиJSON(СтрокаJSON)
+Функция СоответствиеИзСтрокиJSON(СтрокаJSON) Экспорт
 	
 	ЧтениеJSON = Новый ЧтениеJSON;
 	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
@@ -566,7 +557,7 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
-Функция СтрокаJSONИзСоответствия(СоответствиеДанных)
+Функция СтрокаJSONИзСоответствия(СоответствиеДанных) Экспорт
 	
 	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
 	ЗаписьJSON = Новый ЗаписьJSON;
diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
index 8961f4cf3..16c991716 100644
--- a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -183,7 +183,7 @@
 	КонецЕсли;
 	
 	Если ПустаяСтрока(Сообщение.Текст) Тогда
-		// Был указан только номер задачи
+		// Пустой комментарий - был указан только номер задачи
 		Возврат Ложь;
 	КонецЕсли;
 	

From 786a1eccf11a91c33b84121e235203d257f83592 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Wed, 9 Sep 2020 23:08:28 +0300
Subject: [PATCH 5/8] =?UTF-8?q?#240=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?=
 =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
index b291ba0b9..bfafeeae0 100644
--- a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
+++ b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl
@@ -661,7 +661,7 @@
 	//+ #240 Пиганов Г.В. 2020-09-08
 	//Павлюков
 	//узТелеграммСервер.ВыполнитьРассылку(ДопПараметры);
-	узТелеграмБот.ОтправитьСообщение(ДопПараметры.ТекстСообщения, МассивНаблюдателей);
+	узТелеграмБот.ОтправитьСообщение(ДопПараметры.ТекстПисьма, МассивНаблюдателей);
 	//- #240 Пиганов Г.В. 2020-09-08
 	
 КонецПроцедуры

From 10f8926dff038fbfab2495f66dcb7c5fa9efceaa Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Thu, 10 Sep 2020 21:51:45 +0300
Subject: [PATCH 6/8] =?UTF-8?q?#247=20=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?=
 =?UTF-8?q?=D0=B0=20/help?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../узТелеграмБотКоманды/Ext/Module.bsl       | 47 +++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
index 16c991716..8e2b5fd39 100644
--- a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -4,6 +4,10 @@
 	
 	НастройкиБота = Неопределено; // Для сохранения настроек при необходимости
 	
+	Если ПроверитьСправка(Сообщение) Тогда
+		Возврат;
+	КонецЕсли;
+	
 	Если ПроверитьНовоеДело(Сообщение)
 	ИЛИ ПроверитьНовыйВопрос(Сообщение) Тогда
 		Возврат;
@@ -24,6 +28,48 @@
 	
 КонецПроцедуры
 
+// #242 Пиганов Г.В. 2020-09-10
+// Возвращает доступные команды. Может быть переопределена в расширении
+//
+Функция ДоступныеКоманды()
+	
+	ДоступныеКоманды = Новый Массив;
+	ДоступныеКоманды.Добавить("!ТекстОписания - новое дело");
+	ДоступныеКоманды.Добавить("?ТекстОписания - новый вопрос");
+	ДоступныеКоманды.Добавить("#ТекстОписания - новая задача");
+	ДоступныеКоманды.Добавить("#НомерЗадачи ТекстКомментария - новый комментарий к задаче");
+	ДоступныеКоманды.Добавить("#НомерЗадачи ?ТекстВопроса - новый вопрос к задаче");
+	ДоступныеКоманды.Добавить("#НомерЗадачи #ТекстОписания - новая подзадача к задаче");
+	ДоступныеКоманды.Добавить("#НомерЗадачи в заголовке файла/фото - новай файл к задаче");
+	
+	Возврат ДоступныеКоманды;
+	
+КонецФункции
+
+// #242 Пиганов Г.В. 2020-09-10
+Функция ПроверитьСправка(Сообщение)
+	
+	Если Сообщение.Обработано Тогда
+		Возврат Истина;
+	КонецЕсли;
+	
+	Если СокрП(Сообщение.Текст) <> "/help" Тогда
+		Возврат Ложь;
+	КонецЕсли;
+	
+	//Справка - "/help"
+	ТекстСообщения = "Доступные команды:";
+	Для Каждого ОписаниеКоманды Из ДоступныеКоманды() Цикл
+		ТекстСообщения = ТекстСообщения + Символы.ПС + ОписаниеКоманды;
+	КонецЦикла;
+	узТелеграмБот.ОтправитьСообщение(ТекстСообщения, Сообщение.Пользователь);
+	
+	Сообщение.Обработано = Истина;
+	
+	Возврат Истина;
+	
+КонецФункции
+
 // #240 Пиганов Г.В. 2020-09-08
 Функция ПроверитьНовоеДело(Сообщение)
 	
@@ -142,6 +188,7 @@
 	
 КонецФункции
 
+// #240 Пиганов Г.В. 2020-09-08
 Функция ПроверитьНовуюЗадачу(Сообщение, ЗадачаСсылка = Неопределено)
 	
 	//НоваяЗадача - "#ТекстОписания"

From cf87f7bb2556c0dc0a4b9ff2165d50c199234939 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Thu, 10 Sep 2020 22:30:24 +0300
Subject: [PATCH 7/8] =?UTF-8?q?#240=20=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?=
 =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80?=
 =?UTF-8?q?/=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../узТелеграмБот/Ext/Module.bsl              | 74 ++++++++++++++++++-
 .../узТелеграмБотКоманды/Ext/Module.bsl       | 23 ++++++
 2 files changed, 96 insertions(+), 1 deletion(-)

diff --git a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
index cde3c7523..3ddfb7b07 100644
--- a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
@@ -270,7 +270,7 @@
 //
 // Параметры:
 //  ТекстСообщения - Строка - Текст сообщения в формате markdown
-//  Получатели - Массив или СправочникСсылка.Пользователь - массив пользователей для получения сообщения.
+//  Получатели - Массив, СправочникСсылка.Пользователь - массив пользователей для получения сообщения.
 //               Сообщение отправляется только пользователям с заполненным ИД телеграмма
 //               и с установленным флагом "Использовать рассылку через телеграмм"
 //  Ответ - Структура или Соответствие - доп параметры, которые должны быть переданы в параметры запроса
@@ -394,6 +394,27 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
+// Выполняет HTTPЗапрос для телеграмм по переданным параметрам и с обходом доступных прокси, если они заданы
+//
+// Параметры:
+//  НастройкиБота - Структура - структура настроек бота
+//  * ТокенБота - Строка - токен бота телеграмм. Получается при создании бота
+//  * ТекущийПрокси - Строка,Неопределено - если Неопределено, то прокси не используется,
+//                    иначе индекс прокси в массиве НастройкиБота.Прокси
+//  * Прокси - Массив структур - Необязательный. Массив настроек доступных прокси
+//  ** Адрес - Строка - Адрес прокси
+//  ** Порт - Число - Порт прокси
+//  ** Логин - Строка - Логи прокси
+//  ** Пароль - Строка - Пароль прокси
+//  Команда - Строка - команда телеграмм API
+//  ПараметрыЗапроса - Структура,Соответствие - дополнительные параметры запроса. Передаются в HTTPЗапрос
+//  Ответ - HTTPОтвет - переменная для получения результата запроса
+//  ЭтоЗапросPOST - Булево - Признак выполнения POST, а не GET запроса. При GET запросе параметры
+//                  передаются в строке URL, а при POST передаюттся в теле запроса
+//
+// Возвращаемое значение:
+//  Булево - признак успешного выполнения запроса (код ответа 200 или 300)
+//
 Функция ВыполнитьЗапросHTTP(НастройкиБота, Команда, ПараметрыЗапроса, Ответ, ЭтоЗапросPOST = Истина) Экспорт
 	
 	ЕстьПрокси = НастройкиБота.ТекущийПрокси <> Неопределено;
@@ -478,6 +499,21 @@
 #КонецОбласти
 
 // #240 Пиганов Г.В. 2020-09-08
+// Создает новое HTTPСоединение для бота телеграмм с учетом выбранного прокси
+//
+// Параметры:
+//  НастройкиБота - Структура - структура настроек бота
+//  * ТекущийПрокси - Строка,Неопределено - если Неопределено, то прокси не используется,
+//                    иначе индекс прокси в массиве НастройкиБота.Прокси
+//  * Прокси - Массив структур - Необязательный. Массив настроек доступных прокси
+//  ** Адрес - Строка - Адрес прокси
+//  ** Порт - Число - Порт прокси
+//  ** Логин - Строка - Логи прокси
+//  ** Пароль - Строка - Пароль прокси
+//
+// Возвращаемое значение:
+//  HTTPСоединение - созданное соединение
+//
 Функция НовоеСоединениеHTTP(НастройкиБота)
 	
 	Если НастройкиБота.ТекущийПрокси = Неопределено Тогда
@@ -494,6 +530,8 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
+// Используется в регламентном задании для получения и обработки сообщений
+//
 Процедура РегламентноеПолучениеИОбработкаСообщений() Экспорт
 	
 	НастройкиБота = НастройкиБота();
@@ -506,6 +544,13 @@
 КонецПроцедуры
 
 // #240 Пиганов Г.В. 2020-09-08
+// Возвращает таблицу пользователей, у которых заполнен идентификатор пользователя телеграмм
+//
+// Возвращаемое значение:
+//  ТаблицаЗначений - Таблица пользователей
+//  * ПользовательИД - Строка - идентификатор пользователя телеграмм
+//  * Ссылка - СправочникСсылка.Пользователи - ссылка на пользователя
+//
 Функция ВсеПользователиТелеграмм()
 	
 	Запрос = Новый Запрос;
@@ -525,6 +570,17 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
+// Возвращает выборку из запроса с пользователями с учетом отбора для которых разрешена
+// отправка сообщений в телеграмм и у которых заполнен идентификатор пользователя телеграмм
+//
+// Параметры:
+//  Пользователи - Массив, СправочникСсылка.Пользователь - массив или один пользователь
+//
+// Возвращаемое значение:
+//  ВыборкаИзРезультатаЗапроса - выборка пользователей
+//  * Пользователь - СправочникСсылка.Пользователь - Ссылка на пользователя
+//  * ПользовательИД - идентификатор пользователя телеграмм
+//
 Функция ВыборкаПользователейТелеграмДляОтправки(Пользователи)
 	
 	Запрос = Новый Запрос;
@@ -545,6 +601,14 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
+// Преобразует строку JSON в соответствие типовым сериализатором 1С
+//
+// Параметры:
+//  СтрокаJSON - Строка - строка JSON для преобразования
+//
+// Возвращаемое значение:
+//  Соответствие - результат преобразования
+//
 Функция СоответствиеИзСтрокиJSON(СтрокаJSON) Экспорт
 	
 	ЧтениеJSON = Новый ЧтениеJSON;
@@ -557,6 +621,14 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
+// Преобразует строку JSON в соответствие типовым сериализатором 1С
+//
+// Параметры:
+//  СоответствиеДанных - Соответствие - данные для преобразования
+//
+// Возвращаемое значение:
+//  Строка - результат преобразования
+//
 Функция СтрокаJSONИзСоответствия(СоответствиеДанных) Экспорт
 	
 	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
index 8e2b5fd39..c32937d16 100644
--- a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -1,5 +1,25 @@
 
 // #240 Пиганов Г.В. 2020-09-08
+// Обработаывает команды в переданном сообщении
+//
+// Параметры:
+//  Текст - Строка - Текст или заголовок сообшения. Может быть изменен при обработке
+//  Обработано - Булево - Признак обработки команды. Имеет смысл при обработке
+//                        команд в расширении до стандартных комманд
+//  ДатаУниверсальная - Дата и время - дата сообщения (UTC+0:00)
+//  Дата  - Дата и время - Дата сообщения в текущем часовом поясе сеанса
+//  Пользователь - СправочникСсылка.Пользователи - Ссылка на пользователя
+//  ПользовательИД - Строка- ИД пользователя телеграмм
+//  ПользовательИмя - Строка - имя пользователя телеграмм
+//  ПользовательНаименование - Строка - представление пользователя телеграмм
+//  Номер - Строка - номер текущего сообщения в чате телеграмм
+//  Файлы - Массив структур - массив файлов или фото в сообщении
+//  * ИД - Строка - идентификатор файла в телеграмм. Для получения файла через узТелеграммБот.ПолучитьФайл()
+//  * Имя - имя файла с расширением. Для фото не заполнено
+//
+// Возвращаемое значение:
+//  Булево - Истина, если команда обработана
+//
 Процедура ОбработатьКомандыСообщения(Сообщение) Экспорт
 	
 	НастройкиБота = Неопределено; // Для сохранения настроек при необходимости
@@ -7,6 +27,9 @@
 	Если ПроверитьСправка(Сообщение) Тогда
 		Возврат;
 	КонецЕсли;
+	Если НЕ ЗначениеЗаполнено(Сообщение.Пользователь) Тогда
+		Возврат; // Неизвестный пользователь
+	КонецЕсли;
 	
 	Если ПроверитьНовоеДело(Сообщение)
 	ИЛИ ПроверитьНовыйВопрос(Сообщение) Тогда

From 717a0cf6ea3c54575e38a6d188c65331083f3a16 Mon Sep 17 00:00:00 2001
From: GenVP <GenV.77@gmail.com>
Date: Fri, 11 Sep 2020 22:29:54 +0300
Subject: [PATCH 8/8] =?UTF-8?q?#240=20=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?=
 =?UTF-8?q?=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../узТелеграмБот/Ext/Module.bsl              | 56 +++++++++----------
 .../узТелеграмБотКоманды/Ext/Module.bsl       |  8 +--
 2 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
index 3ddfb7b07..b45e7eee6 100644
--- a/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБот/Ext/Module.bsl
@@ -4,9 +4,9 @@
 // Возвращает настройки бота
 //
 // Возвращаемое значение:
-// Структура - структура с параметрами
-// * ТокенБота - Строка - токен телеграмм-бота
-// * ТекущийПрокси - Неопределено - текущий индекс прокси. Заполняется в ЗаполнитьНастройкиПрокси
+//  Структура - структура с параметрами
+//  * ТокенБота - Строка - токен телеграмм-бота
+//  * ТекущийПрокси - Число,Неопределено - текущий индекс прокси. Заполняется в ЗаполнитьНастройкиПрокси
 //
 Функция НастройкиБота() Экспорт
 	
@@ -26,12 +26,12 @@
 //
 // Возвращаемое значение:
 //  НастройкиБота - Структура - входящие настройки бота
-//   * ТекущийПрокси - Число - Индекс текущего прокси. Равен 0 и изменяется при выполнении запросов
-//   * Прокси - Массив структур - Массив доступных прокси. Задаются в регистре сведений узПроксиСерверы
-//   ** Адрес - Строка - адрес прокси
-//   ** Порт - Число - порт прокси
-//   ** Логин - Строка - логин прокси
-//   ** Пароль - Строка - пароль прокси
+//  * ТекущийПрокси - Число - Индекс текущего прокси. Равен 0 и изменяется при выполнении запросов
+//  * Прокси - Массив структур - Массив доступных прокси. Задаются в регистре сведений узПроксиСерверы
+//  ** Адрес - Строка - адрес прокси
+//  ** Порт - Число - порт прокси
+//  ** Логин - Строка - логин прокси
+//  ** Пароль - Строка - пароль прокси
 //
 Процедура ЗаполнитьНастройкиПрокси(НастройкиБота) Экспорт
 	
@@ -56,20 +56,20 @@
 //
 // Возвращаемое значение: 
 //  Массив структур - Данные полученных сообщений:
-//    * Номер - Строка - Номер сообщения в чате
-//    * ДатаУниверсальная - Дата и время - дата сообщения GMT
-//    * Дата - Дата и время - дата сообщения приведенная к текущему часовому поясу сеанса
-//    * ПользовательПредставление - Строка - представление пользователя в телеграмм
-//    * ПользовательИД - Строка - идентификатор пользователя телеграмм
-//    * ПользовательИмя - Строка - имя пользователя в телеграмм. Может быть пустым
-//    * Текст - Строка - Текст сообщения
-//    * Пользователь - СправочникСсылка.Пользователи - ссылка на пользователя, найденная по данным ПользовательИД
-//    * Файлы - Массив структур - Массив файлов сообщения:
-//    ** Имя - Строка - имя файла с расширением. Для фото не задано
-//    ** ИД - Строка - идентификатор файла. Используется для получения файла
-//    ** Размер - Число - размер файла
-//    ** Ширина - Число - ширина изображения. Задано только для фото
-//    ** Высота - Число - высота изображения. Задано только для фото
+//  * Номер - Строка - Номер сообщения в чате
+//  * ДатаУниверсальная - Дата и время - дата сообщения (UTC+0:00)
+//  * Дата - Дата и время - дата сообщения приведенная к текущему часовому поясу сеанса
+//  * ПользовательПредставление - Строка - представление пользователя в телеграмм
+//  * ПользовательИД - Строка - идентификатор пользователя телеграмм
+//  * ПользовательИмя - Строка - имя пользователя в телеграмм. Может быть пустым
+//  * Текст - Строка - Текст сообщения
+//  * Пользователь - СправочникСсылка.Пользователи - ссылка на пользователя, найденная по данным ПользовательИД
+//  * Файлы - Массив структур - Массив файлов сообщения:
+//  ** Имя - Строка - имя файла с расширением. Для фото не задано
+//  ** ИД - Строка - идентификатор файла. Используется для получения файла
+//  ** Размер - Число - размер файла
+//  ** Ширина - Число - ширина изображения. Задано только для фото
+//  ** Высота - Число - высота изображения. Задано только для фото
 //
 Функция ПолучитьНовыеСообщения(MaxMessageID = "", Ответ = Неопределено, НеПолучатьПовторно = Истина) Экспорт
 	
@@ -227,7 +227,7 @@
 // Параметры:
 //  ИД - Строка - идентификатор файла телеграмм. Передается с сообщением.
 //  НастройкиБота - Структура - структура с настройками бота. Если передана
-//                  не заполненная переменная, то в нее будут помещены настройки.
+//                  не переменная, то в нее будут помещены настройки.
 //
 // Возвращаемое значение:
 //  Строка - адрес во временном хранилище с двоичными данными файла
@@ -266,14 +266,14 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
-// Отправляет текстовое чообщение переданным пользователям
+// Отправляет текстовое сообщение переданным пользователям
 //
 // Параметры:
 //  ТекстСообщения - Строка - Текст сообщения в формате markdown
 //  Получатели - Массив, СправочникСсылка.Пользователь - массив пользователей для получения сообщения.
 //               Сообщение отправляется только пользователям с заполненным ИД телеграмма
 //               и с установленным флагом "Использовать рассылку через телеграмм"
-//  Ответ - Структура или Соответствие - доп параметры, которые должны быть переданы в параметры запроса
+//  Ответ - Структура или Соответствие - доп. параметры, которые должны быть переданы в параметры запроса
 //
 Процедура ОтправитьСообщение(ТекстСообщения, Получатели, УведомлятьПользователя = Ложь, Ответ = Неопределено) Экспорт
 	
@@ -570,7 +570,7 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
-// Возвращает выборку из запроса с пользователями с учетом отбора для которых разрешена
+// Возвращает выборку из запроса с пользователями с учетом отбора, для которых разрешена
 // отправка сообщений в телеграмм и у которых заполнен идентификатор пользователя телеграмм
 //
 // Параметры:
@@ -621,7 +621,7 @@
 КонецФункции
 
 // #240 Пиганов Г.В. 2020-09-08
-// Преобразует строку JSON в соответствие типовым сериализатором 1С
+// Преобразует соответствие в строку JSON типовым сериализатором 1С
 //
 // Параметры:
 //  СоответствиеДанных - Соответствие - данные для преобразования
diff --git a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
index c32937d16..f38dc85c3 100644
--- a/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
+++ b/src/cf/CommonModules/узТелеграмБотКоманды/Ext/Module.bsl
@@ -1,6 +1,6 @@
 
 // #240 Пиганов Г.В. 2020-09-08
-// Обработаывает команды в переданном сообщении
+// Обрабатывает команды в переданном сообщении
 //
 // Параметры:
 //  Текст - Строка - Текст или заголовок сообшения. Может быть изменен при обработке
@@ -15,7 +15,7 @@
 //  Номер - Строка - номер текущего сообщения в чате телеграмм
 //  Файлы - Массив структур - массив файлов или фото в сообщении
 //  * ИД - Строка - идентификатор файла в телеграмм. Для получения файла через узТелеграммБот.ПолучитьФайл()
-//  * Имя - имя файла с расширением. Для фото не заполнено
+//  * Имя - Строка - имя файла с расширением. Для фото не заполнено
 //
 // Возвращаемое значение:
 //  Булево - Истина, если команда обработана
@@ -51,7 +51,7 @@
 	
 КонецПроцедуры
 
-// #242 Пиганов Г.В. 2020-09-10
+// #247 Пиганов Г.В. 2020-09-10
 // Возвращает доступные команды. Может быть переопределена в расширении
 //
 Функция ДоступныеКоманды()
@@ -69,7 +69,7 @@
 	
 КонецФункции
 
-// #242 Пиганов Г.В. 2020-09-10
+// #247 Пиганов Г.В. 2020-09-10
 Функция ПроверитьСправка(Сообщение)
 	
 	Если Сообщение.Обработано Тогда