01.08.13 — 09:44
Пишу так
Книга = ПолучитьCOMОбъект(Файл,»Excel.Application»);
Ошибка: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: No such interface supported
А если так
Книга = ПолучитьCOMОбъект(Файл);
Ошибка: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Moniker cannot open file
Код что первый что втрой в файловой базе выполняется на ура…
А в серверной не хочет…
На сервере установлен Excel.
Код выполняется на сервере….
Помогите справиться с проблемкой…
Модератор
1 — 01.08.13 — 09:46
(0) на сервере нет нужных COM-объектов. Установить MSOffice на сервер.
2 — 01.08.13 — 09:50
MSOffice Установлен…
3 — 01.08.13 — 09:54
Эксель = Новый COMОбъект(«Excel.Application»);
Книга = Эксель.WorkBooks.Open(Файл);
К Excel подключается а к открытию файла говорит:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
Хотя доступ есть к нему… Файл нигде не используется и он закрыт!
4 — 01.08.13 — 10:03
Никто не может помочь?…((
Модератор
5 — 01.08.13 — 10:05
(2) он установлен на клиенте, а не на сервере. Установите офис на сервер
Модератор
7 — 01.08.13 — 10:06
а, ну или файла нет на сервере.
В переменной «Файл» поди путь относительно твоей клиентской машины?
9 — 01.08.13 — 10:07
(7) сетевой путь такие же ошибки делает
10 — 01.08.13 — 10:07
а что значит «выполняется на сервере» — регламентное задание?
11 — 01.08.13 — 10:08
Нет процедура выполняется &НаСервере
Модератор
12 — 01.08.13 — 10:09
(9) а у пользователя, под которым сервер 1С предприяти запущен, права-то на шару есть?
13 — 01.08.13 — 10:09
(12) Конечно
14 — 01.08.13 — 10:09
Модератор
15 — 01.08.13 — 10:10
(13) не верю
16 — 01.08.13 — 10:10
Лефмихалыч, +100. Сам недавно с этой ерундой занимался. Все по делу.
17 — 01.08.13 — 10:11
(15) Все права настроены. Права на все даны!
Модератор
18 — 01.08.13 — 10:13
(17) Ты имя пользователя, под которым служба сервера запущена-то хоть знаешь?
Модератор
19 — 01.08.13 — 10:14
да и не через шару надо на сервер файлы передавать, а через временное хранилище
20 — 01.08.13 — 10:14
(15) если права точно есть, тогда попробуйте через ADODB
Connection = Новый COMОбъект («ADODB.Connection»);
Connection.Open («Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» + Файл + «;Extended Properties=»»Excel 8.0;HDR=Yes;IMEX=1″»»);
Catalog = Новый COMОбъект («ADOX.Catalog»);
Catalog.ActiveConnection = Connection;
ИмяЛиста = Catalog.Tables.Item(0).Name;
String = «Select * from [» + ИмяЛиста + «]»;
Recordset = Новый COMОбъект («ADODB.Recordset»);
Recordset.Open (String, Connection, 2, 3);
Пока НЕ Recordset.EOF() Цикл
Строка = СокрЛП(Строка(Recordset.Fields(1).Value));
КонецЦикла;
21 — 01.08.13 — 10:15
USR1CV82
22 — 01.08.13 — 10:16
(21) возможно админ менял пользователя, из под которого rphost запускается
Модератор
23 — 01.08.13 — 10:16
(21) тебе эксель русским языком все сказал в (3)
24 — 01.08.13 — 10:17
Права можно так проверить:
Файл = Новый Файл(ИмяФайла);
Файл.Удалить()
25 — 01.08.13 — 10:18
(17) Посмотри права DCOM
26 — 01.08.13 — 10:18
(22)Не менял
27 — 01.08.13 — 10:18
(25) Дали
Модератор
28 — 01.08.13 — 10:20
как вариант — на клиентской тачке висит срежи процессов excel.exe, созданный при отладке ы файловом варианте и корректно не закрытый при завершении обработки. Этот процесс залочил файл.
29 — 01.08.13 — 10:20
(26) может процесс экселя на сервере висит — занял файл. проверьте — (24)
30 — 01.08.13 — 10:21
(28)Это тоже проверяла
31 — 01.08.13 — 10:21
(29) НЕТУ
32 — 01.08.13 — 10:21
(24) есть права)
Модератор
33 — 01.08.13 — 10:21
(30) тогда я знаю ответ — не твой день
lEvGl
34 — 01.08.13 — 10:21
ПРОВЕРЬТЕ через удаление
Автор Истребитель, 22 июл 2015, 17:48
0 Пользователей и 1 гость просматривают эту тему.
При попытке создать COM объект Excel.Application вылезает стандартная ошибка:
Ошибка получения объекта COM: -2147467262(0x80004002): No such interface support
Однако, если открыть диспетчер задач, то приложение excel.exe запускается!
Приложение excel x32, 1Cка тоже x32.
В списках классов (HKLMSoftwareClasses) класс Excel.Application присутствует.
Права на Distributed COM дал своему юзеру, перелогинился, не помогло, дал всем (Everyone), не помогло.
База файловая.
Попробуйте так
Попытка
ОбъектЭксель = ПолучитьCOMОбъект(СокрЛП(ФайлЗагрузки));//ФайлЗагрузки - путь к файлу. строка
Исключение
Сообщить("Неудачная попытка открытия файла:"+СокрЛП(ФайлЗагрузки));
Возврат;
КонецПопытки;
КомОбъектЗагрузки = ОбъектЭксель.WorkSheets(1);
Очень забавно. Если перед вызовом функции с параметрами (Путь,Excel.Application) вызвать её без указания Excel.Application то повторный вызов уже с указанием Excel.Application работает!
Т.е. так работает:
ПолучитьCOMОбъект(ИмяФайла,)
ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")
Так не работает:
ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")
В любом случае, в дальнейшем вылезает вообще непонятная ошибка:
{Форма.Форма.Форма(47)}: Ошибка при вызове метода контекста (ПрочитатьЛистExcel)
ПрочитатьЛистExcel(,ПолучитьCOMОбъект(ИмяФайла));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'COMОбъект'
Поздравляю, походу вы открыли для себя впервые особенности управляемого приложения.
Ок, где мне почитать про эти «особенности» чтобы разобраться как выполнить такое простое задание, как чтение excel файла?
Путем проб и ошибок
Пробуйте «&НаСервере» всё это делать
Помогли — Скажи спасибо! Решил сам — поделись решением!
Не сочтите за издевательство: http://v8.1c.ru/metod/faq2/
&НаКлиенте — это только форма, видимость,доступность, условное офомление и т.д.
&НаСервере — это работа с объектами. Добавить строки, заполнить объект и т.д.
С клиента можно вызывать сервер, наоборот — нельзя.
Все прочие особенности = интернет большой, уверен справитесь
Дааа. Простейшие вещи теперь хрен сделаешь. Почитал я это. Замечательно! Погуглил даже. Простейшая задача, неясно как решать.
Я хочу создать программно документ, заполнить его на основании данных из экселя, и открыть.
На клиенте я это сделать не могу, на клиенте «Документы» неопределена (нельзя создать документ). На сервере тоже не могу, нельзя открыть форму. На клиент нельзя передать ссылку на документ (когда пытаюсь сделать «Возврат Док», где Док это новый документ, вылезает ошибка передачи данных). Гугл «1с 8.3 передача документа с сервера на клиент» ничего не дал.
Что делать?
Остается сесть в углу и плакать.
На клиенте формируете структуры с простыми данными (строки, даты и т.д.) передаете на сервер. Создаете/ищите документ на сервере и возвращаете ссылку на документ.
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
-
20.12.2016, 13:59
#1
Иногда оказывает помощь
COM-объект и Excel
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?
-
20.12.2016, 15:25
#2
Гордость форума PRO
Re: COM-объект и Excel
Сообщение от lilyapo
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?Ты открываешь Апликайшон — а как ты это открываешь (интерактивно или же на сервере)? Опять же у тебя какой эксель (32-х разрядный или же 64-х разрядный) и в каком контексте пытаешься открыть (в 32-х разрядном клиенте или же на стороне 64-х разрядного сервера)?
-
20.12.2016, 15:55
#3
Иногда оказывает помощь
Re: COM-объект и Excel
Все очень просто.
Файловая база.
Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
Никакого клиент-серверного режима нет.
-
20.12.2016, 16:31
#4
Гордость форума PRO
Re: COM-объект и Excel
А попробуй «завернуть» в Попытку
Что выдаст?
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
Состояние(«Обработка файла Microsoft Excel…»);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
-
20.12.2016, 17:04
#5
Иногда оказывает помощь
Re: COM-объект и Excel
Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибка
ОписаниеОшибки()=»»
-
20.12.2016, 17:25
#6
Гордость форума PRO
Re: COM-объект и Excel
[QUOTE=lilyapo;469920]Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибкапохоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
-
Пользователь сказал cпасибо:
-
20.12.2016, 17:41
#7
Иногда оказывает помощь
Re: COM-объект и Excel
Все получилось!
Спасибо огромное, фантастика!:dance:
-
13.09.2018, 12:20
#8
Гость форума
Re: COM-объект и Excel
Сообщение от lilyapo
Все получилось!
Спасибо огромное, фантастика!:dance:Пожалуйста. расскажите, как решили проблему.
Такая же ситуация на одном из компьютеров. Перепробовали все рекомендации из интернета. Ничего не помогает.
-
13.09.2018, 13:10
#9
Иногда оказывает помощь
Re: COM-объект и Excel
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
Так я справилась с проблемой