Запись файла во вложение письма.

1. username123 22.08.19 15:49 Сейчас в теме
Выручайте, братцы!
ERP 2.4.
Задача: нужно создать файлы из печатной формы и присоединить их к исходящему письму.
Ниже как я действую на примере файла .pdf
Формирую файлы
	Папка = Новый УникальныйИдентификатор;
	СоздатьКаталог(КаталогВременныхФайлов() + Папка);


	ТабличныйДокумент = Обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати);
	ИмяФайлаПДФ = "Счет на оплату № "+Объект.ОбъектНазначения.Номер+ " от " + Формат(Объект.ОбъектНазначения.Дата,"ДФ=dd.MM.yyyy") +".pdf";
	ПутьПДФ = КаталогВременныхФайлов() + Папка + "\" + ИмяФайлаПДФ;
	ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);


Тут всё успешно, файлы пишутся в каталог.
После этого пытаюсь приложить их к письму
	Спр = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
	Спр.ВладелецФайла = ЭлПисьмо.Ссылка;
	Спр.Наименование = СтрЗаменить(ИмяФайлаПДФ, ".pdf", "");
	Спр.ДатаСоздания = ТекущаяДата();
	Спр.Расширение = "pdf";
	Спр.ПутьКФайлу = Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + "\" + ИмяФайлаПДФ;
	Данные = Новый ДвоичныеДанные(ПутьПДФ);
	Данные.Записать(ПутьПДФ);
	Спр.Размер = Данные.Размер();
	Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
	Спр.Записать();
Показать

В итоге письмо создаётся, файлы указываются во вложении, но при попытке их открыть "Ошибка доступа к файлу: C:\Users\....."

фактически по адресу лежат какие-то нечитаемые файлы весом в 1КБ.

Как правильно записать файлы из временного каталога в ХранилищеЗначения? И вообще, там ли ошибка?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. username123 23.08.19 13:02 Сейчас в теме +0.15 $m
Сам разобрался в итоге.
	ПараметрыФайла = Новый Структура;
	ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
	ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
	ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", ""));
	ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
	ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());
	
	РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
Показать


Стандартная БСП-шная процедура добавления вложений.
9. username123 23.08.19 13:06 Сейчас в теме
Ах да, ещё пришлось сделать
	Данные = Новый ДвоичныеДанные(ПутьПДФ);
	ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);


После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Безмат 22.08.19 15:53 Сейчас в теме
вместо
Данные = Новый ДвоичныеДанные(ПутьПДФ);
Данные.Записать(ПутьПДФ);
Спр.Размер = Данные.Размер();
Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);

надо:
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))
username123; +1 1 Ответить
3. username123 22.08.19 15:58 Сейчас в теме
(2)
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))

Окей комрад, код стал покороче, размер файла не указывается. Космический эффект не достигнут.
4. user623969_dusa 22.08.19 16:31 Сейчас в теме
(3) у меня такая проблема была из-за того что отправка не дожидалась записи файла.
5. username123 22.08.19 16:37 Сейчас в теме
(4)
Я вообще не отправляю письмо пока что. Только записываю. Но спасибо, может пригодится в дальнейшем.
6. FIGOR 22.08.19 16:51 Сейчас в теме
может пригодиться для настройки почтового отправления


/// делается отправка письма с сервера 1С
Почта = Новый ИнтернетПочта;

Попытка
 Почта.Подключиться(НашПрофиль, ПротоколИнтернетПочты.IMAP);
Исключение
  ОписаниеОшибки = ОписаниеОшибки();
  Сообщить(ОписаниеОшибки());
  Возврат;
КонецПопытки;

Сообщение = Новый ИнтернетПочтовоеСообщение;

Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:\file.jpg"),"file.jpg");  //файл в каталоге на сервере 1С

ИнтернетТекстПочтовогоСообщения = Сообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.Текст = Текст;
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

Попытка
// Пытаемся послать письмо
  Почта.Послать(Сообщение);
Исключение
   ОписаниеОшибки = ОписаниеОшибки();
   Сообщить(ОписаниеОшибки()); 
   Возврат;
КонецПопытки;

// отключение
Почта.Отключиться();
Показать
7. bad_wag 48 22.08.19 17:20 Сейчас в теме
Создайте электронное письмо интерактивно, приложите к нему файл и посмотрите как будет заполнен элемент справочника ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы. Сравните с тем, что вы создали, возможно увидите где ошиблись
8. username123 23.08.19 13:02 Сейчас в теме +0.15 $m
Сам разобрался в итоге.
	ПараметрыФайла = Новый Структура;
	ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
	ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
	ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", ""));
	ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
	ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());
	
	РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
Показать


Стандартная БСП-шная процедура добавления вложений.
9. username123 23.08.19 13:06 Сейчас в теме
Ах да, ещё пришлось сделать
	Данные = Новый ДвоичныеДанные(ПутьПДФ);
	ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);


После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
10. websamson 306 11.09.23 08:03 Сейчас в теме
Оставлю здесь, может нужно будет кому. Для Альфа Авто 6 не нашел процедуры в БСП по добавлению вложений. Посмотрел в консоле запросов как заполняется вложение при ручной отправке письма. Сделал так:

        ТабДок = Документы.ЗаказНаАвтомобиль.ПечатьЗаказНаАвтомобиль(МассивОбъектов, ОбъектыПечати);
	ВремФайл=ПолучитьИмяВременногоФайла("pdf");
	ТабДок.Записать(ВремФайл, ТипФайлаТабличногоДокумента.PDF);

	СпрФайл = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
	СпрФайл.Автор = robot;
	СпрФайл.ВладелецФайла = лПисьмо;
	СпрФайл.ДатаСоздания = ТекДата;
	СпрФайл.ДатаМодификацииУниверсальная = ТекДата;
	СпрФайл.ИндексКартинки = 52;
	СпрФайл.Наименование = лПисьмо.Тема;
	лФайл = Новый Файл(ВремФайл);
	СпрФайл.Размер = лФайл.Размер();
	СпрФайл.Расширение = "pdf";
	СпрФайл.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
	СпрФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
	СпрФайл.ФайлХранилище = Новый ХранилищеЗначения(ВремФайл);	
	СпрФайл.Записать();
Показать
11. user1880116 11.09.23 09:43 Сейчас в теме
(10)
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
...
СпрФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
СпрФайл.ФайлХранилище = Новый ХранилищеЗначения(ВремФайл); 

может нужно будет кому.
Огромное спасибо, даже не подозревал, что так можно.
12. websamson 306 13.09.23 09:46 Сейчас в теме
(11) код в (10) не совсем рабочий. Создает вложение, но при открытии файла из письма вылетает ошибка. Вот так сделал:

Функция ОтправитьЭлектронноеПисьмоСВложением(ПочтаПолучателя, ТекстПисьма, ТемаПисьма, ИмяФайла, РасширениеБезТочки, АдресФайлаВоВременномХранилище, УчетнаяЗаписьПочтыОтправителя = Неопределено) Экспорт

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

КонецФункции
Показать
Оставьте свое сообщение

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