Меню

Ошибка при вызове метода контекста получитьcomобъект

   Солнце

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) сетевой путь такие же ошибки делает

   lEvGl

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) Конечно

   Serginio1

14 — 01.08.13 — 10:09

   Лефмихалыч

Модератор

15 — 01.08.13 — 10:10

(13) не верю

   wowik

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

да и не через шару надо на сервер файлы передавать, а через временное хранилище

   lEvGl

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

   lEvGl

22 — 01.08.13 — 10:16

(21) возможно админ менял пользователя, из под которого rphost запускается

   Лефмихалыч

Модератор

23 — 01.08.13 — 10:16

(21) тебе эксель русским языком все сказал в (3)

   Галахад

24 — 01.08.13 — 10:17

Права можно так проверить:

Файл = Новый Файл(ИмяФайла);

Файл.Удалить()

   Serginio1

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, созданный при отладке ы файловом варианте и корректно не закрытый при завершении обработки. Этот процесс залочил файл.

   lEvGl

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

ПРОВЕРЬТЕ через удаление

Перейти к контенту

Функция ПолучитьCOMОбъект предоставляет доступ к HTML-документу. Решение проблемы 1С 8 зависание функции ПолучитьCOMОбъект() и ПолучитьCOMОбъект(excel.application) в следующем: остановка обработки, отчета, документа в 1С 8 отладчике на данной функции, характеризуется отсутствием нужных каталогов в системе для Microsoft Excel и/или прав пользователей на эти каталоги.

Что нужно делать? Необходимо создать папку!

в Windows Server x64:

для Microsoft Office 2007: C:WindowsSysWOW64configsystemprofileDesktop

для Microsoft Office 2010: C:WindowsSystem32configsystemprofileDesktop

в Windows Server x86:

для Microsoft Office 2007 или Microsoft Office 2010: C:WindowsSystem32configsystemprofileDesktop

Что касается использование SQL версии — необходимо добавить права пользователю USR1CV82 на созданные папки. В файловых версиях — достаточно прав выдаваемых самой системой.

После всех действий компьютер (сервер) нужно перезагрузить!

Если Вы хотите заказать услугу «Выполнение регламентных операций (чистка, свёртка, исправление ошибок) и администрирование 1С» (код 2.9). Пожалуйста, ознакомьтесь с прайс-листом и оформите заявку через контактную форму.

Copyright©, «Программист 1С в г.Минске», 05.11.2007

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Добрый день, возникла следующая проблема. Имеется модуль с простыми функциями типа отметить документ на удаление по номеру или провести документ по номеру. Проблема с методом .ПолучитьОбъект — при вызове функции ПометитьРасходнаяНакладная через COM из .NET приложения вылетает исключение, которое не перехватывается в теле функции ПометитьРасходнаяНакладная и более того некорректно сериализуется. То есть на стороне .NET приходит объект Exception с указателями-null’ами, не несущий никакой информации. Что интересно: — если эти функции вызываются непосредственно из 1С, то все прекрасно работает. — если изменить тип документа с РасходнаяНакладная на некоторый другой, то все выполняется корректно. Есть еще как минимум один тип, для которого это также не работает. Заметить отличия этих типов документов от других, с которыми все ок, не удалось — гарантируется, что сам вызов через COM осуществляется, если убрать проблемный вызов .ПолучитьОбъект, то вызов отрабатывает корректно -COM соединение выполняется под тем же аккаунтом, под которым функция корректно работает при выполнении через 1С:Предприятие -другие методы типа .ПолучитьФорму этой же ссылки работают корректно Итого: непонятная ошибка, которая не ловится trycatch и возникает при вызове метода .ПолучитьОбъект на ссылках документа типа РасходнаяНакладная при соединении через COM. .NET код: Могу выложить код GetConnection если необхдимо

Сначала найти, потом проверить найденность, потому уже получать объект

Гарантируется, что объект с заданным номером в базе есть и, повторюсь, этот код с такими же параметрами корректно отрабатывает будучи вызванным через 1С Предприятие. Да и наверняка тогда поймалось бы исключение в самой функции ПометитьРасходнаяНакладная

Посмотри подписчики при записи. И посмотри стоит ли у этих модулей галка внешнее соединение

Или смотри модуль РасходнаяНакладная, что там вызывается при инициализации в модуле расходной накладной

Спасибо за помощь, но не вижу каких-либо проблем. Насчет ПриЗаписи, причем оно тут? Галка «Внешнее соединение» установлена, однако и с ней и без нее эффект одинаковый. Работает с другими документами и другими методами и без «внешнего соединения». В модуле РасходнаяНакладная вообще нет никаких функций, связанных с инициализацией (или я их не вижу). Вообще чисто гипотетически как может возникнуть описанная ситуация? 1) не ловится исключение в ПометитьРасходнаяНакладная 2) работает через 1С Предприятие 3) не работает через COM и только для некоторых типов документов

НайтиПоНомеру(Номер) — это гарантированно не найдет. Пиши не через задницу, а по-человечески НайтиПоНомеру(Номер, Дата)

четвертый день вижу 1С, НайтиПоНомеру(Номер) находит то, что нужно, повторюсь, код работает будучи вызванным через 1С Предприятие. Поискал по коду 1С — почти всюду НайтиПоНомеру используется без второго аргумента. Из того, что сейчас прочитал — второй аргумент целесообразен при использовании периодичной нумерации (так?). В свойствах РасходнаяНакладная Периодичность «Непериодический». Готов попробовать тем не менее. Не представляю только какую дату указывать. Дата?

Не функций а кода который вызывает функции из других модулей. Код инициализации это код после последней процедуры функции модуля

Спасибо за пояснение. В модуле объекта РасходнаяНакладная кроме процедур и одной глобальной переменной нет никакого другого кода.

Сделай проверку на неопределено Если док=неопределено Тогда возврат «Не найден документ»; а на строчке документ=Док.ПолучитьОбъект; в отладчике «Шагнуть В»;

Изменил: Запустил под отладчиком привязав вызов ПроведениеДокументов.ПометитьРасходнаяНакладная(«00008121»,Истина,Ложь); к одному из событий интерфейса. В результате ПолучитьОбъект отработал корректно. При «Шагнуть В» вход внутрь не выполнился. Я не знаю типично ли это для системных вызовов в 1С или мне нужно изменить какие-то настройки отладчика. Проверил и вызов через COM — все то же исключение, которое даже не удается идентифицировать.

не понимаю смысла. я и так знаю какой оператор приводит к ошибке, как мне мои же сообщения в журнале должны помочь? более реально было бы запустить отладчик удаленно, но в моей ситуации на одном физическом сервере запущены две базы (Dev и Production). Как я понимаю, переключение сервера в режим Debug приведет к замедлению в работе Production базы

Ну хотя бы в Исключение ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная», А откуда знаешь, если отладчиком не пользуешься?

первый пост, объяснил все там. Как до этого дошел — опытным путем, вызывая разные методы вместо .ПолучитьОбъект и проверяя другие типы документов (не РасходнаяНакладная). Возвращается «Ok» (ну или я ставил Возвраты сразу до или после оператора с .ПолучитьОбъект). Если документ не найден, вызывается некорректный метод или не указаны обязательный аргументы (что я только не делал) и т.д. и т.п., то исключение в ПометитьРасходнаяНакладная перехватывается и мне на .NET клиент возвращается ошибка «Описание='» + Инфо.Описание + «‘»; Еще раз — ошибка в .ПолучитьОбъект для документа типа РасходнаяНакладная при соединении через COM. Это ОЧЕНЬ странно и именно поэтому я пишу все это. Я не вижу никакого смысла имея Исключение писать

ну разобрались же. Дату надо указать. Почему странно? Детский сад. ведь понятно же и во всех букварях написано, что по COM надо все параметры указывать, а иначе будет параметр NULL.

разобрались? По-моему нет. Дальше начала не продвинулись

Не пиши. А вообще то всегда хорошо регистрировать ошибки и знать почему и когда они произошли. При этом ошибка у тебя не возвращается. Хозяин барин.

имхо, тут бесполезно что-то пояснять

добавил, проверил, предсказуемо в журнал ничего не добавилось. Проблема все та же — невозможно даже перехватить КОНКРЕТНО ЭТО исключение в 1С, соответственно ничего не возвращается и не пишется в журнал. Писал выше, что другие ситуации типа некорректного метода или некорректных параметров отлично перехватываются и на стороне .NET’а (даже) я получаю соответствующую диагностику. Почему так — не знаю, это и хотел понять малой кровью.

НЕ а         Если ссылка = Неопределено ИЛИ ссылка.Пустая ————-

Ну можно еще потрассировать ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

А, и попробуйте не ИнформацияОбОшибке, а ОписаниеОшибки.

а какая платформа точно ? ТИИ делал базы ?

заметил появление записи в журнале «Описание=’Error calling context method (ПолучитьОбъект)» появляется она далеко не всегда и не сразу после вызова (то есть я уже получил результат, а запись в журнале появляется с приличной задержкой). Получается, Ваша правда. Что можно об этом сказать? Насчет ТИИ — узнал об этом только сейчас, запустил тестирование и, может быть, зря — уже несколько минут конфигуратор висит.

Добавь еще  Инфо.Описание + «‘»+Инфо.ИмяМодуля+ «‘»+Инфо.НомерСтроки

«Описание=’Error calling context method (ПолучитьОбъект)’; ‘ОбщийМодуль.ПроведениеДокументов.Модуль’; 22;» Строка 22 это документ = ссылка.ПолучитьОбъект;

тебе уже сказали нихрена он сылку не получил, без указания  периода найтипономеру не работает по ком

а вот это сработало, вопрос как быть дальше? в интерфейсе 1C Предприятия этот документ есть и без каких-либо видимых проблем, также наблюдаю его в базе уже давно исправил, так что мимо

вызов .ПолучитьОбъект выполняет код вне процедур в модуле объекта, может туда копать.

Посмотри подписчики. Ошибка может  происходить при компиляции модуля

Установи в конфигураторе ПараметрыМодулипроверка галку напротив внешнее соединение. И сделай проверку модуля или проверка модулей в меню конфигурация

Я ошибся с утверждением насчет ЗначениеЗаполнено(ссылка). Все нормально и через COM. сделал, в модуле РасходнаяНакладная нашлась ошибка {Документ.РасходнаяНакладная.МодульОбъекта(201,98)}: Переменная не определена (глВалютаУпр) глВалютаУпр как я понял — глобальная переменная, устанавливаемая при запуске приложения строка 201 с ошибкой это в Процедура ОбработкаПроведения вызов которой так и не осуществляется, ошибка в ПолучитьОбъект — раньше, может ли все равно это быть причиной? Заметил, что подобной ошибки для «Толстый клиент» нет. И тем не менее. Как-то удалось получить подробную ошибку в журнале {ОбщийМодуль.ПроведениеДокументов.Модуль}: Error calling context method (ПолучитьОбъект)             документ = ссылка.ПолучитьОбъект; because: No element selected! то есть проверка ЗначениеЗаполнено(ссылка) проходит, а дальше не удается получить объект.

Так, это все в модуле «Модуль обычного приложения», а в «Модуль внешнего соединения» ничего нет. Режим запуска приложения — «Обычное приложение». В этом причина?

Да :). там уже другие ошибки, но они хотя бы «постоянны» и информативны. Спасибо

Для интереса сделай так #Если НЕ ВнешнееСоединение Тогда Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(глВалютаУпр,Дата)); #иначе Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(Константы.ВалютаУправленческогоУчета.Получить,Дата)); #КонецЕсли

Или пропиши в модуле внешнего соединения эту переменную и метод

ну я сразу так и сделал, таким образом заработало

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

04.05.2022

В некоторых случаях при обмене с контролирующими органами возникает следующая ошибка (текст из журнала регистрации):

{Обработка.ДокументооборотСКонтролирующимиОрганами.МодульОбъекта(66473)}: Ошибка при вызове метода контекста (ReceiveUpdatedPacket)

XDTOРезультат = Сервис.ReceiveUpdatedPacket(Строка(ИдентификаторАбонента),ДатаОбновленияФайлаНаСервере);

по причине:

При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://regservice.keydisk.ru/}:RegService:ReceiveUpdatedPacket()

по причине:

При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка работы с Интернет: Удаленный узел не прошел проверку

по причине:

Ошибка работы с Интернет: Удаленный узел не прошел проверку

Способ исправления:

1. Необходимо закрыть программу 1С.

2. В папке с платформой найти файл cacert.pem, скопировать его в любую папку на случай неудачной попытки.

3. Далее в папку с платформой залить новый файл cacert.pem с заменой.

    Архив файла cacert.pem для замены доступен по ссылке https://its.1c.ru/db/files/1CITS/EXE/cacert/cacert.zip

4. Запустить 1С и попробовать еще раз обменяться с контролирующими органами.

Возврат к списку

  1. 20.12.2016, 13:59


    #1

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию COM-объект и Excel

    Создаю COM-объект и пытаюсь открыть файл Excel:
    ex=Новый ComОбъект(«Excel.Application»);
    ex.WorkBooks.Open(Файл);
    Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

    Ошибка при вызове метода контекста (Open)
    ex.WorkBooks.Open(Файл);
    по причине:
    Неизвестная ошибка
    Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
    Если что-то с Excel, то что?


  2. 20.12.2016, 15:25


    #2

    avm3110 вне форума


    Гордость форума 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-х разрядного сервера)?


  3. 20.12.2016, 15:55


    #3

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все очень просто.
    Файловая база.
    Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
    Никакого клиент-серверного режима нет.


  4. 20.12.2016, 16:31


    #4

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    А попробуй «завернуть» в Попытку

    Что выдаст?

    Попытка
    Excel = Новый COMОбъект(«Excel.Application»);
    Excel.WorkBooks.Open(ИмяФайла);
    Состояние(«Обработка файла Microsoft Excel…»);
    Исключение
    Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;


  5. 20.12.2016, 17:04


    #5

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка
    ОписаниеОшибки()=»»


  6. 20.12.2016, 17:25


    #6

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    [QUOTE=lilyapo;469920]Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка

    похоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?

    Попробуй подключиться к открытому «ручками» экселю

    Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.


  7. Пользователь сказал cпасибо:


  8. 20.12.2016, 17:41


    #7

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все получилось!
    Спасибо огромное, фантастика!:dance:


  9. 13.09.2018, 12:20


    #8

    KrisLis вне форума


    Гость форума


    По умолчанию Re: COM-объект и Excel

    Цитата Сообщение от lilyapo
    Посмотреть сообщение

    Все получилось!
    Спасибо огромное, фантастика!:dance:

    Пожалуйста. расскажите, как решили проблему.
    Такая же ситуация на одном из компьютеров. Перепробовали все рекомендации из интернета. Ничего не помогает.


  10. 13.09.2018, 13:10


    #9

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Попробуй подключиться к открытому «ручками» экселю

    Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
    Так я справилась с проблемой


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при вызове метода контекста установить монопольный режим
  • Ошибка при выполнении запроса get к ресурсу index html