0

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

#1С 8.2

Используем 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_ИдентификаторПочтовогоВложения","*");

КонецПроцедуры

 713 4
ДобавленоЛариса, Информ-Групп462 дня назад
Последняя активность457 дней назад


Добавить комментарий

Кирилл написал:462 дня назад0

Добрый день!

Судя по коду, добавление и проверка на текст происходит вот тут:

//Если ПустаяСтрока(Объект.Текст) И ПустаяСтрока(Объект.Тема) И НЕ ПустаяСтрока(ТекстПодписи) Тогда
//
//  Если ЗначениеЗаполнено(Объект.Текст) Тогда
//      ТестХТМЛ = CRM_ОбщегоНазначенияКлиентСервер.ПреобразоватьТекстВHTML(Объект.Текст);
//  КонецЕсли;
//
//Иначе

Вопрос - почему оно закомменчено?

Да и так достаточно сложно понять, конечно. Лучше всего пройти в отладке

Ответить

Лариса, Информ-Групп написал:459 дней назад0

Этот участок кода закомменчен разрабами в стандартной поставке.

Ответить

Кирилл написал:459 дней назад0

Очень сильно похоже что они это ошибочно сделали :(

Ответить

Лариса, Информ-Групп написал:457 дней назад0

Если его раскомментить, проблема не исчезает. История также чистится.

Ответить

Добавить комментарий

Задать вопрос!

Наш канал на Youtube

Изучаете 1С? Скачайте 200 видео по 1С бесплатно:

Похожее

Ошибка при отправке интернет-писем

Конфигурация пустая. Требуется прописать модуль получения и отправки писем. Все ...

Проблема с выводом отчёта в 2 колонки

Добрый день! Необходимо выводить номенклатуру в отчёте в две колонки, столкнулас...

Как получить кпс счета в 1С 8.3?

Делаю ВПФ для РКО мне нужно получить кпс кредита по счету 201.4(касса) , реквизи...

Заполнение табличной части на тонком клиенте

Добрый день. Мне нужно в табличной части выбрать документ определенный, а потом ...

Если нет разницы!!Зачем тогда Условие В ВТ? Или все таки разница ЕСТЬ!!!!!

Привет. Пожалуйста подскажите! И ТАК ВОПРОС: В параметрах виртуальной таблицы ...

Новое

1С: Бухгалтерию 8.2 дёшево

Программа 1С: Бухгалетрия 8.2 По поводу приобретения программы обращайтесь на по...

Курсы

Добрый день! Осталось 2 ключа для активации курса “Профессиональный учёт в 1С:З...

"Наряд на хозтранспорт и спецтехнику" Путевые листы

Здравствуйте, Форумчане, прошу вашего совета. В организации такая ситуация: ест...

Создание обработки

Помогите с задачей. Суть такова - нужно создать внешнею обработку которая будет ...

Заполнение раздела 3 Расчет налоговой базы Книги доходов и расходов

Добрый день! Меня зовут Наталья. Про заполнение Кудир в КА очень все хорошо пишу...