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

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

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

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

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

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

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

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

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

Спасибо!
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 14.02.20 12:51 Сейчас в теме
без файла не обойтись, т.к. почтовому клиенту надо что-то вложить. Файл надо класть так, чтобы он был доступен из процедуры формирования письма.
3. user_2010 871 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 871 14.02.20 14:45 Сейчас в теме
(13) чей-то конкретный комп - не вариант. Сервер - это да - подойдет. Но даст ли админ плодить там файлы....
4. user_2010 871 14.02.20 13:11 Сейчас в теме
(2) хотелось бы реализовать по типу рассылки отчетов. Там же программа сама формирует отчет и отправляет его в виде вложения файла. Но при этом файл не сохраняется на диск?
6. user_2010 871 14.02.20 13:15 Сейчас в теме
(5) я по этой публикации все и делаю!
но что-то пошло не так!
7. user_2010 871 14.02.20 13:21 Сейчас в теме
Может быть код неверный?

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

Можно отчет сразу в ДвоичныеДанные перевести?
9. antz 14.02.20 13:33 Сейчас в теме
База клиент-серверная? Процедура отправки с директивой &НаСервере?
10. user_2010 871 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 871 14.02.20 13:48 Сейчас в теме
(11) а как реализована рассылка отчетов?

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

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

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

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

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

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

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


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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день