Следующий код работает на клиенте, но не работает на сервере.
ExcelПриложение = Новый COMОбъект("Excel.Application");
ExcelПриложение.WorkBooks.Open(ИмяФайла);
Ошибка проявляется только в клиент-серверном варианте базы (в файловом всё норм).
Тестировал на платформах - "8.3.5.1517" и "8.2.19.121".
Заходил на сервер, там запускал базу - ситуация аналогичная - код отрабатывает на клиенте, на сервере падает. Из этого следует, что Эксель на серваке стоит и из 1С нормально создаётся и запускает файл (который в свою очередь существует и никакими процессами не занят).
Текст ошибки:
{Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (Open)
ExcelПриложение.WorkBooks.Open(ИмяФайла);
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу '\\Sd\test\KPI.xls'. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
(12) Xershi, (8) spezc, ПРОБЛЕМА РЕШЕНА. Сначала сделал через ADO, потом нашёл ответ на первоначальный вопрос здесь
Обсуждалось не раз уже.
Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)
Эксель не предназначен для работы на сервере, ищет папку "Desktop" при её отсутствии падает. У нас даже такая была, поскольку проблема давняя и известная, но по каким-то причинам, сейчас её не было - после создания, действительно, всё заработало.
(14)Совет помог, спасибо! Но - выбор папки не в зависимости от разрядности операционной системы, а от разрядности приложения. ОС - 64 разрядная, но помогло создание папки C:\Windows\System32\config\systemprofile\Desktop
(1) Нужно либо не использовать Excel (платформа позволяет)
либо
Помогло следующее. В службах компонентов DCOMCNFG: найти Excel Application
1. На вкладке Безопасность добавить права для пользователя от которого запускается Excel
в Разрешения на запуск и активацию и в Разрешения на доступ.
2. На вкладке Удостоверение поставить Текущий пользователь. Или конкретного пользователя под кем запущен сервер 1С и его пароль.
Помогло следующее. В службах компонентов DCOMCNFG: найти Excel Application
1. На вкладке Безопасность добавить права для пользователя от которого запускается Excel
в Разрешения на запуск и активацию и в Разрешения на доступ.
2. На вкладке Удостоверение поставить Текущий пользователь. Или конкретного пользователя под кем запущен сервер 1С и его пароль.
Варианты, предлагаемые в тексте ошибки разобраны и не подходят. Т.е. файл существует, не занят другими процессами и другие файлы эксель на этот момент не открыты.
(3) spezc, было такое предположение, но непонятно каких прав. "ЧтениеТекста" и метод "Прочитать()", выполненные на сервере нормально прочитали файл, лежащий в той же папке на сервере.
Здесь обработка с формой, на которой выведены две кнопки "ОткрытьНаКлиенте", "ОткрытьНаСервере" и реквизит "ИмяФайла". Код модуля формы ниже:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ИмяФайла = "\\Sd\test\KPI.xls";
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНаКлиенте(Команда)
ОткрытьФайлЭксель(ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНаСервере(Команда)
ОткрытьНаСервере_Сервер();
КонецПроцедуры
&НаСервере
Процедура ОткрытьНаСервере_Сервер()
////Чтение текста, например, работает
//ИмяФайла = "\\Sd\test\АПолтава\KPI.txt";
//ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла);
//й = ЧтениеТекста.Прочитать();
ОткрытьФайлЭксель(ИмяФайла);// при попытке выполнения метода "Open" выдаёт ошибку
//{Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (Open)
// ExcelПриложение.WorkBooks.Open(ИмяФайла);
//по причине:
//Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу '\\Sd\test\KPI.xls'. Это может быть вызвано одной из следующих причин.
//• Имени файла или пути не существует.
//• Файл используется другой программой.
//• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОткрытьФайлЭксель(ИмяФайла)
ExcelПриложение = Новый COMОбъект("Excel.Application");
ExcelПриложение.WorkBooks.Open(ИмяФайла);
КонецПроцедуры
(12) Xershi, (8) spezc, ПРОБЛЕМА РЕШЕНА. Сначала сделал через ADO, потом нашёл ответ на первоначальный вопрос здесь
Обсуждалось не раз уже.
Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)
Эксель не предназначен для работы на сервере, ищет папку "Desktop" при её отсутствии падает. У нас даже такая была, поскольку проблема давняя и известная, но по каким-то причинам, сейчас её не было - после создания, действительно, всё заработало.
(14) Патриот, у вас какой юзер запускает агентсервера 1с?
Если этот юзер не логинился ни разу, то естественно нужно рабочий стол создать.
Значит стандартной памяти "кучи" вам хватило. Эксель не такой прожорливый к окнам оказывается.
(24) Даже по сегодняшний день! Нашел свой комментарий, проблема устранилась. Но не могу даже вспомнить что я эту проблему уже когда то решал, и что она у меня вообще уже была...
27.
Pavel_Vladivostok
5826.03.20 03:16 Сейчас в теме
(14) Спасибо Патриот, реально выручил этим постом! От себя хочу добавить что папку необходимо создавать в соответствии с версией используемой платформы, например если у вас сервер 1С x64, а клиент x32, то и папка вам понадобится C:\Windows\System32\config\systemprofile\Desktop если же клиент x64 то создавайте C:\Windows\SysWOW64\config\systemprofile\Desktop
Я бы так сказал - создайте Desktop везде, где можно и в C:\Windows\System32\config\systemprofile\Desktop и в C:\Windows\SysWOW64\config\systemprofile\Desktop. У нас все на 64, но пока не создали Desktop в 32 битном - ничего не работало
(14)Совет помог, спасибо! Но - выбор папки не в зависимости от разрядности операционной системы, а от разрядности приложения. ОС - 64 разрядная, но помогло создание папки C:\Windows\System32\config\systemprofile\Desktop
От себя ещё добавлю, что открытых процессов Excel на сервере ни одного не запущено, ни под каким пользователем.
Файл, к которому идёт обращение, можно безболезненно переименовать или переместить, что как бы намекает что никакой процесс его не держит.
бог с ней с сетью домена, неудачный пример. На самом деле при работе через локальный путь (каталог временных файлов) та же ошибка.
Недостатка памяти? рабочий процесс занимает 1.2Гб. Файлик -- крошечный на пять строк.
Про открытие файла на сервере -- я всегда был против, но клиента не переубедишь.
Создал папки выходит всё равно таже ошибка "Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Система Office обнаружила проблему с этим файлом. Чтобы обеспечить защиту компьютера, этот файл не будет открыт"
Была ошибка: Ошибка открытия листа Microsoft Excel.
{Обработка.ЗагрузкаИзExcel.Форма.Форма.Форма(1962)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Unable to get the Open property of the Workbooks class
Если возникает ошибка Ошибка при вызове конструктора (COMОбъект): -2147467262(0x80004002): Интерфейс не поддерживается , то нужно сходить в dcomcnfg принудительно вставить туда пользователя сервера 1с с его паролем, при этом если оснастка не дает этого сделать т.к. "Администратор ограничил вход в систему" или что-то в этом роде - нужно идти в gpedit.msc - Конфигурация Компьютера - Конфигурация Windows - Параметры безопасности - Локальные политики - Назначение прав пользователей - Отказать в доступе к этому компьютеру из сети - удалить USR1CV8, прописать его в DCOM и добавить в его в запретную политику обратно. gpupdate /force при этом можно не делать.
Эта ошибка у меня упорно возникает на Новый COMОбъект("Word.Application") при идентичных настройках с Excel на котором указано Удостоверение - Запускающий пользователь, и при этом работает.