3005 lines
196 KiB
Plaintext
3005 lines
196 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2020, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#Область ОписаниеПеременных
|
||
|
||
&НаКлиенте
|
||
Перем КонтекстВыбора;
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийФормы
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||
|
||
УстановитьУсловноеОформление();
|
||
|
||
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
|
||
|
||
Если Объект.Ссылка.Пустая() Тогда
|
||
Рассмотрено = Истина;
|
||
ПриСозданииИПриЧтенииНаСервере();
|
||
Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет);
|
||
ИзменилисьКонтакты = Истина;
|
||
КонецЕсли;
|
||
|
||
Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора);
|
||
ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений();
|
||
|
||
// Подготовить оповещения взаимодействий.
|
||
Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры);
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
ДополнительныеПараметры = Новый Структура;
|
||
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты");
|
||
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
// СтандартныеПодсистемы.ШаблоныСообщений
|
||
ОпределитьВозможностьЗаполненияПисьмаПоШаблону();
|
||
// Конец СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
// СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
|
||
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
|
||
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
|
||
ПроверитьСостояниеОтправкиПисемНаСервере();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПриОткрытии(Отказ)
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
// СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
|
||
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
|
||
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
|
||
УправлениеДоступностью();
|
||
|
||
ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", 60, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
|
||
ОбновитьЭлементыДополнительныхРеквизитов();
|
||
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
|
||
|
||
Если ИмяСобытия = "Запись_ПрисоединенныйФайл" Тогда
|
||
Если ТипЗнч(Источник) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы") Тогда
|
||
|
||
ВложенияТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если ВложенияТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
РеквизитыФайла = РеквизитыФайла(Источник);
|
||
ЗаполнитьЗначенияСвойств(ВложенияТекущиеДанные, РеквизитыФайла);
|
||
ВложенияТекущиеДанные.РазмерПредставление =
|
||
ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(РеквизитыФайла.Размер);
|
||
ВложенияТекущиеДанные.ИмяФайла = ?(ПустаяСтрока(РеквизитыФайла.Расширение),
|
||
РеквизитыФайла.Наименование,
|
||
РеквизитыФайла.Наименование + "." + РеквизитыФайла.Расширение);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// СтандартныеПодсистемы.ШаблоныСообщений
|
||
Если ИмяСобытия = "Запись_ШаблоныСообщений" Тогда
|
||
ОпределитьВозможностьЗаполненияПисьмаПоШаблону();
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
|
||
|
||
Перем СтрокаНачало, СтрокаКонец, КолонкаНачало, КолонкаКонец;
|
||
Перем НачалоВыделения, КонецВыделения;
|
||
|
||
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект") Тогда
|
||
|
||
Если ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда
|
||
Элементы.ТекстПисьма.ПолучитьГраницыВыделения(СтрокаНачало, КолонкаНачало, СтрокаКонец, КолонкаКонец);
|
||
|
||
ТекстПисьма = РезультатВставкиТекстаВПисьмо(ТекстПисьма, СтрокаНачало, КолонкаНачало, КолонкаКонец, ВыбранноеЗначение);
|
||
|
||
Иначе
|
||
|
||
Элементы.ТекстПисьмаФорматированныйДокумент.ПолучитьГраницыВыделения(НачалоВыделения, КонецВыделения);
|
||
ТекстПисьмаФорматированныйДокумент.Вставить(НачалоВыделения, ВыбранноеЗначение);
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма") Тогда
|
||
|
||
Если ВыбранноеЗначение <> Неопределено И Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда
|
||
|
||
Объект.УведомитьОДоставке = ВыбранноеЗначение.УведомитьОДоставке;
|
||
Объект.УведомитьОПрочтении = ВыбранноеЗначение.УведомитьОПрочтении;
|
||
Объект.ВключатьТелоИсходногоПисьма = ВыбранноеЗначение.ВключатьТелоИсходногоПисьма;
|
||
Модифицированность = Истина;
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АдреснаяКнига")
|
||
ИЛИ ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.УточнениеКонтактов") Тогда
|
||
|
||
ЗаполнитьПодобранныхПолучателейПослеВыбора(ВыбранноеЗначение);
|
||
|
||
Иначе
|
||
|
||
ВзаимодействияКлиент.ФормаОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, ИсточникВыбора, КонтекстВыбора);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||
|
||
ВключитьНебезопасноеСодержимое = Ложь;
|
||
|
||
Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект);
|
||
ПриСозданииИПриЧтенииНаСервере();
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
// СтандартныеПодсистемы.УправлениеДоступом
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
|
||
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
|
||
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.УправлениеДоступом
|
||
|
||
// СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
|
||
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
|
||
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
|
||
|
||
ОчиститьСообщения();
|
||
|
||
Если Не ВыполняетсяОтправка Тогда
|
||
|
||
Если ПроверитьЗаполнениеСписковАдресатов() Тогда
|
||
Отказ = Истина;
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")
|
||
ИЛИ Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда
|
||
ВзаимодействияКлиент.ПроверкаЗаполненностиРеквизитовОтложеннойОтправки(Объект, Отказ);
|
||
КонецЕсли;
|
||
|
||
Если Отказ Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
#Если Не ВебКлиент Тогда
|
||
Для Каждого СтрокаТаблицыВложений Из Вложения Цикл
|
||
Если СтрокаТаблицыВложений.Расположение = 2 Тогда
|
||
Попытка
|
||
Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере);
|
||
СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, "");
|
||
СтрокаТаблицыВложений.Расположение = 4;
|
||
Исключение
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ);
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
#КонецЕсли
|
||
|
||
Объект.ЕстьВложения = (Вложения.Количество() <> 0);
|
||
|
||
ЗаполнитьТабличныеЧастиПоСпискуПолучателей();
|
||
|
||
Объект.СписокПолучателейПисьма =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь);
|
||
Объект.СписокПолучателейКопий =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь);
|
||
Объект.СписокПолучателейСкрытыхКопий =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиСкрытыхКопий, Ложь);
|
||
|
||
Для Каждого Вложение Из Вложения Цикл
|
||
|
||
Если Вложение.Расположение = 0
|
||
И Вложение.Редактируется Тогда
|
||
|
||
ОписаниеОповещенияПомещенияФайла = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
|
||
РаботаСФайламиКлиент.ПоместитьПрисоединенныйФайл(ОписаниеОповещенияПомещенияФайла, Вложение.Ссылка, УникальныйИдентификатор);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
|
||
|
||
Если Не ЗавершениеРаботы
|
||
И Модифицированность
|
||
И Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда
|
||
|
||
ЕстьРедактируемыеФайлы = Ложь;
|
||
МассивРедактируемыхФайлов = Новый Массив;
|
||
|
||
Для Каждого Вложение Из Вложения Цикл
|
||
|
||
Если Вложение.Редактируется Тогда
|
||
ЕстьРедактируемыеФайлы = Истина;
|
||
МассивРедактируемыхФайлов.Добавить(Вложение.Ссылка);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если ЕстьРедактируемыеФайлы Тогда
|
||
|
||
Отказ = Истина;
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
ТекстВопроса = НСтр("ru = 'Данные были изменены, Записать?'");
|
||
ДополнительныеПараметры = Новый Структура;
|
||
ДополнительныеПараметры.Вставить("МассивРедактируемыхФайлов", МассивРедактируемыхФайлов);
|
||
ОповещениеПослеВопросаОЗакрытии = Новый ОписаниеОповещения("ПослеВопросаПриЗакрытии", ЭтотОбъект, ДополнительныеПараметры);
|
||
|
||
ПоказатьВопрос(ОповещениеПослеВопросаОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения)
|
||
|
||
ДокументHTMLТекущегоПисьмаПодготовлен = Ложь;
|
||
|
||
// Подготовим документ HTML из содержимого форматированного документа.
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML
|
||
И ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
|
||
ТаблицаСоответствийИменВложенийИдентификаторам.Очистить();
|
||
|
||
СтруктураВложений = Новый Структура;
|
||
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекущийОбъект.ТекстHTML, СтруктураВложений);
|
||
Для каждого Вложение Из СтруктураВложений Цикл
|
||
|
||
НоваяСтрока = ТаблицаСоответствийИменВложенийИдентификаторам.Добавить();
|
||
НоваяСтрока.ИмяФайла = Вложение.Ключ;
|
||
НоваяСтрока.ИдентификаторФайлаДляHTML = Новый УникальныйИдентификатор;
|
||
НоваяСтрока.Картинка = Вложение.Значение;
|
||
|
||
КонецЦикла;
|
||
|
||
Если ТаблицаСоответствийИменВложенийИдентификаторам.Количество() > 0 Тогда
|
||
|
||
ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстHTML);
|
||
Взаимодействия.ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML(
|
||
ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам.Выгрузить());
|
||
ДокументHTMLТекущегоПисьмаПодготовлен = Истина;
|
||
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
ТекущийОбъект.Текст = ТекстПисьма;
|
||
|
||
КонецЕсли;
|
||
|
||
Если НеобходимаОбработкаПисьмаОснования() Тогда
|
||
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда
|
||
|
||
ТекущийОбъект.ТекстHTML = СформироватьТекстПисьмаВключаяПисьмоОснование(
|
||
?(ДокументHTMLТекущегоПисьмаПодготовлен,ДокументHTML,Неопределено), ТекущийОбъект);
|
||
|
||
ТекущийОбъект.Текст = Взаимодействия.ПолучитьОбычныйТекстИзHTML(ТекущийОбъект.ТекстHTML);
|
||
|
||
Иначе
|
||
|
||
ТекущийОбъект.Текст = СформироватьТекстПисьмаВключаяПисьмоОснование(Неопределено, ТекущийОбъект);
|
||
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Если ДокументHTMLТекущегоПисьмаПодготовлен Тогда
|
||
|
||
ТекущийОбъект.ТекстHTML = Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML);
|
||
ТекущийОбъект.Текст = Взаимодействия.ПолучитьОбычныйТекстИзHTML(ТекущийОбъект.ТекстHTML);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
|
||
ТекущийОбъект.ПисьмаВложения.Очистить();
|
||
ИндексСтроки = 1;
|
||
Для Каждого Вложение Из Вложения Цикл
|
||
|
||
Если Вложение.Расположение = 5 И ЗначениеЗаполнено(Вложение.Письмо) Тогда
|
||
НоваяСтрока = ТекущийОбъект.ПисьмаВложения.Добавить();
|
||
НоваяСтрока.Письмо = Вложение.Письмо;
|
||
НоваяСтрока.ПорядковыйНомерВоВложениях = ИндексСтроки;
|
||
КонецЕсли;
|
||
|
||
ИндексСтроки = ИндексСтроки + 1;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ВыполняетсяОтправка И Не ОтправлятьСообщенияСразу Тогда
|
||
|
||
ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма <> ТекущийСтатусПисьма
|
||
И ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее
|
||
И Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML")
|
||
И (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
|
||
ИЛИ ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"))
|
||
И ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда
|
||
|
||
ТекущийОбъект.ЕстьВложения = Истина;
|
||
|
||
КонецЕсли;
|
||
|
||
ТекущийОбъект.Размер = ОценитьРазмерПисьма();
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
|
||
|
||
Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект);
|
||
|
||
Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
|
||
Письмо = ТекущийОбъект.Ссылка;
|
||
|
||
Блокировка = Новый БлокировкаДанных;
|
||
ЭлементБлокировкиДанных = Блокировка.Добавить("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы");
|
||
ЭлементБлокировкиДанных.УстановитьЗначение("ВладелецФайла", Письмо);
|
||
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Письмо);
|
||
Блокировка.Заблокировать();
|
||
|
||
// Добавим в список удаленных вложений ранее сохраненные картинки, отображаемые в теле форматированного документа.
|
||
ТаблицаВложенийКартинокФорматированногоДокумента = Взаимодействия.ПолучитьВложенияПисьмаСНеПустымИД(Письмо);
|
||
Для каждого Вложение Из ТаблицаВложенийКартинокФорматированногоДокумента Цикл
|
||
УдаленныеВложения.Добавить(Вложение.Ссылка);
|
||
КонецЦикла;
|
||
|
||
// Удалим удаленные вложения
|
||
Для Каждого УдаленноеВложение Из УдаленныеВложения Цикл
|
||
ОбъектВложение = УдаленноеВложение.Значение.ПолучитьОбъект();
|
||
ОбъектВложение.Удалить();
|
||
КонецЦикла;
|
||
УдаленныеВложения.Очистить();
|
||
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда
|
||
|
||
Для каждого Вложение Из ТаблицаСоответствийИменВложенийИдентификаторам Цикл
|
||
|
||
ДвоичныеДанныеКартинки = Вложение.Картинка.ПолучитьДвоичныеДанные();
|
||
АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
|
||
|
||
ПараметрыВложения = Новый Структура;
|
||
ПараметрыВложения.Вставить("ИмяФайла", "_" + СтрЗаменить(Вложение.ИдентификаторФайлаДляHTML, "-", "_"));
|
||
ПараметрыВложения.Вставить("Размер", ДвоичныеДанныеКартинки.Размер());
|
||
ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.ИдентификаторФайлаДляHTML);
|
||
|
||
ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
|
||
Письмо, АдресКартинкиВоВременномХранилище, ПараметрыВложения);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Если НеобходимаОбработкаПисьмаОснования() Тогда
|
||
|
||
ВложенияПисьмаОснования = Взаимодействия.ПолучитьВложенияПисьмаСНеПустымИД(Объект.ВзаимодействиеОснование);
|
||
|
||
Для Каждого Вложение Из ВложенияПисьмаОснования Цикл
|
||
|
||
ДвоичныеДанныеКартинки = РаботаСФайлами.ДвоичныеДанныеФайла(Вложение.Ссылка);
|
||
АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
|
||
|
||
ПараметрыВложения = Новый Структура;
|
||
ПараметрыВложения.Вставить("ИмяФайла", Вложение.Наименование);
|
||
ПараметрыВложения.Вставить("Размер", Вложение.Размер);
|
||
ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.ИДФайлаЭлектронногоПисьма);
|
||
|
||
ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
|
||
Письмо, АдресКартинкиВоВременномХранилище, ПараметрыВложения);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Для Каждого СтрокаТаблицыВложений Из Вложения Цикл
|
||
|
||
Размер = 0;
|
||
ИмяФайла = СтрокаТаблицыВложений.ИмяФайла;
|
||
|
||
Если СтрокаТаблицыВложений.Расположение = 4 Тогда
|
||
// из временного хранилища
|
||
|
||
ПараметрыВложения = Новый Структура;
|
||
ПараметрыВложения.Вставить("ИмяФайла", ИмяФайла);
|
||
ПараметрыВложения.Вставить("Размер", Размер);
|
||
|
||
УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
|
||
Письмо, СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере, ПараметрыВложения);
|
||
|
||
ИначеЕсли СтрокаТаблицыВложений.Расположение = 3 Тогда
|
||
// из файла на сервере
|
||
|
||
ИначеЕсли СтрокаТаблицыВложений.Расположение = 2 Тогда
|
||
// из файла на компьютере
|
||
|
||
ДвоичныеДанные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере);
|
||
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
|
||
|
||
ПараметрыВложения = Новый Структура;
|
||
ПараметрыВложения.Вставить("ИмяФайла", ИмяФайла);
|
||
ПараметрыВложения.Вставить("Размер", Размер);
|
||
|
||
УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
|
||
Письмо, АдресВременногоХранилищаФайла, ПараметрыВложения);
|
||
|
||
ИначеЕсли СтрокаТаблицыВложений.Расположение = 1 Тогда
|
||
|
||
УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаСкопировавВложениеДругогоПисьма(
|
||
Письмо, СтрокаТаблицыВложений.Ссылка, УникальныйИдентификатор);
|
||
|
||
ИначеЕсли СтрокаТаблицыВложений.Расположение = 0 Тогда
|
||
// перезаписать вложение
|
||
|
||
КонецЕсли;
|
||
|
||
СтрокаТаблицыВложений.Расположение = 0;
|
||
|
||
КонецЦикла;
|
||
|
||
Если Объект.СтатусПисьма <> ТекущийСтатусПисьма Тогда
|
||
ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект);
|
||
Взаимодействия.УстановитьПапкуЭлектронногоПисьма(Письмо,
|
||
Взаимодействия.ОпределитьПапкуДляПисьмаПоУмолчанию(Письмо, Истина));
|
||
ТекущийСтатусПисьма = Объект.СтатусПисьма;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
|
||
|
||
// СтандартныеПодсистемы.УправлениеДоступом
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
|
||
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
|
||
МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.УправлениеДоступом
|
||
|
||
ЗаполнитьВложения();
|
||
Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект);
|
||
УстановитьЗаголовокКнопкиПоУмолчанию();
|
||
|
||
Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеЗаписи(ПараметрыЗаписи)
|
||
|
||
ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект,
|
||
ПараметрыЗаписи, "ЭлектронноеПисьмоИсходящее");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||
|
||
&НаКлиенте
|
||
Процедура СтраницыОписаниеДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница)
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства")
|
||
И ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты"
|
||
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
|
||
|
||
СвойстваВыполнитьОтложеннуюИнициализацию();
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле(
|
||
РассмотретьПосле, ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредставлениеОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
|
||
Если Объект.УчетнаяЗапись <> ВыбранноеЗначение Тогда
|
||
ИзменитьПодпись(Объект.УчетнаяЗапись, ВыбранноеЗначение);
|
||
Объект.УчетнаяЗапись = ВыбранноеЗначение;
|
||
ЭлементСписка = Элемент.СписокВыбора.НайтиПоЗначению(ВыбранноеЗначение);
|
||
Если ЭлементСписка <> Неопределено Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
Объект.ОтправительПредставление = ЭлементСписка.Представление;
|
||
КонецЕсли;
|
||
Модифицированность = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТекстПисьмаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
|
||
|
||
ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ТекстВходящегоПисьмаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
|
||
|
||
ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредметНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
|
||
ВзаимодействияКлиент.ПредметНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредупреждениеОНебезопасномСодержимомОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
|
||
Если НавигационнаяСсылкаФорматированнойСтроки = "ВключитьНебезопасноеСодержимое" Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
ВключитьНебезопасноеСодержимое = Истина;
|
||
ПрочитатьТекстВходящегоПисьмаHTML();
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
|
||
|
||
ВзаимодействияКлиент.ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийЭлементовТаблицыФормыВложения
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
ОткрытьВложениеВыполнить();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда
|
||
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
|
||
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
МассивФайлов = Новый Массив;
|
||
|
||
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") Тогда
|
||
|
||
МассивФайлов.Добавить(ПараметрыПеретаскивания.Значение);
|
||
|
||
ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
|
||
|
||
Если ПараметрыПеретаскивания.Значение.Количество() >= 1
|
||
И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда
|
||
|
||
Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл
|
||
Если ТипЗнч(ФайлПринятый) = Тип("Файл") Тогда
|
||
МассивФайлов.Добавить(ФайлПринятый);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Для Каждого ВыбранныйФайл Из МассивФайлов Цикл
|
||
|
||
ДополнительныеПараметры = Новый Структура("ВыбранныйФайл", ВыбранныйФайл);
|
||
ОписаниеОповещение = Новый ОписаниеОповещения("ПроверкаЭтоФайлПослеЗавершения", ЭтотОбъект, ДополнительныеПараметры);
|
||
ВыбранныйФайл.НачатьПроверкуЭтоФайл(ОписаниеОповещение);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокПолучателей
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||
|
||
ОчиститьСообщения();
|
||
|
||
Если Элементы.СписокПолучателей.ТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда
|
||
|
||
ВариантОтправки = Элементы.СписокПолучателей.ТекущиеДанные.ВариантОтправки;
|
||
Если ВариантОтправки = "Кому:" Тогда
|
||
ГруппаПодбора = НСтр("ru = 'Кому'");
|
||
ИначеЕсли ВариантОтправки = "Копия:" Тогда
|
||
ГруппаПодбора = НСтр("ru = 'Копии'");
|
||
ИначеЕсли ВариантОтправки = "СкрытаяКопия:" Тогда
|
||
ГруппаПодбора = НСтр("ru = 'Скрытые'");
|
||
КонецЕсли;
|
||
|
||
РедактироватьСписокПолучателей(Истина, ГруппаПодбора);
|
||
Иначе
|
||
РедактироватьСписокПолучателей(Ложь);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
|
||
|
||
Если ОтменаРедактирования Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДанныеСтроки = Элемент.ТекущиеДанные;
|
||
Если ДанныеСтроки = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Адрес = "";
|
||
ПозицияНачало = СтрНайти(ДанныеСтроки.Представление, "<");
|
||
Если ПозицияНачало > 0 Тогда
|
||
ПозицияОкончание = СтрНайти(ДанныеСтроки.Представление, ">", НаправлениеПоиска.СНачала, ПозицияНачало);
|
||
Если ПозицияОкончание > 0 Тогда
|
||
Адрес = Сред(ДанныеСтроки.Представление, ПозицияНачало + 1, ПозицияОкончание - ПозицияНачало - 1);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Адрес) Тогда
|
||
Адрес = ДанныеСтроки.Представление;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Адрес) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если СтрНайти(Адрес, "@") = 0 ИЛИ СтрНайти(Адрес, ".") = 0 Тогда
|
||
ПодключитьОбработчикОжидания("ПоказатьПредупреждениеОНеобходимостиВвестиАдресЭлектроннойПочты", 0.1, Истина);
|
||
Отказ = Истина;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Элемент.ТекущиеДанные.Адрес = СокрЛП(Адрес);
|
||
|
||
Отбор = Новый Структура("Адрес", Адрес);
|
||
НайденныеСтроки = СписокПолучателей.НайтиСтроки(Отбор);
|
||
Если НайденныеСтроки.Количество() > 1 Тогда
|
||
ШаблонТекстаОшибки = НСтр("ru = 'Адрес %1 уже есть в списке.'");
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, Адрес)
|
||
,, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(НайденныеСтроки[0]), "ЧГ=0") + "].Представление");
|
||
Отказ = Истина;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ИзменилисьКонтакты = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПредставлениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
|
||
Если Ожидание = 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Текст) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ДанныеВыбора = НайтиКонтакты(Текст);
|
||
Если ДанныеВыбора.Количество() > 0 Тогда
|
||
СтандартнаяОбработка = Ложь;
|
||
Иначе
|
||
ДанныеВыбора = Неопределено;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
|
||
Если НоваяСтрока Тогда
|
||
Элемент.ТекущиеДанные.ВариантОтправки = Элементы.СписокПолучателейВариантОтправки.СписокВыбора.НайтиПоЗначению("Кому:");
|
||
Элемент.ТекущийЭлемент = Элементы.СписокПолучателейПредставление;
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПредставлениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
|
||
ТекущиеДанные = Элементы.СписокПолучателей.ТекущиеДанные;
|
||
ТекущиеДанные.Адрес = ВыбранноеЗначение.Адрес;
|
||
ТекущиеДанные.Представление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(ВыбранноеЗначение.Представление, ВыбранноеЗначение.Адрес, "");
|
||
ТекущиеДанные.Контакт = ВыбранноеЗначение.Контакт;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПередУдалением(Элемент, Отказ)
|
||
Если СписокПолучателей.Количество() = 1 Тогда
|
||
Отказ = Истина;
|
||
СписокПолучателей[0].Представление = "";
|
||
СписокПолучателей[0].Адрес = "";
|
||
СписокПолучателей[0].Контакт = Неопределено;
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СписокПолучателейПриИзменении(Элемент)
|
||
|
||
ЗаполнитьТабличныеЧастиПоСпискуПолучателей();
|
||
ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее");
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиКомандФормы
|
||
|
||
&НаКлиенте
|
||
Процедура ОтправитьПереслатьВыполнить(Команда)
|
||
|
||
ОчиститьСообщения();
|
||
|
||
Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда
|
||
ПереслатьВыполнить();
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ПроверитьЗаполнениеСписковАдресатов() Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если СписокПолучателей.Количество() = 0 Тогда
|
||
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(
|
||
НСтр("ru = 'Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей");
|
||
Возврат;
|
||
|
||
ИначеЕсли (СписокПолучателей.Количество() = 1 И ПустаяСтрока(СписокПолучателей[0].Адрес)) Тогда
|
||
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(
|
||
НСтр("ru = 'Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей[0].Представление");
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ОтправитьВыполнить();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура HTML(Команда)
|
||
|
||
Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда
|
||
|
||
ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML");
|
||
ФорматСообщенияПриИзменении();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбычныйТекст(Команда)
|
||
|
||
Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда
|
||
|
||
ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст");
|
||
ФорматСообщенияПриИзменении();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОтображатьТекстПисьмаОснования(Команда)
|
||
|
||
Элементы.ОтображатьТекстПисьмаОснования.Пометка = НЕ Элементы.ОтображатьТекстПисьмаОснования.Пометка;
|
||
Элементы.ГруппаВходящее.Видимость = Элементы.ОтображатьТекстПисьмаОснования.Пометка;
|
||
Объект.ОтображатьТелоИсходногоПисьма = Не Объект.ОтображатьТелоИсходногоПисьма;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УточнитьКонтакты(Команда)
|
||
|
||
РедактироватьСписокПолучателей(Ложь);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПараметрыПисьма(Команда)
|
||
|
||
ТекстИдентификаторы = Новый Массив;
|
||
ТекстИдентификаторы.Добавить("Идентификатор сообщения: " + Объект.ИдентификаторСообщения);
|
||
ТекстИдентификаторы.Добавить("Идентификатор основания: " + Объект.ИдентификаторОснования);
|
||
ТекстИдентификаторы.Добавить("Идентификаторы оснований: "
|
||
+ ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований));
|
||
|
||
СтруктураПараметры = Новый Структура;
|
||
СтруктураПараметры.Вставить("Создано", Объект.Дата);
|
||
СтруктураПараметры.Вставить("Отправлено", Объект.ДатаОтправления);
|
||
СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке);
|
||
СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении);
|
||
СтруктураПараметры.Вставить("ЗаголовкиИнтернета", СтрСоединить(ТекстИдентификаторы, Символы.ПС));
|
||
СтруктураПараметры.Вставить("Письмо", Объект.Ссылка);
|
||
СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоИсходящее");
|
||
СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка);
|
||
СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер);
|
||
СтруктураПараметры.Вставить("ВключатьТелоИсходногоПисьма", Объект.ВключатьТелоИсходногоПисьма);
|
||
СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись);
|
||
|
||
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", СтруктураПараметры, ЭтотОбъект);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы(Команда)
|
||
|
||
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект",,ЭтотОбъект);
|
||
|
||
КонецПроцедуры
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
МодульУправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
// СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
&НаКлиенте
|
||
Процедура СформироватьПоШаблону(Команда)
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда
|
||
МодульШаблоныСообщенийКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ШаблоныСообщенийКлиент");
|
||
Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоШаблонуПослеВыбораШаблона", ЭтотОбъект);
|
||
ПредметСообщения = ?(ЗначениеЗаполнено(Предмет), Предмет, "Общий");
|
||
МодульШаблоныСообщенийКлиент.ПодготовитьСообщениеПоШаблону(ПредметСообщения, "Письмо", Оповещение);
|
||
КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
// Конец СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
&НаСервере
|
||
Процедура УстановитьУсловноеОформление()
|
||
|
||
УсловноеОформление.Элементы.Очистить();
|
||
|
||
//
|
||
|
||
Элемент = УсловноеОформление.Элементы.Добавить();
|
||
|
||
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
|
||
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Тема.Имя);
|
||
|
||
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
|
||
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатусПисьма");
|
||
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
|
||
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
|
||
|
||
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Ложь);
|
||
|
||
//
|
||
|
||
Элемент = УсловноеОформление.Элементы.Добавить();
|
||
|
||
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
|
||
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияКонтекстноеМенюСвойстваВложения.Имя);
|
||
|
||
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
|
||
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатусПисьма");
|
||
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
|
||
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик;
|
||
|
||
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
|
||
|
||
// Список вариантов отправки
|
||
Взаимодействия.УстановитьУсловноеОформлениеСпискаВыбора(ЭтотОбъект, "СписокПолучателейВариантОтправки", "СписокПолучателей.ВариантОтправки");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НаКонтролеПриИзменении()
|
||
|
||
УправлениеДоступностью();
|
||
|
||
Рассмотрено = НЕ НаКонтроле;
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПроверитьЗаполнениеСписковАдресатов()
|
||
|
||
Отказ = Ложь;
|
||
АдресаПоПредставлению = Новый Соответствие;
|
||
АдресаПоЗначению = Новый Соответствие;
|
||
ШаблонТекстаОшибки = НСтр("ru = 'Адрес %1 уже есть в списке.'");
|
||
|
||
Для каждого СтрокаАдреса Из СписокПолучателей Цикл
|
||
|
||
Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СтрокаАдреса.Представление);
|
||
Для Каждого СтруктураАдреса Из Результат Цикл
|
||
|
||
Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда
|
||
Отказ = Истина;
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки,,
|
||
"СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление");
|
||
КонецЕсли;
|
||
|
||
Если АдресаПоПредставлению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда
|
||
Отказ = Истина;
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки,
|
||
СтруктураАдреса.Адрес),, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление");
|
||
Иначе
|
||
АдресаПоПредставлению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор());
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если НЕ Отказ Тогда
|
||
Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СтрокаАдреса.Адрес);
|
||
Для Каждого СтруктураАдреса Из Результат Цикл
|
||
|
||
Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда
|
||
Отказ = Истина;
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки,,
|
||
"СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление");
|
||
КонецЕсли;
|
||
|
||
Если АдресаПоЗначению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда
|
||
Отказ = Истина;
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки,
|
||
СтруктураАдреса.Адрес),, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление");
|
||
Иначе
|
||
АдресаПоЗначению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор());
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если НЕ Отказ Тогда
|
||
|
||
Для каждого АдресПоЗначению Из АдресаПоЗначению Цикл
|
||
Если АдресаПоПредставлению[АдресПоЗначению.Ключ] <> Неопределено
|
||
И АдресаПоПредставлению[АдресПоЗначению.Ключ] <> АдресПоЗначению.Значение Тогда
|
||
Отказ = Истина;
|
||
Индекс = СписокПолучателей.Индекс(СписокПолучателей.НайтиПоИдентификатору(АдресПоЗначению.Значение));
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки,
|
||
АдресПоЗначению.Ключ),, "СписокПолучателей[" + Формат(Индекс, "ЧГ=0") + "].Представление");
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат Отказ;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция НеобходимаОбработкаПисьмаОснования()
|
||
|
||
Возврат ВыполняетсяОтправка И Объект.ВключатьТелоИсходногоПисьма И ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML")
|
||
И (Не Объект.ВзаимодействиеОснование = Неопределено) И (Не Объект.ВзаимодействиеОснование.Пустая())
|
||
И Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик;
|
||
|
||
КонецФункции
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////
|
||
// Управление доступностью элементов формы.
|
||
|
||
&НаКлиенте
|
||
Процедура УправлениеДоступностью()
|
||
|
||
Элементы.РассмотретьПосле.Доступность = НаКонтроле;
|
||
|
||
Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")
|
||
И (НЕ ИнформационнаяБазаФайловая
|
||
ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ОбщегоНазначенияКлиент.ДатаСеанса())
|
||
ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ОбщегоНазначенияКлиент.ДатаСеанса())) Тогда
|
||
Элементы.Отправить.Видимость = Ложь;
|
||
Иначе
|
||
Элементы.Отправить.Видимость = Истина;
|
||
КонецЕсли;
|
||
Элементы.ФормаЗаписатьИЗакрыть.Видимость = Не Элементы.Отправить.Видимость;
|
||
|
||
Элементы.ГруппаДатаОтправкиАктуальность.Доступность = (Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено"));
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма()
|
||
|
||
Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда
|
||
УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписиДляОтправки(
|
||
Элементы.ОтправительПредставление.СписокВыбора,ДоступныеДляОтправкиУчетныеЗаписи);
|
||
|
||
Если Объект.УчетнаяЗапись.Пустая()
|
||
И ДоступныеДляОтправкиУчетныеЗаписи.Количество() > 0
|
||
И Объект.Ссылка.Пустая() Тогда
|
||
|
||
Объект.УчетнаяЗапись = ДоступныеДляОтправкиУчетныеЗаписи[0].УчетнаяЗапись;
|
||
|
||
КонецЕсли;
|
||
|
||
ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(Объект.УчетнаяЗапись);
|
||
Если ЭлементСписка <> Неопределено Тогда
|
||
Объект.ОтправительПредставление = ЭлементСписка.Представление;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Элементы.ОтправительПредставление.ТолькоПросмотр = Истина;
|
||
Элементы.СписокПолучателейВариантОтправки.ТолькоПросмотр = Истина;
|
||
Элементы.СписокПолучателейПредставление.РедактированиеТекста = Ложь;
|
||
Элементы.СписокПолучателей.ТолькоПросмотр = Истина;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
|
||
Если Вложения.Количество() > 0 Тогда
|
||
Элементы.ДобавитьВложение.Доступность = Ложь;
|
||
Элементы.УдалитьВложение.Доступность = Ложь;
|
||
Элементы.ДобавитьПисьмо.Доступность = Ложь;
|
||
Иначе
|
||
Элементы.Вложения.Видимость = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда
|
||
ТекстПисьма = Объект.ТекстHTML;
|
||
ТекстПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.Ссылка);
|
||
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента;
|
||
Элементы.ТекстПисьма.ТолькоПросмотр = Ложь;
|
||
Иначе
|
||
ТекстПисьма = Объект.Текст;
|
||
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
|
||
Элементы.ТекстПисьма.ТолькоПросмотр = Истина;
|
||
КонецЕсли;
|
||
|
||
Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее
|
||
И (НЕ ИнформационнаяБазаФайловая
|
||
ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ТекущаяДатаСеанса())
|
||
ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ТекущаяДатаСеанса())) Тогда
|
||
|
||
Элементы.Отправить.Доступность = Ложь;
|
||
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
ОпределитьСпособРедактированияПисьма();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
#Область РаботаСВложениями
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьВложениеПисьмо(Письмо)
|
||
|
||
Если Вложения.НайтиСтроки(Новый Структура("Письмо", Письмо)).Количество() > 0 Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СтрокаРеквизиты = "Размер, Тема";
|
||
Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
|
||
СтрокаРеквизиты = СтрокаРеквизиты + ", ДатаПолучения";
|
||
ИначеЕсли ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда
|
||
СтрокаРеквизиты = СтрокаРеквизиты + ", Дата, ДатаОтправления";
|
||
Иначе
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
РеквизитыПисьма = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Письмо, СтрокаРеквизиты);
|
||
|
||
Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
|
||
ДатаПисьма = РеквизитыПисьма.ДатаПолучения;
|
||
Иначе
|
||
ДатаПисьма = ?(ЗначениеЗаполнено(РеквизитыПисьма.ДатаОтправления), РеквизитыПисьма.ДатаОтправления, РеквизитыПисьма.Дата);
|
||
КонецЕсли;
|
||
|
||
ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(РеквизитыПисьма.Тема, ДатаПисьма);
|
||
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Письмо = Письмо;
|
||
НоваяСтрока.ИмяФайла = ПредставлениеПисьма;
|
||
НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла("eml");
|
||
НоваяСтрока.ИмяФайлаНаКомпьютере = "";
|
||
НоваяСтрока.ПодписанЭП = Ложь;
|
||
НоваяСтрока.Размер = РеквизитыПисьма.Размер;
|
||
НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер);
|
||
НоваяСтрока.Расположение = 5;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьПисьмаВложения()
|
||
|
||
ТаблицаПисемВложений = Взаимодействия.ДанныеХранимыхВБазеПисемВложений(Объект.Ссылка);
|
||
|
||
Для Каждого ПисьмоВложение Из ТаблицаПисемВложений Цикл
|
||
|
||
ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата);
|
||
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Письмо = ПисьмоВложение.Письмо;
|
||
НоваяСтрока.ИмяФайла = ПредставлениеПисьма;
|
||
НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла("eml");
|
||
НоваяСтрока.ИмяФайлаНаКомпьютере = "";
|
||
НоваяСтрока.ПодписанЭП = Ложь;
|
||
НоваяСтрока.Размер = ПисьмоВложение.Размер;
|
||
НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер);
|
||
НоваяСтрока.Расположение = 5;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДобавитьПисьмо(Команда)
|
||
|
||
ПараметрыОткрытия = Новый Структура;
|
||
ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
|
||
ПараметрыОткрытия.Вставить("ЗакрыватьПриВыборе", Истина);
|
||
ПараметрыОткрытия.Вставить("ТолькоПочта", Истина);
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеДобавленияПисьма", ЭтотОбъект);
|
||
ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка",
|
||
ПараметрыОткрытия,
|
||
ЭтотОбъект,,,,
|
||
ОписаниеОповещения,
|
||
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗавершениеДобавленияПисьма(Результат, Параметры) Экспорт
|
||
|
||
Если ВзаимодействияКлиент.ЯвляетсяЭлектроннымПисьмом(Результат) Тогда
|
||
ДобавитьВложениеПисьмо(Результат);
|
||
Модифицированность = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
|
||
|
||
Отказ = Истина;
|
||
ДобавитьВложениеВыполнить();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияПередУдалением(Элемент, Отказ)
|
||
|
||
Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда
|
||
УдалитьВложениеВыполнить();
|
||
КонецЕсли;
|
||
|
||
Отказ = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВложенияПриАктивизацииЯчейки(Элемент)
|
||
|
||
ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если ТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Элементы.ВложенияКонтекстноеМенюСвойстваВложения.Доступность = (ТекущиеДанные.Расположение <> 5);
|
||
Элементы.СвойстваВложения.Доступность = (ТекущиеДанные.Расположение <> 5);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДобавитьВложениеВыполнить()
|
||
|
||
ОписаниеОповещение = Новый ОписаниеОповещения("ДиалогВыбораФайловПослеВыбора", ЭтотОбъект);
|
||
ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещение);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УдалитьВложениеВыполнить()
|
||
|
||
ДобавитьВложениеВСписокУдаленных();
|
||
|
||
ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если ТекущиеДанные <> Неопределено Тогда
|
||
Индекс = Вложения.Индекс(ТекущиеДанные);
|
||
Вложения.Удалить(Индекс);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДобавитьВложениеВСписокУдаленных()
|
||
|
||
ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если (ТекущиеДанные <> Неопределено) И (ТекущиеДанные.Расположение = 0) Тогда
|
||
УдаленныеВложения.Добавить(ТекущиеДанные.Ссылка);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьВложениеВыполнить()
|
||
|
||
ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если ТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если (ТекущиеДанные.Расположение = 0) ИЛИ (ТекущиеДанные.Расположение = 1) Тогда
|
||
|
||
Если ВзаимодействияКлиентСервер.ЭтоФайлПисьмо(ТекущиеДанные.ИмяФайла) Тогда
|
||
|
||
ВзаимодействияКлиент.ОткрытьВложениеПисьмо(ТекущиеДанные.Ссылка, ПараметрыПисьмаВложения(), ЭтотОбъект);
|
||
|
||
Иначе
|
||
|
||
ДляРедактирования = Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик");
|
||
|
||
УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(ТекущиеДанные.Ссылка,
|
||
ЭтотОбъект,
|
||
ДляРедактирования);
|
||
|
||
Если ДляРедактирования Тогда
|
||
ТекущиеДанные.Редактируется = Истина;
|
||
Модифицированность = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ТекущиеДанные.Расположение = 2 Тогда
|
||
|
||
ПутьКФайлу = ТекущиеДанные.ИмяФайлаНаКомпьютере;
|
||
|
||
Если ВзаимодействияКлиентСервер.ЭтоФайлПисьмо(ТекущиеДанные.ИмяФайла) Тогда
|
||
|
||
Попытка
|
||
|
||
Данные = Новый ДвоичныеДанные(ТекущиеДанные.ИмяФайлаНаКомпьютере);
|
||
|
||
ВзаимодействияКлиент.ОткрытьВложениеПисьмо(ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор),
|
||
ПараметрыПисьмаВложения(),
|
||
ЭтотОбъект);
|
||
|
||
Исключение
|
||
ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу);
|
||
КонецПопытки;
|
||
Иначе
|
||
ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ТекущиеДанные.Расположение = 4 Тогда
|
||
|
||
ФайловаяСистемаКлиент.ОткрытьФайл(ТекущиеДанные.ИмяФайлаНаКомпьютере,, ТекущиеДанные.ИмяФайла);
|
||
|
||
ИначеЕсли ТекущиеДанные.Расположение = 5 Тогда
|
||
|
||
ПараметрыВложения = ВзаимодействияКлиент.ПустаяСтруктураПараметровПисьмаВложения();
|
||
ПараметрыВложения.ДатаПисьмаОснования = ?(ЗначениеЗаполнено(Объект.ДатаОтправления), Объект.ДатаОтправления , Объект.Дата);
|
||
ПараметрыВложения.ПисьмоОснование = Объект.Ссылка;
|
||
ПараметрыВложения.ТемаПисьмаОснования = Объект.Тема;
|
||
|
||
ВзаимодействияКлиент.ОткрытьВложениеПисьмо(ТекущиеДанные.Письмо,
|
||
ПараметрыПисьмаВложения(),
|
||
ЭтотОбъект);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ЗаполнитьВложения(ПереданныеПараметры = Неопределено)
|
||
|
||
Если Объект.Ссылка.Пустая() И ПереданныеПараметры <> Неопределено Тогда
|
||
Если ПереданныеПараметры.Свойство("Основание")
|
||
И ТипЗнч(ПереданныеПараметры.Основание) = Тип("Структура")
|
||
И ПереданныеПараметры.Основание.Свойство("Команда") Тогда
|
||
|
||
Если ПереданныеПараметры.Основание.Команда = "Переслать" Тогда
|
||
|
||
ТабВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(ПереданныеПараметры.Основание.Основание, Истина);
|
||
Для Каждого СтрокаТаблицыВложений Из ТабВложения Цикл
|
||
Если ПустаяСтрока(СтрокаТаблицыВложений.ИДФайлаЭлектронногоПисьма) Тогда
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Ссылка = СтрокаТаблицыВложений.Ссылка;
|
||
НоваяСтрока.ИмяФайла = СтрокаТаблицыВложений.ИмяФайла;
|
||
НоваяСтрока.ИндексКартинки = СтрокаТаблицыВложений.ИндексКартинки;
|
||
НоваяСтрока.Размер = СтрокаТаблицыВложений.Размер;
|
||
НоваяСтрока.РазмерПредставление = СтрокаТаблицыВложений.РазмерПредставление;
|
||
НоваяСтрока.Расположение = 1;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ДанныеХранимыхВБазеПисемВложений = Взаимодействия.ДанныеХранимыхВБазеПисемВложений(ПереданныеПараметры.Основание.Основание);
|
||
Для Каждого СтрокаТаблицы Из ДанныеХранимыхВБазеПисемВложений Цикл
|
||
ДобавитьВложениеПисьмо(СтрокаТаблицы.Письмо);
|
||
КонецЦикла;
|
||
|
||
ИначеЕсли ПереданныеПараметры.Основание.Команда = "ПереслатьКакВложение"
|
||
И Параметры.Основание.Свойство("Основание") Тогда
|
||
|
||
ДобавитьВложениеПисьмо(Параметры.Основание.Основание);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
Иначе
|
||
|
||
Вложения.Очистить();
|
||
ТабВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина);
|
||
Для Каждого СтрокаТаблицыВложений Из ТабВложения Цикл
|
||
Если ПустаяСтрока(СтрокаТаблицыВложений.ИДФайлаЭлектронногоПисьма) Тогда
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Ссылка = СтрокаТаблицыВложений.Ссылка;
|
||
НоваяСтрока.ИмяФайла = СтрокаТаблицыВложений.ИмяФайла;
|
||
НоваяСтрока.ИндексКартинки = СтрокаТаблицыВложений.ИндексКартинки;
|
||
НоваяСтрока.Размер = СтрокаТаблицыВложений.Размер;
|
||
НоваяСтрока.РазмерПредставление = СтрокаТаблицыВложений.РазмерПредставление;
|
||
НоваяСтрока.ПодписанЭП = СтрокаТаблицыВложений.ПодписанЭП;
|
||
НоваяСтрока.Расположение = 0;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ДобавитьПисьмаВложения();
|
||
|
||
КонецЕсли;
|
||
|
||
Вложения.Сортировать("ИмяФайла");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект)
|
||
|
||
Если ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее
|
||
И Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML")
|
||
И (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
|
||
ИЛИ ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"))
|
||
И ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда
|
||
|
||
Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
|
||
ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляВходящегоПисьма(ВзаимодействиеОснование, Истина, Истина, Ложь);
|
||
Иначе
|
||
ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляИсходящегоПисьма(ВзаимодействиеОснование, Истина, Истина, Ложь);
|
||
КонецЕсли;
|
||
|
||
ИмяФайла = ПолучитьИмяВременногоФайла("html");
|
||
ФайлИсходноеСообщение = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF16);
|
||
ФайлИсходноеСообщение.Записать(ТекстHTMLВходящее);
|
||
ФайлИсходноеСообщение.Закрыть();
|
||
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
|
||
АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
|
||
|
||
ФайлНаДиске = Новый Файл(ИмяФайла);
|
||
Если ФайлНаДиске.Существует() Тогда
|
||
УдалитьФайлы(ИмяФайла);
|
||
КонецЕсли;
|
||
|
||
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
|
||
ПараметрыФайла.ВладелецФайлов = ТекущийОбъект.Ссылка;
|
||
ПараметрыФайла.ИмяБезРасширения = НСтр("ru = 'Пересылаемое сообщение'");
|
||
ПараметрыФайла.РасширениеБезТочки = "html";
|
||
ПараметрыФайла.ВремяИзмененияУниверсальное = Неопределено;
|
||
|
||
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВХранилище);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СвойстваВложения(Команда)
|
||
|
||
ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;
|
||
Если ТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ТекущийИндексВКоллекции = Вложения.Индекс(ТекущиеДанные);
|
||
|
||
Если ТекущиеДанные.Ссылка = Неопределено Тогда
|
||
ДополнительныеПараметры = Новый Структура("ТекущийИндексВКоллекции", ТекущийИндексВКоллекции);
|
||
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОЗаписиФайлаПослеЗакрытия", ЭтотОбъект, ДополнительныеПараметры);
|
||
ТекстВопроса = НСтр("ru = 'Свойства файла доступны только после его записи. Записать?'");
|
||
ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
|
||
Иначе
|
||
ОткрытьСвойстваВложения(ТекущийИндексВКоллекции);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВопросОЗаписиФайлаПослеЗакрытия(РезультатВопроса, ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
|
||
Записать();
|
||
Иначе
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОткрытьСвойстваВложения(ДополнительныеПараметры.ТекущийИндексВКоллекции);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возникает при окончании получения размера файла
|
||
//
|
||
// Параметры:
|
||
// Размер - Число - размер файла.
|
||
// ДополнительныеПараметры - Структура:
|
||
// * СтрокаТаблицыВложений - СтрокаТаблицыЗначений - содержит:
|
||
// ** Размер - Число - размер файла.
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПолучениеРазмераЗавершение(Размер, ДополнительныеПараметры) Экспорт
|
||
|
||
СтрокаТаблицыВложений = ДополнительныеПараметры.СтрокаТаблицыВложений;
|
||
СтрокаТаблицыВложений.Размер = Размер;
|
||
СтрокаТаблицыВложений.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(Размер);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ДиалогВыбораФайловПослеВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
|
||
|
||
Если ВыбранныеФайлы = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Расположение = 2;
|
||
НоваяСтрока.ИмяФайлаНаКомпьютере = ВыбранныйФайл.ПолноеИмя;
|
||
|
||
ИмяФайла = ИмяФайлаБезКаталога(ВыбранныйФайл.ПолноеИмя);
|
||
НоваяСтрока.ИмяФайла = ИмяФайла;
|
||
|
||
Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла);
|
||
НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);
|
||
ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока);
|
||
Файл = Новый Файл(ВыбранныйФайл.ПолноеИмя);
|
||
Файл.НачатьПолучениеРазмера(Новый ОписаниеОповещения("ПолучениеРазмераЗавершение", ЭтотОбъект, ДополнительныеПараметры));
|
||
КонецЦикла;
|
||
|
||
Если ВыбранныеФайлы.Количество() > 0 Тогда
|
||
Элементы.Вложения.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПроверкаЭтоФайлПослеЗавершения(ЭтоФайл, ДополнительныеПараметры) Экспорт
|
||
|
||
Если НЕ ЭтоФайл Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПолноеИмя = ДополнительныеПараметры.ВыбранныйФайл.ПолноеИмя;
|
||
|
||
НоваяСтрока = Вложения.Добавить();
|
||
НоваяСтрока.Расположение = 2;
|
||
НоваяСтрока.ИмяФайлаНаКомпьютере = ПолноеИмя;
|
||
|
||
ИмяФайла = ИмяФайлаБезКаталога(ПолноеИмя);
|
||
НоваяСтрока.ИмяФайла = ИмяФайла;
|
||
|
||
Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла);
|
||
НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);
|
||
ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока);
|
||
Файл = Новый Файл(ПолноеИмя);
|
||
Файл.НачатьПолучениеРазмера(Новый ОписаниеОповещения("ПолучениеРазмераЗавершение", ЭтотОбъект, ДополнительныеПараметры));
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ИмяФайлаБезКаталога(Знач ПолноеИмяФайла)
|
||
|
||
ИмяФайла = ПолноеИмяФайла;
|
||
Пока Истина Цикл
|
||
|
||
Позиция = Макс(СтрНайти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/"));
|
||
Если Позиция = 0 Тогда
|
||
Возврат ИмяФайла;
|
||
КонецЕсли;
|
||
|
||
ИмяФайла = Сред(ИмяФайла, Позиция + 1);
|
||
|
||
КонецЦикла;
|
||
Возврат ИмяФайла;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ФормированиеТелаПисьма
|
||
|
||
&НаСервере
|
||
Функция СформироватьТекстПисьмаВключаяПисьмоОснование(РедактируемыйДокументHTML, ТекущийОбъект)
|
||
|
||
Выборка = Взаимодействия.ПолучитьДанныеПисьмаОснования(Объект.ВзаимодействиеОснование);
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда
|
||
Возврат СформироватьИсходящееОбычныйТекст(Выборка, ТекущийОбъект);
|
||
Иначе
|
||
Возврат СформироватьИсходящееHTML(Выборка, РедактируемыйДокументHTML, ТекущийОбъект);
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция СформироватьИсходящееHTML(Выборка, РедактируемыйДокументHTML, ТекущийОбъект)
|
||
|
||
// Получим ДокументHTML входящего письма.
|
||
Если Выборка.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда
|
||
ДокументHTML = Взаимодействия.ПолучитьДокументHTMLИзОбычногоТекста(Выборка.Текст);
|
||
Иначе
|
||
ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(Выборка.ТекстHTML);
|
||
КонецЕсли;
|
||
|
||
ЭлементТелоПисьма = ДокументHTML.Тело;
|
||
Если ЭлементТелоПисьма = Неопределено Тогда
|
||
Если РедактируемыйДокументHTML = Неопределено Тогда
|
||
Возврат ТекущийОбъект.ТекстHTML;
|
||
Иначе
|
||
Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(РедактируемыйДокументHTML);
|
||
КонецЕсли
|
||
КонецЕсли;
|
||
|
||
Если РедактируемыйДокументHTML = Неопределено Тогда
|
||
РедактируемыйДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстHTML);
|
||
КонецЕсли;
|
||
|
||
ДокументHTML = Взаимодействия.ОбъединитьПисьма(РедактируемыйДокументHTML, ДокументHTML, Выборка);
|
||
Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция СформироватьИсходящееОбычныйТекст(ВыборкаДанныеВходящегоПисьма, ТекущийОбъект)
|
||
|
||
// Формирование шапки входящего письма.
|
||
СтрокаШапка = НСтр("ru = '-----Пересылаемое сообщение-----'");
|
||
|
||
СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'От'") + ": "+ ВыборкаДанныеВходящегоПисьма.ОтправительПредставление
|
||
+ ?(ВыборкаДанныеВходящегоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоВходящее",
|
||
"[" + ВыборкаДанныеВходящегоПисьма.ОтправительАдрес +"]",
|
||
"");
|
||
|
||
СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено'") + ": "
|
||
+ Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДЛФ=DT");
|
||
|
||
СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому'") + ": "
|
||
+ Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить());
|
||
|
||
ТаблицаПолучателейКопий = ВыборкаДанныеВходящегоПисьма.ПолучателиКопий.Выгрузить();
|
||
|
||
Если ТаблицаПолучателейКопий.Количество() > 0 Тогда
|
||
СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Копии'") + ": "
|
||
+ Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ТаблицаПолучателейКопий);
|
||
КонецЕсли;
|
||
|
||
СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Тема'") + ": " + ВыборкаДанныеВходящегоПисьма.Тема;
|
||
|
||
// Преобразование к обычному тексту текста HTML если это необходимо.
|
||
Если ВыборкаДанныеВходящегоПисьма.ТипТекста <> Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда
|
||
|
||
ТекстВходящегоПисьма = Взаимодействия.ПолучитьОбычныйТекстИзHTML(ВыборкаДанныеВходящегоПисьма.ТекстHTML);
|
||
|
||
Иначе
|
||
|
||
ТекстВходящегоПисьма = ВыборкаДанныеВходящегоПисьма.Текст
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ТекущийОбъект.Текст + Символы.ПС + Символы.ПС + СтрокаШапка + Символы.ПС + Символы.ПС + ТекстВходящегоПисьма;
|
||
|
||
КонецФункции
|
||
|
||
#Область Прочее
|
||
|
||
// Определяет способ редактирования письма и
|
||
// отображает текст письма согласно способу редактирования.
|
||
//
|
||
&НаСервере
|
||
Процедура ОпределитьСпособРедактированияПисьма()
|
||
|
||
Если Объект.ТипТекста.Пустая() Тогда
|
||
|
||
ФорматСообщения = Взаимодействия.ФорматСообщенияПоУмолчанию(Пользователи.ТекущийПользователь());
|
||
|
||
// Если тип текста не был заполнен, то может оказаться, что формат выбран некорректно, поэтому:
|
||
// 1) Если текст заполнен, но не заполнен HTML - то формат сообщения исправляем на "текст".
|
||
// 2) Если HTML заполнен, но не заполнен текст - то формат сообщения исправляем на "HTML".
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст
|
||
И СокрЛП(Объект.Текст) = "" И СокрЛП(Объект.ТекстHTML) <> "" Тогда
|
||
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
|
||
ИначеЕсли ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML
|
||
И СокрЛП(Объект.Текст) <> "" И СокрЛП(Объект.ТекстHTML) = "" Тогда
|
||
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда
|
||
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст;
|
||
Иначе
|
||
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Объект.Ссылка.Пустая() Тогда
|
||
|
||
Если Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML")
|
||
И ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда
|
||
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст;
|
||
КонецЕсли;
|
||
|
||
ПараметрыРаботыПользователяПользователя =
|
||
Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
|
||
Объект.УчетнаяЗапись,
|
||
ФорматСообщения,
|
||
?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь));
|
||
|
||
Объект.УведомитьОДоставке = ПараметрыРаботыПользователяПользователя.УведомитьОДоставке;
|
||
Объект.УведомитьОПрочтении = ПараметрыРаботыПользователяПользователя.УведомитьОПрочтении;
|
||
Объект.ВключатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ВключатьТелоИсходногоПисьма;
|
||
Объект.ОтображатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ОтображатьТелоИсходногоПисьма;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда
|
||
|
||
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент;
|
||
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML;
|
||
Если Не Объект.Ссылка.Пустая() Или ЗначениеЗаполнено(Объект.ТекстHTML) Тогда
|
||
|
||
Если ЭтоАдресВременногоХранилища(Объект.ТекстHTML) Тогда
|
||
|
||
ТелоПисьмаHTML = ПолучитьИзВременногоХранилища(Объект.ТекстHTML);
|
||
Объект.ТекстHTML = ТелоПисьмаHTML.ТекстHTML;
|
||
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТелоПисьмаHTML.ТекстHTML, ТелоПисьмаHTML.СтруктураВложений);
|
||
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками;
|
||
Объект.Текст = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
|
||
|
||
Иначе
|
||
СтруктураВложений = Новый Структура;
|
||
Объект.ТекстHTML = Взаимодействия.ОбработатьТекстHTMLДляФорматированногоДокумента(
|
||
Объект.Ссылка, Объект.ТекстHTML, СтруктураВложений);
|
||
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда
|
||
ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыРаботыПользователяПользователя.Подпись);
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст;
|
||
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
|
||
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст;
|
||
ТекстПисьма = Объект.Текст;
|
||
Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда
|
||
ТекстПисьма = ТекстПисьма + ПараметрыРаботыПользователяПользователя.Подпись;
|
||
КонецЕсли;
|
||
Объект.Кодировка = "UTF-8";
|
||
|
||
КонецЕсли;
|
||
|
||
Элементы.ФорматСообщения.Видимость = Истина;
|
||
Элементы.ФорматСообщения.Заголовок = ФорматСообщения;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Обрабатывает переданные параметры при создании письма.
|
||
&НаСервере
|
||
Процедура ОбработатьПереданныеПараметры(ПереданныеПараметры)
|
||
|
||
Если НЕ Объект.Ссылка.Пустая() Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
УстановитьТекстПисьмаПоПереданнымПараметрам(ПереданныеПараметры);
|
||
|
||
Если ПереданныеПараметры.Свойство("Вложения") И ПереданныеПараметры.Вложения <> Неопределено Тогда
|
||
|
||
Вложения.Очистить();
|
||
|
||
Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(ПереданныеПараметры.Вложения) = Тип("Массив") Тогда
|
||
Для Каждого Вложение Из ПереданныеПараметры.Вложения Цикл
|
||
ОписаниеВложения = Вложения.Добавить();
|
||
Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Тогда
|
||
Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда
|
||
ОписаниеВложения.Расположение = 4;
|
||
ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор);
|
||
ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("ДвоичныеДанные") Тогда
|
||
ОписаниеВложения.Расположение = 4;
|
||
ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Вложение.Значение, УникальныйИдентификатор);
|
||
Иначе
|
||
ОписаниеВложения.Расположение = 2;
|
||
ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.Значение;
|
||
КонецЕсли;
|
||
ОписаниеВложения.ИмяФайла = Вложение.Представление;
|
||
Иначе // ТипЗнч(ПереданныеПараметры.Вложения) = "массив структур"
|
||
Если Не ПустаяСтрока(Вложение.АдресВоВременномХранилище) Тогда
|
||
ОписаниеВложения.Расположение = 4;
|
||
ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(
|
||
ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), УникальныйИдентификатор);
|
||
Иначе
|
||
ОписаниеВложения.Расположение = 2;
|
||
ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.ПутьКФайлу;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ОписаниеВложения.ИмяФайла = Вложение.Представление;
|
||
Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ОписаниеВложения.ИмяФайла);
|
||
ОписаниеВложения.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ПереданныеПараметры.Свойство("Тема") И НЕ ПустаяСтрока(ПереданныеПараметры.Тема) Тогда
|
||
Объект.Тема = ПереданныеПараметры.Тема;
|
||
КонецЕсли;
|
||
|
||
Если ПереданныеПараметры.Свойство("Получатель") И ПереданныеПараметры.Получатель <> Неопределено Тогда
|
||
|
||
// Если передан параметр "Получатель", то эта табличная часть очищается перед заполнением согласно данным параметра.
|
||
Объект.ПолучателиПисьма.Очистить();
|
||
СписокПолучателей.Очистить();
|
||
|
||
Если ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Строка") И НЕ ПустаяСтрока(ПереданныеПараметры.Получатель) Тогда
|
||
Объект.СписокПолучателейПисьма = ПереданныеПараметры.Получатель;
|
||
НоваяСтрока = Объект.ПолучателиПисьма.Добавить();
|
||
НоваяСтрока.Адрес = ПереданныеПараметры.Получатель;
|
||
|
||
ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("СписокЗначений") Тогда
|
||
|
||
Для Каждого ЭлементСписка Из ПереданныеПараметры.Получатель Цикл
|
||
НоваяСтрока = Объект.ПолучателиПисьма.Добавить();
|
||
НоваяСтрока.Адрес = ЭлементСписка.Значение;
|
||
НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементСписка.Представление);
|
||
|
||
НоваяСтрока = СписокПолучателей.Добавить();
|
||
НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'");
|
||
НоваяСтрока.Адрес = ЭлементСписка.Значение;
|
||
НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементСписка.Представление);
|
||
КонецЦикла;
|
||
|
||
Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь);
|
||
|
||
ИначеЕсли ТипЗнч(ПереданныеПараметры.Получатель) = Тип("Массив") Тогда
|
||
|
||
Для Каждого ЭлементМассива Из ПереданныеПараметры.Получатель Цикл
|
||
|
||
МассивАдресов = СтрРазделить(ЭлементМассива.Адрес, ";");
|
||
|
||
Для Каждого Адрес Из МассивАдресов Цикл
|
||
Если ПустаяСтрока(Адрес) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НоваяСтрока = Объект.ПолучателиПисьма.Добавить();
|
||
НоваяСтрока.Адрес = СокрЛП(Адрес);
|
||
НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(ЭлементМассива.Представление);
|
||
НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации;
|
||
КонецЦикла;
|
||
|
||
КонецЦикла;
|
||
|
||
Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
ОчиститьДублиАдресатов(Объект.ПолучателиПисьма);
|
||
|
||
Если ПереданныеПараметры.Свойство("Отправитель") И ЗначениеЗаполнено(ПереданныеПараметры.Отправитель) Тогда
|
||
|
||
Объект.УчетнаяЗапись = ПереданныеПараметры.Отправитель;
|
||
РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
|
||
ПереданныеПараметры.Отправитель,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты");
|
||
Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(
|
||
РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, "");
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ОбработанноеПредставлениеАдресата(ПредставлениеАдресата)
|
||
|
||
ПредставлениеАдресата = СтрЗаменить(ПредставлениеАдресата, ",", "");
|
||
ПредставлениеАдресата = СтрЗаменить(ПредставлениеАдресата, ";", "");
|
||
|
||
Возврат ПредставлениеАдресата;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура УстановитьТекстПисьмаПоПереданнымПараметрам(ПереданныеПараметры)
|
||
|
||
Если НЕ ПереданныеПараметры.Свойство("Текст") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Текст = ПереданныеПараметры.Текст;
|
||
|
||
Если ТипЗнч(Текст) = Тип("Структура") Тогда
|
||
|
||
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Текст.ТекстHTML, Текст.СтруктураВложений);
|
||
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками;
|
||
Объект.Текст = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
|
||
|
||
ИначеЕсли ТипЗнч(Текст) = Тип("Строка") И Не ПустаяСтрока(Текст) Тогда
|
||
|
||
Если СтрЗаканчиваетсяНа(НРег(СокрП(Текст)), НРег("</html>")) Тогда
|
||
Картинки = Новый Структура;
|
||
Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("Массив") Тогда
|
||
Для Индекс = -ПереданныеПараметры.Вложения.ВГраница() По 0 Цикл
|
||
Вложение = ПереданныеПараметры.Вложения[-Индекс];
|
||
Если Вложение.Свойство("Идентификатор") И ЗначениеЗаполнено(Вложение.Идентификатор) Тогда
|
||
КартинкаВложение = Новый Картинка(ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище));
|
||
Картинки.Вставить(Вложение.Представление, КартинкаВложение);
|
||
ПереданныеПараметры.Вложения.Удалить(-Индекс);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Текст, Картинки);
|
||
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками;
|
||
Объект.Текст = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
|
||
|
||
ИначеЕсли Взаимодействия.ФорматСообщенияПоУмолчанию(Объект.Автор) = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда
|
||
|
||
ТекстПисьмаФорматированныйДокумент.Добавить(Текст);
|
||
СтрВложения = Новый Структура;
|
||
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(Объект.ТекстHTML, СтрВложения);
|
||
|
||
Иначе
|
||
Объект.Текст = Текст;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Определяет необходимость отображения письма основания.
|
||
&НаСервере
|
||
Процедура ОтобразитьПисьмоОснование()
|
||
|
||
Если Не Объект.ВзаимодействиеОснование = Неопределено И НЕ Объект.ВзаимодействиеОснование.Пустая()
|
||
И Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик
|
||
И (ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
|
||
ИЛИ ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда
|
||
|
||
ЗначенияРеквизитовВходящегоПисьма = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
|
||
Объект.ВзаимодействиеОснование,"ТипТекста,ТекстHTML,Текст");
|
||
|
||
ТипТекстаВходящегоПисьма = ?(ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст,
|
||
Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст,
|
||
Перечисления.ТипыТекстовЭлектронныхПисем.HTML);
|
||
|
||
Если ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") Тогда
|
||
|
||
Если ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда
|
||
|
||
ТекстВходящегоПисьма = ЗначенияРеквизитовВходящегоПисьма.Текст;
|
||
Элементы.ТекстВходящегоПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
|
||
|
||
Иначе
|
||
|
||
ПрочитатьТекстВходящегоПисьмаHTML();
|
||
Элементы.ТекстВходящегоПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента;
|
||
Элементы.ТекстВходящегоПисьма.ТолькоПросмотр = Ложь
|
||
|
||
КонецЕсли;
|
||
|
||
Если Не Объект.ОтображатьТелоИсходногоПисьма Тогда
|
||
Элементы.ГруппаВходящее.Видимость = Ложь;
|
||
Иначе
|
||
Элементы.ОтображатьТекстПисьмаОснования.Пометка = Истина;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Элементы.ГруппаВходящее.Видимость = Ложь;
|
||
ТекстПисьма = СформироватьТекстПисьмаВключаяПисьмоОснование(Неопределено, Объект);
|
||
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Элементы.ГруппаВходящее.Видимость = Ложь;
|
||
Элементы.ОтображатьТекстПисьмаОснования.Видимость = Ложь;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция РезультатВставкиТекстаВПисьмо(ТекстПисьма, СтрокаНачало, КолонкаНачало, КолонкаКонец, ВыбранноеЗначение)
|
||
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстПисьма);
|
||
СтрокаВставки = ТекстовыйДокумент.ПолучитьСтроку(СтрокаНачало);
|
||
СтрокаВставки = Лев(СтрокаВставки, КолонкаНачало - 1) + ВыбранноеЗначение + Прав(СтрокаВставки,СтрДлина(СтрокаВставки) - КолонкаКонец + 1);
|
||
ТекстовыйДокумент.ЗаменитьСтроку(СтрокаНачало, СтрокаВставки);
|
||
Возврат ТекстовыйДокумент.ПолучитьТекст();
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
&НаКлиенте
|
||
Процедура ОтправитьВыполнить()
|
||
|
||
ОчиститьСообщения();
|
||
|
||
НайденныеСтроки = ДоступныеДляОтправкиУчетныеЗаписи.НайтиСтроки(Новый Структура("УчетнаяЗапись", Объект.УчетнаяЗапись));
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
ОбщегоНазначенияКлиент.СообщитьПользователю(
|
||
НСтр("ru = 'Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект");
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если НайденныеСтроки[0].УдалятьПослеОтправки Тогда
|
||
|
||
СписокКнопок = Новый СписокЗначений;
|
||
СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отправить'"));
|
||
СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отправить и сохранить'"));
|
||
СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
|
||
|
||
ТекстВопроса = НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе.
|
||
|Продолжить?'");
|
||
|
||
ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВопросОНеСохраненииОтправленногоПисьма", ЭтотОбъект);
|
||
ПоказатьВопрос(ОбработчикОповещенияЗакрытия,ТекстВопроса, СписокКнопок,, КодВозвратаДиалога.Да, НСтр("ru = 'Отправка письма'"));
|
||
Иначе
|
||
ОтправитьПисьмоКлиент();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПереслатьВыполнить()
|
||
|
||
Основание = Новый Структура("Основание,Команда", Объект.Ссылка, "Переслать");
|
||
ПараметрыОткрытия = Новый Структура("Основание", Основание);
|
||
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьЗаголовокКнопкиПоУмолчанию()
|
||
|
||
Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда
|
||
Элементы.Отправить.Заголовок = НСтр("ru = 'Переслать'");
|
||
ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее Тогда
|
||
Элементы.Отправить.Заголовок = НСтр("ru = 'Отправить сейчас'");
|
||
ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
|
||
НастройкиРаботыСПочтой = Взаимодействия.ПолучитьНастройкуРаботаСПочтой();
|
||
Если НастройкиРаботыСПочтой.Свойство("ОтправлятьСообщенияСразу") И НастройкиРаботыСПочтой.ОтправлятьСообщенияСразу Тогда
|
||
ОтправлятьСообщенияСразу = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Элементы.Отправить.Заголовок = НСтр("ru = 'Отправить'");
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ФорматСообщенияПриИзменении()
|
||
|
||
Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст")
|
||
И ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда
|
||
|
||
ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект);
|
||
|
||
Иначе
|
||
|
||
ПриИзмененииФорматаПодписиНаHTMLНаСервере(Объект.УчетнаяЗапись);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииИПриЧтенииНаСервере()
|
||
|
||
ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();
|
||
Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект);
|
||
УстановитьЗаголовокКнопкиПоУмолчанию();
|
||
ОбработатьПереданныеПараметры(Параметры);
|
||
ЗаполнитьВложения(Параметры);
|
||
|
||
Для Каждого ПолучательПисьма Из Объект.ПолучателиПисьма Цикл
|
||
Если ЗначениеЗаполнено(ПолучательПисьма.Контакт) Тогда
|
||
СоответствияАдресовИКонтактов.Добавить(ПолучательПисьма.Контакт, ПолучательПисьма.Адрес);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма();
|
||
ОтобразитьПисьмоОснование();
|
||
|
||
Если Не Объект.Ссылка.Пустая() Тогда
|
||
Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект);
|
||
ТекущийСтатусПисьма = Объект.СтатусПисьма;
|
||
КонецЕсли;
|
||
|
||
НаКонтроле = НЕ Рассмотрено;
|
||
|
||
ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее");
|
||
|
||
Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда
|
||
Элементы.Тема.РедактированиеТекста = Ложь;
|
||
КонецЕсли;
|
||
|
||
Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
|
||
|
||
СформироватьСпискиПолучателейПисьма();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция НайтиКонтакты(Знач СтрокаПоиска)
|
||
|
||
Результат = Новый СписокЗначений;
|
||
ТаблицаКонтактов = Взаимодействия.НайтиКонтактыСАдресами(СтрокаПоиска);
|
||
Для каждого Выборка Из ТаблицаКонтактов Цикл
|
||
ЗначениеВыбора = Новый Структура;
|
||
ЗначениеВыбора.Вставить("Контакт", Выборка.Контакт);
|
||
ЗначениеВыбора.Вставить("Адрес", Выборка.Представление);
|
||
ЗначениеВыбора.Вставить("Представление", Выборка.Наименование);
|
||
ЗначениеВыбора.Вставить("ИндексВСпискеПолучателей", 0);
|
||
Результат.Добавить(ЗначениеВыбора,
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Выборка.Наименование, Выборка.Представление, ""));
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ПолучитьПредставлениеИдентификаторовОснований(Знач Идентификаторы)
|
||
|
||
Идентификаторы = СтрЗаменить(Идентификаторы, "<", " ");
|
||
Идентификаторы = СтрЗаменить(Идентификаторы, ">", " ");
|
||
Идентификаторы = СтрЗаменить(Идентификаторы, " ", " ");
|
||
Идентификаторы = СокрЛП(СтрЗаменить(Идентификаторы, " ", " "));
|
||
Идентификаторы = СтрЗаменить(Идентификаторы, " ", Символы.ПС + " ");
|
||
|
||
Возврат Идентификаторы;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура РедактироватьСписокПолучателей(ДляПодбора, ГруппаПодбора = "")
|
||
|
||
Объект.ПолучателиПисьма.Очистить();
|
||
Объект.ПолучателиКопий.Очистить();
|
||
Объект.ПолучателиСкрытыхКопий.Очистить();
|
||
Объект.ПолучателиОтвета.Очистить();
|
||
Для каждого Получатель Из СписокПолучателей Цикл
|
||
Если Получатель.ВариантОтправки = НСтр("ru = 'Обратный адрес:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиОтвета.Добавить();
|
||
ИначеЕсли Получатель.ВариантОтправки = НСтр("ru = 'Копия:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиКопий.Добавить();
|
||
ИначеЕсли Получатель.ВариантОтправки = НСтр("ru = 'Скрытая копия:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиСкрытыхКопий.Добавить();
|
||
Иначе
|
||
НоваяСтрока = Объект.ПолучателиПисьма.Добавить();
|
||
КонецЕсли;
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрока, Получатель);
|
||
КонецЦикла;
|
||
|
||
// Получим список адресатов
|
||
СоответствиеТабличныхЧастей = Новый Соответствие;
|
||
СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма);
|
||
СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий);
|
||
СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий);
|
||
СоответствиеТабличныхЧастей.Вставить("Ответ", Объект.ПолучателиОтвета);
|
||
|
||
СписокВыбранных = Новый СписокЗначений;
|
||
Для Каждого ТабличнаяЧасть Из СоответствиеТабличныхЧастей Цикл
|
||
СписокВыбранных.Добавить(
|
||
УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(ТабличнаяЧасть.Значение), ТабличнаяЧасть.Ключ);
|
||
КонецЦикла;
|
||
|
||
ПараметрыОткрытия = Новый Структура;
|
||
ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись);
|
||
ПараметрыОткрытия.Вставить("СписокВыбранных", СписокВыбранных);
|
||
ПараметрыОткрытия.Вставить("Предмет", Предмет);
|
||
ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка);
|
||
ПараметрыОткрытия.Вставить("ГруппаПоУмолчанию", ?(ПустаяСтрока(ГруппаПодбора), НСтр("ru = 'Кому'"), ГруппаПодбора));
|
||
|
||
// Откроем форму для редактирования списка адресатов.
|
||
ОповещениеПослеЗакрытия = Новый ОписаниеОповещения("ПослеЗаполненияАдреснойКниги", ЭтотОбъект);
|
||
ИмяОбщейФормы = ?(ДляПодбора, "ОбщаяФорма.АдреснаяКнига", "ОбщаяФорма.УточнениеКонтактов");
|
||
|
||
ОткрытьФорму(ИмяОбщейФормы, ПараметрыОткрытия, ЭтотОбъект,,,, ОповещениеПослеЗакрытия);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеЗаполненияАдреснойКниги(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
|
||
|
||
ЗаполнитьПодобранныхПолучателейПослеВыбора(ВыбранноеЗначение);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПодобранныхПолучателейПослеВыбора(ВыбранноеЗначение)
|
||
|
||
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Массив") И ТипЗнч(ВыбранноеЗначение) <> Тип("Соответствие") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Получим список адресатов
|
||
СоответствиеТабличныхЧастей = Новый Соответствие;
|
||
СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма);
|
||
СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий);
|
||
СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий);
|
||
СоответствиеТабличныхЧастей.Вставить("Получатели", Объект.ПолучателиОтвета);
|
||
|
||
ДляПодбора = (Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено"));
|
||
|
||
// Заполним адресатов
|
||
Если ДляПодбора Тогда
|
||
ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, ВыбранноеЗначение);
|
||
Иначе
|
||
ЗаполнитьУточненныеКонтакты(ВыбранноеЗначение);
|
||
КонецЕсли;
|
||
|
||
// Установим признак модифицированности.
|
||
ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее");
|
||
ИзменилисьКонтакты = Истина;
|
||
Модифицированность = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, Результат)
|
||
|
||
Для Каждого ТабличнаяЧасть Из СоответствиеТабличныхЧастей Цикл
|
||
ТабличнаяЧасть.Значение.Очистить();
|
||
КонецЦикла;
|
||
|
||
МассивРанееДобавленныхАдресов = Новый Массив;
|
||
|
||
Для Каждого Элемент Из Результат Цикл
|
||
|
||
ТабличнаяЧасть = СоответствиеТабличныхЧастей.Получить(Элемент.Группа);
|
||
Если ТабличнаяЧасть = Неопределено Тогда
|
||
ТабличнаяЧасть = Объект.ПолучателиПисьма;
|
||
КонецЕсли;
|
||
|
||
Если МассивРанееДобавленныхАдресов.Найти(Элемент.Адрес) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока = ТабличнаяЧасть.Добавить();
|
||
НоваяСтрока.Адрес = Элемент.Адрес;
|
||
НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(Элемент.Представление);
|
||
НоваяСтрока.Контакт = Элемент.Контакт;
|
||
|
||
МассивРанееДобавленныхАдресов.Добавить(НоваяСтрока.Адрес);
|
||
|
||
КонецЦикла;
|
||
|
||
ОчиститьДублиАдресатов(Объект.ПолучателиПисьма);
|
||
|
||
СформироватьСпискиПолучателей();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СформироватьСпискиПолучателей()
|
||
|
||
Объект.СписокПолучателейПисьма =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь);
|
||
Объект.СписокПолучателейКопий =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь);
|
||
Объект.СписокПолучателейСкрытыхКопий =
|
||
ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиСкрытыхКопий, Ложь);
|
||
|
||
СформироватьСпискиПолучателейПисьма();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура СформироватьСпискиПолучателейПисьма()
|
||
|
||
СписокПолучателей.Очистить();
|
||
|
||
ДобавитьАдресВСписокПолучателей(СписокПолучателей, Объект.ПолучателиПисьма, НСтр("ru = 'Кому:'"));
|
||
ДобавитьАдресВСписокПолучателей(СписокПолучателей, Объект.ПолучателиКопий, НСтр("ru = 'Копия:'"));
|
||
ДобавитьАдресВСписокПолучателей(СписокПолучателей, Объект.ПолучателиСкрытыхКопий, НСтр("ru = 'Скрытая копия:'"));
|
||
ДобавитьАдресВСписокПолучателей(СписокПолучателей, Объект.ПолучателиОтвета, НСтр("ru = 'Обратный адрес:'"));
|
||
|
||
Если СписокПолучателей.Количество() = 0 Тогда
|
||
НоваяСтрока = СписокПолучателей.Добавить();
|
||
НоваяСтрока.ВариантОтправки = "Кому:";
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьАдресВСписокПолучателей(СписокПолучателей, ПолучателиПисьма, Кому)
|
||
|
||
Для каждого СтрокаПолучатель Из ПолучателиПисьма Цикл
|
||
НоваяСтрока = СписокПолучателей.Добавить();
|
||
НоваяСтрока.ВариантОтправки = Кому;
|
||
НоваяСтрока.Адрес = СтрокаПолучатель.Адрес;
|
||
НоваяСтрока.Контакт = СтрокаПолучатель.Контакт;
|
||
НоваяСтрока.Представление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(СтрокаПолучатель.Представление,
|
||
СтрокаПолучатель.Адрес, "");
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьУточненныеКонтакты(Результат)
|
||
|
||
Объект.ПолучателиКопий.Очистить();
|
||
Объект.ПолучателиОтвета.Очистить();
|
||
Объект.ПолучателиПисьма.Очистить();
|
||
Объект.ПолучателиСкрытыхКопий.Очистить();
|
||
|
||
Для каждого ЭлементМассива Из Результат Цикл
|
||
|
||
Если ЭлементМассива.Группа = "Кому" Тогда
|
||
ТаблицаПолучателей = Объект.ПолучателиПисьма;
|
||
ИначеЕсли ЭлементМассива.Группа = "Копии" Тогда
|
||
ТаблицаПолучателей = Объект.ПолучателиКопий;
|
||
ИначеЕсли ЭлементМассива.Группа = "Скрытые" Тогда
|
||
ТаблицаПолучателей = Объект.ПолучателиСкрытыхКопий;
|
||
Иначе
|
||
ТаблицаПолучателей = Объект.ПолучателиОтвета;
|
||
КонецЕсли;
|
||
|
||
СтрокаПолучатели = ТаблицаПолучателей.Добавить();
|
||
ЗаполнитьЗначенияСвойств(СтрокаПолучатели, ЭлементМассива);
|
||
|
||
КонецЦикла;
|
||
|
||
СформироватьСпискиПолучателей();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПоказатьПредупреждениеОНеобходимостиВвестиАдресЭлектроннойПочты()
|
||
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо ввести адрес электронной почты'"));
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ВыполнитьОтправкуНаСервере()
|
||
|
||
ПисьмоОбъект = РеквизитФормыВЗначение("Объект");
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("ТекстСообщения", "");
|
||
Результат.Вставить("ПисьмоОтправлено", Ложь);
|
||
|
||
ПараметрыПисьма = Взаимодействия.ПараметрыПисьмаДляОтправки(ПисьмоОбъект);
|
||
Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(ПисьмоОбъект.УчетнаяЗапись, ПараметрыПисьма);
|
||
РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПисьмоОбъект.УчетнаяЗапись, Письмо);
|
||
|
||
ПараметрыОбработкиОшибки = УправлениеЭлектроннойПочтой.ПараметрыОбработкиОшибкиОтправки();
|
||
ПараметрыОбработкиОшибки.ПисьмоОбъект = ПисьмоОбъект;
|
||
ПараметрыОбработкиОшибки.Ссылка = ПисьмоОбъект.Ссылка;
|
||
ПараметрыОбработкиОшибки.ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(ПисьмоОбъект.Тема, ПисьмоОбъект.Дата);
|
||
ПараметрыОбработкиОшибки.КоличествоПопыток = 0;
|
||
ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Ложь;
|
||
ПараметрыОбработкиОшибки.СообщатьПользователю = Истина;
|
||
|
||
Если ЗначениеЗаполнено(РезультатОтправки.ОшибочныеПолучатели) Тогда
|
||
Результат = УправлениеЭлектроннойПочтой.ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, РезультатОтправки.ОшибочныеПолучатели);
|
||
Если Не Результат.ПисьмоОтправлено Тогда
|
||
ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект");
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP;
|
||
Результат.ПисьмоОтправлено = Истина;
|
||
|
||
НачатьТранзакцию();
|
||
Попытка
|
||
Блокировка = Новый БлокировкаДанных;
|
||
ЭлементБлокировки = Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее");
|
||
ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Ссылка);
|
||
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Объект.Ссылка);
|
||
Блокировка.Заблокировать();
|
||
|
||
Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда
|
||
ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
|
||
ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса();
|
||
ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись);
|
||
ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект");
|
||
|
||
Взаимодействия.УстановитьПапкуЭлектронногоПисьма(Объект.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Объект.Ссылка));
|
||
ТекущийСтатусПисьма = Объект.СтатусПисьма;
|
||
Иначе
|
||
ПисьмоОбъект.Прочитать();
|
||
ПисьмоОбъект.Удалить();
|
||
КонецЕсли;
|
||
ЗафиксироватьТранзакцию();
|
||
Исключение
|
||
ОтменитьТранзакцию();
|
||
ВызватьИсключение;
|
||
КонецПопытки;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ОценитьРазмерПисьма()
|
||
|
||
Размер = СтрДлина(Объект.Тема)*2;
|
||
Размер = Размер + ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML,
|
||
СтрДлина(Объект.ТекстHTML),
|
||
СтрДлина(Объект.Текст)) * 2;
|
||
|
||
Для каждого Вложение Из Вложения Цикл
|
||
Размер = Размер + Вложение.Размер * 1.5;
|
||
КонецЦикла;
|
||
|
||
Для каждого СтрокаТаблицыСоответствий Из ТаблицаСоответствийИменВложенийИдентификаторам Цикл
|
||
Размер = Размер + СтрокаТаблицыСоответствий.Картинка.ПолучитьДвоичныеДанные().Размер()*1.5;
|
||
КонецЦикла;
|
||
|
||
Возврат Размер;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция РеквизитыФайла(Файл)
|
||
|
||
ТребуемыеРеквизиты = "Наименование, Расширение, ИндексКартинки, Размер";
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
|
||
ТребуемыеРеквизиты = ТребуемыеРеквизиты + ", ПодписанЭП";
|
||
КонецЕсли;
|
||
|
||
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Файл, ТребуемыеРеквизиты);
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОтправитьПисьмоКлиент()
|
||
|
||
Если Не ОтправлятьСообщенияСразу Тогда
|
||
ОтправлятьСообщенияСразу = (
|
||
Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее"));
|
||
КонецЕсли;
|
||
|
||
ВыполняетсяОтправка = Истина;
|
||
|
||
Если Объект.Ссылка.Пустая()
|
||
Или Модифицированность
|
||
Или Объект.ВключатьТелоИсходногоПисьма
|
||
Или (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда
|
||
Записать();
|
||
КонецЕсли;
|
||
|
||
ВыполняетсяОтправка = Ложь;
|
||
|
||
Если Модифицированность Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если ОтправлятьСообщенияСразу Тогда
|
||
Результат = ВыполнитьОтправкуНаСервере();
|
||
Иначе
|
||
Закрыть();
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Результат.ПисьмоОтправлено
|
||
И Результат.ТекстСообщения = "" Тогда
|
||
|
||
Закрыть();
|
||
|
||
ИначеЕсли Результат.ПисьмоОтправлено
|
||
И Результат.ТекстСообщения <> "" Тогда
|
||
|
||
Прочитать();
|
||
ПоказатьПредупреждение(, Результат.ТекстСообщения);
|
||
|
||
ИначеЕсли Результат.ТекстСообщения <> "" Тогда
|
||
|
||
ПоказатьПредупреждение(, Результат.ТекстСообщения);
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВопросОНеСохраненииОтправленногоПисьма(РезультатВопроса, ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
|
||
Объект.УдалятьПослеОтправки = Истина;
|
||
ИначеЕсли РезультатВопроса = КодВозвратаДиалога.Нет Тогда
|
||
Объект.УдалятьПослеОтправки = Ложь;
|
||
ИначеЕсли РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОтправитьПисьмоКлиент();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ВопросПриИзмененииФорматаПриЗакрытии(РезультатВопроса, ДополнительныеПараметры) Экспорт
|
||
|
||
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
|
||
ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML");
|
||
Иначе
|
||
ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
|
||
Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст");
|
||
ТекстПисьмаФорматированныйДокумент.Удалить();
|
||
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
|
||
Объект.ТекстHTML = "";
|
||
Объект.Кодировка = "UTF-8";
|
||
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст;
|
||
КонецЕсли;
|
||
|
||
Элементы.ФорматСообщения.Заголовок = ФорматСообщения;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьСвойстваВложения(ТекущийИндексВКоллекции)
|
||
|
||
ТекущиеДанные = Вложения.Получить(ТекущийИндексВКоллекции);
|
||
Если ТекущиеДанные = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Элементы.Вложения.ТекущаяСтрока = ТекущиеДанные.ПолучитьИдентификатор();
|
||
|
||
ФайлДоступенДляРедактирования =
|
||
(Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик"));
|
||
ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ТолькоПросмотр",
|
||
ТекущиеДанные.Ссылка,НЕ ФайлДоступенДляРедактирования);
|
||
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ИзменитьПодпись(ПредыдущаяУчетнаяЗапись, НоваяУчетнаяЗапись)
|
||
|
||
ПараметрыПредыдущаяУЗ =
|
||
Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
|
||
ПредыдущаяУчетнаяЗапись,
|
||
ФорматСообщения,
|
||
?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь));
|
||
|
||
ПараметрыНоваяУЗ =
|
||
Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
|
||
НоваяУчетнаяЗапись,
|
||
ФорматСообщения,
|
||
?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь));
|
||
|
||
Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда
|
||
Если ПустаяСтрока(ТекстПисьма) Тогда
|
||
ТекстПисьма = ПараметрыНоваяУЗ.Подпись;
|
||
Иначе
|
||
Если СтрЧислоВхождений(ТекстПисьма, ПараметрыПредыдущаяУЗ.Подпись) > 0 Тогда
|
||
ТекстПисьма = СтрЗаменить(ТекстПисьма, ПараметрыПредыдущаяУЗ.Подпись, ПараметрыНоваяУЗ.Подпись);
|
||
Иначе
|
||
ТекстПисьма = ТекстПисьма + ПараметрыНоваяУЗ.Подпись;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
|
||
|
||
ТекстПисьмо = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
|
||
Если ПустаяСтрока(ТекстПисьмо) Тогда
|
||
|
||
ТекстПисьмаФорматированныйДокумент = ПараметрыНоваяУЗ.Подпись;
|
||
|
||
Иначе
|
||
|
||
Если ТипЗнч(ПараметрыПредыдущаяУЗ.Подпись) = Тип("ФорматированныйДокумент") Тогда
|
||
|
||
ТекстПредыдущаяУЗ = ПараметрыПредыдущаяУЗ.Подпись.ПолучитьТекст();
|
||
|
||
Если СтрЧислоВхождений(ТекстПисьмо, ТекстПредыдущаяУЗ) > 0 Тогда
|
||
|
||
УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент,ПараметрыПредыдущаяУЗ.Подпись);
|
||
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(ПараметрыНоваяУЗ.Подпись) = Тип("ФорматированныйДокумент") Тогда
|
||
ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыНоваяУЗ.Подпись);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПриИзмененииФорматаПодписиНаHTMLНаСервере(УчетнаяЗапись)
|
||
|
||
ПараметрыУЗ =
|
||
Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
|
||
УчетнаяЗапись,
|
||
ФорматСообщения,
|
||
?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь));
|
||
|
||
Если ПараметрыУЗ.Подпись <> Неопределено Тогда
|
||
|
||
ТекстПодпись = ПараметрыУЗ.Подпись.ПолучитьТекст();
|
||
|
||
Если СтрЧислоВхождений(ТекстПисьма, ТекстПодпись) > 0 Тогда
|
||
ТекстПисьма = СтрЗаменить(ТекстПисьма, ТекстПодпись, "");
|
||
КонецЕсли;
|
||
|
||
ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма);
|
||
|
||
ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыУЗ.Подпись);
|
||
|
||
Иначе
|
||
|
||
ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма);
|
||
|
||
КонецЕсли;
|
||
|
||
Объект.Текст = "";
|
||
Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML");
|
||
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент;
|
||
Элементы.ФорматСообщения.Заголовок = ФорматСообщения;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент, СтараяПодпись)
|
||
|
||
ТекстHTMLФорматированныйДокумент = "";
|
||
ВложенияФорматированныйДокумент = Новый Структура;
|
||
|
||
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекстHTMLФорматированныйДокумент, ВложенияФорматированныйДокумент);
|
||
|
||
СтараяПодписьДобавлением = Новый ФорматированныйДокумент;
|
||
ДобавитьФорматированныйДокументКФорматированномуДокументу(СтараяПодписьДобавлением, СтараяПодпись);
|
||
ТекстHTMLСтараяПодпись = "";
|
||
ВложенияСтараяПодпись = Новый Структура;
|
||
|
||
СтараяПодписьДобавлением.ПолучитьHTML(ТекстHTMLСтараяПодпись, ВложенияСтараяПодпись);
|
||
|
||
ТекстHTMLСтараяПодпись = Взаимодействия.СодержимоеТегаHTML(ТекстHTMLСтараяПодпись,"body");
|
||
ТекстHTMLФорматированныйДокумент = СтрЗаменить(ТекстHTMLФорматированныйДокумент, ТекстHTMLСтараяПодпись, "");
|
||
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТекстHTMLФорматированныйДокумент, ВложенияФорматированныйДокумент);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьФорматированныйДокументКФорматированномуДокументу(ПриемникДокумент, ДобавляемыйДокумент)
|
||
|
||
Для Инд = 0 По ДобавляемыйДокумент.Элементы.Количество() -1 Цикл
|
||
ДобавляемыйЭлемент = ДобавляемыйДокумент.Элементы[Инд];
|
||
Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ПараграфФорматированногоДокумента") Тогда
|
||
НовыйПараграф = ПриемникДокумент.Элементы.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НовыйПараграф, ДобавляемыйЭлемент, "ТипПараграфа, ГоризонтальноеПоложение, МеждустрочныйИнтервал,Отступ");
|
||
ДобавитьФорматированныйДокументКФорматированномуДокументу(НовыйПараграф, ДобавляемыйЭлемент);
|
||
Иначе
|
||
Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ТекстФорматированногоДокумента")
|
||
И Не ДобавляемыйЭлемент.Текст = "" Тогда
|
||
НовыйЭлемент = ПриемникДокумент.Элементы.Добавить(ДобавляемыйЭлемент.Текст, Тип("ТекстФорматированногоДокумента"));
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель");
|
||
ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("КартинкаФорматированногоДокумента") Тогда
|
||
НовыйЭлемент = ПриемникДокумент.Элементы.Добавить(ДобавляемыйЭлемент.Картинка, Тип("КартинкаФорматированногоДокумента"));
|
||
ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель");
|
||
ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
|
||
Если ТипЗнч(ДобавляемыйДокумент) = Тип("ПараграфФорматированногоДокумента")
|
||
И (ДобавляемыйДокумент.ТипПараграфа = ТипПараграфа.МаркированныйСписок
|
||
Или ДобавляемыйДокумент.ТипПараграфа = ТипПараграфа.НумерованныйСписок) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НовыйЭлемент = ПриемникДокумент.Элементы.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента"));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Процедура ОчиститьДублиАдресатов(ТаблицаПолучателей)
|
||
|
||
СоответствиеАдресовСтрокКУдалению = Новый Соответствие;
|
||
|
||
Для Каждого СтрокаПолучатель Из ТаблицаПолучателей Цикл
|
||
Если СоответствиеАдресовСтрокКУдалению.Получить(СтрокаПолучатель.Адрес) <> Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НайденныеСтроки = ТаблицаПолучателей.НайтиСтроки(Новый Структура("Адрес", СтрокаПолучатель.Адрес));
|
||
Если НайденныеСтроки.Количество() > 1 Тогда
|
||
МассивКУдалению = Новый Массив;
|
||
Для Инд = 0 По НайденныеСтроки.Количество() - 1 Цикл
|
||
Если Инд = 0 Тогда
|
||
Если НЕ ЗначениеЗаполнено(НайденныеСтроки[Инд].Контакт) Тогда
|
||
МассивКУдалению.Добавить(НайденныеСтроки[Инд]);
|
||
КонецЕсли;
|
||
Иначе
|
||
Если МассивКУдалению.Количество() = 0 ИЛИ (НЕ ЗначениеЗаполнено(НайденныеСтроки[Инд].Контакт)) Тогда
|
||
МассивКУдалению.Добавить(НайденныеСтроки[Инд]);
|
||
ИначеЕсли ЗначениеЗаполнено(НайденныеСтроки[Инд].Контакт) И НЕ (Инд = МассивКУдалению.Количество()) Тогда
|
||
МассивКУдалению.Добавить(НайденныеСтроки[Инд]);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если НайденныеСтроки.Количество() = МассивКУдалению.Количество() Тогда
|
||
МассивКУдалению.Удалить(0);
|
||
КонецЕсли;
|
||
|
||
СоответствиеАдресовСтрокКУдалению.Вставить(СтрокаПолучатель.Адрес,МассивКУдалению);
|
||
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Для Каждого СтрокаСоответствия Из СоответствиеАдресовСтрокКУдалению Цикл
|
||
Для Каждого СтрокаКУдалению Из СтрокаСоответствия.Значение Цикл
|
||
ТаблицаПолучателей.Удалить(СтрокаКУдалению);
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПараметрыПисьмаВложения()
|
||
|
||
ПараметрыВложения = ВзаимодействияКлиент.ПустаяСтруктураПараметровПисьмаВложения();
|
||
ПараметрыВложения.ДатаПисьмаОснования = ?(ЗначениеЗаполнено(Объект.ДатаОтправления), Объект.ДатаОтправления , Объект.Дата);
|
||
ПараметрыВложения.ПисьмоОснование = Объект.Ссылка;
|
||
ПараметрыВложения.ТемаПисьмаОснования = Объект.Тема;
|
||
|
||
Возврат ПараметрыВложения;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеПомещенияФайла(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат <> Неопределено Тогда
|
||
Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда
|
||
ВызватьИсключение Результат.ОписаниеОшибки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеВопросаПриЗакрытии(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если Результат = КодВозвратаДиалога.Да Тогда
|
||
ЗаписаноУспешно = Записать();
|
||
Если ЗаписаноУспешно Тогда
|
||
Закрыть();
|
||
КонецЕсли;
|
||
ИначеЕсли Результат = КодВозвратаДиалога.Нет
|
||
И ДополнительныеПараметры.МассивРедактируемыхФайлов.Количество() > 0 Тогда
|
||
|
||
РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайлы(ДополнительныеПараметры.МассивРедактируемыхФайлов);
|
||
Модифицированность = Ложь;
|
||
Закрыть();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьТабличныеЧастиПоСпискуПолучателей()
|
||
|
||
Объект.ПолучателиПисьма.Очистить();
|
||
Объект.ПолучателиКопий.Очистить();
|
||
Объект.ПолучателиСкрытыхКопий.Очистить();
|
||
Объект.ПолучателиОтвета.Очистить();
|
||
Для каждого Получатель Из СписокПолучателей Цикл
|
||
|
||
ПочтовыеАдреса = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(Получатель.Представление);
|
||
|
||
Для каждого ПочтовыйАдрес Из ПочтовыеАдреса Цикл
|
||
|
||
Если Получатель.ВариантОтправки = НСтр("ru = 'Обратный адрес:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиОтвета.Добавить();
|
||
ИначеЕсли Получатель.ВариантОтправки = НСтр("ru = 'Копия:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиКопий.Добавить();
|
||
ИначеЕсли Получатель.ВариантОтправки = НСтр("ru = 'Скрытая копия:'") Тогда
|
||
НоваяСтрока = Объект.ПолучателиСкрытыхКопий.Добавить();
|
||
Иначе
|
||
НоваяСтрока = Объект.ПолучателиПисьма.Добавить();
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока.Адрес = ПочтовыйАдрес.Адрес;
|
||
НоваяСтрока.Представление = ПочтовыйАдрес.Псевдоним;
|
||
НоваяСтрока.Контакт = Получатель.Контакт;
|
||
КонецЦикла;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// СтандартныеПодсистемы.Свойства
|
||
|
||
&НаСервере
|
||
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
|
||
МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
|
||
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
|
||
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Конец СтандартныеПодсистемы.Свойства
|
||
|
||
// СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьПоШаблонуПослеВыбораШаблона(Результат, ДополнительныеПараметры) Экспорт
|
||
Если Результат <> Неопределено И ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Шаблон") Тогда
|
||
ЗаполнитьШаблонПослеВыбора(Результат);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ЗаполнитьШаблонПослеВыбора(ПараметрыПисьма)
|
||
|
||
ОбработатьПереданныеПараметры(ПараметрыПисьма);
|
||
СформироватьСпискиПолучателейПисьма();
|
||
ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ОпределитьВозможностьЗаполненияПисьмаПоШаблону()
|
||
|
||
Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда
|
||
МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный");
|
||
Элементы.ФормаСформироватьПоШаблону.Видимость = МодульШаблоныСообщенийСлужебный.ИспользуютсяШаблоныСообщений();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Конец СтандартныеПодсистемы.ШаблоныСообщений
|
||
|
||
&НаСервере
|
||
Процедура УстановитьВидимостьПредупрежденияБезопасности()
|
||
ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах = Взаимодействия.ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах();
|
||
Элементы.ПредупреждениеБезопасности.Видимость = Не ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах
|
||
И ЕстьНебезопасноеСодержимое И Не ВключитьНебезопасноеСодержимое;
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПрочитатьТекстВходящегоПисьмаHTML()
|
||
ТекстВходящегоПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.ВзаимодействиеОснование,
|
||
Не ВключитьНебезопасноеСодержимое, ЕстьНебезопасноеСодержимое);
|
||
УстановитьВидимостьПредупрежденияБезопасности();
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
// СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ВыполнитьКоманду(Команда)
|
||
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
|
||
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
|
||
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
|
||
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
|
||
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ОбновитьКоманды()
|
||
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
|
||
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
|
||
КонецПроцедуры
|
||
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
|
||
|
||
&НаКлиенте
|
||
Процедура ПроверитьСостояниеОтправкиПисем()
|
||
|
||
ПроверитьСостояниеОтправкиПисемНаСервере();
|
||
Интервал = ?(Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость, 60, 600);
|
||
ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", Интервал, Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура ПроверитьСостояниеОтправкиПисемНаСервере()
|
||
|
||
Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость = Взаимодействия.ОтправкаПисемПриостановлена();
|
||
Элементы.ПредупреждениеОНеотправленныхПисьмахНадпись.Заголовок = Взаимодействия.ТекстПредупрежденияОПриостановкеОтправкиПисем();
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|