1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-17 20:58:01 +02:00

№286 Servicedesk: создание задачи из входящего письма, привязка писем к уже созданным задачам, создание контрагентов по адресу электронной почты,

This commit is contained in:
Anton Ivanov 2018-01-07 14:41:35 +03:00
parent 486f184b1c
commit 325e0a23f6
10 changed files with 514 additions and 115 deletions

View File

@ -127,4 +127,54 @@
КонецФункции
// Конец СтандартныеПодсистемы.Взаимодействие
// Конец СтандартныеПодсистемы.Взаимодействие
Функция ПолучитьНастройкиСобытий() Экспорт
РезультатФункции = Новый Структура();
ВидыСобытий_ДобавленаЗадача = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
ВидыСобытий_НовыйИсполнитель = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
ВидыСобытий_ДобавленКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
ВидыСобытий_ИзмененКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененКомментарий");
ВидыСобытий_ИзмененоОписаниеЗадачи = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
ВидыСобытий_ИзменениеСтатуса = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзменениеСтатуса");
ВидыСобытий_ВходящееПисьмо = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ВходящееПисьмо");
РезультатФункции.Вставить("ВидыСобытий_ДобавленаЗадача",ВидыСобытий_ДобавленаЗадача);
РезультатФункции.Вставить("ВидыСобытий_НовыйИсполнитель",ВидыСобытий_НовыйИсполнитель);
РезультатФункции.Вставить("ВидыСобытий_ДобавленКомментарий",ВидыСобытий_ДобавленКомментарий);
РезультатФункции.Вставить("ВидыСобытий_ИзмененКомментарий",ВидыСобытий_ИзмененКомментарий);
РезультатФункции.Вставить("ВидыСобытий_ИзмененоОписаниеЗадачи",ВидыСобытий_ИзмененоОписаниеЗадачи);
РезультатФункции.Вставить("ВидыСобытий_ИзменениеСтатуса",ВидыСобытий_ИзменениеСтатуса);
РезультатФункции.Вставить("ВидыСобытий_ВходящееПисьмо",ВидыСобытий_ВходящееПисьмо);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзменениеСтатуса);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененКомментарий);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ВходящееПисьмо);
РезультатФункции.Вставить("МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки",МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки);
МассивСобытийКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленаЗадача);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененКомментарий);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ВходящееПисьмо);
РезультатФункции.Вставить("МассивСобытийКоторыеПодлежатОтправки",МассивСобытийКоторыеПодлежатОтправки);
МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
РезультатФункции.Вставить("МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки",МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки);
МассивСобытийДляКонтрагентовКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийДляКонтрагентовКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленаЗадача);
РезультатФункции.Вставить("МассивСобытийДляКонтрагентовКоторыеПодлежатОтправки",МассивСобытийДляКонтрагентовКоторыеПодлежатОтправки);
Возврат РезультатФункции;
КонецФункции

View File

@ -395,57 +395,20 @@
Конецесли;
КонецПроцедуры
Процедура ОтправитьУведомлениеНаПочту(СобытияВИстории)
Процедура ОтправитьУведомлениеНаПочту(СобытияВИстории) Экспорт
НастройкиСобытий = ПолучитьНастройкиСобытий();
НастройкиСобытий = Справочники.узЗадачи.ПолучитьНастройкиСобытий();
ОтправитьУведомлениеНаПочтуИсполнителю(НастройкиСобытий,СобытияВИстории);
ОтправитьУведомлениеНаПочтуСтаромуИсполнителю(НастройкиСобытий,СобытияВИстории);
ОтправитьУведомлениеНаПочтуНаблюдателям(НастройкиСобытий,СобытияВИстории)
ОтправитьУведомлениеНаПочтуНаблюдателям(НастройкиСобытий,СобытияВИстории);
ОтправитьУведомлениеНаПочтуКонтрагентам(НастройкиСобытий,СобытияВИстории);
КонецПроцедуры
Функция ПолучитьНастройкиСобытий()
РезультатФункции = Новый Структура();
ВидыСобытий_ДобавленаЗадача = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленаЗадача");
ВидыСобытий_НовыйИсполнитель = ПредопределенноеЗначение("Перечисление.узВидыСобытий.НовыйИсполнитель");
ВидыСобытий_ДобавленКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленКомментарий");
ВидыСобытий_ИзмененКомментарий = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененКомментарий");
ВидыСобытий_ИзмененоОписаниеЗадачи = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененоОписаниеЗадачи");
ВидыСобытий_ИзменениеСтатуса = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзменениеСтатуса");
РезультатФункции.Вставить("ВидыСобытий_ДобавленаЗадача",ВидыСобытий_ДобавленаЗадача);
РезультатФункции.Вставить("ВидыСобытий_НовыйИсполнитель",ВидыСобытий_НовыйИсполнитель);
РезультатФункции.Вставить("ВидыСобытий_ДобавленКомментарий",ВидыСобытий_ДобавленКомментарий);
РезультатФункции.Вставить("ВидыСобытий_ИзмененКомментарий",ВидыСобытий_ИзмененКомментарий);
РезультатФункции.Вставить("ВидыСобытий_ИзмененоОписаниеЗадачи",ВидыСобытий_ИзмененоОписаниеЗадачи);
РезультатФункции.Вставить("ВидыСобытий_ИзменениеСтатуса",ВидыСобытий_ИзменениеСтатуса);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзменениеСтатуса);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененКомментарий);
РезультатФункции.Вставить("МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки",МассивСобытийДляНаблюдателяКоторыеПодлежатОтправки);
МассивСобытийКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленаЗадача);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ДобавленКомментарий);
МассивСобытийКоторыеПодлежатОтправки.Добавить(ВидыСобытий_ИзмененКомментарий);
РезультатФункции.Вставить("МассивСобытийКоторыеПодлежатОтправки",МассивСобытийКоторыеПодлежатОтправки);
МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки = Новый Массив();
МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки.Добавить(ВидыСобытий_НовыйИсполнитель);
РезультатФункции.Вставить("МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки",МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки);
Возврат РезультатФункции;
КонецФункции
Процедура ОтправитьУведомлениеНаПочтуИсполнителю(НастройкиСобытий,СобытияВИстории)
Если НЕ ЗначениеЗаполнено(Исполнитель) Тогда
@ -560,6 +523,44 @@
ДопПараметры.Вставить("МассивПользователейКому",МассивНаблюдателей);
узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);
КонецПроцедуры
Процедура ОтправитьУведомлениеНаПочтуКонтрагентам(НастройкиСобытий,СобытияВИстории)
Если НЕ ЗначениеЗаполнено(Контрагент) ТОгда
Возврат;
Конецесли;
ТЗСобытияВИсторииДляУведомлений = СобытияВИстории.ТЗСобытияВИсторииДляУведомлений;
ВсегоСобытий = ТЗСобытияВИсторииДляУведомлений.Количество();
Если ВсегоСобытий = 0 Тогда
Возврат;
Конецесли;
ВТДопПараметры = Новый Структура();
ВТДопПараметры.Вставить("ЭтоОтправкаКонтрагентам",Истина);
ВТДопПараметры.Вставить("НастройкиСобытий",НастройкиСобытий);
РезультатФункции = ПолучитьТемаПисьмаСобытие(ВТДопПараметры,СобытияВИстории);
Если НЕ РезультатФункции.НеобходимоОтправитьУведомление Тогда
Возврат;
КонецЕсли;
ПараметрыПисьма = ПолучитьПараметрыПисьма(РезультатФункции);
МассивКонтрагентов = Новый Массив();
МассивКонтрагентов.Добавить(Контрагент);
ТЗАдресаЭлектроннойПочты = узОбщийМодульСервер.ПолучитьТЗАдресаЭлектроннойПочтыПоМассивуКонтрагентов(
МассивКонтрагентов);
ДопПараметры = Новый Структура();
ДопПараметры.Вставить("ВажностьЗадачи",Важность);
ДопПараметры.Вставить("ТекстПисьма",ПараметрыПисьма.ТекстПисьма);
ДопПараметры.Вставить("ТемаПисьма",ПараметрыПисьма.ТемаПисьма);
ДопПараметры.Вставить("ТЗАдресаЭлектроннойПочты",ТЗАдресаЭлектроннойПочты);
узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);
КонецПроцедуры
Функция ПолучитьМассивНаблюдателей()
@ -628,6 +629,12 @@
МассивСобытийКоторыеПодлежатОтправки = НастройкиСобытий.МассивСобытийДляСтарогоИсполнителяКоторыеПодлежатОтправки;
КонецЕсли;
ЭтоОтправкаКонтрагентам = Ложь;
Если ДопПараметры.Свойство("ЭтоОтправкаКонтрагентам") Тогда
ЭтоОтправкаКонтрагентам = Истина;
МассивСобытийКоторыеПодлежатОтправки = НастройкиСобытий.МассивСобытийДляКонтрагентовКоторыеПодлежатОтправки;
КонецЕсли;
НеобходимоОтправитьУведомление = Ложь;
ТемаПисьмаСобытие = "";
МассивИзмененнийПоКомментариям = Новый Массив();
@ -645,6 +652,10 @@
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = узОбщийМодульСервер.ПолучитьТекстСообщения("Добавлена новая задача:",102);
КонецЕсли;
Если ЭтоОтправкаКонтрагентам Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Ваша заявка зарегистрирована: ";
КонецЕсли;
ИначеЕсли ВидСобытия = НастройкиСобытий.ВидыСобытий_НовыйИсполнитель Тогда
Если ЭтоОтправкаИсполнителю Тогда
НеобходимоОтправитьУведомление = Истина;
@ -676,6 +687,12 @@
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = узОбщийМодульСервер.ПолучитьТекстСообщения("Изменен статус у задачи:",35);
Конецесли;
ИначеЕсли ВидСобытия = НастройкиСобытий.ВидыСобытий_ВходящееПисьмо Тогда
Если ЭтоОтправкаИсполнителю
ИЛИ ЭтоОтправкаНаблюдателям Тогда
НеобходимоОтправитьУведомление = Истина;
ТемаПисьмаСобытие = "Входящее письмо по задаче:";
Конецесли;
Конецесли;
Иначе
Если ТЗСобытияВИсторииДляУведомлений.Найти(НастройкиСобытий.ВидыСобытий_НовыйИсполнитель,"ВидСобытия") <> Неопределено Тогда

View File

@ -674,40 +674,7 @@
&НаСервереБезКонтекста
Функция ПолучитьМассивЗадачПоВыбранномуТексту(ТекстВыделенный)
МассивЗадач = Новый Массив();
ЧислоУказанныхЗадач = СтрЧислоВхождений(ТекстВыделенный, "#");
Если ЧислоУказанныхЗадач = 0 Тогда
Возврат МассивЗадач;
Конецесли;
Для НомерВхождения = 1 По ЧислоУказанныхЗадач Цикл
ПозРешетка = СтрНайти(ТекстВыделенный, "#",,,НомерВхождения);
ТекстНомерЗадачи = "#";
НомерЗадачи = "";
НомерСимвола = ПозРешетка + 1;
Символ = Сред(ТекстВыделенный,НомерСимвола,1);
Пока 48<= КодСимвола(Символ)
И КодСимвола(Символ) <= 57 Цикл
НомерЗадачи = НомерЗадачи + Символ;
НомерСимвола = НомерСимвола + 1;
Символ = Сред(ТекстВыделенный,НомерСимвола,1);
Конеццикла;
НомерЗадачи = Число(НомерЗадачи);
СсылкаНаЗадачу = Справочники.узЗадачи.НайтиПоКоду(НомерЗадачи);
Если НЕ ЗначениеЗаполнено(СсылкаНаЗадачу) Тогда
Продолжить;
Конецесли;
МассивЗадач.Добавить(СсылкаНаЗадачу);
КонецЦикла;
Возврат МассивЗадач;
Возврат узОбщийМодульСервер.ПолучитьМассивЗадачИзТекста(ТекстВыделенный);
КонецФункции
&НаКлиенте

View File

