Отправить на email письмо с вложением

1. user_2010 894 14.02.20 12:46 Сейчас в теме
Добрый день!

Нужна помощь!

В 1С в обработке нужно сформировать несколько отчетов и отправить разным сотрудникам - разные отчеты.
Кому отправлять письма становится понятно в результате выполнения запроса -т.е. не возможно заранее узнать кому отчеты нужно будет отправить т.е. нельзя использовать "Рассылку отчетов". (если я не права - поправьте меня)

Вопрос в том, что Вложение в письмо - это обязательно файл с диска? Нельзя как-то без файла на диске обойтись?

При добавлении вложения - выдается ощибка:
Не удалось добавить вложение! {ВнешняяОбработка.ЗУП31.Форма.Форма.Форма(684)}: Ошибка при вызове конструктора (ДвоичныеДанные): Каталог не обнаружен 'E:\TMP\TMP\Отчет1.xls'

Файл в каталоге есть. Но это каталог на моем компе. Я так понимаю, что программа ищет этот каталог на сервере каком-то?

Как бы так сделать, чтобы вложить отчет без сохранения файла диск?

Или эту проблему можно решить как-то по-другому?

Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 14.02.20 12:51 Сейчас в теме
без файла не обойтись, т.к. почтовому клиенту надо что-то вложить. Файл надо класть так, чтобы он был доступен из процедуры формирования письма.
3. user_2010 894 14.02.20 13:10 Сейчас в теме
(2) но я правильно понимаю, что когда выполняется код вложения файла - программа ищет файл не на моем локальном компе? а на каком-то сервере?

Ведь на моем компе файл есть - а она его не видит. Я верное понимаю?
12. starjevschik 14.02.20 13:42 Сейчас в теме
(3) это ж клиент-серверная база. Где у нее формируется письмо, я не знаю, может и на клиенте, и на сервере.
13. user856012 13 14.02.20 13:44 Сейчас в теме
(3)
программа ищет файл не на моем локальном компе? а на каком-то сервере?
Не на "каком-то", а на том, на котором выполняется 1С.

Путей решения два:
1. Поместить файл в папку на сервере.
2. Расшарить папку с файлом на вашем компьютере и обращаться к ней по сети: вместо "E:\TMP\TMP\Отчет1.xls" что-то типа "\\Mycomp\Myfolder\TMP\Отчет1.xls"
22. user_2010 894 14.02.20 14:45 Сейчас в теме
(13) чей-то конкретный комп - не вариант. Сервер - это да - подойдет. Но даст ли админ плодить там файлы....
4. user_2010 894 14.02.20 13:11 Сейчас в теме
(2) хотелось бы реализовать по типу рассылки отчетов. Там же программа сама формирует отчет и отправляет его в виде вложения файла. Но при этом файл не сохраняется на диск?
6. user_2010 894 14.02.20 13:15 Сейчас в теме
(5) я по этой публикации все и делаю!
но что-то пошло не так!
7. user_2010 894 14.02.20 13:21 Сейчас в теме
Может быть код неверный?

Попытка
Сообщение.Вложения.Добавить(Новый ДвоичныеДанные(ПолноеИмяФайла), ПолноеИмяФайла);
Исключение
ТекстПисьма = ТекстПисьма + "Не удалось добавить вложение! " + ОписаниеОшибки() + Символы.ПС;
КонецПопытки;
8. user_2010 894 14.02.20 13:26 Сейчас в теме
Если в качестве вложения используется объект ДвоичныеДанные - нельзя его как-то без сохранения в файл получить?
Ведь в файлмы сохраняем отчет из 1С, а потом файл преобразуем в ДвоичныеДанные и вкладываем в письмо.

Можно отчет сразу в ДвоичныеДанные перевести?
9. antz 14.02.20 13:33 Сейчас в теме
База клиент-серверная? Процедура отправки с директивой &НаСервере?
10. user_2010 894 14.02.20 13:37 Сейчас в теме
(9) база серверная, процедура с директивой &НаСервере.

Письмо без вложения - без проблем приходит.

Если делаю вложение - письмо тоже приходит, но с ошибкой (текст ошибки вывожу в текст письма): Не удалось добавить вложение! {ВнешняяОбработка.ЗУП31.Форма.Форма.Форма(684)}: Ошибка при вызове конструктора (ДвоичныеДанные): Каталог не обнаружен 'E:\TMP\TMP\Отчет1.xls'
11. portwein 14.02.20 13:42 Сейчас в теме
(10) Соответственно алгоритм, выполняющийся на сервере, ничего не знает о клиенте и ищет каталог "E:\TMP\TMP\" на сервере, то есть на той машине, на корой физически крутится сервер 1С. Создайте на сервере папку а-ля "E\отчеты", дайте доступ к этой папке пользователю USRV8 или под каким там у Вас стартует сервер 1С, сохраняйте файлы отчета именно в эту папкку. Но в идеале для такого вообще завести сетевую папку.
14. user_2010 894 14.02.20 13:48 Сейчас в теме
(11) а как реализована рассылка отчетов?

Ведь у каждого пользователя есть на любом компе/мервере своя папка, в которую он хоть что может писать....
Как мне в коде получить эту папку? И в нее сохранять файл. А после отправки письма - удалять этот файл??.....
15. portwein 14.02.20 13:52 Сейчас в теме
(14) Я думаю Ваша компания не исключение и у Вас есть сетевая шара. Вот в ней создать папку и строго на строго наказать пользователям сохранять файлы в нее. Или важно чтоб у каждого пользователя была именно своя папка?
17. user_2010 894 14.02.20 14:05 Сейчас в теме
(15) мне не нужно, чтобы файлы лежали в сети. Мне нужно файл сформировать, отправить и удалить его.

Спасибо за подсказку - создать папку и дать доступ пользователю - от которого стартует сервер 1С. Туда сохранять файл и удалять.

Вообще это будет регл задание - оно тоже будет запускаться от пользователя - от которого стартует сервер 1С?
20. portwein 14.02.20 14:16 Сейчас в теме
(17) У регламентного можно указать пользователя, если пользователь не указан - РЗ запускает фоновые под полными правами. А с файлами на диске 1С всегда общается из под того пользователя, под которым запущена.
Регламентом цепляете отчет, выполняете, результат во временные файлы, от туда во вложения, письмо отправить, файлы удалить. А адреса отправки придумаете как хранить в базе и как их получать.
21. user_2010 894 14.02.20 14:44 Сейчас в теме
(20) адреса получателей отчетов в базе уже есть.
16. antz 14.02.20 14:04 Сейчас в теме
(14) На клиенте сохранять отчет во временный файл, считывать его двоичными данными, помещать их во временное хранилище, на сервере вытаскивать двоичные данные из хранилища, пристегивать их к письму.
18. user_2010 894 14.02.20 14:06 Сейчас в теме
(16) у меня в дальнейшем планируется обработку запускать как регл задание - значит в качестве клинтской машины будет сервер - верно? - а у меня туда прав нет!
19. user_2010 894 14.02.20 14:07 Сейчас в теме
как же 1С реализовала отправку отчетов в "Рассылке отчетов"?
23. bad_wag 48 14.02.20 14:46 Сейчас в теме
(19) Очень просто, отчет выполняется на сервере, его результат помещается во временный файл на сервере (а по хорошему надо бы через потоки такие вещи делать) и отправляется также сервером
24. user_2010 894 14.02.20 15:03 Сейчас в теме
(23) вот-вот!

ПотокВПамяти = Новый ПотокВПамяти();

это должно помочь!

Спасибо!
25. user_2010 894 14.02.20 16:05 Сейчас в теме
(24) может быть кому-нибудь пригодится:

 ПотокВПамяти = Новый ПотокВПамяти();
    ТабДок.Записать(ПотокВПамяти, ТипФайлаТабличногоДокумента.DOCX);
    ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
    Вложение = Новый Структура;
    Вложение.Вставить("АдресВоВременномХранилище", ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор));
    Вложение.Вставить("Представление", "Отчет от "+Формат(Объект.Период.ДатаНачала, "ДФ=dd.MM.yyyy")+".docx");
    СписокВложений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Вложение);
    
    ПараметрыПисьма.Вставить("Вложения", СписокВложений);
	
	УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("хххх");
	
    Попытка
        РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Отчет успешно отправлен.");
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка отправки отчета:"+Символы.ПС+ОписаниеОшибки());
    КонецПопытки;
Показать


Используются процедуры и функции Общего модуля РаботаСПочтовымиСообщениями!!!
BigRig; user2044546; orlin553; serverstar; user1257876; +5 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот