Лень, как известно двигатель прогресса, в общем надоело мне грузить картинки в рассылки каждый раз вручную, и задумался я над тем как сделать это все автоматом...
В общем логика состоит в том, что маркетинг высылаем письмо роботу на почту, робот почту анализирует и создает документ рассылки.
Нарвался на трудность в форматируемом документе, это отсутствие возможности отцентровать текст (сделать по центру). Решения в нете не нашел, сделал свое.
ТелоРассылки.ПолучитьHTML(ТекстHTML,Вложения); ТекстHTML = СтрЗаменить(ТекстHTML,"",""center"">"); ТелоРассылки.УстановитьHTML(ТекстHTML,Вложения);
А ниже уже обработка по загрузке с почты прайсов.
Процедура КомандаGetНаСервере() //НЕ забываем проверить как запускает оутглюк!!!! runas /user:rl\usr1cv82 "C:\Program Files\Microsoft Office\Office15\outlook.exe" // RegExp = Новый COMОбъект("VBScript.RegExp"); //СтруктураФайлов = Новый СписокЗначений; RegExp.MultiLine = Истина; // истина — текст многострочный, ложь — одна строка RegExp.Global = Истина; // истина — поиск по всей строке, ложь — до первого совпадения RegExp.IgnoreCase = Истина; // истина — игнорировать регистр строки при поиске RegExp.Pattern = "Дата:.*(\d{4})/(\d{1,2})/(\d{1,2})"; olFolderInbox = 6; Попытка objOutlook = Новый COMОбъект("Outlook.Application"); Исключение objOutlook = НЕопределено; //Сообщить("Не удалось создать объект Outlook.Application. Outlook установлен на компьютер?"); Возврат; КонецПопытки; objNamespace = objOutlook.GetNamespace("MAPI"); objFolderInbox = objNamespace.GetDefaultFolder(olFolderInbox); colMails = objFolderInbox.Items.Restrict("[unread] = true"); Для каждого mail из colMails Цикл попытка Body = mail.HTMLBody; Исключение Body = mail.Body; КонецПопытки; Matches=RegExp.Execute(Body); Если RegExp.Test(Body) тогда Год = Matches.Item(0).SubMatches.Item(0); Если СтрДлина(Год)=2 тогда Год="20"+Год; КонецЕсли; Месяц = Формат(Matches.Item(0).SubMatches.Item(1),"ЧН=0; ЧВН="); День = Формат(Matches.Item(0).SubMatches.Item(2),"ЧН=0; ЧВН="); Path = "\\srv-1c-01.rl.int\Price\"+Год+Месяц+День; for each File in НайтиФайлы(Path,,true) do If не File.Name="Thumbs.db" then УдалитьФайлы(File.FullName); Endif; EndDo; Если НайтиФайлы(Path).Количество()=0 тогда СоздатьКаталог(Path); КонецЕсли; ДокСсылка = ПроверкаДокументаВБазе(Дата(Год,Месяц,День)); Если НЕ ДокСсылка.Пустая() тогда ДокОбъект = ДокСсылка.ПолучитьОбъект(); Иначе ДокОбъект = Документы.РассылкаПрайсЛистов.СоздатьДокумент(); КонецЕсли; ДокОбъект.Дата = Дата(Год,Месяц,День); ДокОбъект.ДатаОтправки = Дата(Год,Месяц,День)+8*60*60; ДОкОбъект.Ответственный = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("d57cf6b5-3dcd-11e1-80e4-00155d040a09")); ДОкОбъект.Автор = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("d57cf6b5-3dcd-11e1-80e4-00155d040a09")); ДокОбъект.Статус = Перечисления.СтатусыРассылкиПрайса.Согласован; ДокОбъект.Комментарий = "Сформирован автоматом "+ Формат(ТекущаяДата(),"ДФ='dd.MM.yyyy HH:mm:ss'"); ДокОбъект.Тема = "Ежедневная рассылка прайс-листа "+Формат(ДокОбъект.Дата,"ДФ='ддд dd/MM/yyyy'"); ТелоРассылки = Новый ФорматированныйДокумент; ТекстHTML = Неопределено; Вложения = Неопределено; ТелоРассылки.ПолучитьHTML(ТекстHTML,Вложения); ТекстHTML = СтрЗаменить(ТекстHTML,"","Работает это все на Windows 2008R2 x64 c Microsoft Office x64, outlook x64. и работает нормально, главное не забыть отключить безопасность в outlook."center"">"); ТелоРассылки.УстановитьHTML(ТекстHTML,Вложения); ЕстьЧтоДобавлять = Ложь; For each Att in mail.Attachments do If Lower(Left(Att.FileName,5))="image" then Continue; EndIf; If Find("jpg,png,bmp,gif",Right(Att.FileName,3))> 0 then ЕстьЧтоДобавлять = Истина; Att.SaveAsFile(Path+"\"+Att.FileName); ТелоРассылки.Добавить(,ТипЭлементаФорматированногоДокумента.ПереводСтроки); ТелоРассылки.Добавить(Новый Картинка(Path+"\"+Att.FileName), ТипЭлементаФорматированногоДокумента.Картинка); endif; EndDo; ДокОбъект.Тело = Новый ХранилищеЗначения(ТелоРассылки,Новый СжатиеДанных(9)); ДокОбъект.Записать(РежимЗаписиДокумента.Проведение); КонецЕсли; КонецЦикла; //закрываем соединение Попытка objNamespace.Logoff(); objOutlook.Quit(); Исключение КонецПопытки; objNamespace = Неопределено; objFolderInbox = неопределено; objOutlook = НЕопределено; colMails = Неопределено; КонецПроцедуры Функция ПроверкаДокументаВБазе(ДатаДок) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | РассылкаПрайсЛистов.Ссылка |ИЗ | Документ.РассылкаПрайсЛистов КАК РассылкаПрайсЛистов |ГДЕ | НЕ РассылкаПрайсЛистов.ПометкаУдаления | И НАЧАЛОПЕРИОДА(РассылкаПрайсЛистов.Дата, ДЕНЬ) = &Дата"; Запрос.УстановитьПараметр("Дата", ДатаДок); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Возврат ВыборкаДетальныеЗаписи.Ссылка; КонецЕсли; Возврат Документы.РассылкаПрайсЛистов.ПустаяСсылка(); КонецФункции
No comments:
Post a Comment