From 62b047e6948dbccee021f56fb143c5f8954bf413 Mon Sep 17 00:00:00 2001
From: Anton Ivanov <iab@bk.ru>
Date: Fri, 16 Sep 2016 15:36:02 +0300
Subject: [PATCH] =?UTF-8?q?#4,=20=D0=A3=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0?=
 =?UTF-8?q?=D0=BC=D0=B8,=20=D0=A3=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?=
 =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D0=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/Catalogs/узЗадачи/Ext/ObjectModule.bsl    | 114 ++++++++++++++++--
 src/CommonModules/узОбщийМодульСервер.xml     |  23 ++++
 .../узОбщийМодульСервер/Ext/Module.bsl        |  75 ++++++++++++
 src/Configuration.xml                         |   1 +
 .../ПродолжительностьРаботыРегламентныхЗаданий/Ext/Template.xml |   6 +-
 5 files changed, 206 insertions(+), 13 deletions(-)
 create mode 100644 src/CommonModules/узОбщийМодульСервер.xml
 create mode 100644 src/CommonModules/узОбщийМодульСервер/Ext/Module.bsl

diff --git a/src/Catalogs/узЗадачи/Ext/ObjectModule.bsl b/src/Catalogs/узЗадачи/Ext/ObjectModule.bsl
index 8680b0032..8e4e0adec 100644
--- a/src/Catalogs/узЗадачи/Ext/ObjectModule.bsl
+++ b/src/Catalogs/узЗадачи/Ext/ObjectModule.bsl
@@ -36,39 +36,43 @@
 		Конецесли;
 	Конецесли;	
 	
-	ОбновитьИсторию();
+	МассивСобытийВИстории = ОбновитьИсторию();
+	
+	ОтправитьУведомлениеНаПочту(МассивСобытийВИстории);
 КонецПроцедуры
 
-Процедура ОбновитьИсторию()
+Функция ОбновитьИсторию()
+	МассивСобытийВИстории = Новый Массив();
+	
 	ДатаСобытия = ТекущаяДата();
 	пАвтор = Пользователи.ТекущийПользователь();
 	
 	Если ЭтоНовый() Тогда
 		ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
 		Событие = "Добавлена задача";
-		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);
-		Возврат;
+		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);
+		Возврат МассивСобытийВИстории;
 	Конецесли;	
 	
 	СтарыйИсполнитель = Ссылка.Исполнитель;
 	Если Исполнитель <> СтарыйИсполнитель Тогда
 		ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
 		Событие = "Изменен исполнитель с ["+СтарыйИсполнитель+"] на [" + Исполнитель+"]";
-		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);		
+		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);		
 	Конецесли;
 	
 	СтарыйСтатус = Ссылка.Статус;
 	Если Статус <> СтарыйСтатус Тогда
 		ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзменениеСтатуса");
 		Событие = "Изменен статус с ["+СтарыйСтатус+"] на [" + Статус+"]";
-		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);		
+		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);		
 	Конецесли;
 	
 	СтарыеКомментарии = Ссылка.Комментарии;
 	Если Комментарии.Количество() <> СтарыеКомментарии.Количество() Тогда
 		ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
 		Событие = "Добавлен новый комментарий";
-		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);		
+		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);		
 	Конецесли;
 	
 	СтароеНаименование = СокрЛП(Ссылка.Наименование);
@@ -77,20 +81,110 @@
 		ИЛИ СокрЛП(ТекстСодержания) <> СтароеТекстСодержания Тогда
 		ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
 		Событие = "Изменено описание задачи";
-		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие);		
+		ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории);		
 	Конецесли;
 	
 	История.Сортировать("ДатаСобытия УБЫВ");
-КонецПроцедуры
+	
+	Возврат МассивСобытийВИстории;
+	
+	
+КонецФункции
 
-Процедура ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие)
+Процедура ДобавитьВИсторию(ДатаСобытия,пАвтор,ВидСобытия,Событие,МассивСобытийВИстории)
 	СтрокаИстория = История.Добавить();
 	СтрокаИстория.ДатаСобытия = ДатаСобытия;
 	СтрокаИстория.Автор = пАвтор;
 	СтрокаИстория.ВидСобытия = ВидСобытия;
 	СтрокаИстория.Событие = Событие;
+	
+	МассивСобытийВИстории.Добавить(ВидСобытия);
 КонецПроцедуры 
 
+Процедура ОтправитьУведомлениеНаПочту(МассивСобытийВИстории)
+	ТекПользователь = Пользователи.ТекущийПользователь(); 
+	Если ТекПользователь = Исполнитель Тогда			
+		Возврат;
+	Конецесли;	
+	
+	ВсегоСобытий = МассивСобытийВИстории.Количество();
+	Если ВсегоСобытий = 0 Тогда
+		Возврат;
+	Конецесли;
+	
+	НеобходимоОтправитьУведомление = Ложь;
+	
+	ТемаПисьмаСобытие = "";
+	
+	ВидыСобытий_ДобавленаЗадача = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
+	ВидыСобытий_НовыйИсполнитель = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
+	ВидыСобытий_ДобавленКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
+	ВидыСобытий_ИзмененоОписаниеЗадачи = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
+	
+	МассивСобытийКоторыеПодлежатОтправки = Новый Массив();
+	МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленаЗадача);
+	МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
+	МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
+	//МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененоОписаниеЗадачи);
+	
+	
+	Если ВсегоСобытий = 1 Тогда
+		ЭлМассивСобытийВИстории = МассивСобытийВИстории[0];
+		Если ЭлМассивСобытийВИстории = ВидыСобытий_ДобавленаЗадача Тогда
+			НеобходимоОтправитьУведомление = Истина;
+			ТемаПисьмаСобытие = "Вам была назначена задача:";			
+		ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_НовыйИсполнитель Тогда
+			НеобходимоОтправитьУведомление = Истина;
+			ТемаПисьмаСобытие = "Вам была назначена задача:";
+		ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_ДобавленКомментарий Тогда
+			НеобходимоОтправитьУведомление = Истина;
+			ТемаПисьмаСобытие = "Добален комментарий по задаче:";
+		//ИначеЕсли ЭлМассивСобытийВИстории = ВидыСобытий_ИзмененоОписаниеЗадачи Тогда
+		//	НеобходимоОтправитьУведомление = Истина;			
+		//	ТемаПисьмаСобытие = "Изменено описание по задаче:";
+		Конецесли;
+	Иначе
+		Если МассивСобытийВИстории.Найти(ВидыСобытий_НовыйИсполнитель) <> Неопределено
+			ИЛИ МассивСобытийВИстории.Найти(ВидыСобытий_ДобавленаЗадача) <> Неопределено Тогда
+			НеобходимоОтправитьУведомление = Истина;
+			ТемаПисьмаСобытие = "Вам была назначена задача:";				
+		Иначе
+			Для каждого ЭлМассивСобытийВИстории из МассивСобытийВИстории цикл
+				Если МассивСобытийКоторыеПодлежатОтправки.Найти(ЭлМассивСобытийВИстории) <> Неопределено Тогда
+					НеобходимоОтправитьУведомление = Истина;
+					ТемаПисьмаСобытие = "Изменена задача:";										
+					Прервать;
+				Конецесли;
+			Конеццикла;	
+		Конецесли;
+	Конецесли;
+	
+		
+	Если НеобходимоОтправитьУведомление Тогда
+		НаименованиеЗадачи = СокрЛП(Наименование);
+		НомерЗадачи = ""+Код;
+		ТемаПисьма = "[#"+НомерЗадачи+"] "+ТемаПисьмаСобытие + НаименованиеЗадачи;		
+		ТекстПисьма = "
+		|Добрый день.
+		|
+		|"+ТемаПисьмаСобытие+" "+НаименованиеЗадачи+"
+		|Номер задачи: #"+НомерЗадачи+"
+		|";
+		Если ЗначениеЗаполнено(ТекстСодержания) Тогда
+			ТекстПисьма = ТекстПисьма + "
+			|
+			|Описание задачи: 
+			|"+ТекстСодержания+"
+			|";			
+		Конецесли;
+		ДопПараметры = Новый Структура();
+		ДопПараметры.Вставить("ВажностьЗадачи",Важность);
+		ДопПараметры.Вставить("ТекстПисьма",ТекстПисьма);
+		ДопПараметры.Вставить("ТемаПисьма",ТемаПисьма);
+		ДопПараметры.Вставить("ПользовательКому",Исполнитель);
+		узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);			
+	КонецЕсли;
+КонецПроцедуры 
 
 Функция ЕстьПодчиненныеЗадачи(Задача,ЗадачаРебенок = Неопределено) Экспорт
 	пЕстьПодчиненныеЗадачи = Ложь;
