Имя: Пароль:
1C
1С v8
Не сохраняется формируемый отчет в Excel 2013
0 Vakinyan
 
11.08.14
14:11
Есть отчет. Формируется и выгружается сначала одним листом, потом формируются листы при обходе по группировкам результата запроса (того, из которого берутся данные для отчета). На предыдущих Экселях все работает огонь, формируется и сохраняется без ошибок. Если версия  равна 15.0 (Эксель 2013), вываливается ошибка типа "Метод SaveAs из класса Workbook завершен неверно" в двух местах: сначала на перемещении в создаваемой книги определенного листа(для метода Move) , второй раз при сохранении книги(метод SaveAs). Пыталась сохранять с другими типами и файлформатами - бесполезно
1 Vakinyan
 
11.08.14
14:13
ExcelObject = Новый ComОбъект("Excel.Application");
    
    // Выгружается карточка учета сырья
    Попытка
        
        ExcelObject.Displayalerts = 0;

        // 1 сформировать отчет качественного сырья ------------
        ИмяЛиста1            = "Отчет о движении сырья";
        ИмяВременногоФайла    = КаталогВременныхФайлов() + "Temp1.xls";
        
            
        ТабДок = Новый ТабличныйДокумент;
        ПечатьКарточкаУчетаСырья(ПостроительОтчетаКарточкаУчетаСырья, ТабДок, Неопределено, , "ЧГ=");
        КарточкаУчетаСырьяИнициализация(ПостроительОтчетаКарточкаУчетаСырья);
        

        ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.HTML);
                    
        ExcelObject.Workbooks.Open(ИмяВременногоФайла);
        ExcelObject.ActiveSheet.Name = СформироватьИмяЛистаExcel(ИмяЛиста1);
        
        // сохранение ------------------------------------------
        Fileformat            = -4143;
        Password            = "";
        WriterPassword        = "";
        ReadonlyRecommended    = 0;
        CreateBackup        = 0;
        
        ExcelObject.Range(ExcelObject.Cells(4, 2), ExcelObject.Cells(ТабДок.ВысотаТаблицы, 10)).Select();
        ExcelObject.Selection().NumberFormat = "# ##0,00";
        
        ExcelObject.ActiveWorkbook.SaveAs(ТекущийКаталог + ИмяФайла, Fileformat, Password, WriterPassword, ReadonlyRecommended, CreateBackup);
        
        
        // 3 сформировать отчеты сырья по группам --------------
        Расшифровка = Истина;
        ПостроительОтчетаКарточкаУчетаСырья.Выполнить();
        ВыборкаПоГруппам = ПостроительОтчетаКарточкаУчетаСырья.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Группа");
        
        Сч = 3;
        Пока ВыборкаПоГруппам.Следующий() Цикл
            
            ИмяЛистаН = ?(ЗначениеЗаполнено(ВыборкаПоГруппам.Группа) И ЗначениеЗаполнено(ВыборкаПоГруппам.Группа.Наименование), ВыборкаПоГруппам.Группа.Наименование, "Вне группы");
            
            Если Сч = 3 Тогда ИмяЛиста2 = ИмяЛистаН КонецЕсли;
            
            ИмяВременногоФайла = КаталогВременныхФайлов() + "Temp" + Сч + ".xls";
            
            Настройка                    = ПостроительОтчетаКарточкаУчетаСырья.ПолучитьНастройки(Истина, Ложь, Ложь, Ложь, Ложь);
            КарточкаУчетаСырьяИнициализация(ПостроительОтчетаКарточкаУчетаСырья, Истина);
            ПостроительОтчетаКарточкаУчетаСырья.УстановитьНастройки(Настройка, Истина, Ложь, Ложь, Ложь, Ложь);
            ЭлементОтбора                = ПостроительОтчетаКарточкаУчетаСырья.Отбор.Добавить("Группа");
            ЭлементОтбора.Установить(?(ВыборкаПоГруппам.Группа = NULL, Справочники.ГруппыВзаимозаменяемыхОбъектов.ПустаяСсылка(), ВыборкаПоГруппам.Группа));
            ЭлементОтбора.ВидСравнения    = ВидСравнения.Равно;
            ТабДок                        = Новый ТабличныйДокумент;                
            ПечатьКарточкаУчетаСырья(ПостроительОтчетаКарточкаУчетаСырья, ТабДок, Истина, Истина, "ЧГ=");
            ПостроительОтчетаКарточкаУчетаСырья.УстановитьНастройки(Настройка, Истина, Ложь, Ложь, Ложь, Ложь);
            ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.HTML);
                
            ExcelObject.Workbooks.Open(ИмяВременногоФайла);
            ExcelObject.ActiveSheet.Name = СформироватьИмяЛистаExcel(ИмяЛистаН);
            
            ExcelObject.Range(ExcelObject.Cells(4, 6), ExcelObject.Cells(ТабДок.ВысотаТаблицы, 10)).Select();
            ExcelObject.Selection().NumberFormat = "# ##0,00";
            
            Before = ExcelObject.Workbooks(ИмяФайла).Sheets(ИмяЛиста1);
            ExcelObject.ActiveSheet.Copy(Before);
            //УдалитьФайлы(ИмяВременногоФайла);
            Состояние(ВыборкаПоГруппам.Группа);
            
            Сч = Сч + 1;
            
        КонецЦикла;
        
        Расшифровка = Неопределено;
        
        Before = ExcelObject.Workbooks(ИмяФайла).Sheets(ИмяЛиста2);
        ExcelObject.Sheets(ИмяЛиста1).Move(Before);
                
        ExcelObject.Windows(ИмяФайла).DisplayWorkbookTabs = Истина;                              
        ExcelObject.Windows(ИмяФайла).TabRatio = 0.6;
        
        ExcelObject.Workbooks(ИмяФайла).SaveAs(ТекущийКаталог + ИмяФайла);
                
        Предупреждение("Файл сформирован.");
2 Vakinyan
 
11.08.14
15:14
Up
3 Vakinyan
 
12.08.14
15:28
Да неужель никто помочь не хочет
4 fmrlex
 
12.08.14
15:30
Смотри что у тебя в (ТекущийКаталог + ИмяФайл)
5 fmrlex
 
12.08.14
15:33
+(4)  Может так(ТекущийКаталог() + ИмяФайл)?
6 Vakinyan
 
13.08.14
13:34
(5) В Текущем Каталоге все огонь и хорошо отрабатывает. Например, эту строчку
ExcelObject.ActiveWorkbook.SaveAs(ТекущийКаталог + ИмяФайла, Fileformat, Password, WriterPassword, ReadonlyRecommended, CreateBackup);
Оно отрабатывает без ошибок.
7 Лодырь
 
13.08.14
13:59
If Val(Application.Version) < 12 Then
  ' You use Excel 97-2003
  FileExtStr = ".xls": FileFormatNum = -4143
Else
  ' you use excel 2007 or later
  FileExtStr = ".xls": FileFormatNum = 56
End If
8 Vakinyan
 
13.08.14
16:08
(7) Делала. Не работает. Фишка в том, что и на 2007, и на 2010  мой код работает. На 2013 - нет
9 Vakinyan
 
20.08.14
14:34
up
10 dk
 
20.08.14
15:02
справку по saveas в 2013 смотрел?
11 Chum
 
20.08.14
15:09
Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select
12 Vakinyan
 
21.08.14
10:33
(10) Смотрела, написано все то же самое, что и у (11) . Проблема в том, что нифига эт не помогает. То есть я пробовала сохранять workbook и в формате xlsx с файлформатом 51, и в в формате xls c 56
13 Vakinyan
 
25.08.14
10:04
эх
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший