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
ПРОВЕРЬТЕ через удаление
Перейти к контенту
Функция Получить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С и попробовать еще раз обменяться с контролирующими органами.
Возврат к списку
-
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, потому что он был активен последним.
Так я справилась с проблемой