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 @@
+
+
+
+
+ узОбщийМодульСервер
+
+
+ ru
+ Уз общий модуль сервер
+
+
+
+ false
+ false
+ true
+ true
+ false
+ true
+ false
+ DontUse
+
+
+
\ 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 @@
ФайловыеФункцииСлужебныйКлиентСервер
ФайловыеФункцииСлужебныйПовтИсп
ФизическиеЛицаКлиентСервер
+ узОбщийМодульСервер
ОбновлениеИнформационнойБазы
ApplicationExtensionsManifest_1_0_0_1
ApplicationExtensionsPermissions_1_0_0_1
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 @@
Day
1
true
- 2016-09-16T12:00:00
- 2016-09-25T12:59:59
- 2016-09-16T12:00:00
+ 2016-09-16T15:00:00
+ 2016-09-25T15:59:59
+ 2016-09-16T15:00:00
Gradient
3
Day