Modber Сообщество
профессионалов по 1С

Почтовый менеджер, заполнение текста письма по шаблону

1C 8.2; доработка конфы CRM 2.0
  
Сообщений: 1

0
Приветствую. Используем 1С CRM 2.0. В почтовом менеджере при создании (ответе и пересылке) письма, текст и вложения можно заполнить по шаблону. Проблема: при заполнении из шаблона очищается история переписки и вложения исходного письма (при ответе и пересылке). Проблему с очищением вложений решили. Но с текстом что-то не выходит. Кто-то может помочь? &НаСервере Процедура ЗаполнитьПоШаблону() ТекстШаблона = ""; СтруктураВложенийШаблона = Новый Структура; // вложения HTML текста - картинки табВложения = ПолучитьФайлыШаблонаРассылки(Шаблон); // я так понимаю, эта часть кода удаляет все вложения от письма исходника!!! //мВложений = Новый Массив; //Для каждого СтрокаВложения Из Вложения Цикл // ИДВложения = СтрокаВложения.CRM_ИдентификаторПочтовогоВложения; // Если ЗначениеЗаполнено(ИДВложения) И Лев(ИДВложения,СтрДлина("image")) = "image" // И ТипЗнч(СтрокаВложения.Ссылка) = Тип("СправочникСсылка.CRM_ШаблоныРассылкиПрисоединенныеФайлы") // Тогда // мВложений.Добавить(СтрокаВложения.ПолучитьИдентификатор()); // КонецЕсли; //КонецЦикла; // //Для каждого иВложения Из мВложений Цикл // Вложения.Удалить(иВложения); //КонецЦикла; Если табВложения.Количество() > 0 Тогда Для Каждого Стр Из табВложения Цикл ДвоичныеДанныеВложения = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Стр.Ссылка,Ложь); Если ДвоичныеДанныеВложения <> Неопределено Тогда СтруктураВложенийШаблона.Вставить(Стр.CRM_ИдентификаторПочтовогоВложения+"_1", Новый Картинка(ДвоичныеДанныеВложения)); КонецЕсли; КонецЦикла; Иначе СтруктураВложенийШаблона.Вставить("Пусто"); КонецЕсли; // вложения из шаблона - присоединенные файлы табВложения = ПолучитьФайлыШаблонаРассылки(Шаблон, Ложь); Если табВложения.Количество() > 0 Тогда Для Каждого Стр Из табВложения Цикл ДвоичныеДанныеВложения = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Стр.Ссылка, Ложь); Если ДвоичныеДанныеВложения <> Неопределено Тогда АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеВложения, УникальныйИдентификатор); новСтр = Вложения.Добавить(); новСтр.Расположение = 4; новСтр.ИмяФайла = Стр.ИмяФайла; новСтр.ИмяФайлаНаКомпьютере = АдресВХранилище; новСтр.ИндексКартинки = Стр.ИндексКартинки; новСтр.CRM_ИдентификаторПочтовогоВложения = "*"; КонецЕсли; КонецЦикла; КонецЕсли; ТекстШаблона = Шаблон.Текст; // заполним автотекст СтруктураЗаполненияАвтотекста = Новый Структура; СтруктураЗаполненияАвтотекста.Вставить("Партнер", Справочники.Партнеры.ПустаяСсылка()); СтруктураЗаполненияАвтотекста.Вставить("КонтактноеЛицо", Справочники.КонтактныеЛицаПартнеров.ПустаяСсылка()); Если ПолучателиПисьма.Количество() > 0 Тогда Клиент = ПолучателиПисьма[0].Контакт; Если ЗначениеЗаполнено(Клиент) Тогда Если ТипЗнч(Клиент) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда СтруктураЗаполненияАвтотекста.КонтактноеЛицо = Клиент; ИначеЕсли ТипЗнч(Клиент) = Тип("СправочникСсылка.Партнеры") Тогда СтруктураЗаполненияАвтотекста.Партнер = Клиент; ИначеЕсли ТипЗнч(Клиент) = Тип("СправочникСсылка.Пользователи") Тогда СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(Клиент.Наименование)); ИначеЕсли ТипЗнч(Клиент) = Тип("Строка") Тогда Если ЗначениеЗаполнено(СокрЛП(ПолучателиПисьма[0].Представление)) Тогда СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(ПолучателиПисьма[0].Представление)); Иначе СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(Клиент)); КонецЕсли; Иначе Попытка СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(Клиент.Наименование)); Исключение КонецПопытки; КонецЕсли; Иначе Если ЗначениеЗаполнено(СокрЛП(ПолучателиПисьма[0].Представление)) Тогда СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(ПолучателиПисьма[0].Представление)); Иначе СтруктураЗаполненияАвтотекста.Партнер = Новый Структура("Наименование", СокрЛП(ПолучателиПисьма[0].Адрес)); КонецЕсли; КонецЕсли; КонецЕсли; ТаблицаАвтотекста = Новый ТаблицаЗначений; ТаблицаАвтотекста.Колонки.Добавить("Тэг"); ТаблицаАвтотекста.Колонки.Добавить("ИмяКоманды"); ТаблицаАвтотекста.Колонки.Добавить("ЗаголовокКоманды"); ТаблицаАвтотекста.Колонки.Добавить("Действие"); CRM_АвтотекстПереопределяемый.СформироватьСписокАвтотекста(ТаблицаАвтотекста, Перечисления.CRM_НазначенияАвтотекста.АвтотекстЭлектронноеПисьмо); Для Каждого СтрокаАвтотекста ИЗ ТаблицаАвтотекста Цикл Если Найти(ТекстШаблона, СтрокаАвтотекста.Тэг) > 0 Тогда ЗначениеТэга = CRM_АвтотекстПереопределяемый.ПолучитьЗначениеТэга(СтрокаАвтотекста, СтруктураЗаполненияАвтотекста); ТекстШаблона = СтрЗаменить(ТекстШаблона, СтрокаАвтотекста.Тэг, ЗначениеТэга); КонецЕсли; КонецЦикла; Для Каждого КлючИЗначение ИЗ СтруктураВложенийШаблона Цикл ИД_Вложения = СтрЗаменить(КлючИЗначение.Ключ, "_1", ""); ТекстШаблона = СтрЗаменить(ТекстШаблона, ИД_Вложения, КлючИЗначение.Ключ); КонецЦикла; ФорматированныйДокументТекст.УстановитьHTML(ТекстШаблона, СтруктураВложенийШаблона); Элементы.Вложения.ОтборСтрок = Новый ФиксированнаяСтруктура("CRM_ИдентификаторПочтовогоВложения","*"); Объект.Текст = ФорматированныйДокументТекст.ПолучитьТекст(); ТекстПодписи = ""; НаборРегистра = РегистрыСведений.CRM_ПодписиУчетныхЗаписей.СоздатьНаборЗаписей(); НаборРегистра.Отбор.Пользователь.Установить(ПараметрыСеанса.ТекущийПользователь); НаборРегистра.Отбор.УчетнаяЗапись.Установить(Объект.УчетнаяЗапись); НаборРегистра.Прочитать(); Если НаборРегистра.Количество() > 0 Тогда // Добавим подписи для пересылки и нового письма Если Лев(Объект.Тема,3) <> "Re:" И Лев(Объект.Тема,3) <> "Fw:" Тогда Если ЗначениеЗаполнено(НаборРегистра[0].ПодписьИсходящегоПисьма) Тогда табВложения = УправлениеЭлектроннойПочтой.ПолучитьФайлыПодписиЭлектронногоПисьма(НаборРегистра[0].ПодписьИсходящегоПисьма); Если табВложения.Количество() > 0 Тогда Для Каждого Стр Из табВложения Цикл ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Стр.Ссылка,Ложь); Если ДвоичныеДанные <> Неопределено Тогда Если Не Стр.CRM_ИдентификаторПочтовогоВложения = "" Тогда СтруктураВложенийШаблона.Вставить(Стр.CRM_ИдентификаторПочтовогоВложения, Новый Картинка(ДвоичныеДанные)); Иначе новСтр = Вложения.Добавить(); новСтр.Ссылка = Стр.Ссылка; новСтр.ИмяФайла = Стр.ИмяФайла; новСтр.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор); новСтр.ИндексКартинки = Стр.ИндексКартинки; новСтр.Размер = Стр.Размер; новСтр.Расположение = 4; новСтр.CRM_ИдентификаторПочтовогоВложения = Стр.CRM_ИдентификаторПочтовогоВложения; КонецЕсли; КонецЕсли; КонецЦикла; Иначе СтруктураВложенийШаблона.Вставить("Пусто"); КонецЕсли; ТекстПодписи = НаборРегистра[0].ПодписьИсходящегоПисьма.Текст; КонецЕсли; Иначе Если ЗначениеЗаполнено(НаборРегистра[0].ПодписьПересылаемогоПисьма) Тогда табВложения = УправлениеЭлектроннойПочтой.ПолучитьФайлыПодписиЭлектронногоПисьма(НаборРегистра[0].ПодписьПересылаемогоПисьма); Если табВложения.Количество() > 0 Тогда Для Каждого Стр Из табВложения Цикл ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Стр.Ссылка,Ложь); Если ДвоичныеДанные <> Неопределено Тогда Если Не Стр.CRM_ИдентификаторПочтовогоВложения = "" Тогда СтруктураВложенийШаблона.Вставить(Стр.CRM_ИдентификаторПочтовогоВложения, Новый Картинка(ДвоичныеДанные)); Иначе новСтр = Вложения.Добавить(); новСтр.Ссылка = Стр.Ссылка; новСтр.ИмяФайла = Стр.ИмяФайла; новСтр.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор); новСтр.ИндексКартинки = Стр.ИндексКартинки; новСтр.Размер = Стр.Размер; новСтр.Расположение = 4; новСтр.CRM_ИдентификаторПочтовогоВложения = ?(Стр.CRM_ИдентификаторПочтовогоВложения = "", "*", Стр.CRM_ИдентификаторПочтовогоВложения); КонецЕсли; КонецЕсли; КонецЦикла; Иначе СтруктураВложенийШаблона.Вставить("Пусто"); КонецЕсли; ТекстПодписи = НаборРегистра[0].ПодписьПересылаемогоПисьма.Текст; КонецЕсли; КонецЕсли; КонецЕсли; // //Если ПустаяСтрока(Объект.Текст) И ПустаяСтрока(Объект.Тема) И НЕ ПустаяСтрока(ТекстПодписи) Тогда // // Если ЗначениеЗаполнено(Объект.Текст) Тогда // ТестХТМЛ = CRM_ОбщегоНазначенияКлиентСервер.ПреобразоватьТекстВHTML(Объект.Текст); // КонецЕсли; // //Иначе // // // Значит ответ или пересылаемое // Если ЗначениеЗаполнено(Объект.Текст) Тогда // ТестХТМЛ = CRM_ОбщегоНазначенияКлиентСервер.ПреобразоватьТекстВHTML(Объект.Текст, Истина); // КонецЕсли; // // Если НЕ ПустаяСтрока(ТекстПодписи) Тогда // ТестХТМЛ = СтрЗаменить(ТекстПодписи, "", "" + ТестХТМЛ + "
"); // КонецЕсли; // //КонецЕсли; // НомерКонечнойПозиции = Найти(ТекстШаблона,"")-1; НомерНачальнойПозиции = СтрДлина(ТекстШаблона)-Найти(ТекстШаблона,"")+1; ЛевСтр = Лев(ТекстШаблона,НомерКонечнойПозиции); ПравСтр = Прав(ТекстШаблона,НомерНачальнойПозиции); НачальнаяПозиция = Найти(ТекстПодписи,"")+СтрДлина(""); ЧислоСимволов = СтрДлина(ТекстПодписи)-НачальнаяПозиция-СтрДлина(ПравСтр); ТекстПодписи = Сред(ТекстПодписи,НачальнаяПозиция,ЧислоСимволов); ТекстШаблона = ЛевСтр + "

" +ТекстПодписи + ПравСтр; ФорматированныйДокументТекст.УстановитьHTML(ТекстШаблона, СтруктураВложенийШаблона); Элементы.Вложения.ОтборСтрок = Новый ФиксированнаяСтруктура("CRM_ИдентификаторПочтовогоВложения","*"); КонецПроцедуры
В начало страницы 
|
Перейти на форум: