Имя: Пароль:
1C
1С v8
COM объект Excel.Application ошибка при сохранении файла
0 shushik
 
19.06.14
15:04
Здравствуйте. У меня возникла проблема с COM объектом "Excel.Application". В момент сохранения файла Excel из 1С с помощью  метода  SaveAs() возникает ошибка.
База 1С серверная. Ошибка возникает только при работе с клиента запущенного на другой машине (не на сервере, где крутится 1С). Если запускать клиент на сервере, где крутится 1С, то все отрабатывает отлично.
Выполняю следующий код:
&НаКлиенте
Процедура ВыгрузитьДанныеВExcel(Команда)
    ПолноеИмяФайла=ПолучитьПутьКФайлу();
    СохранитьЛистExcel(ПолноеИмяФайла);
КонецПроцедуры

&НаКлиенте
Функция ПолучитьПутьКФайлу()
    ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    ДиалогСохраненияФайла.Заголовок = "Сохранение файл Microsoft Excell";
    ДиалогСохраненияФайла.Фильтр = "Лист Excel (*.xls)|*.xls|Лист Excel2007-... (*.xlsx)|*.xlsx";      
    Если ДиалогСохраненияФайла.Выбрать() Тогда
        ПолноеИмяФайла = ДиалогСохраненияФайла.ПолноеИмяФайла;
    Иначе
        ПолноеИмяФайла= "";
    КонецЕсли;
    Возврат ПолноеИмяФайла;
КонецФункции


&НаСервере
Процедура СохранитьЛистExcel(ПолноеИмяФайла)
    ExcelПриложение = Новый COMОбъект("Excel.Application");
    Книга = ExcelПриложение.WorkBooks.Add();
    Книга.SaveAs(ПолноеИмяФайла);
    ExcelПриложение.Quit();
КонецПроцедуры

Ошибка возникает на строке  Книга.SaveAs(ПолноеИмяФайла) .
Текст ошибки следующий:
{Форма.Форма.Форма(28)}: Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Office Excel): Microsoft Office Excel cannot access the file 'C:\Выгрузка в Excel\995D4090'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
Больше всего мне не понятно, то, что  в качестве входного параметра метода  SaveAs()  передается путь «C:\Выгрузка в Excel\НовыйЛист.xls»,  а система  ругается на путь «C:\Выгрузка в Excel\995D4090».  Почему к указанному во входном параметре пути приписывается какая-то ерунда? Естественно такого каталога не существует и система не может получить к нему доступ. Откуда этот путь взялся не понятно. Подскажите, пожалуйста, куда копать.
1 ДенисЧ
 
19.06.14
15:06
Вроде по-русски написано "annot access the file"...
2 shushik
 
19.06.14
15:10
(1) Да к файлу C:\Выгрузка в Excel\995D4090 доступ получить не может, но ведь к нему и не нужно. Переменная ПолноеИмяФайла в момент вызова метода  Книга.SaveAs(ПолноеИмяФайла) равна C:\Выгрузка в Excel\НовыйЛист.xls
3 f_vadim
 
19.06.14
15:12
(2) это ещё надо проверить, ведь может быть и ""
4 f_vadim
 
19.06.14
15:14
ааааа... на сервере!
5 shushik
 
19.06.14
15:28
(4) Кажется понятно в чем проблема. Путь куда сохранять я выбираю на клиенте, а Excel открывается и сохраняется на сервере, и соответственно путь который был передан система ищет на сервере, а его там нет(. Но тогда не пойму как сохранить этот файл на клиенте и возможно ли это в случае если все действия с Excel делаются на сервере.
6 f_vadim
 
19.06.14
15:37
(5) бинго!

делать всё на клиенте. остальные способы через жпо.
7 f_vadim
 
19.06.14
15:39
плюс на сервере может не быть офиса.
вообще зачем офис на сервере?
8 shushik
 
19.06.14
15:42
(6) (7)  ))) На клиенте делать это очень ресурсоемко, я привела в примере сильно упрощенный код. Хотелось бы все-таки делать запись в Excel на сервере. Может быть, есть возможность каким-то образом сохранить файл на сервере, а потом перетащить его на клиент?
9 f_vadim
 
19.06.14
15:47
(8) Ресурсоёмко, это много сохранять в эксель? Или много обрабатывать данных?
Можно обработку сделать на сервере, а данные для записи вернуть на клиента, скажем, в массиве или массиве структур.

Ну или как-то так:
http://help1c.com/faq/view/1407.html
10 ДенисЧ
 
19.06.14
15:50
Используй ПолучитьИмяВременногоФайла() а потом через Хз возвращай клиенту
11 Kalambur
 
19.06.14
15:56
(8) Катя, используй хранилище
12 shushik
 
19.06.14
17:25
(9) (10) (11) Спасибо огромное. Попробую так.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.