Использование встроенного почтового клиента |
В рамках развития типовых конфигураций в сторону CRM-систем в конфигурациях появился почтовый клиент. Возникает желание использовать его для рассылки печатных форм документов. Штатные средства такого не позволяют. (Оригинал:http://infostart.ru/blogs/161/) В рамках развития типовых конфигураций в сторону CRM-систем в конфигурациях появился почтовый клиент. Возникает желание использовать его для рассылки печатных форм документов. Штатные средства такого не позволяют.Попробуем устранить рассмотренное упущение. Код можно добавить в саму конфигурацию или использовать технологию внешних печатных форм http://infostart.ru/articles/157/?ref=4246 . Для начала нам нужно получить табличный документ с подготовленной печатной формой. К сожалению, воспользоваться методом Печать() документа не получится. Если в конфигурации разрешены изменения, то можно добавить ключевое слово Экспорт функциям, которые непосредственно формируют печатные формы. Если такой возможности нет, придется копировать алгоритм формирования печатной формы в свою обработку. После того, как получен табличный документ, необходимо создать новое письмо и добавить документ в качестве вложения. Самый простой способ – это воспользоваться функцией НаписатьПисьмо() из общего модуля. Например: ИмяФайла = "Счет #" + Шапка.Номер + " от " + Формат(Шапка.Дата, "ДЛФ=D"); ИмяФайлаПолное = "" + КаталогВременныхФайлов() + ИмяФайла + ".mxl"; ТабДокумент.Записать(ИмяФайлаПолное); СтруктураФайла = Новый Структура; СтруктураФайла.Вставить("ИмяФайла", ИмяФайла + ".mxl"); СтруктураФайла.Вставить("Наименование", ИмяФайла); СтруктураФайла.Вставить("Хранилище", Новый ДвоичныеДанные(ИмяФайлаПолное)); СписокФайловВложений = Новый СписокЗначений; СписокФайловВложений.Добавить(СтруктураФайла); Кому = Новый СписокЗначений; Кому.Добавить(ОпределитьАдресПолучателя(Шапка.Получатель), Шапка.Получатель.НаименованиеПолное); СтруктураНовогоПисьма = Новый Структура; СтруктураНовогоПисьма.Вставить("СписокФайловВложений", СписокФайловВложений); СтруктураНовогоПисьма.Вставить("Тема", ИмяФайла); СтруктураНовогоПисьма.Вставить("Кому", Кому); СтруктураВозврата = НаписатьПисьмо(глТекущийПользователь, СтруктураНовогоПисьма,,,,,,, Ложь); СтруктураВозврата.Форма.Открыть(); Возврат Неопределено; Недостатком такого способа является то, что пользователь может проконтролировать печатную форму только после того, как письмо создано и записано. Это связано с ограничениями функция НаписатьПисьмо(). Второй способ. В обработке добавить форму, на которой разместить ТабличныйДокумент и кнопку "Отправить". В этом случае, пользователь видит печатную форму и только потом принимает решение об отправке ее в письме. В функции формирования печатной формы пишем: Форма = ЭтотОбъект.ПолучитьФорму(); ТабДокумент = Форма.ЭлементыФормы.ПолеТабличногоДокумента; // Здесь алгоритм формирования печатной формы Форма.Открыть(); Возврат Неопределено; В модуле формы пишем: Процедура КнопкаОтправитьНажатие(Кнопка) ИмяФайла = "Счет #" + СсылкаНаОбъект.Номер + " от " + Формат(СсылкаНаОбъект.Дата, "ДЛФ=D"); ИмяФайлаПолное = "" + КаталогВременныхФайлов() + ИмяФайла + ".mxl"; ЭлементыФормы.ПолеТабличногоДокумента.Записать(ИмяФайлаПолное); СтруктураФайла = Новый Структура; СтруктураФайла.Вставить("ИмяФайла", ИмяФайла + ".mxl"); СтруктураФайла.Вставить("Наименование", ИмяФайла); СтруктураФайла.Вставить("Хранилище", Новый ДвоичныеДанные(ИмяФайлаПолное)); СписокФайловВложений = Новый СписокЗначений; СписокФайловВложений.Добавить(СтруктураФайла); Кому = Новый СписокЗначений; Кому.Добавить(ОпределитьАдресПолучателя(СсылкаНаОбъект.Контрагент), СсылкаНаОбъект.Контрагент.НаименованиеПолное); СтруктураНовогоПисьма = Новый Структура; СтруктураНовогоПисьма.Вставить("СписокФайловВложений", СписокФайловВложений); СтруктураНовогоПисьма.Вставить("Тема", ИмяФайла); СтруктураНовогоПисьма.Вставить("Кому", Кому); СтруктураВозврата = НаписатьПисьмо(глТекущийПользователь, СтруктураНовогоПисьма,,,,,,, Ложь); СтруктураВозврата.Форма.Открыть(); УдалитьФайлы(ИмяФайлаПолное); ЭтаФорма.Закрыть(); КонецПроцедуры Третий способ. Без использования дополнительной формы. Как и в первом случае используем функцию НаписатьПисьмо() и обходим ее ограничения. ИмяФайла = "Счет #" + Шапка.Номер + " от " + Формат(Шапка.Дата, "ДЛФ=D"); ИмяФайлаПолное = "" + КаталогВременныхФайлов() + ИмяФайла + ".mxl"; ТабДокумент.Записать(ИмяФайлаПолное); Кому = Новый СписокЗначений; Кому.Добавить(ОпределитьАдресПолучателя(Шапка.Получатель), Шапка.Получатель.НаименованиеПолное); СтруктураНовогоПисьма = Новый Структура; СтруктураНовогоПисьма.Вставить("Тема", ИмяФайла); СтруктураНовогоПисьма.Вставить("Кому", Кому); СтруктураВозврата = НаписатьПисьмо(глТекущийПользователь, СтруктураНовогоПисьма,,,,,,, Истина); ВложенияПисьма = СтруктураВозврата.Форма.ВложенияПисьмаТЗ; НовоеВложение = ВложенияПисьма.Добавить(); НовоеВложение.ИмяФайла = ИмяФайла + ".mxl"; НовоеВложение.Наименование = ИмяФайла; НовоеВложение.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаПолное), Новый СжатиеДанных()); УдалитьФайлы(ИмяФайлаПолное); Возврат Неопределено; В рассмотренном случае пользователь получает готовое письмо, которое еще не записано. Он может посмотреть печатную форму и принять решение об отправке письма. |