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

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

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


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Синтакс-помощник
Синтакс-помощник

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

Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Проблемы с ПолучитьCOMОбъект ☑ 0

Солнце

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

lEvGl

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

Serginio1

01.08.13

10:09

15

Лефмихалыч

модератор

01.08.13

10:10

(13) не верю

16

wowik

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

lEvGl

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

lEvGl

01.08.13

10:16

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

23

Лефмихалыч

модератор

01.08.13

10:16

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

24

Галахад

01.08.13

10:17

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

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

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

25

Serginio1

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

lEvGl

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) тогда я знаю ответ — не твой день

34

lEvGl

01.08.13

10:21

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

Ошибка ПолучитьCOMОбъект ☑ 0

casio

03.12.09

22:16

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

Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Интерфейс не поддерживается

XLSФайл = ПолучитьCOMОбъект(«C:\DATA\DATA.XLS»);

1

Prikum

03.12.09

22:20

Может быть сначала Exel.Application?

2

Чайник Рассела

03.12.09

22:20

(1) зачем? и так должно работать

3

Prikum

03.12.09

22:22

(2) Я просто предположил!

4

Чайник Рассела

03.12.09

22:25

(0)а эксель то стоит?

5

casio

03.12.09

22:25

операционка Win7

6

casio

03.12.09

22:25

1c 8.1.15.13

7

Чайник Рассела

03.12.09

22:25

я делаю так

////////////////////////////////////////////////////////////////////////////////

// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

// Проверяет возможность открытия файла Excel

//

// Параметры:

//   ПутьКФайлу    — Строка — Путь до файла Excel

//        

// Возвращаемое значение

//                       — Булево

Функция ОткрытьФайл(ПутьКФайлу)

   
   Результат = Истина;

   Попытка

       Эксель =  ПолучитьCOMОбъект(ПутьКФайлу);

   Исключение

       Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

       Предупреждение(«Не удалось открыть файл «»» + ПутьКФайлу + «»»»);

       Результат = Ложь;

   КонецПопытки;

   
   Возврат Результат;

   
КонецФункции

8

casio

03.12.09

22:25

стоит 2007

9

casio

03.12.09

22:28

Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
           XLSФайл = Новый COMОбъект(«V8.Application»);
Еще ошибка.

10

Чайник Рассела

03.12.09

22:34

(9)     V8 = Новый COMОбъект(«V81.ComConnector»);

11

Чайник Рассела

03.12.09

22:35

(9) телепатирую: у тебя 64-х битная винда

12

casio

03.12.09

22:39

(11) нет, у меня 32-х разрядная

13

Чайник Рассела

03.12.09

22:40

(12) тогда файл сервер

14

casio

03.12.09

22:41

(9)V8 = Новый COMОбъект(«V81.ComConnector»); работает, спасибо

15

casio

03.12.09

22:41

XLSФайл = ПолучитьCOMОбъект(«C:\DATA\DATA.XLS»); а как это победить?

16

Чайник Рассела

03.12.09

22:44

(15) файл-сервер?

17

casio

03.12.09

22:58

нет

18

casio

03.12.09

23:03

Если делаю так
           XLSФайл = Новый COMОбъект(«Excel.Application»);
           XLSФайл.Open(«C:\DATA\DATA.XLS»);
выдает такую ошибку:
Метод объекта не обнаружен (Open)
           XLSФайл.Open(«C:\DATA\DATA.XLS»);

19

Чайник Рассела

03.12.09

23:04

(18) сделай реквизит см. (7) и не ипи мозг

20

casio

03.12.09

23:10

(19) Сделал как (7), выдало ошибку
Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Класс не зарегистрирован

21

Axel2009

03.12.09

23:12

экселя нет?

22

casio

03.12.09

23:15

есть 2007

23

Axel2009

03.12.09

23:22

(22) скопированный но неустановленный. эксель не установлен корректно, хоть и запускается..

24

casio

03.12.09

23:27

(23) попробую переустановить

25

casio

03.12.09

23:59

переустановил, не помогло

26

casio

04.12.09

00:36

Excel     = Новый COMОбъект(«Excel.Application»);
       WB         = Excel.Workbooks.Open(ИсточникФайла);

так заработало.

Всем спасибо за помошь.

27

ilpar

04.12.09

07:24

(0)На 2007 офисе вчера также было …
функция ПолучитьCOMОбъект() на интерфейс ругалась. Х.з. что это


114

Решение вопроса:

1) Войдите на сервер 1С (т.е где базы 1С) с правами администратора. 2. Зайти в Пуск>Панель управления>Администрирование>Службы> Найти в списке служб службу «Агент сервера 1С:Предприятия 8.3» / «1C:Enterprise 8.3 Server Agent» и остановить её. 2) Найдите папку reg_1541 или ввести в адресной строке «%ProgramFiles%\1cv8\srvinfo\reg_1541\» (расположение зависит от разрядности установленного сервера 1С) . 3) Откройте каталог snccntx / (пример C:\Program Files\1cv8\srvinfo\reg_1541\snccntx9ea019eb-ccdd-41c3-ac92-75661dfadd19). 4) Удалите файлы snccntx.00000000 и snccntx с расширением *.dat — как раз искомые сеансовые данные. 5) Зайти в Пуск>Панель управления>Администрирование>Службы> Найти в списке служб службу «Агент сервера 1С:Предприятия 8.3» / «1C:Enterprise 8.3 Server Agent» и запустить службу! Дополнительно почистить кэш пользователя зайдя в каталоги C:\Пользоватеть\Имя_Пользователя\AppData\Roaming\1C\1cv8\ или C:\Пользоватеть\Имя_Пользователя\AppData\Local\1C\1Cv8 удалить в каталогах буквенно циферные папки. Всё готово к работе.

Информация
Комментировать статьи на сайте возможно только в течении 31 дней со дня публикации.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с ошибка при вызове метода контекста найтипореквизиту
  • 1с ошибка файл базы данных поврежден 1cv8tmp 1cd
  • 1с ошибка удаления сеанса ошибка операции администрирования
  • 1с ошибка установлен безопасный режим выполнение операции запрещено
  • 1с ошибка установки соединения ожидается возможность запуска

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: