Имя: Пароль:
1C
1С v8
Колдунство с вложениями в письме
0 trim89
 
02.09.20
05:04
Доброго времени суток.

Была поставлена задача. Есть версия отчета, в зависимости от того какие там данные, отправляется на разные адреса. Так как адреса неизвестны, то типовой рассылкой отчетов не могу пользоваться. Сделал так: я программно на СКД выгружаю в ТЧ данные, их анализирую, набираю адреса, потом формирую отчет как табличный документ, сохраняю его во временный файл, файл подгружаю как вложение в письмо двоичными данными, письмо отправляю, файл удаляю.

Вроде просто, но проблема пришла откуда не ждали. Изначально сохранял в xlsx. Есть колонка телефон в формате +7 (999) 999-99-99. сохранённый временный файл открывался, но отправленный по почте выдавался с ошибкой: "файл повреждён, неверный формат данных". После долго копания выяснил, что при формате телефона 8 999 999-99-99 все работает. Начальство сказало, что это ОЧЕНЬ важно и переделывай. Предложил им выгружать в html. Попробовали - норм. Но через нескольких тестов сохранённый файл html открывается норм, а по почте открывается пустым, если открыть редактором, то текст такой
NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL NUL ...

Что не так? Почему? при этом телефоны там в формате 8 999 999-99-99!
1 trim89
 
02.09.20
05:07
Текст такой
                                мас.Добавить(Перечисления.ФорматыСохраненияОтчетов.HTML4);
                ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой",ВариантОтчета,Неопределено,мас,ложь);
                Если Не РассылкаОтчетов.ИнициализироватьОтчет(Неопределено, ПараметрыОтчета, ложь) Тогда
                    возврат;
                КонецЕсли;
                ПараметрыФормирования = Новый Структура;                 
                ПараметрыФормирования.Вставить("Подключение", ПараметрыОтчета);
                Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Истина,ложь);
                
                таблдок = Формирование.ТабличныйДокумент;
                ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
                ПочтовоеСообщение.Тема = "Доставка от " +  Формат(ТекущаяДата(),"ДЛФ=Д");
                ПочтовоеСообщение.Отправитель.Адрес = "";
                Для каждого ЭлементПолучателя Из СписокПолучателей Цикл
                    ПочтовоеСообщение.Получатели.Добавить(ЭлементПолучателя.Значение);        
                КонецЦикла;
                
                ТаблДок.ТолькоПросмотр = Истина;
                ТаблДок.ОтображатьСетку = Ложь;
                гсч = новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата()));
                
                ИмяВременногоФайла = КаталогВременныхФайлов() + "Что-Куда_"+ Формат(ТекущаяДата(),"ДФ=дд_ММ_гггг")+формат(гсч.СлучайноеЧисло(0,10000),"ЧГ=0")+".html";
                ТаблДок.Записать(ИмяВременногоФайла,ТипФайлаТабличногоДокумента.HTML5);
                ПочтовоеСообщение.Вложения.Добавить(данныефайла, "Что-Куда_"+ Формат(ТекущаяДата(),"ДФ=дд_ММ_гггг")+".html");     
                Почта.Подключиться(ПочтовыйПрофиль);
                Почта.Послать(ПочтовоеСообщение);
                Почта.Отключиться();
2 rphosts
 
02.09.20
05:20
(0) Майкрософт - мастдай!
Пиши в пдф и будет тебе счастье.
3 trim89
 
02.09.20
05:22
(2) мне кажется дело не Гейтсе лично. Текст с разметкой, также не отсылается нормально.
4 trim89
 
02.09.20
05:36
В общем, потыкал, вроде решилось. Одна колонка в отчете называлась "Вес брутто", сказали сделать её "Вес брутто, кг.". Сделал, перестало выгружаться, но если сделать "Вес брутто, кг", то всё ок!! Так и хочется вспомнить Заходера "да как крикнет улетая вот что значит запятая!", блеат.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.