Выручайте, братцы!
ERP 2.4.
Задача: нужно создать файлы из печатной формы и присоединить их к исходящему письму.
Ниже как я действую на примере файла .pdf
Формирую файлы

```1c
    Папка = Новый УникальныйИдентификатор;
    СоздатьКаталог(КаталогВременныхФайлов() + Папка);
```

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

Тут всё успешно, файлы пишутся в каталог.
После этого пытаюсь приложить их к письму

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

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

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

Как правильно записать файлы из временного каталога в ХранилищеЗначения? И вообще, там ли ошибка?
---
Ах да, ещё пришлось сделать

```1c
    Данные = Новый ДвоичныеДанные(ПутьПДФ);
    ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);
```

После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
---
Сам разобрался в итоге.

```1c
    ПараметрыФайла = Новый Структура;
    ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
    ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
    ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", "));
    ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
    ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());

    РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
```

Стандартная БСП-шная процедура добавления вложений.
---
вместо Данные = Новый ДвоичныеДанные(ПутьПДФ);
    Данные.Записать(ПутьПДФ);
    Спр.Размер = Данные.Размер();
    Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
надо:
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))
---
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))
Окей комрад, код стал покороче, размер файла не указывается. Космический эффект не достигнут.
---
у меня такая проблема была из-за того что отправка не дожидалась записи файла.
---
Я вообще не отправляю письмо пока что. Только записываю. Но спасибо, может пригодится в дальнейшем.
---
может пригодиться для настройки почтового отправления

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

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

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

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

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

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

    // отключение
    Почта.Отключиться();
```
---
Создайте электронное письмо интерактивно, приложите к нему файл и посмотрите как будет заполнен элемент справочника ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы. Сравните с тем, что вы создали, возможно увидите где ошиблись
---
Сам разобрался в итоге.

```1c
    ПараметрыФайла = Новый Структура;
    ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
    ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
    ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", "));
    ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
    ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());

    РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
```

Стандартная БСП-шная процедура добавления вложений.
---
Ах да, ещё пришлось сделать

```1c
    Данные = Новый ДвоичныеДанные(ПутьПДФ);
    ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);
```

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

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

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

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

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

    Отправлено = Ложь;

    Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда

    УчетнаяЗаписьПочтыОтправителя = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;

    КонецЕсли;

    Вложения = Новый Массив;

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

    Вложения.Добавить(ОписаниеВложения);

    ПараметрыПисьма = Новый Структура;
    ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя);
    ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
    ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
    ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");
    ПараметрыПисьма.Вставить("Вложения", Вложения);

    Попытка

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

    Если ЗначениеЗаполнено(Идентификатор) Тогда

    Отправлено = Истина;

    КонецЕсли;

    Исключение

    ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());

    КонецПопытки;

    Возврат Отправлено;

    КонецФункции
```