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

Проблемы с Получить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

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

wardamask

0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

1

1C 8.x

15.02.2016, 16:14. Показов 14118. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Help me!!!
Написал в процедуру заполнения реквизитов документа из шаблонного Word документа.
И возникла проблема что в файловом (тестовом) варианте все прекрасно работает, а в клиент-серверном ни в какую(((

Вот так ругается…
{Документ.ИсполнительныйЛист.Форма.ФормаДокумента.Форма(153)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
Об = ПолучитьCOMОбъект(ПутьКПрофилю);
по причине:
Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&НаКлиенте
Процедура ЗагрузитьПрофиль()
 
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКПрофилю = ДиалогОткрытияФайла.ПолноеИмяФайла;
            Иначе
        Текст = "ru = ""Файл не выбран!""; en = ""File not selected!""";
        Предупреждение(НСтр(Текст));
        Возврат;
    КонецЕсли;
           
Загрузка(ПутьКПрофилю);
 
КонецПроцедуры

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
&НаСервере 
Процедура Загрузка (ПутьКПрофилю) Экспорт
 
 
        Об = ПолучитьCOMОбъект(ПутьКПрофилю);
        Об.Application.Visible = 0;
                Word = Об.Application;
        ThisDocument = Word.Documents(1);
                ThisDocument.Activate();
 
...
            
КонецПроцедуры;

Подскажите пожалуйста что мне делать?



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

15.02.2016, 17:30

2

wardamask, на сервере установлен офис?



0



0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

15.02.2016, 17:34

 [ТС]

3

Да установлен



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

15.02.2016, 17:38

4

wardamask, а с сервера доступен файл который ты открываешь (путь с клиента)?

Добавлено через 48 секунд
Т.е. на компьютере А пытамся открыть файл который на компьютере Б

Думаешь он откроется?

Добавлено через 35 секунд
wardamask, просто попробуй сделать это без 1С



0



wardamask

0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

15.02.2016, 18:11

 [ТС]

5

Решил проблему так…

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 &НаКлиенте
Процедура Записать();
 
Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКПрофилю = ДиалогОткрытияФайла.ПолноеИмяФайла;
            Иначе
        Текст = "ru = ""Файл не выбран!""; en = ""File not selected!""";
        Предупреждение(НСтр(Текст));
        Возврат;
    КонецЕсли;
    
 
    
        Об = ПолучитьCOMОбъект(ПутьКПрофилю);
        Об.Application.Visible = 0;
        Word = Об.Application;
        ThisDocument = Word.Documents(1);
        ThisDocument.Activate();
                
            НаимКонтр = ThisDocument.ContentControls.Item(2).Range.Text;
            ИНН = ThisDocument.ContentControls.Item(3).Range.Text;
            Взыскатель = ThisDocument.ContentControls.Item(4).Range.Text;          
            Куратор = ThisDocument.ContentControls.Item(5).Range.Text;       
            ДатаПолученияЛистаИзЮУ = ThisDocument.ContentControls.Item(6).Range.Text;
            НомерЛиста = ThisDocument.ContentControls.Item(7).Range.Text; 
            ДатаНаправленияВОСП = ThisDocument.ContentControls.Item(8).Range.Text;
            ФИОНаправившегоЛист = ThisDocument.ContentControls.Item(9).Range.Text;   
            НомерПочтовогоИдентификатора = ThisDocument.ContentControls.Item(10).Range.Text;
            НаименованиеОСП = ThisDocument.ContentControls.Item(11).Range.Text;      
            ДатаПолученияВОСП = ThisDocument.ContentControls.Item(12).Range.Text;
            ДатаВозбуждения = ThisDocument.ContentControls.Item(13).Range.Text;
            НомерПостановления = ThisDocument.ContentControls.Item(14).Range.Text;    
            ФИОСудебногоПристава = ThisDocument.ContentControls.Item(15).Range.Text;
            КонтактнаяИнфПристава = ThisDocument.ContentControls.Item(16).Range.Text;
            ОсновнойДолг = ThisDocument.ContentControls.Item(17).Range.Text;
            Пени = ThisDocument.ContentControls.Item(18).Range.Text;            
            ПроцентыЗаПользование = ThisDocument.ContentControls.Item(19).Range.Text;  
            ГосПошлина = ThisDocument.ContentControls.Item(20).Range.Text;
            //ОплатаУслугПредставителя = ThisDocument.ContentControls.Item(21).Range.Text;
            
                
        РеквВорд = Новый Массив(21);
        РеквВорд[1]= НаимКонтр;
        РеквВорд[2]=ИНН;
        РеквВорд[3]=Взыскатель; 
        РеквВорд[4]=Куратор;     
        РеквВорд[5]=ДатаПолученияЛистаИзЮУ; 
        РеквВорд[6]=НомерЛиста;
        РеквВорд[7]=ДатаНаправленияВОСП;
        РеквВорд[8]=ФИОНаправившегоЛист;
        РеквВорд[9]=НомерПочтовогоИдентификатора;
        РеквВорд[10]=НаименованиеОСП;
        РеквВорд[11]=ДатаПолученияВОСП;
        РеквВорд[12]=ДатаВозбуждения;
        РеквВорд[13]=НомерПостановления;
        РеквВорд[14]=ФИОСудебногоПристава;
        РеквВорд[15]=КонтактнаяИнфПристава;
        РеквВорд[16]=ОсновнойДолг;
        РеквВорд[17]=Пени;
        РеквВорд[18]=ПроцентыЗаПользование;
        РеквВорд[19]=ГосПошлина;
        //РеквВорд[20]=ОплатаУслугПредставителя; 
                
        Записать1(РеквВорд);
        
        ThisDocument.Close();
КонецПроцедуры

Теперь не важно есть ли на сервере офис, главное что бы он на клиенте был. На сервер только строковые значения передаются. И как не странно работает в три раза быстрее предыдущего варианта.

Спасибо)))



0



Злой самаритянин

182 / 182 / 94

Регистрация: 24.04.2014

Сообщений: 686

15.02.2016, 18:11

6

wardamask, тоже долго возился с этим, правда в экселе, в итоге сделал все, что с экселем связано, на клиенте, специально для серверной базы. Можешь посмотреть мой пример, только там запись, а не чтение.



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

16.02.2016, 00:55

7

да не за что, главное что ты мозг включил……..



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

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

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

Автор Истребитель, 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 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

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

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

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


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

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

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

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

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

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

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

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

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

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

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

  

Солнце

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

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

wardamask

0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

1

1C 8.x

15.02.2016, 16:14. Показов 13942. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Help me!!!
Написал в процедуру заполнения реквизитов документа из шаблонного Word документа.
И возникла проблема что в файловом (тестовом) варианте все прекрасно работает, а в клиент-серверном ни в какую(((

Вот так ругается…
{Документ.ИсполнительныйЛист.Форма.ФормаДокумента.Форма(153)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
Об = ПолучитьCOMОбъект(ПутьКПрофилю);
по причине:
Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&НаКлиенте
Процедура ЗагрузитьПрофиль()
 
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКПрофилю = ДиалогОткрытияФайла.ПолноеИмяФайла;
            Иначе
        Текст = "ru = ""Файл не выбран!""; en = ""File not selected!""";
        Предупреждение(НСтр(Текст));
        Возврат;
    КонецЕсли;
           
Загрузка(ПутьКПрофилю);
 
КонецПроцедуры
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
&НаСервере 
Процедура Загрузка (ПутьКПрофилю) Экспорт
 
 
        Об = ПолучитьCOMОбъект(ПутьКПрофилю);
        Об.Application.Visible = 0;
                Word = Об.Application;
        ThisDocument = Word.Documents(1);
                ThisDocument.Activate();
 
...
            
КонецПроцедуры;

Подскажите пожалуйста что мне делать?

0

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

15.02.2016, 17:30

2

wardamask, на сервере установлен офис?

0

0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

15.02.2016, 17:34

 [ТС]

3

Да установлен

0

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

15.02.2016, 17:38

4

wardamask, а с сервера доступен файл который ты открываешь (путь с клиента)?

Добавлено через 48 секунд
Т.е. на компьютере А пытамся открыть файл который на компьютере Б

Думаешь он откроется?

Добавлено через 35 секунд
wardamask, просто попробуй сделать это без 1С

0

wardamask

0 / 0 / 0

Регистрация: 10.02.2016

Сообщений: 13

15.02.2016, 18:11

 [ТС]

5

Решил проблему так…

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 &НаКлиенте
Процедура Записать();
 
Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКПрофилю = ДиалогОткрытияФайла.ПолноеИмяФайла;
            Иначе
        Текст = "ru = ""Файл не выбран!""; en = ""File not selected!""";
        Предупреждение(НСтр(Текст));
        Возврат;
    КонецЕсли;
    
 
    
        Об = ПолучитьCOMОбъект(ПутьКПрофилю);
        Об.Application.Visible = 0;
        Word = Об.Application;
        ThisDocument = Word.Documents(1);
        ThisDocument.Activate();
                
            НаимКонтр = ThisDocument.ContentControls.Item(2).Range.Text;
            ИНН = ThisDocument.ContentControls.Item(3).Range.Text;
            Взыскатель = ThisDocument.ContentControls.Item(4).Range.Text;          
            Куратор = ThisDocument.ContentControls.Item(5).Range.Text;       
            ДатаПолученияЛистаИзЮУ = ThisDocument.ContentControls.Item(6).Range.Text;
            НомерЛиста = ThisDocument.ContentControls.Item(7).Range.Text; 
            ДатаНаправленияВОСП = ThisDocument.ContentControls.Item(8).Range.Text;
            ФИОНаправившегоЛист = ThisDocument.ContentControls.Item(9).Range.Text;   
            НомерПочтовогоИдентификатора = ThisDocument.ContentControls.Item(10).Range.Text;
            НаименованиеОСП = ThisDocument.ContentControls.Item(11).Range.Text;      
            ДатаПолученияВОСП = ThisDocument.ContentControls.Item(12).Range.Text;
            ДатаВозбуждения = ThisDocument.ContentControls.Item(13).Range.Text;
            НомерПостановления = ThisDocument.ContentControls.Item(14).Range.Text;    
            ФИОСудебногоПристава = ThisDocument.ContentControls.Item(15).Range.Text;
            КонтактнаяИнфПристава = ThisDocument.ContentControls.Item(16).Range.Text;
            ОсновнойДолг = ThisDocument.ContentControls.Item(17).Range.Text;
            Пени = ThisDocument.ContentControls.Item(18).Range.Text;            
            ПроцентыЗаПользование = ThisDocument.ContentControls.Item(19).Range.Text;  
            ГосПошлина = ThisDocument.ContentControls.Item(20).Range.Text;
            //ОплатаУслугПредставителя = ThisDocument.ContentControls.Item(21).Range.Text;
            
                
        РеквВорд = Новый Массив(21);
        РеквВорд[1]= НаимКонтр;
        РеквВорд[2]=ИНН;
        РеквВорд[3]=Взыскатель; 
        РеквВорд[4]=Куратор;     
        РеквВорд[5]=ДатаПолученияЛистаИзЮУ; 
        РеквВорд[6]=НомерЛиста;
        РеквВорд[7]=ДатаНаправленияВОСП;
        РеквВорд[8]=ФИОНаправившегоЛист;
        РеквВорд[9]=НомерПочтовогоИдентификатора;
        РеквВорд[10]=НаименованиеОСП;
        РеквВорд[11]=ДатаПолученияВОСП;
        РеквВорд[12]=ДатаВозбуждения;
        РеквВорд[13]=НомерПостановления;
        РеквВорд[14]=ФИОСудебногоПристава;
        РеквВорд[15]=КонтактнаяИнфПристава;
        РеквВорд[16]=ОсновнойДолг;
        РеквВорд[17]=Пени;
        РеквВорд[18]=ПроцентыЗаПользование;
        РеквВорд[19]=ГосПошлина;
        //РеквВорд[20]=ОплатаУслугПредставителя; 
                
        Записать1(РеквВорд);
        
        ThisDocument.Close();
КонецПроцедуры

Теперь не важно есть ли на сервере офис, главное что бы он на клиенте был. На сервер только строковые значения передаются. И как не странно работает в три раза быстрее предыдущего варианта.

Спасибо)))

0

Злой самаритянин

182 / 182 / 94

Регистрация: 24.04.2014

Сообщений: 686

15.02.2016, 18:11

6

wardamask, тоже долго возился с этим, правда в экселе, в итоге сделал все, что с экселем связано, на клиенте, специально для серверной базы. Можешь посмотреть мой пример, только там запись, а не чтение.

0

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

16.02.2016, 00:55

7

да не за что, главное что ты мозг включил……..

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

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

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

Вопрос При работе с Excel из 1С возникает сообщение: «Ошибка при вызове конструктора (COMОбъект): Интерфейс не поддерживается». Что делать?
Ответ
Подробнее:

При использовании:

Excel = Новый COMОбъект("Excel.Application");
WB = Excel.Workbooks.Open(ИмяФайла);

Выдает ошибку – Ошибка при вызове конструктора (COMОбъект): Интерфейс не поддерживается.

Или другой метод:

Объект = ПолучитьCOMОбъект(ИмяФайла);

— сообщение: «Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Класс не зарегистрирован»
или

Объект = ПолучитьCOMОбъект(ИмяФайла, "Excel.Application");

— сообщение: «Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Сервер RPC недоступен»

Причин всех этих ошибок может быть несколько. 

У службы «Запуск серверных процессов DCOM» тип запуска должен быть «Авто».

Кроме того, если  служба «Агент сервера 1С:Предприятия 8.2» запускается от имени специального пользователя, то у него должны быть права на запуск компоненты «Приложение Microsoft Excel»

Служба «Агент сервера 1С:Предприятия 8.2» не должна запускаться от имени пользователя с ограниченными правами, у него должны быть права на запуск компоненты «Приложение Microsoft Excel».

Другая возможная причина: 1С предприятие установлено в 64-битном варианте, а Excel — в 32-битном. Может помочь установка 1С в 32-битном варианте (это может быть проще, чем найти 64-битный Excel)

У службы «Запуск серверных процессов DCOM» тип запуска необходимо установить в «Авто». После чего желательно перезагрузить компьютер.

Ну и как вариант, быть может поврежден установленный пакет MS Office. Необходимо попробовать переустановить его.

Next Post

  • v8

  • Программисту 1C

Пт Май 14 , 2010

Вопрос Как в запросе использовать «СокрЛП», «Лев», «Прав», т.е. как отсечь нужное количество символов? Ответ Использовать конструкцию «ВЫРАЗИТЬ»: … ГДЕ (ВЫРАЗИТЬ(усЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) «Груз» |ГДЕ | (ВЫРАЗИТЬ(усЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) &Груз … Запрос.УстановитьПараметр(«Груз»,»Груз»);

Breaking News

10-150 Okolokompa Форум

(@dom)

Сообщения: 200

Honorable Member

По сути, такое сообщение:

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

Как и другие подобные сообщения:

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

Возникает в следующих случаях:

У службы «Запуск серверных процессов DCOM» тип запуска должен быть «Авто». (После изменения этой настройки, перезагрузите компьютер).

Если служба «Агент сервера 1С:Предприятия 8.2 / 8.3» запускается от имени специального пользователя, то у него должны быть права на запуск компоненты «Приложение Microsoft Excel»

Служба «Агент сервера 1С:Предприятия 8.2» не должна запускаться от имени пользователя с ограниченными правами, у него должны быть права на запуск компоненты «Приложение Microsoft Excel».

1С предприятие установлено в 64-битном варианте, а Excel — в 32-битном. Может помочь установка 1С в 32-битном варианте или наоборот.

У службы «Запуск серверных процессов DCOM» тип запуска необходимо установить в «Авто».

Повреждён установленный пакет MS Office. Переустановите.

Размещено : 11/06/2020 11:03 дп

Имеем ALT Linux + WINE@Etersoft 1.0.6 = 1C8.1 вполне прилично работает. Также есть DLL для оптимизации расчета маршрута из одного города в другой (используется в транспортном отделе, стандартные средства 1С очень медленно считают). Эту DLL в конфигурации 1С подключают следующим образом:

Код: Выделить всё

Попытка
atl = ПолучитьCOMОбъект("","CTakePath.CTakePath.1");
Исключение
Сообщить(ОписаниеОшибки(),СтатусСообщения.Внимание);
Возврат Ложь;
КонецПопытки;

В WINE библиотека прописывается так:

Код: Выделить всё

[user@test-altlinux]$ regsvr32 "t:dllTakePath.dll"
Xlib:  extension "XFree86-DRI" missing on display "localhost:10.0".
Xlib:  extension "XFree86-DRI" missing on display "localhost:10.0".
Successfully registered DLL t:dllTakePath.dll

После чего в system.reg имеем:

Код: Выделить всё

[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}] 1210261335
@="CTakePath Object"
"AppID"=""
[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}LocalServer32] 1210261335
@="T:dllTakePath.dll"
"ThreadingModel"=""
[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}ProgID] 1210261335
@="CTakePath.CTakePath.1"
[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}Programmable] 1210261335
[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}TypeLib] 1210261335
@="{F4CFAD43-F334-4A71-89E9-0A08E93E9E79}"
[SoftwareClassesCLSID{6946EE1A-5979-4D7A-BE49-04C68A7DCE85}VersionIndependentProgID] 1210261335
@="CTakePath.CTakePath"

Сравнивал с реестром Windows – там тоже самое. Доступ к диску «Т» с нужными правами есть. Но в итоге, когда 1С пытается получить доступ к библиотеке, имеем ошибку:

Код: Выделить всё

Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Unknown error 0x80080005

В COM-объектах не силен — может WINE-ну нужно еще каких-то системных библиотек установить, кроме тех, что идут в комплекте?

Модератор: Дмитрий Юхтимовский

Ошибка получения объекта COM

При запуске тестов TPC-1C и G1C появляется следующая ошибка.
{ОбщийМодуль.Глобальный(51)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
по причине:
Ошибка получения объекта COM: COM-объекты поддерживается только в операционных системах Windows

Сервер 1С — линукс, сервер баз аналогично, клиент запущен на сервере терминалов.
Подскажите, пожалуйста, в чем проблема.

selfin
 
Сообщений: 1
Зарегистрирован: 21 мар 2014, 08:11


Re: Ошибка получения объекта COM

Сообщение fwhr » 22 мар 2014, 15:20

с COM ушла ошибка, а с этой можно как-то побороться, или до следующей обновы ждать?

Код: выделить все
{Обработка.TCP_1C_GILV.Форма.Форма(458)}: Значение не является значением объектного типа (ПроцессорНаименование)
   ПроцессорНаименование      = ФизическиеПараметры.ПроцессорНаименование;
fwhr
 
Сообщений: 2
Зарегистрирован: 22 мар 2014, 13:33

Re: Ошибка получения объекта COM

Сообщение ssavel » 24 мар 2014, 17:21

fwhr писал(а):с COM ушла ошибка, а с этой можно как-то побороться, или до следующей обновы ждать?

Код: выделить все
{Обработка.TCP_1C_GILV.Форма.Форма(458)}: Значение не является значением объектного типа (ПроцессорНаименование)
   ПроцессорНаименование      = ФизическиеПараметры.ПроцессорНаименование;

Прошу загрузить кандидат на новую версию теста по ссылке

ftp://isinka.gilev.ru/GILV_TPC_G1C.dt

(пользователь g1c, пароль g1c)
и сообщить, сохраняется ли ошибка.

ssavel
 
Сообщений: 7
Зарегистрирован: 21 мар 2014, 15:30

Re: Ошибка получения объекта COM

Сообщение fwhr » 24 мар 2014, 17:54

Загрузил, версия в Справка — О программе отображается как 2.0.2.7
Стартует без ошибок. Оба теста выполняются. Спасибо.

ЗЫ: По тесту рекомендуемое кол-во пользователей: 231. «Мои» 30-50 юзеров могут быть спокойны? ;)

fwhr
 
Сообщений: 2
Зарегистрирован: 22 мар 2014, 13:33



Вернуться в Нагрузочное тестирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

  1. Приветствую.

    Столкнулся с проблемой:
    Создал обработку, которая запускает Excel, читает файл, заполняет его и записывает.
    На клиенте все великолепно выполняется.
    Создал регламентное задание, которое запускает в определенное время это на сервере.
    При выполнении на сервере вылезает ошибка про то, что типа MS Excel не удалось получить доступ к файлу. При этом доподлинно известно, что ком. объект Excel даже не создался (нет его в процессах диспетчера задач).
    Примечательно, что если запустить обработку клиентом с машины, где установлен сервер 1С, то все выполняется.

    Excel = Новый COMОбъект("Excel.Application");
    Книга = Excel.WorkBooks.Open("D:DstOrder.xls");
    

    Чувствую, что дело тут в том, что при работе с клиента Excel запускается из-под пользователя в реальном сеансе, а в случае сервера — под пользователем хоть и с полными правами, но без запущенного сеанса.

    Сервер Windows Server 2008 R2 Standart. Service Pack 1
    Как это обойти?

  2. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    1) Файл D:DstOrder.xls действительно существует на сервере?
    2) У пользователя под которым запущен сервер есть право доступа к каталогу D:Dst?

  3. 1. Да, файл существует. Обработка при запуске на этом же сервере из-под клиента выполняется без проблем.
    2. Доступ есть. Пользователь — администратор. Пробовал файл в разные папки класть.

    — Объединение сообщений, 15 авг 2014

    Полный текст ошибки. Ошибка от имени Microsoft Excel, однако процесса EXCEL в диспетчере задач нет!

    Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу «D:DstOrder.xls». Это может быть вызвано одной из следующих причин.

    • Указан несуществующий файл или путь.
    • Файл используется другой программой.
    • Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.

    — Объединение сообщений, 15 авг 2014

    8.3.4.496

    Последнее редактирование: 15 авг 2014

  4. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Т.е. сервер (ragent.exe и т.д.) стартует от имени Администратора? Или все же от USR1CV82 (не знаю как там по умолчанию под 8.3 пользователь называется).

  5. У меня пользователь USR1CV81 со старых времен. Он входит в группу Администраторы.

    Сейчас провел эксперимент. Зашел на сервер от имени этого пользователя и в клиенте запустил обработку — без проблем.

  6. Попробовал вместо COMОбъект использовать ПолучитьCOMОбъект. Вот результат

    Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221021(0x800401E3): Операция недоступна

  7. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
  8. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
  9. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104


    likalim и Mark768 нравится это.

  10. Спасибо тебе, добрый человек. Сам бы не допер…

  11. Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Да не за что.
    Не совсем я это, разум это коллективный.. :)

  12. Небольшое уточнение:
    При выборе «Текущий пользователь», обработка на сервере запускает Excel только в том случае, если на сервер выполнил вход кто-нибудь из пользователей.
    Если это условие не выполняется, то получаем ошибку:

    Ошибка при вызове конструктора (COMОбъект): -2147467262(0x80004002): Интерфейс не поддерживается

    На вкладке «Удостоверения» есть 3-й вариант запуска — указать конкретного пользователя и пароль.
    Я указал пользователя, от имени которого работает сервер 1С (USR1CV81).
    В таком варианте обработка запускает Excel при отсутствии работающих пользователей на сервере.
    Это меня устраивает.

    В моем случае не бывает работающих пользователей на сервере и тем более, запускающих Excel
    Могу предположить, что при запуске Excel любым пользователем (не USR1CV81) могут возникнуть проблемы.
    Например, Excel запускается и работает, однако при старте выдает «Невозможно использовать связывание и внедрение объектов».

  13. Приветствую.

    Когда в этой теме мне очень помогли. Восстановили сервер после аварии. Теперь восстанавливаю возможность работы пользователя USR1CV81 с Excel.
    Столкнулся с тем, что в Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM теперь нет ветки Microsoft Excel Application, хотя сам Excel установлен.
    Что я сделал не так?

  14. Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Переустанавливать эксель пробовали ?

  15. Да, уже несколько раз и разные версии.
    Вычитал в сети, что если нет ветки явно, то нужно в реестре найти его наименование в виде кода. В реестре нашел, но его кода в Настройка DCOM тоже нет.

  16. Offline

    Ardak

    Регистрация:
    21 дек 2015
    Сообщения:
    1
    Симпатии:
    1
    Баллы:
    1

    Вдруг кому понадобится
    Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты.

  17. Offline

    limus80

    Регистрация:
    30 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1

    важное как мне кажется дополнение
    ко всему вышесказанному надо добавить учетке права входа в качестве сервиса на компьютер
    без этого у меня не работало на W2K12R2

  18. Offline

    Gucci76
    Опытный в 1С

    Регистрация:
    9 мар 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26

    Здравствуйте.
    У меня похожая проблема, но только с ВОРДом
    В файловом варианте я могу Новый COMОбъект(«Word.Application»), а в клиент-серверном нет.
    Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM тут НЕ нашел ворда (открывал через команду «mmc comexp.msc /32»).

10-150 Okolokompa Форум

(@dom)

Honorable Member

Присоединился: 4 года назад

Записи: 200

Создатель темы 11/06/2020 11:03 дп  

По сути, такое сообщение:

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

Как и другие подобные сообщения:

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

Возникает в следующих случаях:

У службы «Запуск серверных процессов DCOM» тип запуска должен быть «Авто». (После изменения этой настройки, перезагрузите компьютер).

Если служба «Агент сервера 1С:Предприятия 8.2 / 8.3» запускается от имени специального пользователя, то у него должны быть права на запуск компоненты «Приложение Microsoft Excel»

Служба «Агент сервера 1С:Предприятия 8.2» не должна запускаться от имени пользователя с ограниченными правами, у него должны быть права на запуск компоненты «Приложение Microsoft Excel».

1С предприятие установлено в 64-битном варианте, а Excel — в 32-битном. Может помочь установка 1С в 32-битном варианте или наоборот.

У службы «Запуск серверных процессов DCOM» тип запуска необходимо установить в «Авто».

Повреждён установленный пакет MS Office. Переустановите.

Понравилась статья? Поделить с друзьями:
  • Ошибка при записи перевод
  • Ошибка при запросе post к ресурсу e1cib logform
  • Ошибка при загрузке настроек
  • Ошибка при вызове метода контекста получить макет
  • Ошибка при заполнении трудовой книжки как исправить пример