|
Альфа-Авто: Неизвестная ошибка открытия отчета в 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)?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |