Выручайте, братцы!
ERP 2.4.
Задача: нужно создать файлы из печатной формы и присоединить их к исходящему письму.
Ниже как я действую на примере файла .pdf
Формирую файлы
Тут всё успешно, файлы пишутся в каталог.
После этого пытаюсь приложить их к письму
В итоге письмо создаётся, файлы указываются во вложении, но при попытке их открыть "Ошибка доступа к файлу: C:\Users\....."
фактически по адресу лежат какие-то нечитаемые файлы весом в 1КБ.
Как правильно записать файлы из временного каталога в ХранилищеЗначения? И вообще, там ли ошибка?
ERP 2.4.
Задача: нужно создать файлы из печатной формы и присоединить их к исходящему письму.
Ниже как я действую на примере файла .pdf
Формирую файлы
Папка = Новый УникальныйИдентификатор;
СоздатьКаталог(КаталогВременныхФайлов() + Папка);
ТабличныйДокумент = Обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати);
ИмяФайлаПДФ = "Счет на оплату № "+Объект.ОбъектНазначения.Номер+ " от " + Формат(Объект.ОбъектНазначения.Дата,"ДФ=dd.MM.yyyy") +".pdf";
ПутьПДФ = КаталогВременныхФайлов() + Папка + "\" + ИмяФайлаПДФ;
ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);
Тут всё успешно, файлы пишутся в каталог.
После этого пытаюсь приложить их к письму
Спр = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
Спр.ВладелецФайла = ЭлПисьмо.Ссылка;
Спр.Наименование = СтрЗаменить(ИмяФайлаПДФ, ".pdf", "");
Спр.ДатаСоздания = ТекущаяДата();
Спр.Расширение = "pdf";
Спр.ПутьКФайлу = Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + "\" + ИмяФайлаПДФ;
Данные = Новый ДвоичныеДанные(ПутьПДФ);
Данные.Записать(ПутьПДФ);
Спр.Размер = Данные.Размер();
Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
Спр.Записать();
ПоказатьВ итоге письмо создаётся, файлы указываются во вложении, но при попытке их открыть "Ошибка доступа к файлу: C:\Users\....."
фактически по адресу лежат какие-то нечитаемые файлы весом в 1КБ.
Как правильно записать файлы из временного каталога в ХранилищеЗначения? И вообще, там ли ошибка?
По теме из базы знаний
- Отправка почты с использованием основного почтового клиента ОС (продолжение)
- Алгоритм создания и отправки электронного письма (со вложением) УТ 3.0 для Украины
- Рассылка произвольных отчетов по электронной почте
- Автоматическая рассылка произвольных отчетов по электронной почте (обычные формы)
- Рассылка по электронной почте и автоматическое формирование актов сверки взаиморасчетов для КА 2.5, УТ 11, ERP 2.5
Найденные решения
Ах да, ещё пришлось сделать
После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
Данные = Новый ДвоичныеДанные(ПутьПДФ);
ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);
После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
Сам разобрался в итоге.
Стандартная БСП-шная процедура добавления вложений.
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", ""));
ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
ПоказатьСтандартная БСП-шная процедура добавления вложений.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
вместо
надо:
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))
Данные = Новый ДвоичныеДанные(ПутьПДФ);
Данные.Записать(ПутьПДФ);
Спр.Размер = Данные.Размер();
Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
Данные.Записать(ПутьПДФ);
Спр.Размер = Данные.Размер();
Спр.ФайлХранилище = Новый ХранилищеЗначения(Данные);
надо:
Спр.ФайлХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьПДФ))
может пригодиться для настройки почтового отправления
/// делается отправка письма с сервера 1С
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(НашПрофиль, ПротоколИнтернетПочты.IMAP);
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:\file.jpg"),"file.jpg"); //файл в каталоге на сервере 1С
ИнтернетТекстПочтовогоСообщения = Сообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.Текст = Текст;
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Попытка
// Пытаемся послать письмо
Почта.Послать(Сообщение);
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
// отключение
Почта.Отключиться();
Показать
Создайте электронное письмо интерактивно, приложите к нему файл и посмотрите как будет заполнен элемент справочника ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы. Сравните с тем, что вы создали, возможно увидите где ошиблись
Сам разобрался в итоге.
Стандартная БСП-шная процедура добавления вложений.
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("ВладелецФайлов", ЭлПисьмо.Ссылка);
ПараметрыФайла.Вставить("Автор", ЭлПисьмо.Автор);
ПараметрыФайла.Вставить("ИмяБезРасширения", СтрЗаменить(ИмяФайлаПДФ, ".pdf", ""));
ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата());
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПутьПДФ, , "СозданАвтоматически");
ПоказатьСтандартная БСП-шная процедура добавления вложений.
Ах да, ещё пришлось сделать
После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
Данные = Новый ДвоичныеДанные(ПутьПДФ);
ПутьПДФ = ПоместитьВоВременноеХранилище(Данные);
После записи табдока из печатной формы в файл(ТабличныйДокумент.Записать(ПутьПДФ, ТипФайлаТабличногоДокумента.PDF);)
Оставлю здесь, может нужно будет кому. Для Альфа Авто 6 не нашел процедуры в БСП по добавлению вложений. Посмотрел в консоле запросов как заполняется вложение при ручной отправке письма. Сделал так:
ТабДок = Документы.ЗаказНаАвтомобиль.ПечатьЗаказНаАвтомобиль(МассивОбъектов, ОбъектыПечати);
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл, ТипФайлаТабличногоДокумента.PDF);
СпрФайл = Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.СоздатьЭлемент();
СпрФайл.Автор = robot;
СпрФайл.ВладелецФайла = лПисьмо;
СпрФайл.ДатаСоздания = ТекДата;
СпрФайл.ДатаМодификацииУниверсальная = ТекДата;
СпрФайл.ИндексКартинки = 52;
СпрФайл.Наименование = лПисьмо.Тема;
лФайл = Новый Файл(ВремФайл);
СпрФайл.Размер = лФайл.Размер();
СпрФайл.Расширение = "pdf";
СпрФайл.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
СпрФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
СпрФайл.ФайлХранилище = Новый ХранилищеЗначения(ВремФайл);
СпрФайл.Записать();
Показать
(10)
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
...
СпрФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
СпрФайл.ФайлХранилище = Новый ХранилищеЗначения(ВремФайл);
может нужно будет кому.
Огромное спасибо, даже не подозревал, что так можно.
(11) код в (10) не совсем рабочий. Создает вложение, но при открытии файла из письма вылетает ошибка. Вот так сделал:
Функция ОтправитьЭлектронноеПисьмоСВложением(ПочтаПолучателя, ТекстПисьма, ТемаПисьма, ИмяФайла, РасширениеБезТочки, АдресФайлаВоВременномХранилище, УчетнаяЗаписьПочтыОтправителя = Неопределено) Экспорт
Отправлено = Ложь;
Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда
УчетнаяЗаписьПочтыОтправителя = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
КонецЕсли;
Вложения = Новый Массив;
ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", ИмяФайла + "." + РасширениеБезТочки, АдресФайлаВоВременномХранилище);
Вложения.Добавить(ОписаниеВложения);
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя);
ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");
ПараметрыПисьма.Вставить("Вложения", Вложения);
Попытка
Идентификатор = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочтыОтправителя, ПараметрыПисьма);
Если ЗначениеЗаполнено(Идентификатор) Тогда
Отправлено = Истина;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());
КонецПопытки;
Возврат Отправлено;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот