Имя: Пароль:
1C
Админ
Альфа-Авто: Неизвестная ошибка открытия отчета в Excel
0 Mikhail Volkov
 
14.02.19
18:22
При открытии (сохранении) отчета, сформированного в Альфа-Авто, в Excel 2010 стала появляться Неизвестная ошибка:
{ОбщаяФорма.Отчет.Форма(962)}: Ошибка при вызове метода контекста (Open)
    Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
по причине:
Неизвестная ошибка
Вроде на форуме 1С-Рарус нашел решение подобной проблемы https://rarus.ru/forum/messages/forum7/topic10978/message62444/#message62444, но замена расширения у файла tmpxls.xls на xlsx мне не помогла:
Произошла исключительная ситуация (Microsoft Excel): Не удается открыть файл "tmpxls.xlsx", так как формат или расширение этого файла являются недопустимыми. Убедитесь, что файл не поврежден и расширение его имени соответствует его формату
    Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xlsx");    //+МВ 14.02.2019 xls дает Неизвестная ошибка
по причине:
Произошла исключительная ситуация (Microsoft Excel): Не удается открыть файл "tmpxls.xlsx", так как формат или расширение этого файла являются недопустимыми. Убедитесь, что файл не поврежден и расширение его имени соответствует его формату

А настройках безопасности Excel затрудняюсь... Дело в том, что КаталогВременныхФайлов(), в который пишется tmpxls.xls, находится D:\Users\mv\AppData\Local\Temp\3\. Не знаю, как его назначает система? А пытаюсь добавить его в Надежное расположение, и не дает, говорит не является допустимым!? https://jpegshare.net/e7/32/e7329ffaad896b0109bb8f5689f1e368.jpg.html
Как побороть проблему?
1 OldCondom
 
14.02.19
18:27
Так измени код, где он там путь выбирает.
2 OldCondom
 
14.02.19
18:27
вместо КаталогВременныхФайлов() подставь свое
3 Mikhail Volkov
 
14.02.19
19:32
(2) Подставил в Надежное расположение D:\1с-temp\mv\, прописал в коде: КаталогВременныхФайловExcel = "D:\1с-temp\mv\"; вместо КаталогВременныхФайлов(). Теперь:
{ОбщаяФорма.Отчет.Форма(962)}: Ошибка при вызове метода контекста (Записать)
        ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайловExcel + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
по причине:
Ошибка при выполнении файловой операции  'D:\1с-temp\mv\tmpxls.xls'. -2147287037(0x80030003): Путь %1 не найден.
4 Мимохожий Однако
 
14.02.19
19:48
Присвой путь какой-нибудь переменной и убедись, что значение из отладчика является реальным и доступным
5 Garykom
 
гуру
14.02.19
19:52
>стала появляться Неизвестная ошибка

Признавайтесь что меняли что стала ошибка появляться? Одмины с правами на сервере не игрались?
6 Mikhail Volkov
 
14.02.19
20:21
(5) Говорят ничего, только обновления ставились.
7 _Дайвер_
 
14.02.19
20:25
(6) бздят
8 Mikhail Volkov
 
15.02.19
06:51
(2) > не поленился и проверил, что проблема именно в данной настройке - в коде жестко поменял КаталогВременныхФайлов() на тестовую "D:\Temp\" + прописал ее в доверенные (Excel дал добавить)
Такое решение проблемы возможно для сетевых пользователей, работающих каждый на своем компьютере (под ХР или 2003). А у меня Альфа-Авто на сервере-терминале 2008R2, где каждому пользователю назначаются свои папки, в т.ч. временные. Мне назначена D:\Users\mv\AppData\Local\Temp\, причем mv - Mikhail Volkov. Наверняка в системе, где назначаются эти папки (не нашел где?) прописывается %UserName%. Мне сисамин написал: Чтоб не создавать под каждого пользователя его подкаталог используй примерно такую конструкцию:
set up=d:\1C-Temp\
set un=%UserName%
set ud=%UserDnsDomain%
set КаталогВременныхФайловExcel="%up%%un%.%ud%"
if not exist %КаталогВременныхФайловExcel% md %КаталогВременныхФайловExcel%
Как ее прописать в 1С?
9 Garykom
 
гуру
15.02.19
07:06
(8) Ты понимаешь что сервер 1С запускается от другого юзера не от того что клиент 1С ?

Или у вас там файловая база?
10 Mikhail Volkov
 
15.02.19
08:03
(9) Рабочая база SQL, а отлаживаю в файловой копии - одна и та же ошибка:
{ОбщаяФорма.Отчет.Форма(963)}: Ошибка при вызове метода контекста (Open)
        Excel.Workbooks.Open(КаталогВременныхФайловExcel);
по причине:
Неизвестная ошибка
и для расширения xls, и для xlsx.

Где в системе назначается КаталогВременныхФайлов()? Хочу ее поменять, хотя бы под собой для проверки.
11 Mikhail Volkov
 
15.02.19
10:27
К https://jpegshare.net/e7/32/e7329ffaad896b0109bb8f5689f1e368.jpg.html
Каталог D:\Users\mv\AppData\Local\Temp\3\ и D:\Users\mv\AppData\Local\Temp\ не дает сохранить в Надежное расположение. А папку D:\Users\mv\AppData\Local\ дало с галочкой "Также доверять всем вложенным папкам". Но Неизвестная ошибка осталась. Видимо добавить КаталогВременныхФайлов() в Надежное расположение расположение мало... что-то еще. А что?
12 Mikhail Volkov
 
16.02.19
05:22
Сисадмины удалили все обновления после 13.02.2019. К сожалению не помогло, Неизвестная ошибка осталась.
13 hhhh
 
16.02.19
06:40
(10) попробуй тогда

Excel.Workbooks.Open(КаталогВременныхФайловExcel + "tmpxls.xlsx");

или

Excel.Workbooks.Open(КаталогВременныхФайловExcel + "\tmpxls.xlsx");
14 Мимохожий Однако
 
16.02.19
06:41
Используй ПолучитьИмяВременногоФайла()
Потом переименовывай куда удобно
15 Mikhail Volkov
 
16.02.19
10:43
(13) Пробовал - ошибка в (0): "Не удается открыть файл "tmpxls.xlsx", так как формат или расширение этого файла являются недопустимыми..." из-за того, что в команде: ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS); заменил только одно расширение. А оба заменил на xlsx, то как прежде "Неизвестная ошибка".
16 Necessitudo
 
16.02.19
22:13
Может таки покажешь полный код, а не будешь кусочки вываливать?
17 Mikhail Volkov
 
17.02.19
07:14
(16) Одна из функций (самая короткая) без каких либо изменений (всего их 4):

// Открыть отчет в формате Excel
Процедура ОткрытьВExcelТабличныйДокумент(Excel, ДокументРезультат) Экспорт
        
        ДокументРезультат.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.HTML);
        Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
        tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
        КнигаExcel = Excel.Workbooks.Add();
        ЛистExcel = КнигаExcel.WorkSheets.Item(1);
        КнигаExcel.Colors = tmpBook.Colors;
        tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
        tmpBook.Close();         
        КнигаExcel.Activate();
        ЛистExcel.Activate();
        Excel.Visible = 1;

КонецПроцедуры
18 hhhh
 
17.02.19
07:32
(17) почему тип html?
19 Mikhail Volkov
 
17.02.19
08:47
(18) Другая, чуть подлиннее:

// Процедура открывает в MS Excel табличный документ или сводную таблицу
Процедура ДействияФормыОткрытьВExcel(Кнопка)
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("ОШИБКА! Приложение MS Excel отсутствует или недостаточно прав доступа!
                 |    - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
        Возврат;
    КонецПопытки;
    // Откроем табличный документ
    ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
    Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
    tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
    КнигаExcel = Excel.Workbooks.Add();
    КнигаExcel.Colors = tmpBook.Colors;
    tmpBook.Sheets(1).Copy(КнигаExcel.WorkSheets(1));
    ЛистExcel = КнигаExcel.WorkSheets.Item(1);
    //tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
    tmpBook.Close();
    //ЛистExcel.Name=ЭтаФорма.ОбъектПредставление;
    Если ЭлементыФормы.ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет Тогда
        ЛистExcel.PageSetup.Orientation = 1;
    Иначе
        ЛистExcel.PageSetup.Orientation = 2;
    КонецЕсли;
    ПолеСлева=ЭлементыФормы.ТабличныйДокумент.ПолеСлева/25.4;
    ПолеСправа=ЭлементыФормы.ТабличныйДокумент.ПолеСправа/25.4;
    ПолеСверху=ЭлементыФормы.ТабличныйДокумент.ПолеСверху/25.4;
    ПолеСнизу=ЭлементыФормы.ТабличныйДокумент.ПолеСнизу/25.4;
    ЛистExcel.PageSetup.LeftMargin = Excel.Application.InchesToPoints(ПолеСлева);
    ЛистExcel.PageSetup.RightMargin = Excel.Application.InchesToPoints(ПолеСправа);
    ЛистExcel.PageSetup.TopMargin = Excel.Application.InchesToPoints(ПолеСверху);
    ЛистExcel.PageSetup.BottomMargin = Excel.Application.InchesToPoints(ПолеСнизу);
    КнигаExcel.Activate();
    ЛистExcel.Activate();
    Excel.Visible = 1;
    Excel = "";
КонецПроцедуры    //    ДействияФормыОткрытьВExcel()
20 hhhh
 
17.02.19
09:50
(17) здесь уберите HTML

      ДокументРезультат.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.HTML);

давайте эти эксперименты на потом.
21 Mikhail Volkov
 
18.02.19
06:14
А типовых конфигурациях: УПП, КА1, КА2 есть подобные функции открытия в MS Excel табличного документа или отчета (не использую)? Чтобы понять: эта проблема чисто Альфа-Авто, или безопасности MS Excel 2010...
22 Mikhail Volkov
 
18.02.19
16:55
Внес изменения в (19):

// Процедура открывает в MS Excel табличный документ или сводную таблицу
Процедура ДействияФормыОткрытьВExcel(Кнопка)
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("ОШИБКА! Приложение MS Excel отсутствует или недостаточно прав доступа!
                 |    - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
        Возврат;
    КонецПопытки;
    // Откроем табличный документ
    ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
    ОшибкаОткрытия = Ложь;    //+МВ 18.02.2019
    Попытка
        Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
    Исключение
        Сообщить("Ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                 |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        ОшибкаОткрытия = Истина;
    КонецПопытки;    //-МВ
    tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
    КнигаExcel = Excel.Workbooks.Add();
    КнигаExcel.Colors = tmpBook.Colors;
    tmpBook.Sheets(1).Copy(КнигаExcel.WorkSheets(1));
    ЛистExcel = КнигаExcel.WorkSheets.Item(1);
    //tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
    tmpBook.Close();
    //ЛистExcel.Name=ЭтаФорма.ОбъектПредставление;
    Если ЭлементыФормы.ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет Тогда
        ЛистExcel.PageSetup.Orientation = 1;
    Иначе
        ЛистExcel.PageSetup.Orientation = 2;
    КонецЕсли;
    ПолеСлева=ЭлементыФормы.ТабличныйДокумент.ПолеСлева/25.4;
    ПолеСправа=ЭлементыФормы.ТабличныйДокумент.ПолеСправа/25.4;
    ПолеСверху=ЭлементыФормы.ТабличныйДокумент.ПолеСверху/25.4;
    ПолеСнизу=ЭлементыФормы.ТабличныйДокумент.ПолеСнизу/25.4;
    ЛистExcel.PageSetup.LeftMargin = Excel.Application.InchesToPoints(ПолеСлева);
    ЛистExcel.PageSetup.RightMargin = Excel.Application.InchesToPoints(ПолеСправа);
    ЛистExcel.PageSetup.TopMargin = Excel.Application.InchesToPoints(ПолеСверху);
    ЛистExcel.PageSetup.BottomMargin = Excel.Application.InchesToPoints(ПолеСнизу);
    КнигаExcel.Activate();
    ЛистExcel.Activate();
    Excel.Visible = 1;
    Если ОшибкаОткрытия Тогда    //+МВ 18.02.2019
        Попытка
            Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
        Исключение
            Сообщить("Повторная ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                     |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
            ЗапуститьПриложение("explorer " + КаталогВременныхФайлов());
        КонецПопытки;
    КонецЕсли;    //-МВ
    Excel = "";
КонецПроцедуры    //    ДействияФормыОткрытьВExcel()

Теперь открываются 2 Excel одинаковых файла: Книга1 и tmpxls [Режим совместимости]! При этом 1 ошибка: Ошибка открытия Excel файла: D:\Users\mv\AppData\Local\Temp\2\tmpxls.xls
    - {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(46)}: Ошибка при вызове метода контекста (Open): Неизвестная ошибка
Получается, что при 1-й попытке файл tmpxls не готов к открытию (исполнению Excel.Workbooks.Open)? Когда его можно открывать, после какой команды?
23 AllJoke
 
18.02.19
17:23
Он у вас должен в исключение попасть.
24 AllJoke
 
18.02.19
17:23
Попытка
            Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");

если это не работает, тогда в исключение

Исключение
            Сообщить("Повторная ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                     |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
            ЗапуститьПриложение("explorer " + КаталогВременныхФайлов());
25 AllJoke
 
18.02.19
17:25
Первый раз не получилось открыть, ну и пусть. Откроем второй раз. Зачем?

Попытка
        Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
    Исключение
        Сообщить("Ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                 |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        ОшибкаОткрытия = Истина;
    КонецПопытки;    //-МВ
....................
Попытка
            Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
        Исключение
            Сообщить("Повторная ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                     |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
            ЗапуститьПриложение("explorer " + КаталогВременныхФайлов());
        КонецПопытки;
26 AllJoke
 
18.02.19
17:27
ОшибкаОткрытия = Ложь;    //+МВ 18.02.2019

    Попытка
        Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
    Исключение
        Сообщить("Ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                 |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Excel = Неопределено;
        Возврат;//ОшибкаОткрытия = Истина;
    КонецПопытки;    //-МВ

И ещё надо глянуть запущены ли процессы Эксель на сервере. Возможно оин заняли ваш файл "tmpxls"
27 Mikhail Volkov
 
18.02.19
18:17
(24) При повторном открытии можно без попытки, открывается без проблем.
(25) Как зачем: при первой попытке tmpxls.xls еще не готов к открытию (я так понимаю). Открываем в конце функции... может можно раньше, но где?
(26) Открываю другой отчет, возникает ошибка: {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(43)}: Ошибка при вызове метода контекста (Записать)
    ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
по причине:
Ошибка совместного доступа к файлу 'D:\Users\mv\AppData\Local\Temp\2\tmpxls.xls'. -2147287008(0x80030020): Ресурс занят.
Раньше такого не было, по несколько отчетов в Excel открывал. Не помню как назывались, может: Книга1, Книга2, Книга3... а не tmpxls.xls? Если tmpxls.xls с 1-м отчетом закрыть, то нет этой ошибки, открывается tmpxls.xls [Режим совместимости] и Книга2 со 2-м отчетом.
28 Mikhail Volkov
 
19.02.19
07:37
2 открытых файла: tmpxls.xls [Режим совместимости] и Книга1 не нужны. Нужен только Книга1. После ее создания следует команда: tmpBook.Close(); но она в моем случае не действует, поскольку команда Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls"); в первой попытке не сработала. Решил ее вставить во 2-ю попытку:

    Если ОшибкаОткрытия Тогда    //+МВ 18.02.2019
        Попытка
            Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
            tmpBook.Close();    // Закрывает объект
        Исключение
            Сообщить("Повторная ошибка открытия Excel файла: " + КаталогВременныхФайлов() + "tmpxls.xls
                     |    - " + ОписаниеОшибки(), СтатусСообщения.Внимание);
            ЗапуститьПриложение("explorer " + КаталогВременныхФайлов());
        КонецПопытки;
    КонецЕсли;    //-МВ

Дало ошибку: Повторная ошибка открытия Excel файла: D:\Users\mv\AppData\Local\Temp\2\tmpxls.xls
    - {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(87)}: Ошибка при вызове метода контекста (Close): Неизвестная ошибка

Как мне открыть Книга1 (не записана в файл) без файла tmpxls.xls?
29 Mikhail Volkov
 
19.02.19
11:31
(21) Перенес функцию (19) из Альфа-Авто в УПП/КА1, та же самая ошибка:
{ОбщийМодуль.УправлениеОтчетами.Модуль(1753)}: Ошибка при вызове метода контекста (Open)
    Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
по причине:
Неизвестная ошибка
Функция кривая или дело в Excel?
30 Mikhail Volkov
 
19.02.19
19:03
Функция кривая: после записи файла tmpxls.xls, и перед его открытием, нужно включать видимость:
    ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
    Excel.Visible = 1;    //+dvs 19.02.2019 д.б. в этом месте, иначе не работает.
    Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
31 Mikhail Volkov
 
04.03.19
15:17
Озадачили меня: хотят Excel и весь Microsoft Office заменить бесплатным Libre Office 6.4.1.1. Возможно, как к примеру будет выглядеть процедура ОткрытьВExcelТабличныйДокумент() в (17)?