Данный алгоритм позволит Вам сэкономить время для решения задач по отправке писем из конфигурации Управление торговлей для Украины 3.0 с вложением. Получив данную задачу, сам не нашел примеров ее решения, значит, кому-то будет полезно воспользоваться моим опытом и не тратить драгоценное время.
Еще, обратите внимание, что в типовой конфигурации (Управление торговлей для Украины 3.0.10.1) не предусмотрены настройки для работы с почтовыми серверами, требующими SSL соединения, хотя на уровне платформы 1С (8.3.5.1336) уже реализована такая возможность. Поэтому нужно внести небольшое изменение в общем модуле «Электронная почта»:
Функция СформироватьИнтернетПрофиль(знач УчетнаяЗапись,
знач Пароль = Неопределено,
знач ФормироватьSMTPПрофиль = Истина,
знач ФормироватьPOP3Профиль = Истина) Экспорт
Профиль = Новый ИнтернетПочтовыйПрофиль;
//+ 2024.07.13
Профиль.ИспользоватьSSLSMTP=Истина;
Профиль.ИспользоватьSSLPOP3=Истина;
//- 2024.07.13
Профиль.Пользователь = УчетнаяЗапись.Пользователь;
……..
АЛГОРИТМ СОЗДАНИЯ ЭЛЕКТРОННОГО ПИСЬМА:
// Получим менеджер печати
ИмяМенеджераПечати = "Документ.ЗаказКлиента";
МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати);
// Подготовка параметров
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ОбъектДок.Ссылка);
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
// Формируем печатный документ Заказа клиента
Таб = МенеджерПечати.СформироватьПечатнуюФормуЗаказаКлиента(МассивОбъектов, ОбъектыПечати, ПараметрыВывода);
// Создаем документ Электронное письмо
НачатьТранзакцию();
ЭлПисьмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
ЭлПисьмо.УстановитьНовыйНомер();
ЭлПисьмо.Автор = ПараметрыСеанса.ТекущийПользователь;
ЭлПисьмо.Важность = Перечисления.ВариантыВажностиВзаимодействия.Обычная;
ЭлПисьмо.Дата = ТекущаяДата();
ЭлПисьмо.ДатаОтправления = ТекущаяДата();
ЭлПисьмо.Ответственный = ПараметрыСеанса.ТекущийПользователь;
// Получаем адрес эл. почты партнера
ПолучательАдрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(ОбъектДок.Партнер, Справочники.ВидыКонтактнойИнформации.EmailПартнера);
ЭлПисьмо.СписокПолучателейПисьма = ПолучательАдрес;
// Формируем тему письма и имя файла (замените по-своему) и записываем файл xls
ИмяАгента = СокрЛП(ВыбАгент);
Тема = "Заказ " + СокрЛП(ОбъектДок.Партнер) + " (Полифарб, "+ИмяАгента+")";
НаименованиеФайла = "Заказ " + СокрЛП(ОбъектДок.Контрагент) + " от " + ИмяАгента + " " + Лев(ОбъектДок.Дата,10);
//ИмяФайла = ПолучитьИмяВременногоФайла("xls");
ИмяФайла = КаталогВременныхФайлов()+НаименованиеФайла+".xls";
Таб.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
ЭлПисьмо.Тема = Тема;
ЭлПисьмо.ЕстьВложения = Истина;
// Пример получения адреса эл. почты для пользователя
//Запрос = Новый Запрос;
//Запрос.Текст =
// "ВЫБРАТЬ
// | УчетныеЗаписиЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты
// |ИЗ
// | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
// |ГДЕ
// | УчетныеЗаписиЭлектроннойПочты.ОтветственныйЗаОбработкуПисем = &Пользователь";
//Запрос.УстановитьПараметр("Пользователь", ЭлПисьмо.Ответственный);
//РезЗапроса = запрос.Выполнить();
//Выборка = РезЗапроса.Выбрать();
//Если Не Выборка.Следующий() Тогда
// Возврат;
//КонецЕсли;
//ЭлПисьмо.ОтправительПредставление = Выборка.УчетнаяЗапись;
//ЭлПисьмо.УчетнаяЗапись = Выборка.УчетнаяЗапись;
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
ЭлПисьмо.ОтправительПредставление = УчетнаяЗапись;
ЭлПисьмо.УчетнаяЗапись = УчетнаяЗапись;
ЭлПисьмо.Записать();
ЗафиксироватьТранзакцию();
//| Файлы.Наименование КАК ПолноеНаименование,
//| Файлы.Расширение КАК Расширение,
//| Файлы.Ссылка КАК Ссылка,
//| Файлы.ЭлектронныеЦифровыеПодписи.(
//| НомерСтроки,
//| Подпись
//| ),
//| Файлы.ИДФайлаЭлектронногоПисьма
//|ИЗ
//| Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы КАК Файлы
//|ГДЕ
//| Файлы.ВладелецФайла = &ВладелецФайла";
// Формируем вложение
Спр = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
Спр.ВладелецФайла = ЭлПисьмо.Ссылка;
Спр.Наименование = НаименованиеФайла;
Спр.Расширение = "xls";
Данные = Новый ДвоичныеДанные(ИмяФайла);
Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
Спр.Записать();
соотвВложения = Новый Соответствие;
соотвВложения.Вставить(НаименованиеФайла+".xls", Данные);
// Заполняем параметры письма и отправляем
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Тема", Тема);
ПараметрыПисьма.Вставить("Тело", НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'"));
ПараметрыПисьма.Вставить("Кому", ПолучательАдрес);
ПараметрыПисьма.Вставить("Вложения", соотвВложения);
ИдентификаторПисьма = ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(ЭлПисьмо.УчетнаяЗапись, ПараметрыПисьма);
Для добавления вложения нужно еще записать двоичный файл в регистр ПрисоединенныеФайлы
Спасибо за комментарий.
спасибо, то что нужно
Письмо с вложением приходит, всё в порядке, спасибо!)
Но почему же в 1с потом само вложение не удаётся открыть из документа «Электронное письмо исходящее»?
Для прикрепления вложений, которые не хранятся в базе, использовал следующий код:
Табуляция при вставке кода почему-то отображается не корректно.