Создание книги эксель с 4 листами и отправка по почте

1. Natain14 16.10.17 06:54 Сейчас в теме
Здравствуйте,
платформа 8.3.10.2561, обычное приложение
есть 4 табличных документа, которые надо загрузить на разные листы эксель и полученную книгу отправить по почте. И как бы это работает, но есть два косяка, с которыми не могу справиться.
1) При скачивании файла получателем, он не может его посмотреть, пишет "Формат файла не соответствует разрешению файла, возможно файл поврежден или небезопасен. Открывайте его только в том случае, если доверяете источнику.Вы действительно хотите открыть файл?" И он открывается пустым, хотя просто сохраненный файл (не через почту) открывается с данными
2) Если запускать по кнопке, то файлы хорошо сохраняются, если делать это через рег задание, то выходит ошибка. Права у пользователя, под которым запускается рег задание и запущена служба 1с админские, папка Desktop на месте.
"{ОбщийМодуль.Телефония.Модуль(519)}: Ошибка при вызове метода контекста (Open)
по причине:
Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "C:\Temp\iptel4.xls". Это может быть вызвано одной из следующих причин.

• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент."

 ТабДокСДетализациейДень.Записать (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel1"+".xls", ТипФайлаТабличногоДокумента.XLS);
    ТабДокСДетализациейНочь.Записать (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel2"+".xls", ТипФайлаТабличногоДокумента.XLS);
    ТабДокСИтогамиПоДням.Записать (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel3"+".xls", ТипФайлаТабличногоДокумента.XLS);
    ТабДокСИтогами.Записать (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel4"+".xls", ТипФайлаТабличногоДокумента.XLS);
    
    AppExcel1    = новый COMОбъект ("Excel.Application");       
          
    Book2        = AppExcel1.WorkBooks().Add();   
    
    Book1        = AppExcel1.Workbooks.Open (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel4"+".xls");
    Book1.ActiveSheet.Cells.Select ();
    AppExcel1.Selection.Copy ();
    Book2.Sheets.Add ();
    Book2.ActiveSheet.name = "Итоговая";
    Book2.ActiveSheet.Paste ();
    AppExcel1.CutCopyMode = False;
    Book1.Close (false);
    
    Book1        = AppExcel1.Workbooks.Open (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel3"+".xls");
    Book1.ActiveSheet.Cells.Select ();
    AppExcel1.Selection.Copy ();
    Book2.Sheets.Add ();
    Book2.ActiveSheet.name = "Итоговая по дням";
    Book2.ActiveSheet.Paste ();
    AppExcel1.CutCopyMode = False;
    Book1.Close (false);
    
    Book1        = AppExcel1.Workbooks.Open (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel2"+".xls");
    Book1.ActiveSheet.Cells.Select ();
    AppExcel1.Selection.Copy ();
    Book2.Sheets.Add ();
    Book2.ActiveSheet.name = "Детализация ночных звонков";
    Book2.ActiveSheet.Paste ();
    AppExcel1.CutCopyMode = False;
    Book1.Close (false);  
    
    Book1        = AppExcel1.Workbooks.Open (Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel1"+".xls");
    Book1.ActiveSheet.Cells.Select ();
    AppExcel1.Selection.Copy ();
    Book2.Sheets.Add ();
    Book2.ActiveSheet.name = "Детализация дневных звонков";
    Book2.ActiveSheet.Paste ();
    AppExcel1.CutCopyMode = False;
    Book1.Close (false);            
    
    Book2.Application.DisplayAlerts = False;    
    Путь=Константы.ТелефонияКаталогДляОтчетов.Получить()+"\Отчет по телефонии "+?(ЗначениеЗаполнено(ЛичныйКабинет), Строка(ЛичныйКабинет)+" ","")+Формат(КонецПредыдущейСмены,"ДФ=yyyy-MM-dd")+ " - " +Формат(КонецПоследнейСменыПериода,"ДФ=yyyy-MM-dd") +".xls";
    Book2.SaveAs (Путь);
    
    AppExcel1.Quit ();
    
    УдалитьФайлы(Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel1"+".xls");
    УдалитьФайлы(Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel2"+".xls"); 
    УдалитьФайлы(Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel3"+".xls");   
    УдалитьФайлы(Константы.ТелефонияКаталогДляОтчетов.Получить()+"\iptel4"+".xls");           
        
        УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоКоду("ФК0000001");
        Профиль = УправлениеЭлектроннойПочтой.ПолучитьИнтернетПочтовыйПрофиль(УчетнаяЗапись);
        
        ИнтернетПочта = Новый ИнтернетПочта;
        ИнтернетПочта.Подключиться(Профиль);              
        
        ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;             
        КодировкаСообщения = "utf-8";
        
        ПочтовоеСообщение.Кодировка = КодировкаСообщения;                            
        // Общие свойства письма
        ПочтовоеСообщение.ИмяОтправителя  = "Отчет ";
        ПочтовоеСообщение.Отправитель     = УчетнаяЗапись.АдресЭлектроннойПочты;
        ПочтовоеСообщение.Тема            = "Отчет "+ВыборкаЛК.ЛК;              
        
        ВыборкаПочты = ВыборкаЛК.Выбрать();
        
        Пока ВыборкаПочты.Следующий() Цикл  
            
            Получатель = ПочтовоеСообщение.Получатели.Добавить();
            Получатель.Адрес           = ВыборкаПочты.Почта;
            Получатель.ОтображаемоеИмя = ВыборкаПочты.Почта;
            Получатель.Кодировка       = КодировкаСообщения;        
            
        КонецЦикла;       
        
        ТекстСообщения = ПочтовоеСообщение.Вложения.Добавить(Путь);
        ИнтернетПочта.Послать(ПочтовоеСообщение);
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. kuzev 47 16.10.17 12:03 Сейчас в теме
(1) [по поводу п. 1] если у получателя office2016, то необходимо изменить параметры безопасности в outlook/word/excel.
2. zhuntovda 1 16.10.17 07:24 Сейчас в теме
Я бы попробовал изменить папку расположения с TEMP на иную, лучше на диске другом, где нет системы. И сначала получал бы данные в таблицы значений, а потом из них уже записывал новый документ. ИМХО может помочь.
3. SaschaL 16.10.17 07:35 Сейчас в теме
Прав на папку темп нет у вас.
Как выход из данной ситуации, либо изменить расположение папки темп либо как вариант вначале записывать записывать в определенную папку файл, а потом его открывать
4. SaschaL 16.10.17 07:36 Сейчас в теме
Кстати говоря можно в системный переменных добавить еще одну папку и указать её как темп. Есть еще настройки самого экселя, которые можно перенаправить в другую папку
5. YanTsys 12 16.10.17 08:54 Сейчас в теме
Возможно ваша кнопка исполняет код на клиенте, а регзадание на сервере? У пользователя windows под которым запускаются регламентные задания на сервере есть доступ к папке temp?
6. Xershi 1486 16.10.17 09:34 Сейчас в теме
Велика вероятность что эксель повис на сервере! Пока вы код тестировали. В процессах нет лишнего?
7. Vitaly1C8 16.10.17 11:59 Сейчас в теме
Ну а где же ?
Book2.Close (false);
Оставьте свое сообщение

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