====== Отправка печатной форми на почту (eMail) с вложением и регистрацией исходящего письма в док.ПисьмаИсходящие====== ===== Готовій метод ===== РаботаСоСделками.ОтправитьСчетНаПочту(ЭтотОбъект.Ссылка); ===== Сам код (с вложением)===== Процедура ОтправитьСчетНаПочту(Сделка) Экспорт МассивПечати = Новый Массив; //1 ищем по документу-основанию Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиента.Ссылка |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента |ГДЕ | ЗаказКлиента.Сделка = &ДокументОснование | И ЗаказКлиента.Проведен | И ЗаказКлиента.ЭтоСчет"; Запрос.УстановитьПараметр("ДокументОснование", Сделка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл МассивПечати.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; //2. Ищем по структуре подчиненности (т.к. в ЗаказКлиента.Сделка может біть упрзаказ клиента а не заказ с сайта Если МассивПечати.Количество()=0 Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СвязанныеДокументы.Ссылка |ИЗ | КритерийОтбора.СвязанныеДокументы(&ДокументОснование) КАК СвязанныеДокументы |ГДЕ | СвязанныеДокументы.Ссылка.Проведен | И СвязанныеДокументы.Ссылка.ЭтоСчет"; Запрос.УстановитьПараметр("ДокументОснование", Сделка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл МассивПечати.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; КонецЕсли; //3. Отправка на Емаил Если МассивПечати.Количество()>0 Тогда СтруктураТипов = Новый Соответствие; СтруктураТипов.Вставить("Документ.ЗаказКлиента", МассивПечати); ПараметрыПечати = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); ОбъектыПечати = Новый СписокЗначений; ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); ТабДокумент = Обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода); ИмяФайла = КаталогВременныхФайлов() + "bill.pdf"; ТабДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF); Данные = Новый ДвоичныеДанные(ИмяФайла); Результат = ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Учетная запись для отправки письма"), Сделка._ЕмайлДляСчета, "", РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Тема письма со счетом"), Данные, МассивПечати[0]); //Результат = ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF_олд(РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Учетная запись для отправки письма"), //Сделка._ЕмайлДляСчета, //"", //РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Тема письма со счетом"), //Данные); Иначе ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,Сделка.Метаданные(),Сделка,"Ошибка отправки письма с авто-счетом по заказу "+Сделка+" т.к. не обнаружено созданных счетов"); КонецЕсли; КонецПроцедуры Функция ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьПочтыОтправителя, ПочтаПолучателя, ТекстПисьма, ТемаПисьма, АдресТабличногоДокументаВоВременномХранилище, ДокументОснование=Неопределено) УспешноОтправлено = Ложь; Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда Возврат УспешноОтправлено; КонецЕсли; СписокПолучателей = Новый Массив; СписокПолучателей.Добавить(ПочтаПолучателя); ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(АдресТабличногоДокументаВоВременномХранилище, Новый УникальныйИдентификатор); //Вложения = Новый Массив; //ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Наименование вложения в письме") + "Рахунок.pdf", ВременноеХранилищеФайла); //Вложения.Добавить(ОписаниеВложения); НовоеПисьмоИсходящее = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент(); НовоеПисьмоИсходящее.Автор = ПараметрыСеанса.ТекущийПользователь; НовоеПисьмоИсходящее.УчетнаяЗапись = УчетнаяЗаписьПочтыОтправителя; НовоеПисьмоИсходящее.Дата = ТекущаяДата(); НовоеПисьмоИсходящее.ДатаКогдаОтправить = НовоеПисьмоИсходящее.Дата+1; НовоеПисьмоИсходящее.Кодировка = "UTF-8"; НовоеПисьмоИсходящее.Важность = Перечисления.ВариантыВажностиВзаимодействия.Обычная; НовоеПисьмоИсходящее.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; НовоеПисьмоИсходящее.ЕстьВложения = Истина; НовоеПисьмоИсходящее.Тема = ТемаПисьма; НовоеПисьмоИсходящее.Текст = ТекстПисьма; НовоеПисьмоИсходящее.Основание = ДокументОснование; НовоеПисьмоИсходящее.Комментарий = "Создано автоматически при авто-создании счетов: "+ТекущаяДата(); Для Каждого СтрокаПолучаетелей из СписокПолучателей Цикл Если НЕ ПустаяСтрока(СтрокаПолучаетелей) Тогда НоваяЗаписьОПолучателе = НовоеПисьмоИсходящее.ПолучателиПисьма.Добавить(); НоваяЗаписьОПолучателе.Адрес = СокрЛП(СтрокаПолучаетелей); НовоеПисьмоИсходящее.СписокПолучателейПисьма = НовоеПисьмоИсходящее.СписокПолучателейПисьма+СокрЛП(СтрокаПолучаетелей)+";"; КонецЕсли; КонецЦикла; Попытка НовоеПисьмоИсходящее.Записать(РежимЗаписиДокумента.Запись); УспешноЗаписано = Истина; Исключение ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки письма с авто-счетом "+ПочтаПолучателя+", "+ОписаниеОшибки()); УспешноЗаписано = Ложь; КонецПопытки; Если УспешноЗаписано Тогда //Добавляем вложение с ВременногоХранилища. Вложение добавляется только к ссылке УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(НовоеПисьмоИсходящее.Ссылка,ВременноеХранилищеФайла,РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Наименование вложения в письме") + "Рахунок.pdf",12); Попытка ПисьмоОбъект = НовоеПисьмоИсходящее.Ссылка.ПолучитьОбъект(); ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект); ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); ПисьмоОбъект.Записать(РежимЗаписиДокумента.Проведение); УспешноОтправлено = Не ПустаяСтрока(ИдентификаторПисьма); Исключение ЗаписьЖурналаРегистрации("Отправка письма счетов", УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки письма с авто-счетом "+ПочтаПолучателя+", "+ОписаниеОшибки()); УспешноОтправлено = Ложь; КонецПопытки; КонецЕсли; Возврат УспешноОтправлено; КонецФункции