diff --git a/src/CommonModules/узОбщийМодульСервер.xml b/src/CommonModules/узОбщийМодульСервер.xml
new file mode 100644
index 000000000..e3302c5fb
--- /dev/null
+++ b/src/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.1">
+	<CommonModule uuid="0bc2d419-32bf-452b-984a-6432543713e3">
+		<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>true</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/CommonModules/узОбщийМодульСервер/Ext/Module.bsl b/src/CommonModules/узОбщийМодульСервер/Ext/Module.bsl
new file mode 100644
index 000000000..3f54710a1
--- /dev/null
+++ b/src/CommonModules/узОбщийМодульСервер/Ext/Module.bsl
@@ -0,0 +1,75 @@
+
+Процедура ОтправитьПисьмо(ДопПараметры) Экспорт
+	
+	ВажностьЗадачи = ДопПараметры.ВажностьЗадачи;
+	ТекстПисьма = ДопПараметры.ТекстПисьма;
+	ТемаПисьма = ДопПараметры.ТемаПисьма;
+	ПользовательКому = ДопПараметры.ПользовательКому;
+	
+	МассивПользователей = Новый Массив();
+	МассивПользователей.Добавить(ПользовательКому);
+	МассивАдресовЭлектроннойПочты = ПолучитьМассивАдресовЭлектроннойПочты(МассивПользователей);	
+	Если МассивАдресовЭлектроннойПочты.Количество() = 0 Тогда
+		Сообщить("Ошибка! при отправке письма не удалось получить адреса электронной почты для ["+ПользовательКому+"]");
+		Возврат;
+	Конецесли;
+	
+	ТекПользователь = Пользователи.ТекущийПользователь();
+	ДокОбъект = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();	
+	ДокОбъект.Дата = ТекущаяДата();
+	ДокОбъект.Автор = ТекПользователь;
+	
+	ДокОбъект.Важность = Перечисления.ВариантыВажностиВзаимодействия[""+ВажностьЗадачи];
+	ДокОбъект.Кодировка = "UTF-8";
+	ДокОбъект.Ответственный = ТекПользователь;
+	ДокОбъект.ОтправительПредставление = "1с: Управление задачами";
+	ДокОбъект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее");
+	ДокОбъект.Текст = ТекстПисьма;
+	ДокОбъект.Тема = ТемаПисьма;
+	ДокОбъект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст");
+	ДокОбъект.УчетнаяЗапись = ПредопределенноеЗначение("Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты");
+	ДокОбъект.УдалятьПослеОтправки = Истина;
+	
+	//ДокОбъект.ДатаКогдаОтправить = ;
+	
+	Для каждого ЭлМассивАдресовЭлектроннойПочты из МассивАдресовЭлектроннойПочты цикл
+		СтрокаПолучателиПисьма = ДокОбъект.ПолучателиПисьма.Добавить();
+		СтрокаПолучателиПисьма.Адрес         = ЭлМассивАдресовЭлектроннойПочты;
+		СтрокаПолучателиПисьма.Представление = ""+ПользовательКому+" <"+ЭлМассивАдресовЭлектроннойПочты+">";
+		СтрокаПолучателиПисьма.Контакт       = ПользовательКому;
+	Конеццикла;
+	ДокОбъект.СформироватьПредставленияКонтактов();
+	ДокОбъект.Записать();	
+КонецПроцедуры 
+
+Функция ПолучитьМассивАдресовЭлектроннойПочты(МассивПользователей) 
+	МассивАдресовЭлектроннойПочты = Новый Массив();
+	Запрос = Новый Запрос;
+	Запрос.Текст = 
+	"ВЫБРАТЬ
+	|	ПользователиКонтактнаяИнформация.Ссылка,
+	|	ПользователиКонтактнаяИнформация.Тип,
+	|	ПользователиКонтактнаяИнформация.Вид,
+	|	ПользователиКонтактнаяИнформация.АдресЭП
+	|ИЗ
+	|	Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
+	|ГДЕ
+	|	ПользователиКонтактнаяИнформация.Ссылка В(&МассивПользователей)
+	|	И ПользователиКонтактнаяИнформация.Тип = &Тип
+	|	И ПользователиКонтактнаяИнформация.Вид = &Вид
+	|";
+	
+	Запрос.УстановитьПараметр("Вид", ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailПользователя"));
+	Запрос.УстановитьПараметр("МассивПользователей", МассивПользователей);
+	Запрос.УстановитьПараметр("Тип", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"));
+	
+	РезультатЗапроса = Запрос.Выполнить();
+	
+	Выборка = РезультатЗапроса.Выбрать();
+	
+	Пока Выборка.Следующий() Цикл
+		МассивАдресовЭлектроннойПочты.Добавить(Выборка.АдресЭП);	
+	КонецЦикла;	
+	Возврат МассивАдресовЭлектроннойПочты;
+КонецФункции 
+
diff --git a/src/Configuration.xml b/src/Configuration.xml
index b61dbaa9a..0451b1a9a 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -770,6 +770,7 @@
 			<CommonModule>ФайловыеФункцииСлужебныйКлиентСервер</CommonModule>
 			<CommonModule>ФайловыеФункцииСлужебныйПовтИсп</CommonModule>
 			<CommonModule>ФизическиеЛицаКлиентСервер</CommonModule>
+			<CommonModule>узОбщийМодульСервер</CommonModule>
 			<ExchangePlan>ОбновлениеИнформационнойБазы</ExchangePlan>
 			<XDTOPackage>ApplicationExtensionsManifest_1_0_0_1</XDTOPackage>
 			<XDTOPackage>ApplicationExtensionsPermissions_1_0_0_1</XDTOPackage>
diff --git a/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Ext/Template.xml b/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Ext/Template.xml
index 782973db7..984117bd8 100644
--- a/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Ext/Template.xml
+++ b/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Ext/Template.xml
@@ -2982,9 +2982,9 @@
 			<d3p1:fixedVariantMeasure>Day</d3p1:fixedVariantMeasure>
 			<d3p1:fixedVariantInterval>1</d3p1:fixedVariantInterval>
 			<d3p1:autoFullInterval>true</d3p1:autoFullInterval>
-			<d3p1:fullIntervalBegin>2016-09-16T12:00:00</d3p1:fullIntervalBegin>
-			<d3p1:fullIntervalEnd>2016-09-25T12:59:59</d3p1:fullIntervalEnd>
-			<d3p1:visualBegin>2016-09-16T12:00:00</d3p1:visualBegin>
+			<d3p1:fullIntervalBegin>2016-09-16T15:00:00</d3p1:fullIntervalBegin>
+			<d3p1:fullIntervalEnd>2016-09-25T15:59:59</d3p1:fullIntervalEnd>
+			<d3p1:visualBegin>2016-09-16T15:00:00</d3p1:visualBegin>
 			<d3p1:intervalDrawType>Gradient</d3p1:intervalDrawType>
 			<d3p1:noneVariantChars>3</d3p1:noneVariantChars>
 			<d3p1:noneVariantMeasure>Day</d3p1:noneVariantMeasure>