Имя: Пароль:
1C
1С v8
Отправка почты с вложением из регламентного задания
0 xmk_okda
 
31.10.16
14:08
УТ 11. Есть обработка рассылки писем с вложениями. Нужно перенести код в рег задание. Вложения в формате .pdf формируются на компе и вставляются в письмо. Но на почту приходят файлы с никаким расширением и соответственно не читаются. Т.е. я так понял просто передается двоичный код. В тестовом письме количество и объем верный, а вот с расширением беда. Поясню, если что не понятно. Пишу первый раз
1 xmk_okda
 
31.10.16
14:25
Не интересная тема? Хоть кто нибудь откликнитесь
2 marty0701
 
31.10.16
14:40
Переименовать файл из вложения, дописав ПДФ пробовал? Открывается? Показывай как вложение подсовываешь в письме.
3 xmk_okda
 
31.10.16
14:45
камнями можно, только не большими.

    Пока Выборка.Следующий() Цикл
            
            ПодготовитьПечатныеФормы(АдресПечатныхФорм,ОчерПартнер.Партнер);
            ЭлПисьмо = СоздатьЭлПисьмо(Никишин,Выборка.АдресЭП,"тест","Если нет доков, значит не работает нафиг",);
            
            ПечатныеФормы1 = ПолучитьИзВременногоХранилища(АдресПечатныхФорм);
            СписокДоков = ПечатныеФормы1.ВыгрузитьКолонку("ТабличныйДокумент");
            
            СоотвВложения = Новый Соответствие;
            НомерДока = 1;
            Для Каждого ТабДок Из СписокДоков Цикл
                
                ВремФайл = ПолучитьИмяВременногоФайла("pdf");
                ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
                
                МойДок = Новый ДвоичныеДанные(ВремФайл);
                ХранилищеДока = Новый ХранилищеЗначения(МойДок);
                
                ПараметрыПисьма = Новый Структура;
                ПараметрыПисьма.Вставить("Кому",        ЭлПисьмо.СписокПолучателейПисьма);
                ПараметрыПисьма.Вставить("Тема",        ЭлПисьмо.Тема);
                ПараметрыПисьма.Вставить("Тело",        ЭлПисьмо.Текст);
                ПараметрыПисьма.Вставить("Кодировка",    ЭлПисьмо.Кодировка);
                ПараметрыПисьма.Вставить("ТипТекста",    ЭлПисьмо.ТипТекста);
                ПараметрыПисьма.Вставить("Важность",    УправлениеЭлектроннойПочтой.ПолучитьВажность(ЭлПисьмо.Важность));
                ПараметрыПисьма.Вставить("УведомитьОДоставке",    ЭлПисьмо.УведомитьОДоставке);
                ПараметрыПисьма.Вставить("УведомитьОПрочтении",    ЭлПисьмо.УведомитьОПрочтении);
                Если НЕ ПустаяСтрока(ЭлПисьмо.ИдентификаторыОснований) Тогда
                    ПараметрыПисьма.Вставить("ИдентификаторыОснований", ЭлПисьмо.ИдентификаторыОснований);
                КонецЕсли;
                
                
                ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ПолучитьДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(ЭлПисьмо);
                Если ДанныеПрисоединенныхФайловПисьма = Неопределено Тогда
                    ИмяОбъектаМетаданных = УправлениеЭлектроннойПочтой.ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(ЭлПисьмо.Ссылка);
                    ВладелецФайлов       = ЭлПисьмо.Ссылка;
                Иначе
                    ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы;
                    ВладелецФайлов       = ДанныеПрисоединенныхФайловПисьма.Владелец;
                КонецЕсли;
                
                ИмяФайла = "Форма_УПД "+НомерДока;
                ДанныеВложения = МойДок;
                
                СтруктураДанныеВложения = Новый Структура;
                СтруктураДанныеВложения.Вставить("Значение", ДанныеВложения);
                //СтруктураДанныеВложения.Вставить("Идентификатор", Выборка.ИДФайлаЭлектронногоПисьма);
                СоотвВложения.Вставить(ИмяФайла, СтруктураДанныеВложения);
                
                
                
                НомерДока = НомерДока + 1;
                ПараметрыПисьма.Вставить("Вложения", СоотвВложения);
            КонецЦикла;
            Отправить = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(ЭлПисьмо.УчетнаяЗапись, ПараметрыПисьма);
        КонецЦикла;
    КонецЦикла;
4 AlexYurg
 
31.10.16
14:48
> ИмяФайла = "Форма_УПД "+НомерДока;

И где тут .pdf ?
5 xmk_okda
 
31.10.16
14:48
Ходил отладчиком, смотрел, как формируются ПараметрыПисьма, как сами вложения формируются, дошел вот до такого, что привел выше.
6 xmk_okda
 
31.10.16
14:50
(4) я даже делал "ИмяФайла = ВремФайл". А у ВремФайла есть .pdf
Один фиг не работало
7 AlexYurg
 
31.10.16
14:51
(5) Попробуй вместо

  ИмяФайла = "Форма_УПД "+НомерДока;

написать

  ИмяФайла = "Форма_УПД "+НомерДока + ".pdf";

Расскажи, что получилось.
8 xmk_okda
 
31.10.16
14:53
(7) тут другая проблема возникла. {ОбщийМодуль.РаботаСПочтовымиСообщениямиСлужебный.Модуль(395)}: Поле объекта не обнаружено (Идентификатор)
                    Тело = СтрЗаменить(Тело, Вложение.Значение.Идентификатор, ПутьКФайлу);
9 xmk_okda
 
31.10.16
14:54
я не понимаю, что за Идентификатор и с чем его хавают
10 YFedor
 
31.10.16
14:57
(8) А это откуда? У тебя же письма формируются и отправляются - правда?
11 xmk_okda
 
31.10.16
15:07
Сделал (7).

Пришло 5 писем (ибо 5 вложений должно было быть), но вложений нет. Только текст письма.

Пока Выборка.Следующий() Цикл
            
            ПодготовитьПечатныеФормы(АдресПечатныхФорм,ОчерПартнер.Партнер);
            ЭлПисьмо = СоздатьЭлПисьмо(Никишин,Выборка.АдресЭП,"тест","Если нет доков, значит не работает нафиг",);
            
            ПечатныеФормы1 = ПолучитьИзВременногоХранилища(АдресПечатныхФорм);
            СписокДоков = ПечатныеФормы1.ВыгрузитьКолонку("ТабличныйДокумент");
            
            СоотвВложения = Новый Соответствие;
            НомерДока = 1;
            Для Каждого ТабДок Из СписокДоков Цикл
                
                ВремФайл = ПолучитьИмяВременногоФайла("pdf");
                ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
                
                МойДок = Новый ДвоичныеДанные(ВремФайл);
                ХранилищеДока = Новый ХранилищеЗначения(МойДок);
                
                ПараметрыПисьма = Новый Структура;
                ПараметрыПисьма.Вставить("Кому",        ЭлПисьмо.СписокПолучателейПисьма);
                ПараметрыПисьма.Вставить("Тема",        ЭлПисьмо.Тема);
                ПараметрыПисьма.Вставить("Тело",        ЭлПисьмо.Текст);
                ПараметрыПисьма.Вставить("Кодировка",    ЭлПисьмо.Кодировка);
                ПараметрыПисьма.Вставить("ТипТекста",    ЭлПисьмо.ТипТекста);
                ПараметрыПисьма.Вставить("Важность",    УправлениеЭлектроннойПочтой.ПолучитьВажность(ЭлПисьмо.Важность));
                ПараметрыПисьма.Вставить("УведомитьОДоставке",    ЭлПисьмо.УведомитьОДоставке);
                ПараметрыПисьма.Вставить("УведомитьОПрочтении",    ЭлПисьмо.УведомитьОПрочтении);
                Если НЕ ПустаяСтрока(ЭлПисьмо.ИдентификаторыОснований) Тогда
                    ПараметрыПисьма.Вставить("ИдентификаторыОснований", ЭлПисьмо.ИдентификаторыОснований);
                КонецЕсли;
                
                
                ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ПолучитьДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(ЭлПисьмо);
                Если ДанныеПрисоединенныхФайловПисьма = Неопределено Тогда
                    ИмяОбъектаМетаданных = УправлениеЭлектроннойПочтой.ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(ЭлПисьмо.Ссылка);
                    ВладелецФайлов       = ЭлПисьмо.Ссылка;
                Иначе
                    ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы;
                    ВладелецФайлов       = ДанныеПрисоединенныхФайловПисьма.Владелец;
                КонецЕсли;
                
                ИмяФайла = "Форма_УПД "+НомерДока + ".pdf";
                ДанныеВложения = МойДок;
                
                ИдентификаторПочтовогоВложения="";
                СтруктураДанныеВложения = Новый Структура;
                СтруктураДанныеВложения.Вставить("Значение", ДанныеВложения);
                СтруктураДанныеВложения.Вставить("Идентификатор", ИдентификаторПочтовогоВложения);
                СоотвВложения.Вставить(ИмяФайла, СтруктураДанныеВложения);
                
                
                
                НомерДока = НомерДока + 1;
                ПараметрыПисьма.Вставить("Вложения", СоотвВложения);
            КонецЦикла;
            Отправить = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(ЭлПисьмо.УчетнаяЗапись, ПараметрыПисьма);
        КонецЦикла;
    КонецЦикла;
12 Gantosha
 
31.10.16
15:10
ДанныеВложения = МойДок; но вообще конечно надо смотреть что ты там цепляешь к письму ..
13 Gantosha
 
31.10.16
15:11
так вот там у тебя точно двоичные данные .. но разбираться конечно лень, что вы там понаписали.
14 xmk_okda
 
01.11.16
05:49
средства отправки конфы засовывают файлы, выбранные через форму в рег. сведений или в справочник "элПисьмаИсходящ",а потом выборкой их оттуда достают. У меня такого нет, может в этом проблема
15 xmk_okda
 
01.11.16
05:50
"элПисьмаИсходящПрикрепленныеФайлы"
16 xmk_okda
 
01.11.16
07:15
Проблема решилась
Вместо
ИмяФайла = "Форма_УПД "+НомерДока + ".pdf";
                ДанныеВложения = МойДок;
                
                ИдентификаторПочтовогоВложения="";
                СтруктураДанныеВложения = Новый Структура;
                СтруктураДанныеВложения.Вставить("Значение", ДанныеВложения);
                СтруктураДанныеВложения.Вставить("Идентификатор", ИдентификаторПочтовогоВложения);
                СоотвВложения.Вставить(ИмяФайла, СтруктураДанныеВложения);
                
                
                
                НомерДока = НомерДока + 1;
                ПараметрыПисьма.Вставить("Вложения", СоотвВложения);



Написал


ИмяФайла = "Форма_УПД "+НомерДока + ".pdf";
                ДанныеВложения = МойДок;
                
                ИдентификаторПочтовогоВложения="";
                СтруктураДанныеВложения = Новый Структура;
                СтруктураДанныеВложения.Вставить("Значение", ДанныеВложения);
                СтруктураДанныеВложения.Вставить("Идентификатор", ИдентификаторПочтовогоВложения);
                СоотвВложения.Вставить(ИмяФайла, ДанныеВложения);
                
                
                
                НомерДока = НомерДока + 1;
                ПараметрыПисьма.Вставить("Вложения", СоотвВложения);
17 xmk_okda
 
01.11.16
07:16
всем спасибо за внимание