Имя: Пароль:
1C
 
Нелепая ошибка COM-объект-ом на сервере
,
0 usd1001
 
10.07.20
11:44
Помогите пожалуйста разобраться с причиной ошибки.

Есть внешняя компонента Контура. И код, который без проблем выполняется на клиенте. На сервере код тоже выполняется, но ровно 1 раз. Что на клиенте, что на сервере всегда выполняется первая строка (возвращается результат - Истина). Но на сервере при последующих попытка ошибка на второй строке - "Неверная строка указания класса". Помогает перезапуск 1С с чисткой серверного кэша. После этого код тоже ровно 1 раз выполняется и при последующих попытках падает с ошибкой.

Платформа 8.3.15, конфигурация - УТ 11.1, режим запуска - толстый клиент

Код:

  ПодключитьВнешнююКомпоненту(ИмяФайла, "AddInDiadocAPI", ТипВнешнейКомпоненты.Native); // результат - Истина
  DiadocApi = Новый COMОбъект("Diadoc.Api.InvoiceApi"); // На сервере при повторном вызове - "Неверная строка с указанием класса"
1 unbred
 
10.07.20
11:54
вангую: у тебя Истина только при первом выполнении)
2 acht
 
10.07.20
11:56
> ТипВнешнейКомпоненты.Native);
> Новый COMОбъект("Diadoc.Api.InvoiceApi");

Эти строки вообще никак не связаны
3 usd1001
 
10.07.20
11:59
(1) не, при последующих тоже
4 acht
 
10.07.20
12:00
А так можно долго гадать. Ну, например второй вызов приходит на другой сервер кластера и т.п.
5 usd1001
 
10.07.20
12:00
(2) Смущает, что Com и Native в одном месте? Но ведь как-то же работает и это можно сказать промышленный код, который я перекопировал для своей обработки)
6 usd1001
 
10.07.20
12:01
(4) Спасибо за важное замечание. Клиент и сервер на одном ПК. Пытаюсь у себя чинить.
7 acht
 
10.07.20
12:02
(5) > Но ведь как-то же работает
Если бы работало, этой ветки не было б
8 Garykom
 
гуру
10.07.20
12:05
(5) косяк у тебя в коде для
Новый COMОбъект("Diadoc.Api.InvoiceApi");
предыдущий код не нужен

и да на сервере 1С NativeAPI там гм
9 usd1001
 
10.07.20
12:06
(7) Да, у Контура работает На Клиенте. А мне нужно регламетное задание сделать по обновлению статусов документов. Соответственно код должен быть на сервере. Синтакс помощник одобряет.
10 Garykom
 
гуру
10.07.20
12:06
Прочитай http://1c-docs.diadoc.ru/ru/latest/HowTo/HowTo_auth.html там где про сервер
11 usd1001
 
10.07.20
12:07
(8) Можно пожалуйста поподробнее? Что за гм?
12 Garykom
 
гуру
10.07.20
12:07
"В случае, когда режим запуска 1С не позволяет запуск внешних компонент, использующих технологию COM, (например, на стороне сервера 1С), необходимо использовать сборку компоненты, которая реализована в виде классического COM-объекта. Перед использованием компоненты нужно зарегистрировать файл DiadocComApi.dll с помощью команды regsvr32"
13 Garykom
 
гуру
10.07.20
12:07
(12)+ И да regsvr32 надо из правильного каталога
14 Garykom
 
гуру
10.07.20
12:08
(13)+ от разрядности
15 usd1001
 
10.07.20
12:09
(10) спасибо большое, попробую
16 usd1001
 
10.07.20
12:10
(15) только боюсь, что так и было с самого начала) код то оттуда и брал)
17 Garykom
 
гуру
10.07.20
12:15
(16) ты свою строчку: "adocApi = Новый COMОбъект("Diadoc.Api.InvoiceApi");"

от их строчки: DiadocApi_ = Новый("AddIn.DiadocInvoiceAPI");

отличаешь?
18 Garykom
 
гуру
10.07.20
12:16
DiadocApi = Новый COMОбъект("Diadoc.Api.InvoiceApi");
DiadocApi = Новый("AddIn.DiadocInvoiceAPI");

найди два отличия?
Основная теорема систематики: Новые системы плодят новые проблемы.