@ -1,3 +1,117 @@
Процедура CreateTask() Экспорт
ВызватьИсключение "Ошибка! Нет алгоритма CreateTask()";
КонецПроцедуры
Функция CreateTask(Наименование,
СодержаниеСтрока = Неопределено, СодержаниеHTML = Неопределено,
Статус = Неопределено, Родитель = Неопределено,
Контрагент = Неопределено) Экспорт
Перем пЗадача;
СпрОбъект = Справочники.узЗадачи.СоздатьЭлемент();
СпрОбъект.Наименование = Наименование;
СпрОбъект.Статус = Статус;
СпрОбъект.Родитель = Родитель;
СпрОбъект.Контрагент = Контрагент;
СпрОбъект.ОформлениеТекста = ПредопределенноеЗначение("Перечисление.узОформлениеТекста.ФорматированныйТекст");
ФорматированныйТекст = Новый ФорматированныйДокумент;
пТекстСодержания = СокрЛП(Наименование);
пТекстHTML = СокрЛП(Наименование);
СодержаниеHTMLЗаполнено = СодержаниеHTML <> Неопределено;
Если СодержаниеHTMLЗаполнено Тогда
пТекстHTML = СодержаниеHTML;
пТекстСодержания = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(СодержаниеHTML);
Конецесли;
Если НЕ СодержаниеHTMLЗаполнено
И СодержаниеСтрока <> Неопределено Тогда
пТекстСодержания = СодержаниеСтрока;
пТекстHTML = СодержаниеСтрока;
Конецесли;
пВложения = Новый Структура();
ФорматированныйТекст.УстановитьHTML(пТекстHTML,пВложения);
СпрОбъект.ТекстСодержания = пТекстСодержания;
СпрОбъект.Содержание = Новый ХранилищеЗначения(ФорматированныйТекст, Новый СжатиеДанных(9));
СпрОбъект.Записать();
пЗадача = СпрОбъект.Ссылка;
Возврат пЗадача;
КонецФункции
Функция GetTask(НомерЗадачи) Экспорт
Перем пЗадача;
пЗадача = Справочники.узЗадачи.НайтиПоКоду(НомерЗадачи);
Возврат пЗадача;
КонецФункции
Функция GetKontragent(АдресЭлектроннойПочты) Экспорт
Перем пКонтрагент;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| узКонтрагентыКонтактнаяИнформация.Ссылка
|ИЗ
| Справочник.узКонтрагенты.КонтактнаяИнформация КАК узКонтрагентыКонтактнаяИнформация
|ГДЕ
| узКонтрагентыКонтактнаяИнформация.АдресЭП = &АдресЭлектроннойПочты
| И узКонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
| И узКонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.узEmailКонтрагенты)";
Запрос.УстановитьПараметр("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат пКонтрагент;
Конецесли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
пКонтрагент = Выборка.Ссылка;
Возврат пКонтрагент;
КонецФункции
Функция CreateKontragent(Наименование = Неопределено, АдресЭлектроннойПочты) Экспорт
Перем пКонтрагент;
Если НЕ ЗначениеЗаполнено(Наименование)
И НЕ ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда
ВызватьИсключение "Ошибка! не удалось создать контрагента, "
+ "не задано наименование и/или адрес электронной почты для контрагента";
Конецесли;
пКонтрагент = GetKontragent(АдресЭлектроннойПочты);
Если ЗначениеЗаполнено(пКонтрагент) Тогда
Возврат пКонтрагент;
Конецесли;
АдресЭлектроннойПочты = СокрЛП(АдресЭлектроннойПочты);
СпрОбъект = Справочники.узКонтрагенты.СоздатьЭлемент();
СпрОбъект.Наименование = Наименование;
СтрокаКонтактнаяИнформация = СпрОбъект.КонтактнаяИнформация.Добавить();
СтрокаКонтактнаяИнформация.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты");
СтрокаКонтактнаяИнформация.Вид = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.узEmailКонтрагенты");
СтрокаКонтактнаяИнформация.АдресЭП = АдресЭлектроннойПочты;
СтрокаКонтактнаяИнформация.Представление = АдресЭлектроннойПочты;
СпрОбъект.Записать();
пКонтрагент = СпрОбъект.Ссылка;
Возврат пКонтрагент;
КонецФункции

View File

@ -865,14 +865,17 @@
// Заполним ответственного
Письмо.Ответственный = ОтветственныйЗаОбработкуПисем;
//+ #286 Иванов А.Б. 2017-12-17
узОбщийМодульСервер.ЗаполнитьЗадачуПоТемеПисьма(УчетнаяЗапись,Письмо);
//- #286 Иванов А.Б. 2017-12-17
// Запишем письмо
Письмо.Записать();
//+ #286 Иванов А.Б. 2017-12-17
узОбщийМодульСервер.ЗаполнитьПредметВПисьме_ЗадачаПоТемеПисьма(УчетнаяЗапись,Письмо);
Предмет = Письмо.Предмет;
Письмо.Записать();
//- #286 Иванов А.Б. 2017-12-17
// Установим папку письма и предмет.
СтруктураДляЗаписи = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(
Папка,?(ЗначениеЗаполнено(Предмет),Предмет,Письмо.Ссылка), , , Ложь);

View File

@ -5,25 +5,7 @@
ТекстПисьма = ДопПараметры.ТекстПисьма;
ТемаПисьма = ДопПараметры.ТемаПисьма;
Если ДопПараметры.Свойство("МассивПользователейКому") Тогда
МассивПользователей = ДопПараметры.МассивПользователейКому;
Иначе
МассивПользователей = Новый Массив();
МассивПользователей.Добавить(ДопПараметры.ПользовательКому);
Конецесли;
ТЗАдресаЭлектроннойПочты = ПолучитьТЗАдресаЭлектроннойПочты(МассивПользователей);
Для каждого СтрокаТЗАдресаЭлектроннойПочты из ТЗАдресаЭлектроннойПочты цикл
ПользовательКому = СтрокаТЗАдресаЭлектроннойПочты.Пользователь;
Если НЕ ЗначениеЗаполнено(СтрокаТЗАдресаЭлектроннойПочты.АдресЭлектроннойПочты) Тогда
пТекстСообщения = узОбщийМодульСервер.ПолучитьТекстСообщения("Ошибка! при отправке письма не удалось получить адреса электронной почты для [%1]","2");
пТекстСообщения = СтрШаблон(пТекстСообщения,ПользовательКому);
Сообщить(пТекстСообщения);
Конецесли;
Конеццикла;
ТЗАдресаЭлектроннойПочты = ПолучитьТЗАдресаЭлектроннойПочты(ДопПараметры);
ТекПользователь = Пользователи.ТекущийПользователь();
ДокОбъект = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
@ -58,7 +40,39 @@
ДокОбъект.Записать();
КонецПроцедуры
Функция ПолучитьТЗАдресаЭлектроннойПочты(МассивПользователей)
Функция ПолучитьТЗАдресаЭлектроннойПочты(ДопПараметры)
Перем ТЗАдресаЭлектроннойПочты;
Если ДопПараметры.Свойство("ТЗАдресаЭлектроннойПочты") Тогда
ТЗАдресаЭлектроннойПочты = ДопПараметры.ТЗАдресаЭлектроннойПочты;
Возврат ТЗАдресаЭлектроннойПочты;
Конецесли;
Если ДопПараметры.Свойство("МассивПользователейКому") Тогда
МассивПользователей = ДопПараметры.МассивПользователейКому;
Иначе
МассивПользователей = Новый Массив();
МассивПользователей.Добавить(ДопПараметры.ПользовательКому);
Конецесли;
ТЗАдресаЭлектроннойПочты = ПолучитьТЗАдресаЭлектроннойПочтыПоМассивуПользователей(МассивПользователей);
Для каждого СтрокаТЗАдресаЭлектроннойПочты из ТЗАдресаЭлектроннойПочты цикл
ПользовательКому = СтрокаТЗАдресаЭлектроннойПочты.Пользователь;
Если НЕ ЗначениеЗаполнено(СтрокаТЗАдресаЭлектроннойПочты.АдресЭлектроннойПочты) Тогда
пТекстСообщения = узОбщийМодульСервер.ПолучитьТекстСообщения(
"Ошибка! при отправке письма не удалось получить адреса электронной почты для [%1]","2");
пТекстСообщения = СтрШаблон(пТекстСообщения,ПользовательКому);
Сообщить(пТекстСообщения);
Конецесли;
Конеццикла;
Возврат ТЗАдресаЭлектроннойПочты;
КонецФункции
Функция ПолучитьТЗАдресаЭлектроннойПочтыПоМассивуПользователей(МассивПользователей)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
@ -82,6 +96,29 @@
Возврат ТЗАдресаЭлектроннойПочты;
КонецФункции
Функция ПолучитьТЗАдресаЭлектроннойПочтыПоМассивуКонтрагентов(МассивКонтрагентов) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| узКонтрагентыКонтактнаяИнформация.Ссылка КАК Пользователь,
| узКонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭлектроннойПочты
|ИЗ
| Справочник.узКонтрагенты.КонтактнаяИнформация КАК узКонтрагентыКонтактнаяИнформация
|ГДЕ
| узКонтрагентыКонтактнаяИнформация.Ссылка В(&МассивКонтрагентов)
| И узКонтрагентыКонтактнаяИнформация.Тип = &Тип
| И узКонтрагентыКонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Вид", ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.узEmailКонтрагенты"));
Запрос.УстановитьПараметр("МассивКонтрагентов", МассивКонтрагентов);
Запрос.УстановитьПараметр("Тип", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"));
РезультатЗапроса = Запрос.Выполнить();
ТЗАдресаЭлектроннойПочты = РезультатЗапроса.Выгрузить();
Возврат ТЗАдресаЭлектроннойПочты;
КонецФункции
Процедура узЗагрузкаИзмененийИзХранилища() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.узЗагрузкаИзмененийИзХранилища);
@ -492,13 +529,13 @@
#КонецОбласти
Процедура ЗаполнитьЗадачуПоТемеПисьма(УчетнаяЗапись,Письмо) Экспорт
Процедура ЗаполнитьПредметВПисьме_ЗадачаПоТемеПисьма(УчетнаяЗапись,ПисьмоОбъект) Экспорт
Если НЕ УчетнаяЗапись.узСоздаватьЗадачуПриПолученииПисьма Тогда
Возврат;
Конецесли;
НастройкиИзПравилОбработки = ОпределитьНастройкиИзПравилОбработки(УчетнаяЗапись,Письмо);
НастройкиИзПравилОбработки = ОпределитьНастройкиИзПравилОбработки(УчетнаяЗапись,ПисьмоОбъект.Ссылка);
Если НастройкиИзПравилОбработки.ЕстьДопНастройкиИзПравилОбработки
И НастройкиИзПравилОбработки.узНеСоздаватьЗадачуПриПолученииПисьма Тогда
@ -517,12 +554,47 @@
узСозданнуюЗадачуПомещатьВВеткуЗадач = Неопределено;
Конецесли;
ВызватьИсключение "Что еще надо сделать";
//ПолучитьНомерЗадачиИзТемы
//Получить Контрагента по Email
//Получить текст задачи с учетом HTML
//Если не нашли задачу по номеру, тогда создаем новую
API.CreateTask();
пЗадача = Неопределено;
пКонтрагент = Неопределено;
ТипЗнчОтправительКонтакт = ТипЗнч(ПисьмоОбъект.ОтправительКонтакт);
Если ЗначениеЗаполнено(ПисьмоОбъект.ОтправительКонтакт)
И ТипЗнчОтправительКонтакт = Тип("СправочникСсылка.узКонтрагенты") Тогда
пКонтрагент = ПисьмоОбъект.ОтправительКонтакт;
Иначе
пКонтрагент = API.GetKontragent(ПисьмоОбъект.ОтправительАдрес);
ПисьмоОбъект.ОтправительКонтакт = пКонтрагент;
Конецесли;
Если НЕ ЗначениеЗаполнено(пКонтрагент) Тогда
пКонтрагент = API.CreateKontragent(ПисьмоОбъект.ОтправительПредставление,ПисьмоОбъект.ОтправительАдрес);
Конецесли;
МассивНомеровЗадач = ПолучитьМассивНомеровЗадачИзТекста(ПисьмоОбъект.Текст);
Если МассивНомеровЗадач.Количество() > 0 Тогда
НомемПервойЗадачи = МассивНомеровЗадач[0];
пЗадача = API.GetTask(НомемПервойЗадачи);
Конецесли;
Если НЕ ЗначениеЗаполнено(пЗадача) Тогда
пЗадача = API.CreateTask(ПисьмоОбъект.Тема, ПисьмоОбъект.Текст,ПисьмоОбъект.ТекстHTML,
,узСозданнуюЗадачуПомещатьВВеткуЗадач,пКонтрагент);
Конецесли;
ПисьмоОбъект.Предмет = пЗадача;
//МассивВзаимодействий = Новый Массив();
//МассивВзаимодействий.Добавить(ПисьмоОбъект.Ссылка);
//ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий,
// пЗадача, Истина);
//ВызватьИсключение "Что еще надо сделать";
////ПолучитьНомерЗадачиИзТемы
////Получить Контрагента по Email
////Получить текст задачи с учетом HTML
////Если не нашли задачу по номеру, тогда создаем новую
////Создавать письмо о регистрации задачи для Контрагента
////API.CreateTask();
КонецПроцедуры
Функция ОпределитьНастройкиИзПравилОбработки(УчетнаяЗапись,Письмо)
@ -618,3 +690,130 @@
Возврат пУсловиеВыполнено;
КонецФункции
Функция ПолучитьМассивЗадачИзТекста(Текст) Экспорт
МассивНомеровЗадач = ПолучитьМассивНомеровЗадачИзТекста(Текст);
МассивЗадач = ПолучитьМассивЗадачПоНомерамЗадач(МассивНомеровЗадач);
Возврат МассивЗадач;
КонецФункции
Функция ПолучитьМассивНомеровЗадачИзТекста(Текст)
МассивНомеровЗадач = Новый Массив();
ЧислоУказанныхЗадач = СтрЧислоВхождений(Текст, "#");
Если ЧислоУказанныхЗадач = 0 Тогда
Возврат МассивНомеровЗадач;
Конецесли;
Для НомерВхождения = 1 По ЧислоУказанныхЗадач Цикл
ПозРешетка = СтрНайти(Текст, "#",,,НомерВхождения);
ТекстНомерЗадачи = "#";
НомерЗадачи = "";
НомерСимвола = ПозРешетка + 1;
Символ = Сред(Текст,НомерСимвола,1);
Пока 48<= КодСимвола(Символ)
И КодСимвола(Символ) <= 57 Цикл
НомерЗадачи = НомерЗадачи + Символ;
НомерСимвола = НомерСимвола + 1;
Символ = Сред(Текст,НомерСимвола,1);
Конеццикла;
НомерЗадачи = Число(НомерЗадачи);
Если МассивНомеровЗадач.Найти(НомерЗадачи) = Неопределено Тогда
МассивНомеровЗадач.Добавить(НомерЗадачи);
Конецесли;
КонецЦикла;
Возврат МассивНомеровЗадач;
КонецФункции
Функция ПолучитьМассивЗадачПоНомерамЗадач(МассивНомеровЗадач) Экспорт
МассивЗадач = Новый Массив();
Для каждого НомерЗадачи Из МассивНомеровЗадач Цикл
СсылкаНаЗадачу = Справочники.узЗадачи.НайтиПоКоду(НомерЗадачи);
Если НЕ ЗначениеЗаполнено(СсылкаНаЗадачу) Тогда
Продолжить;
Конецесли;
МассивЗадач.Добавить(СсылкаНаЗадачу);
КонецЦикла;
Возврат МассивЗадач;
КонецФункции
Процедура ОтправитьУведомлениеПередЗаписьюВходящегоПисьма(Источник) Экспорт
пЗадача = Источник.Предмет;
Если НЕ ЗначениеЗаполнено(пЗадача) Тогда
Возврат;
Конецесли;
СобытияВИстории = Новый Структура();
СобытияВИстории.Вставить("СтарыйИсполнитель",пЗадача.Исполнитель);
СобытияВИстории.Вставить("СтарыйСтатус",пЗадача.Статус);
ТЗСобытияВИсторииДляУведомлений = Новый ТаблицаЗначений;
ТЗСобытияВИсторииДляУведомлений.Колонки.Добавить("ВидСобытия",Новый ОписаниеТипов("ПеречислениеСсылка.узВидыСобытий"));
ТЗСобытияВИсторииДляУведомлений.Колонки.Добавить("МассивИзмененнийПоКомментариям",Новый ОписаниеТипов("Массив"));
ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ВходящееПисьмо");
СтрокаТЗСобытияВИсторииДляУведомлений = ТЗСобытияВИсторииДляУведомлений.Добавить();
СтрокаТЗСобытияВИсторииДляУведомлений.ВидСобытия = ВидСобытия;
СтрокаТЗСобытияВИсторииДляУведомлений.МассивИзмененнийПоКомментариям = Новый Массив();
СобытияВИстории.Вставить("ТЗСобытияВИсторииДляУведомлений",ТЗСобытияВИсторииДляУведомлений);
ЗадачаОбъект = пЗадача.ПолучитьОбъект();
ЗадачаОбъект.ОтправитьУведомлениеНаПочту(СобытияВИстории);
КонецПроцедуры
#КонецОбласти
Процедура ЗаполнитьЗадачуПоТемеПисьма(УчетнаяЗапись,Письмо) Экспорт
Если НЕ УчетнаяЗапись.узСоздаватьЗадачуПриПолученииПисьма Тогда
Возврат;
Конецесли;
НастройкиИзПравилОбработки = ОпределитьНастройкиИзПравилОбработки(УчетнаяЗапись,Письмо);
Если НастройкиИзПравилОбработки.ЕстьДопНастройкиИзПравилОбработки
И НастройкиИзПравилОбработки.узНеСоздаватьЗадачуПриПолученииПисьма Тогда
Возврат;
Конецесли;
узСозданнуюЗадачуПомещатьВВеткуЗадач = УчетнаяЗапись.узСозданнуюЗадачуПомещатьВВеткуЗадач;
Если НастройкиИзПравилОбработки.ЕстьДопНастройкиИзПравилОбработки Тогда
Если ЗначениеЗаполнено(НастройкиИзПравилОбработки.узСозданнуюЗадачуПомещатьВВеткуЗадач) Тогда
узСозданнуюЗадачуПомещатьВВеткуЗадач = НастройкиИзПравилОбработки.узСозданнуюЗадачуПомещатьВВеткуЗадач;
Конецесли;
Конецесли;
Если НЕ ЗначениеЗаполнено(узСозданнуюЗадачуПомещатьВВеткуЗадач) Тогда
узСозданнуюЗадачуПомещатьВВеткуЗадач = Неопределено;
Конецесли;
ВызватьИсключение "Что еще надо сделать";
//ПолучитьНомерЗадачиИзТемы
//Получить Контрагента по Email
//Получить текст задачи с учетом HTML
//Если не нашли задачу по номеру, тогда создаем новую
API.CreateTask();
КонецПроцедуры

View File

@ -1308,6 +1308,23 @@
<Group>Horizontal</Group>
<ExtendedTooltip name="ПредметыПанельНавигацииГруппаРасширеннаяПодсказка" id="809"/>
<ChildItems>
<LabelField name="ПредметыПанельНавигацииПредметКод" id="922">
<DataPath>ПредметыПанельНавигации.Предмет.Code</DataPath>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Номер задачи</v8:content>
</v8:item>
</Title>
<Format>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>ЧГ=0</v8:content>
</v8:item>
</Format>
<ContextMenu name="ПредметыПанельНавигацииПредметКодКонтекстноеМеню" id="923"/>
<ExtendedTooltip name="ПредметыПанельНавигацииПредметКодРасширеннаяПодсказка" id="924"/>
</LabelField>
<LabelField name="Предмет" id="697">
<DataPath>ПредметыПанельНавигации.Предмет</DataPath>
<ReadOnly>true</ReadOnly>
@ -1372,6 +1389,11 @@
</LabelField>
</ChildItems>
</ColumnGroup>
<LabelField name="ПредметыПанельНавигацииПредметКонтрагент" id="925">
<DataPath>ПредметыПанельНавигации.Предмет.Контрагент</DataPath>
<ContextMenu name="ПредметыПанельНавигацииПредметКонтрагентКонтекстноеМеню" id="926"/>
<ExtendedTooltip name="ПредметыПанельНавигацииПредметКонтрагентРасширеннаяПодсказка" id="927"/>
</LabelField>
<LabelField name="ПредметыПанельНавигацииИсполнитель" id="917">
<DataPath>ПредметыПанельНавигации.Исполнитель</DataPath>
<ContextMenu name="ПредметыПанельНавигацииИсполнительКонтекстноеМеню" id="918"/>

View File

@ -28,7 +28,10 @@
ДополнительныеСвойства.Вставить("ПометкаУдаления",
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка,"ПометкаУдаления"));
//+ #286 Иванов А.Б. 2018-01-06
узОбщийМодульСервер.ОтправитьУведомлениеПередЗаписьюВходящегоПисьма(ЭтотОбъект);
//- #286 Иванов А.Б. 2018-01-06
КонецПроцедуры
#КонецОбласти

View File

@ -246,6 +246,30 @@
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="f0947c63-ebfe-446c-8f31-ad004e43eafc">
<Properties>
<Name>ВходящееПисьмо</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Входящее письмо</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="6517b4d4-db53-43f5-8a97-c905c362ec08">
<Properties>
<Name>ИсходящееПисьмо</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Исходящее письмо</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
</ChildObjects>
</Enum>
</MetaDataObject>

File diff suppressed because one or more lines are too long