|
Почтовый менеджер, заполнение текста письма по шаблону | ☑ | ||
---|---|---|---|---|
0
nlv-lara
28.08.15
✎
10:45
|
Приветствую.
Используем 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(Объект.Текст, Истина); // КонецЕсли; // // Если НЕ ПустаяСтрока(ТекстПодписи) Тогда // ТестХТМЛ = СтрЗаменить(ТекстПодписи, "<body>", "<body>" + ТестХТМЛ + "<BR>"); // КонецЕсли; // //КонецЕсли; // НомерКонечнойПозиции = Найти(ТекстШаблона,"</body>")-1; НомерНачальнойПозиции = СтрДлина(ТекстШаблона)-Найти(ТекстШаблона,"</body>")+1; ЛевСтр = Лев(ТекстШаблона,НомерКонечнойПозиции); ПравСтр = Прав(ТекстШаблона,НомерНачальнойПозиции); НачальнаяПозиция = Найти(ТекстПодписи,"<body>")+СтрДлина("<body>"); ЧислоСимволов = СтрДлина(ТекстПодписи)-НачальнаяПозиция-СтрДлина(ПравСтр); ТекстПодписи = Сред(ТекстПодписи,НачальнаяПозиция,ЧислоСимволов); ТекстШаблона = ЛевСтр + "<BR><BR>" +ТекстПодписи + ПравСтр; ФорматированныйДокументТекст.УстановитьHTML(ТекстШаблона, СтруктураВложенийШаблона); Элементы.Вложения.ОтборСтрок = Новый ФиксированнаяСтруктура(«CRM_ИдентификаторПочтовогоВложения»,"*"); КонецПроцедуры |
|||
1
nlv-lara
28.08.15
✎
10:49
|
ТекстШаблона = Шаблон.Текст;// думаю рыть надо здесь, чтобы сохранялся исходный текст письма!!!
Попробовала так: ТекстДок = СокрЛП(ФорматированныйДокументТекст.ПолучитьТекст()); ТекстШаблона = ТекстДок + Шаблон.Текст; // ТекстШаблона = Шаблон.Текст + ТекстДок; ТАК НЕ РАБОТАЕТ! История письма вставляется вначале всего текста и очень некрасиво, без разделения строк. |
|||
2
ДенисЧ
28.08.15
✎
10:56
|
"ТАК НЕ РАБОТАЕТ!"
Это почему? |
|||
3
nlv-lara
28.08.15
✎
10:58
|
(2) Удаляет историю и все тут, кто б знал почему(
|
|||
4
nlv-lara
28.08.15
✎
13:35
|
Параметр "Шаблон" задается так:
Шаблон = ОткрытьФормуМодально("Справочник.CRM_ШаблоныРассылки.Форма.ФормаВыбора", , ЭтаФорма); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |