Алгоритм создания и отправки электронного письма (со вложением) УТ 3.0 для Украины

Алгоритм позволит быстро создать письмо с вложением (например, печатная форма Заказа клиента в формате XLS) и отправить его партнеру. Для конфигурации Управление торговлей для Украины 3.0

Данный алгоритм позволит Вам сэкономить время для решения задач по отправке писем из конфигурации Управление торговлей для Украины 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С:Предприятие'"));
ПараметрыПисьма.Вставить("Кому", ПолучательАдрес);
ПараметрыПисьма.Вставить("Вложения", соотвВложения);

ИдентификаторПисьма = ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(ЭлПисьмо.УчетнаяЗапись, ПараметрыПисьма);

5 Comments

  1. Hisoka1992

    Для добавления вложения нужно еще записать двоичный файл в регистр ПрисоединенныеФайлы

    МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ПрисоединенныйФайл = Спр.Ссылка;
    МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные);
    МенеджерЗаписи.Записать();
    
    Reply
  2. Bor_ka

    Спасибо за комментарий.

    Reply
  3. fr13

    спасибо, то что нужно

    Reply
  4. Albert1980

    Письмо с вложением приходит, всё в порядке, спасибо!)

    Но почему же в 1с потом само вложение не удаётся открыть из документа «Электронное письмо исходящее»?

    Reply
  5. Степной

    Для прикрепления вложений, которые не хранятся в базе, использовал следующий код:

    ПрисоединенныеФайлыОбъект   = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
    ПрисоединенныеФайлыОбъект.ВладелецФайла = ИсходящееПисьмоОбъект.Ссылка; // ДокументСсылка.ЭлектронноеПисьмоИсходящее
    ПрисоединенныеФайлыОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
    ПрисоединенныеФайлыОбъект.Том    = ОсновнойТомХранения; // СправочникСсылка.ТомаХраненияФайлов
    ПрисоединенныеФайлыОбъект.Наименование  = «123»;
    ПрисоединенныеФайлыОбъект.Расширение  = «zip»;
    ПрисоединенныеФайлыОбъект.ПутьКФайлу  = ИмяКаталогаВТоме + «123/zip»;

    Табуляция при вставке кода почему-то отображается не корректно.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *