1с com соединение неизвестная ошибка

Я
   Креативчик

19.11.14 — 16:07

Добрый день!

Столкнулся с такой проблемой.

При подключении из серверной базы 8.2 к файловой базе 8.3 выдает ошибку:

Ошибка при вызове метода контекста (Connect): Неизвестная ошибка

Использую ComConnector 8.3.

Все остальные варианты соединений проходят нормально. Например, из моей базы 8.2 можно спокойно подключиться к файловой 8.2 и серверной 8.2/8.3

   Vladal

1 — 19.11.14 — 16:08

v83.application?

   Креативчик

2 — 19.11.14 — 16:10

V83.COMConnector

   Vladal

3 — 19.11.14 — 16:11

Новый COMObject(«V82.COMConnector») — отрабатывает на одной базе, а на другой валится?

   Vladal

4 — 19.11.14 — 16:12

Есть ли какие ошибки в журнале подключаемой базы, или, например, кака проблема в модуле внешнего соединения?

   Vladal

5 — 19.11.14 — 16:15

У пользователя, от имени которого подключаешься, есть право внешнего соединения?

   Креативчик

6 — 19.11.14 — 16:15

V82 отрабатывает везде. проблема с v83.

   Креативчик

7 — 19.11.14 — 16:15

подключаются от администратора. Права есть на все

   DmitrO

8 — 19.11.14 — 16:16

небось с сервера делаешь подключение )

   Креативчик

9 — 19.11.14 — 16:17

с сервера..это плохо?)

   Vladal

10 — 19.11.14 — 16:17

v83_Com = Новый COMОбъект(«v83.ComConnector»); // ComConnector»);

Попытка

    v83=v83_Com.Connect(«Srvr=SERVER:1540; Ref=Buhsmr;Usr=Администратор»);

Исключение

    СтрСообщения = «Ошибка инициализации! «+ОписаниеОшибки();

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

======================

Правильно!

У 8.2 и 8.3 ведь разные порты сервера? Или на одном сидят?

Посмотри порт в строке подключения:

SERVER:1540 или там SERVER:1640…

   DmitrO

11 — 19.11.14 — 16:18

а пользователь под которым работает рабочий процесс сервера имеет доступ к каталогу базы к которой подключаешься?

   hhhh

12 — 19.11.14 — 16:28

(9) сервер 1с запускается не от администратора.

   Креативчик

13 — 19.11.14 — 16:46

Проблема решена.

DmitrO, все работает с клиента..

Большое спасибо!

   DmitrO

14 — 19.11.14 — 16:49

(13)ну это смотря для чего подключаться, можно и с клиента

   Креативчик

15 — 19.11.14 — 17:03

(14)я так понял, с сервера подключиться все равно не получится?

   DmitrO

16 — 19.11.14 — 17:13

(15)если запустить сервер под учетной записью которая будет иметь доступ в тот каталог, то получится.

   Креативчик

17 — 19.11.14 — 17:25

доступ есть

   DS

18 — 19.11.14 — 17:29

(16) Еще и ком должен быть настроен и доступен.

   Креативчик

19 — 19.11.14 — 17:31

(18) как это сделать?

  

DS

20 — 19.11.14 — 18:03

(19) Во-первых, установить при установке сервера. Во-вторых, чтобы меньше возвращаться к этому вопросу, зарегистрировать как приложение ком+.

TurboConf — расширение возможностей Конфигуратора 1С

COM Соединение. Не удалось подключится к другой программе: ошибка «identity is incorrect»

Я

  

1Сергей

30.12.20 — 14:49

Добрый день!

Два сервера 1С. На одном ЗУП, на другом ERP. После переезда на новый сервер перестала работать синхронизация.

Полный текст ошибки:

Не удалось подключится к другой программе: -2147467238(0x8000401A): The server process could not be started because the configured identity is incorrect. Check the username and password.

Имя и пароль совпадают 146%

comcntrl.dll зарегистрировал. В службах компонент прописал v83comconnector.

Что ещё этой собаке надо?

  

ДенисЧ

1 — 30.12.20 — 14:51

  

1Сергей

2 — 30.12.20 — 14:53

(1) хрень

  

andrey2CC1

3 — 30.12.20 — 15:12

  

1Сергей

4 — 30.12.20 — 15:35

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

  

1Сергей

5 — 30.12.20 — 15:36

  

TormozIT

6 — 30.12.20 — 15:49

«В службах компонент прописал v83comconnector»

Удали COM+ приложение, если оно не является необходимым.

  

Lama12

7 — 30.12.20 — 15:56

(5) Забавно. Запись помеченная крестиком, более универсальная.

  

КнОпка

8 — 30.12.20 — 16:27

(0) Ну если у вас 64 битный сервер то работать так и не будет, если подключили comcntrl.dll для 32 битного

  

1Сергей

9 — 30.12.20 — 16:49

(8) ды??? мне казалось что для 32хбитного comcntrl32.dll

:)

  

Aleksey

10 — 30.12.20 — 17:55

Я за мучился бороться и перешёл на обмен через файлы

  

Ногаминебить

11 — 30.12.20 — 18:07

(10) Я просто дописал дублирующий обмен через файлы в довесок к обычному когда com упал и не поднимался никак. Но неудобно ж получается. Там должны выгрузить, тут загрузить…

  

d4rkmesa

12 — 30.12.20 — 18:47

(11) Лучше через http обмен запилить.

  

Aleksey

13 — 30.12.20 — 18:56

(11) А зачем тебе обмен каждые 5 секунд?

Ну выгрузилось через час загрузилось, зачем тут рекорды?

  

ДенисЧ

14 — 30.12.20 — 19:19

(11) Файлы и сомы в этом году некошерны

Лучшие раввины рекомендую хттп…

  

Aleksey

15 — 30.12.20 — 19:58

(14) хттп требует установку левого софта и админские права для публикации. Плюс постоянные танцы с бубном при смене платформы.

Короче если ты арендуешь сервер 1С, то раввины идут нах

  

1Сергей

16 — 30.12.20 — 20:03

Одинеска вообще некошерна, ви чо

  

ДенисЧ

17 — 30.12.20 — 20:21

(15) То есть при соме плясать не надо… Да и права нужны только для публикации из конфигуратора..

  

Aleksey

18 — 30.12.20 — 20:54

(17) А где я топлю за ком? Я как раз с ним намучался постоянно слетает. Причем вручную отрабатывает а в фоновом режиме — не зарегистрирован (база файловая, базы лежат в соседних папках). Просишь админов перерегистрировать помогает, но не на долго. Сейчас вот на файлы настроил и пока счастлив

  

DrZombi

19 — 30.12.20 — 21:22

(0) Нужно перегрузить ПК, в вашем случаи, сервер :)

После того, как установили компоненты.

  

DrZombi

20 — 30.12.20 — 21:23

(0) Кстати, через Файлик XML, обмен происходит гораздо, гораздо быстрее :)

  

Aleksey

21 — 30.12.20 — 21:43

Посмотрел сейчас видео «EnterpriseData 1.7. Передача статусов электронных документов» Так как раз настраивали обмен БП и Розница. Видать в 1С работают православные и им раввины не указ, так как обмен настроен через файл

  

DrZombi

22 — 30.12.20 — 21:52

(21) Я тоже сперва думал, что через КОМ обмен быстрее, но реальность показало, что ком не стабилен и тормозной :)

  

Гений 1С

23 — 30.12.20 — 22:13

(0) попробуй запускать из 32-разрядной 1С или 64-разрядной руками, если база файловая.

  

1Сергей

24 — 31.12.20 — 09:33

(23) сэрвэрная

  

Ногаминебить

25 — 31.12.20 — 09:49

(12)(13)(14) Ну там сложная ситуация, баз штук 15, которые активно меняются информацией. Отчеты комиссионера, отчеты комитенту, всякие оплаты и счета-фактуры при комиссионной торговле… Причем разумеется документы досоздаются/переделываются, еще что-то. Зачастую нужно даже не выгрузить/загрузить, а тупо убедиться, что данные совпадают, ничего не забыли и лишнего не завели, ибо в комиссии все эти парные счета-фактуры потом корректировать себе дороже выйдет.

хттп посмотрю, но пока что ком тьфу,тьфу,тьфу.

  

TormozIT

26 — 31.12.20 — 09:56

(22) Не умеешь их «готовить». COM подключение более функциональное и гибкое чем другие способы. http://catalog.mista.ru/1c/articles/387577/

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

COM-клиент — COM-сервер(кэшируемый) — Сервер1С

  

ДедМорроз

27 — 01.01.21 — 18:37

Com незаменим на клиенте,когда нужно сейчас же.

Публикация базы-такая же увлекательная игра,как и настройка Com.

Поэтому,в фоновом задании только файлы — одно выгрузило,а другое загрузило.

  

ДедМорроз

28 — 01.01.21 — 18:40

Обмен файлами чем хорош — если файл есть,то читаем и пишем ответ,если файла нет,то смотрим есть ли ответ-если лежит нетронутый,то можно стереть и выгрузить заново.

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

После обновления платформы 1С при синхронизации данных может появляться сообщение об ошибке -2147221005(0x800401F3). Данная ошибка обычно сопровождается строкой «Недопустимая строка с указанием класса» и связана с неверным кодом программы, не зарегистрированными в системе компонентами и другими релевантными факторами.

Например, во время синхронизации возникает ошибка Обмен данными.ОбменЗарплата3Бухгалтерия3.Отправка данных со следующим содержимом:

Не удалось подключится к другой программе: -2147221005(0x800401F3): Недопустимая строка с указанием класса 
{ОбщийМодуль.ОбщегоНазначенияСлужебныйКлиентСервер.Модуль(393)}:		COMConnector = Новый COMObject(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); // "V83.COMConnector"
{ОбщийМодуль.ОбщегоНазначения.Модуль(2830)}:	Возврат ОбщегоНазначенияСлужебныйКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры, ПодключениеНедоступно, КраткоеОписаниеОшибки);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(12564)}:		ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек));
{ОбщийМодуль.ОбменДаннымиПовтИсп.Модуль(1185)}:        РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(
{ОбщийМодуль.ОбменДаннымиПовтИсп.Модуль(1164)}:	Результат = ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(6701)}:	ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы(
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(3952)}:			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ,
{Обработка.ВыполнениеОбменаДанными.МодульМенеджера(38)}:		ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
{(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}:	Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1036)}:		ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1026)}:		ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса 

-2147221005(0x800401F3): Недопустимая строка с указанием класса

Причины возникновения ошибки -2147221005(0x800401F3)

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

Тем не менее к числу наиболее популярных причин ошибки -2147221005(0x800401F3) относятся следующие:

  • Пользователь использует устаревшую конфигурацию 1С;
  • Наличие некорректного кода программы (к примеру, обращение к устаревшему «V82.COMConnector» вместо «V83.COMConnector»);
  • В системе не зарегистрирована библиотека comcntr.dll;
  • У пользователя, запускающего определённый комплекс 1С, нет достаточных прав для работы с ним (к примеру, запуск выполняется из гостевой учётной записи, вместо учётной записи администратора).

Обновление конфигурации до последней версии

Вопрос обновления конфигурации 1С на примере «1С:Бухгалтерия 3.0» я рассматривал ранее. Поэтому здесь не имеет смысла описывать данный процесс.

Запускайте 1С с правами администратора

Убедитесь, что вы запускаете систему под учётной записью администратора, а не ограниченного в правах «Гостя» или аналога.

Измените код программы

В некоторых случаях код программы может устареть и не соответствовать текущей версии 1С. Эффективным решением ошибки -2147221005(0x800401F3) является замена строки кода:

COMConnector = Новый COMObject(«V82.COMConnector»);

на строку:

COMConnector = Новый COMObject(«V83.COMConnector»);

После указанной замены проблема может быть решена.

Регистрация в системе компоненты comcntr.dll

Довольно часто ошибка возникает после обновления платформы, когда во время установки новой версии не регистрируется компонента comcntr.dll.

Для регистрации компоненты вручную необходимо выполнить в PowerShell от имени администратора следующие команды:

C:WindowsSysWOW64regsvr32 /u "c:Program Files1cv88.3.17.1851bincomcntr.dll" или C:WindowsSysWOW64regsvr32 /u "c:Program Files (x86)1cv88.3.17.1851bincomcntr.dll"

Затем

C:WindowsSysWOW64regsvr32 "c:Program Files1cv88.3.17.1851bincomcntr.dll" или C:WindowsSysWOW64regsvr32 "c:Program Files (x86)1cv88.3.17.1851bincomcntr.dll"

«8.3.17.1851» вам необходимо заменить на вашу версию платформы 1С.

C:WindowsSysWOW64regsvr32

После регистрации библиотеки скорей всего синхронизация заработает.

Синхронизация данных ЗУП-БП

Последние статьи:

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

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

1. -2147221164(0x80040154): Класс не зарегистрирован.

Данное сообщение говорит о том, что не зарегистрирована COM-компонента. 

Для ее регистрации необходимо запустить командную строку с правами администратора и выполнить regsvr32 [ПутьДоКомпоненты].

После выполнения команды должно появиться сообщение об успешном выполнении регистрации библиотеки.

Однако, даже регистрация компоненты через командую строку “привычным” способом помогает не всегда. В таком случае, необходимо вручную создать COM-приложение. 

Новому COM-приложению нужно ввести имя “V83COMConnector” и указать, что приложение является серверным.

создание нового приложения

Также необходимо обратить внимание, что учетной записью для работы приложения НЕ может быть встроенная учетная запись.

Чтобы избежать нежелательных ошибок, лучше выбрать “указанный пользователь” и указать там администратора.

Мастер установки приложений

После успешного создания V83COMConnector появится новое приложение.

Далее в созданном приложении необходимо установить новый компонент через контекстное меню.

установка новый компонент

Выбрать файл comcntr.dll в каталоге установленной платформы.

Выбрать файл comcntr.dll в каталоге установленной платформы

В следующем окне можно убедиться, что регистрация через командную строку была ложно-успешной, так как признак “Установлено” компоненты равен “Нет”.

регистрация через командную строку была ложно-успешной

После успешной установки, необходимо перейти к ветке V83COMConnector. В контекстном меню выбрать «Свойства». На вкладке “Безопасность” необходимо снять галку “Принудительная проверка доступа для приложений”. Установить галку «Применить политику программных ограничений» и выбрать уровень ограничений “Неограниченный”. Сохранить параметры. 

На этом ручная установка приложения завершена.

2. Процесс сервера не может быть запущен, так как указана неправильная идентификация

Причинами этой ошибки могут быть: 

  • при ручной регистрации COM-компоненты либо была указана системная учетная запись, либо пользователь не имеющей прав администратора; 
  • служба сервера 1С запущена с локальной учетной записью. 

Для изменения пользователя, от имени которого работает служба сервера 1С, необходимо открыть свойства службы, перейти на вкладку “Вход в систему” и указать пользователя с правами администратора.

Вход в систему

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

Нужна помощь с 1С?

Мы можем взять на себя ваш бухгалтерский учет. Вам не нужно будет думать о расчете налогов и сдаче отчетности. Мы будем вести финансовую ответственность за ошибки. Мы — команда профессионалов, а не один бухгалтер, мы не заболеем, не пропадем и не уйдем внезапно в отпуск. Сосредоточьтесь на управлении. А учет и отчетность мы возьмем на себя. Чтобы получить бесплатную консультацию по автоматизации своего бизнеса Вы можете пообщаться с нашими специалистами в офисе компании или позвонив по телефону: 8-800-707-01-02.

Сопровождение 1С

Наш специалист

Екатерина Столярова

Специалист отдела сопровождения

Специалист-консультант по зарплатным решениям и 1С:Бухгалтерии


Чем мы можем быть вам полезны?

В программном обеспечении 1С, как и в любом другом, иногда возникают ошибки. Это не дает софту нормально функционировать и может затормозить работу целой организации. Поэтому нужно знать, как справляться с различными сбоями. В частности, сегодня мы разберем, из-за чего возникает ошибка «2147221164 (0x80040154): Класс не зарегистрирован», и что нужно сделать, чтобы ее исправить.

Скриншот ошибки

Содержание

  1. Когда появляется ошибка 2147221164?
  2. Справляемся с проблемой
  3. Регистрируем библиотеку comcntr.dll
  4. Создаем новое приложение СОМ+

Когда появляется ошибка 2147221164?

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

Для начала определим, что у сервера 1С есть несколько версий:

  1. 32-битная 8.1 (х86).
  2. 64-битные 8.2 и 8.3 (х64).

Неполадки появляются на самом сервере с БД. Корень проблемы в том, что версии 1С архитектуры х64 не могут напрямую обратиться к 32-битной библиотеке comcntr.dll. В этом случае соединение происходит при помощи приложений СОМ+, способных взаимодействовать с библиотеками х86.

Читайте также: Неверный формат хранилища данных 1C 8.3 как исправить.

Справляемся с проблемой

Заканчиваем с теорией и переходим к практике – пробуем исправить ошибку «2147221164 (0x80040154): Класс не зарегистрирован».

Регистрируем библиотеку comcntr.dll

Ошибка может проявиться, если не зарегистрирована библиотека comcntr.dll. Решаем ее следующим образом. Вызываем строку «Выполнить» (кликнув ПКМ по кнопке «Пуск») и вводим regsvr32.exe «C:Program Files(86)1cv828.3.XX.XXXXbincomcntr.dll». Нажимаем ОК и, если все прошло корректно, то мы увидим сообщение об успешной регистрации библиотеки.

Создаем новое приложение СОМ+

Если библиотека зарегистрирована, но проблема остается, то кликаем ПКМ по кнопке «Пуск» (для ОС Windows 10) и вызываем «Панель управления». Затем входим в раздел «Система и безопасность», после чего переходим в «Администрирование». Появляется окно, в котором мы ищем строку «Службы компонентов» и открываем ее двойным щелчком ЛКМ. В новой консоли два раза кликаем ЛКМ по папке «Компьютер» и затем «Мой компьютер». Перед нами появляется список папок. ПКМ нажимаем на «Приложения СОМ+» и выбираем «Создать»«Приложение».

Консоль

Далее действуем следующим образом.

  1. В открывшемся Мастере нажимаем «Далее» и, когда в следующем окне нам предложат действие на выбор, кликаем «Создать новое приложение».
  2. В соответствующей строке присваиваем новому приложению имя, которое будет понятно не только нам, но и другим пользователям при дальнейшей работе, например 1CV8_ComConnect. Здесь же выбираем способ активации – «Серверное приложение». Окно мастера установки приложений Com+
    Введите имя нового приложения 1CV8_ComConnect
  3. Теперь проводим процедуру удостоверения. В поле «Указанный пользователь» при помощи функции «Обзор» ищем учетную запись, под которым будем запускать сервер 1С версии 8.3. (Для примера обозначим ее как User1CV83).Скрин мастера установки приложений Com+Окно выбора учетной записи
  4. Пропускаем процедуры, предлагаемые в следующих окнах, и нажимаем кнопку «Готово». Мастер закрывается.
  5. Возвращаемся в окно «Службы компонентов» и раскрываем ветку нашего только что созданного приложения. Разворачиваем узел «Роли», в которой кликаем на пункт CreatorOwner. ПКМ щелкаем по строке «Пользователи» и создаем нового пользователя. Снова выбираем ту учетную запись, под которой будет запускаться сервер 1С (это та самая User1CV83, о которой шла речь выше).
  6. Переходим в ветку приложения 1CV8_ComConnect и кликаем ПКМ на узел «Компоненты». Создаем новый компонент.
  7. В открывшемся Мастере делаем выбор пункта «Установка новых компонентов» и, когда появляется следующее окно, определяем нужную нам библиотеку dll (она находится по пути C:Program Files (x86)1cv81bin). Завершаем работу Мастера.
  8. У нас появился компонент 1CV81.ComConnect.1. Кликаем по нему ПКМ и открываем пункт «Свойства».  Во вкладке «Безопасность» находим перечень «Явно установленные для выделенных объектов роли» и ставим флажок напротив CreatorOwner.

Может быть вам полезно: Обнаружено нарушение целостности системы в 1C что делать.

Мы рассмотрели соединение с базой из программы 1С:Предприятие версии 8.3. Если планируется устанавливать коннект с БД 8.1 из версии 1С 8.2, то нужно добавить нового пользователя. Переходим по пути 1CV8_ComConnect Роли CreatorOwner Пользователи и добавляем новую учетную запись User1CV82, под которой будет производиться запуск сервера 1С версии 8.2.

Если спокойно и внимательно следовать алгоритму, то исправление ошибки на деле окажется простым и быстрым. Благодаря вышеописанным действиям программа 1С версий 8.2 и 8.3 сможет обратиться за информацией к библиотеке comcntr.dll и ошибка «2147221164 (0x80040154): Класс не зарегистрирован» больше не возникнет.

Опубликовано 20 августа 2018 Обновлено 03 октября 2020

Обновлено 13.02.2016

Ошибка 2147221164 0x80040154 в 1С

Ошибка 2147221164 0x80040154

Всем привет, сегодня рассмотрим, вопрос из за чего происходит ошибка 2147221164 0x80040154 в 1С и как ее решать. И так немного теории 🙂 , когда информационные базы данных, обмениваются между собой информацией, то они задействуют COM-соединение. И так начинается попытка соединения из конфигурации 8.3 с конфигурацией 8.1, в итоге может выскочить При попытке соединения с COM-сервером произошла следующая ошибка:

Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован”. Смотрим как решить.

Вот более детально как выглядит ошибка 2147221164

Ошибка 2147221164-2

Ошибка 2147221164 0x80040154 в 1С

Ошибка 2147221164 0x80040154 появляется, исключительно на сервере с базой данных, если выполнить соединение локально, все будет ок. На сервере 1С установлены версии 8.1 (x86), 8.2 (x64), 8.3 (x64). Источник проблем в версии 64 битной, так как ей требуется обратиться к  32-х библиотеке comcntr.dll, а на прямую это не реально, что ведет к использованию 64-х битного COM+, который умеет работать с 32-х библиотеками.

Исправляем 2147221164

На сервере 1С выполняем следующие действия.

  1. Для исправления 2147221164 открываем консоль «Службы компонентов» (Панель управления -> Администрирование -> Службы компонентов).
  2. В этой консоли открываем Службы компонентов -> Компьютеры -> Мой компьютер. Правый клик по пункту“Приложения COM+”, Создать -> Приложение.
  3. Далее. В окне «Установка или создание нового приложения» выбираем «Создать новое приложение».
  4. Вводим понятное имя для нового приложения, например, “V8_ComConnector”, способ активации — «Серверное приложение».
  5. В качестве учетной записи для запуска приложения выбираем “Указанный пользователь” и через кнопку “Обзор” находим учетку, под которой запускается сервер 1С v 8.3. У нас это локальная учетная запись с именем “USR1CV8”. Следующие 2 экрана можно пропустить (Далее, Далее, Готово) или сделать следующий пункт на втором из них. Мы пропускаем.
  6. В ветке только что созданного приложения открываем узел «Роли» и в нём роль «CreatorOwner». Правый клик по пункту «Пользователи», Создать -> Пользователь. Здесь выбираем учетку, под которой запускается сервер 1С v 8.3. У нас это локальная учетная запись с именем “USR1CV8”.
  7. В ветке созданного приложения (“V8_ComConnector”) переходим на узел «Компоненты». Правый клик, Создать -> Компонент. Далее.
  8. Выбираем «Установка новых компонентов», и в появившемся окне выбираем нужную DLL-ку (C:Program Files (x86)1cv81bincomcntr.dll). Завершаем создание компонента.
  9. Открываем свойства только что созданного компонента (V81.COMConnector.1), переходим на вкладку «Безопасность», в списке «Явно установленные для выделенных объектов роли» устанавливаем флажок напротив роли “CreatorOwner”.

Все косяка 2147221164 должно уже не быть. Если соединение с базой 8.1 устанавливается из версии 8.2, то нужно в раздел “V8_ComConnector -> Роли -> CreatorOwner -> Пользователи” добавить и пользователя, от имени которого запускается сервер 1С 8.2 (у нас это “USR1CV82”). Как видите, порядок действий не такой сложный и долгий и решает ошибку 2147221164, буквально минут за 15.

Фев 13, 2016 20:19

Если при синхронизации баз 1С (например, обмен между УТ и БП, ЗУП или БП) возникла ошибка

Не удалось подключится к другой программе: -2147221164(0x80040154): Класс не зарегистрирован

возможно у вас не зарегистрирован COM-объект. Если у вас 64-битный сервер, а клиент 32-битный, выполните следующие действия:

  1. Откройте консоль Панель управления -> Администрирование -> Службы компонентов, далее там ищем Службы компонентов -> Компьютеры -> Мой компьютер. Правый клик по пункту Приложения COM+, Создать -> Приложение.
  2. В окне Установка или создание нового приложения выбираем Создать новое приложение. Вводим понятное имя для нового приложения, например, , способ активации — Серверное приложение.
  3. В качестве учетной записи для запуска приложения выбираем Указанный пользователь и через кнопку Обзор находим учетку, под которой запускается сервер 1С. По-умолчанию это USR1CV8. После этого Далее, Далее, Готово.
  4. В ветке только что созданного приложения открываем узел Роли и в нём роль CreatorOwner. Правый клик по пункту Пользователи, Создать -> Пользователь. Здесь выбираем учетку, под которой запускается сервер 1С (USR1CV8).
  5. В ветке созданного приложения переходим на узел Компоненты. Правый клик, Создать -> Компонент. Далее.
  6. Выбираем Установка новых компонентов, и в появившемся окне выбираем нужную DLL-ку (C : Program Files (x86)1cv8bincomcntr.dll). Завершаем создание компонента.
  7. Открываем свойства только что созданного компонента (V81.COMConnector.1), переходим на вкладку Безопасность, в списке Явно установленные для выделенных объектов роли устанавливаем флажок напротив роли CreatorOwner.

Устранение ошибок подключения через COM-соединение

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

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

Ситуация первая. При попытке подключения через COM-соединение
к базе-источнику выдается сообщение об ошибке. Что-то вроде : «Ошибка при вызове
конструктора (COMObject): -2147221164(0x80040154): Класс не зарегистрирован «.
Для устранения подобной ошибки перво-наперво нужно зарегистрировать библиотеку
клиента — приемника. Причем для разных версий клиентов одной версии платформы
нужно регистрировать свою библиотеку. То есть для разных сборок платформы версии
8.3 нужно заново регистрировать версию библиотеки нужного релиза платформы. Для
платформы версии 8.2 такой же подход.
Библиотека регистрируется следующим образом. Запускается Командная строка из-под
Администратора, в ней пишется команда

regsvr32 «[Путь к библиотеке]bincomcntr.dll ,

например, regsvr32 «c:Program Files (x86)1cv88.3.5.1119bincomcntr.dll» и
команда выполняется. Все открытые приложения 1С при этом лучше закрыть. При
успешной регистрации будет выдано сообщение об успехе. Если выдается сообщение
об ошибке, то нужно проверить путь, по которому находится библиотека, и все
права.
Также эту команду можно поместить в cmd-файл и
запустить его с правами Администратора.

Если такая ошибка выпадает при попытке подключить к БД на платформе 7.7, то
следует проверить реестр на предмет наличия регистрации 7.7-коннектора. В
разделе HKEY_CLASSES_ROOT должны присутствовать ветки, изображенные на картинке:
Ветки для регистрации 7.7-коннектора
Для правильной регистрации 7.7-коннектора следует один раз запустить 1С
Предприятие 7.7 от имени Администратора.

Ситуация вторая. При попытке установить COM-соединение
выпадает ошибка с сообщением о несоответствии версии клиента БД-источника. В
этом случае проблема решается регистрацией правильной версии библиотеки
comcntr.dll так, как это было описано выше.

Ситуация третья. При попытке подключения через COM-соединение
к базе-источнику на платформе 1С 7.7 ошибок не выдается, но обработка «намертво»
«зависает». При снятии задачи соединение через консоль управления серверами 8.х
остается и не сбрасывается никакими ухищрениями, кроме перезапуска службы
сервера 1С. Такое явление происходит, когда осуществляется попытка соединения из
БД на платформе 8.х к БД на платформе 7.7 из сеанса сервера. Четко определенных
причин такого поведения программы здесь не приводится. Рекомендация одна —
использовать вызов подключения из сеанса клиента (&НаКлиенте).

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

1. Заходим в Панель управления → Администрирование → Службы компонентов.

2. Переходим к ветке Компьютеры → Мой компьютер → Приложения COM+.
 Оснастка Службы компонентов
3. В контекстном меню выбираем Создать → Приложение. Откроется Мастер установки
приложений COM+. Выбираем «Создать новое приложение».
Создание нового приложения СОМ+

4. Имя нового приложения лучше написать чтобы было понятно о чем речь:
V8_ComConnector, способ активации — «серверное приложение».

Создание нового приложения СОМ+

5. На следующем шаге устанавливаем «Текущий пользователь». Нажимаем «Далее».В
ветке созданного приложения переходим на ветку «Роли» открываем роль
«CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную
запись под которой работает сервер 1С.

6. В ветке созданного приложения переходим на ветку «Компоненты» и создаем
компонент: Создать — Компонент Выбираем «Установка новых компонентов», и в
диалоге выбираем нужную DLL-ку (в данном примере: [Путь к
библиотеке]bincomcntr.dll).

7. В контекстном меню выбираем «Свойства». В открывшемся окне переходим на
вкладку «Безопасность».

8. Снимаем галку «Принудительная проверка доступа для приложений». Ставим галку
«Применить политику программных ограничений». Устанавливаем Уровень ограничений
— «Неограниченный»

 Безопасность создаваемого компонента
9. Нажимаем «ОК».

Пока все на этом.


В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция нашей компании 2iS.

Термины

ОС — операционная система

COM-клиент — процесс(поток) ОС, запросивший создание COM-объекта

COM-сервер — COM-объект, созданный по запросу клиента

Com-соединитель — COM-объект V8X.ComСonnector для создания внешних соединений с базами 1С

Automation-сервер — он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С

Издание платформы — подстрока до 2-й точки версии платформы (например 8.2, 8.3)

Сборка платформы — полная строка версии платформы (например 8.2.19.130, 8.2.16.352)

Подключение внешнего соединения

Рассмотрим алгоритм подключения внешнего соединения в деталях

  1. Создание COM-объекта Com-соединитель (Имя класса — V8X.ComConnector). Варианты:
  2. Внутрипроцессное (inproc)
  3. Должен быть зарегистрирован класс V8X.ComConnector той же разрядности, что и COM-клиент
  4. Если издание платформы COM-клиента совпадает с изданием платформы COM-сервера, то также требуется равенство сборки платформы COM-клиента и COM-сервера.
  5. Он регистрируется при установке платформы с опцией «Внешнее соединение». В любой момент его можно зарегистрировать командой «Regsvr32 comcntr.dll» в каталоге исполняемых файлов платформы.
  6. COM-объект создается в памяти COM-клиента
  7. Затраты на создание примерно — 0.01(первое)/0.001(второе) cек
  8. Пример
  9. Внепроцессное локальное (local)
  10. Должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить через dcomcnfg.exe COM+ приложение с активацией «серверное приложение»/«Server apllication». Подробнее рассмотрено далее.
  11. COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на компьютере COM-клиента
  12. Затраты на создание примерно — 0.06(первое)/0.03(второе) сек
  13. Пример
    КомСоединитель = Новый COMОбъект(“V83.ComConnector”);
    ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
  14. Внепроцессное нелокальное (DCOM)
  15. На нелокальном компьютере должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить на нелокальном компьютере через dcomcnfg.exe COM+ приложение с активацией «Cерверное приложение»/«Server apllication». Подробнее рассмотрено далее.
  16. Необходимо настроить на нелокальном компьютере роль «Сервер приложений»/«Application server» и включить нелокальный доступ COM+, выбрав опцию «Сетевой доступ к COM+»/”COM+ network access”. Подробнее рассмотрено далее.
  17. COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на другом компьютере
  18. Затраты на создание примерно
  19. Экспериментальные данные

На графике видно, что длительность создания этого COM-объекта прямо пропорциональна задержке канала и коэффициент пропорциональности составляет примерно 24. Можно предположить, что при создании этого COM-объекта происходит 24 вызова через канал.

  1. Пример
    КомСоединитель = Новый COMОбъект(“V83.ComConnector”, ИмяКомпьютера);
    ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
  2. Выполнение метода Connect (создание внешнего соединения)
  3. Создание сеанса — 1 сек
  4. Инициализация сеанса — сек
  5. ПередНачаломРаботыСистемы (только для Automation-сервера)
  6. ПриНачалеРаботыСистемы
  7. Инициализация параметров сеанса
  8. Подгрузка нужных метаданных

Затраты на COM-вызовы

Каждый раз, когда мы обращаемся во встроенном языке к свойству или методу COM-объекта (выполняем COM-вызов), происходит ряд дополнительных действий по сравнению с обращением к родному объекту встроенного языка. Если COM-сервер находится в другом локальном процессе, то при этом еще сначала выполняется перенос всех параметров из COM-клиента в COM-сервер и в конце выполняется обратный перенос параметров в COM-клиент. Для такого переноса информация естественно должна быть сериализована на стороне отправителя и затем десериализована на стороне получателя, что в совокупности с некоторыми другими действиями получило название маршалинга и демаршалинга. В нелокальном режиме (DCOM) такой перенос будет еще тратить время на сетевые коммуникации и при первом обращении к новому COM-объекту на передачу его «скелета», и поэтому задержка канала будет играть решающую роль (Подробнее о COM вызовах, DCOM в википедии, Технический обзор DCOM,)

Соотношение затрат на вызов по типам расположения COM-сервера

  1. Минимальные для внутрипроцессного Com-сервера
  2. Средние для локального внепроцессного Com-сервера
  3. От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи

Минимизация количества COM-вызовов

  1. Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от COM-клиента на стороне COM-сервера
  2. Теперь нам не нужно изменять конфигурацию базы COM-сервера, чтобы использовать там сложный функционал.
  3. В нашем продукте мы назвали ее «Сервисный процессор». На ее передачу и инициализацию уходит около 1 сек
  4. Проектируем взаимодействие с COM-сервером по принципу «минимум COM-вызовов”, т.е. готовим все нужное на стороне COM-клиента и передаем в качестве параметров одного большого вызова»
  5. Создаем встроенную обработку для выполнения такого вызова в COM-клиенте
  6. Передача агрегатных объектов
  7. Сериализуем все входные параметры на стороне COM-клиента
  8. Десериализуем все входные параметры на стороне COM-сервера
  9. Сериализуем все выходные параметры на стороне COM-сервера
  10. Десериализуем все выходные параметры на стороне COM-клиента
  11. В нашем продукте мы назвали ее «Выполнение сервиса инфобазы»
  12. Для многократных COM-вызовов предусматриваем регулируемую частоту
  13. Например, информационные вызовы могут выполняться с изменяемой частотой

Обратная связь

При использовании принципа «минимум COM-вызовов» значительную часть времени код будет выполняться в чужом контексте, что серьезно усиливает некоторые неудобства COM-вызовов:

  1. Нельзя прервать поток COM-Клиента и его соединение с сервером приложений 1С, пока не завершится вызов COM-сервера
  2. У COM-Клиента нет информации о прогрессе выполнения вызова в COM-сервере

Для борьбы с этими неудобствами можно организовать обратную связь от COM-сервера к COM-клиенту, передав COM-Серверу ссылку на общий модуль COM-клиента и периодически вызывая через нее COM-клиент. Нужно отметить, что есть ошибки платформы (https://partners.v8.1c.ru/forum/t/1382465/m/1382465), проявляющиеся при создании ссылок на один общий модуль более чем в одном COM-севере сеанса. Поэтому пока лучше очищать ссылки на общий модуль во всех удерживаемых COM-серверах перед помещением в новый. В обратных вызовах можно передавать:

  1. информацию о прогрессе выполнения
  2. накопленные сообщения пользователю (получать функцией ПолучитьСообщенияПользователю(Истина))

Схема принципа “минимум COM-вызовов”

Такая схема дружественна к большим задержкам каналов связи. Поэтому она во многом похожа на вызов веб-сервиса. А следовательно используя ее для COM взаимодействия, вы значительно снижаете затраты на возможные переходы между COM и веб-сервисом в обоих направлениях.

Отладка

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

Чтобы включить возможность отладки внешних соединений, в подкаталоге conf нужно создать файл comcntrcfg.xml с соответствующим содержимым. В окне подключения можно сделать кнопку/флажок для программного создания такого файла. Однако много версий платформы содержат ошибку, из-за которой предметы отладки внешних соединений не видны в отладчике даже с этим корректно настроенным файлом. На платформе 8.3 эти проблемы вроде бы решены.

Пример файла comcntrcfg.xml:

Также нельзя забывать о необходимости запускать конфигуратор для отладки с той же (до регистра букв) строкой соединения, что и предмет отладки. Поэтому в этом диалоге нужно сделать кнопку для запуска конфигуратора COM-сервера с правильной строкой соединения.

В какой-то мере обойти проблему невидимости предмета отладки внешнего соединения и ряд других неудобств можно путем однократного выполнения кода на толстом клиенте с заменой режима «Внешнее соединение» на «Automation-сервер» (приложение), т.е. используя COM класс V8X.Application и включенную видимость. Поэтому в окне подключения нужны параметры для выбора режима подключения.

После создания подключения на стороне COM-клиента обычно требуется подключение отладчика базы COM-сервера и установка там точки останова в нужном месте. Поэтому в окне подключения нужно расположить кнопку подключения отладчика/конфигуратора COM-сервера. Если COM-сервер запущен в режиме видимого приложения, то для подключения отладчика можно воспользоваться асинхронным вызовом исключения в нем. Из диалога с ошибкой в приложении COM-сервера через кнопку «Конфигуратор» можно будет открыть конфигуратор и в большинстве случаев сразу подключить отладчик. Если подключение отладчика таким способом недоступно, то оператору поможет отображение информации о сеансе (его номера) в базе COM-сервера. Также нужна кнопка открытия в открытом отладчике файла внешней обработки, которая будет выполняться в нем.

Управление COM классами и COM+ приложениями 1С

Управление COM классами

  1. Внешнее соединение (V8X.ComConnector)
  2. Регистрация: Regsvr32 comcntr.dll
  3. Отмена регистрации: Regsvr32 comcntr.dll /u
  4. Automation-сервер (V8X.Application)
  5. Регистрация — 1cv8.exe /regserver
  6. Отмена регистрации — 1cv8.exe /unregserver

Управление COM+ приложениями

Осуществляется через оснастку dcomcnfg.exe. Для регистрации 1С в качестве COM+ приложения необходимо открыть оснастку «dcomcnfg». В ней в ветке «Службы компонентов»-«Компьютеры»-«Мой компьютер»-«Приложения COM+»(COM+ Applications) необходимо добавить новое приложение (application). При добавлении можно указать любое имя. Далее необходимо указать пользователя, от имени которого будет работать COM+ приложение, на закладке Идентификация (Identity). Также нужно задать доступ к приложению для всех пользователей путем добавления, если отсутствует, роли с любым именем в ветке Роли (Roles), и добавления в ее ветку Пользователи (Users) пользователя Все (Everyone). После добавления приложения необходимо создать новую компоненту. Для этого в ветке «Компоненты» созданного приложения необходимо выбрать пункт меню «Создать»-«Компонент». При создании выбрать импорт уже зарегистрированных компонентов и найдите в списке (желательно 64-битную) компоненту 1С (V8x.COMConnector.1).

В нашем продукте имеется инструмент «Управление COM классами 1С» для просмотра/регистрации/изменения всех COM классов и COM+ приложений 1С на указанном компьютере:

Настройка DCOM-сервера

Для Windows 2008 Server нужно добавить роль «Сервер приложений» (Application server). Для этого необходимо открыть панель управления компьютером, щелкнуть правой кнопкой мыши в ветки «Роли» и выбрать пункт меню «Добавить роль».

Появится око в котором необходимо выбрать роль «Сервер приложений»/»Application server». На этапе выбора ролей сервера приложений необходимо указать пункт «Сетевой доступ к COM+»/»COM+ network access». Если это не сделать, то при попытке создания COM-объекта вы будете получать ошибку «Ошибка при вызове конструктора (COMОбъект): The component or application containing the component has been disabled».

Проблемы

  1. Высокие затраты на подключение/инициализацию
  2. Удержание com-серверов — эффективное средство борьбы
  3. Временное хранилище. Производитель не рекомендует, но деваться больше некуда. http://infostart.ru/public/331683/
  4. Повторное использование возвращаемых значений. Очищаются каждые 20 мин
  5. Разные сборки платформы клиента и сервера при одинаковом издании платформы
  6. Для обхода для каждой отличной от COM-клиента сборки платформы назначаем и настраиваем DCOM сервер
  7. Отсутствие информации о типах вложенных в COM-объекты объектов 1С (вместо типа объекта 1С везде получаем тип «COMОбъект») и отсутствие контекстной подсказки по ним
  8. Для обхода применяем принцип «минимум COM-вызовов»
  9. При передаче исключения из COM-сервера оно принимает краткую форму из-за ошибки платформы
  10. Для обхода оборачиваем каждый вызов на стороне COM-сервера в попытку и в исключении перевызываем исключение с полным описанием ошибки
  11. При создании COM-объекта ошибка “Версия компоненты «comcntr» (8.X.XX.XXX) отличается от версии корневого модуля «core82» (8.X.YY.YYY)”
  12. Для обхода создаем COM+ приложение с внепроцессной активацией. Тогда COM-сервер будет создаваться в отдельном процессе и совпадения версий этих модулей не потребуется.
  13. Медленные каналы (большие задержки)
  14. Каждой подсети за отдельным медленным каналом назначаем и настраиваем свой DCOM сервер и при обращении к базам за этим каналом COM-серверы создаем на этом компьютере, минимизируя количество и объемы вызовов Com-клиент<->Com-сервер
  15. Кешируем (повторно используем) COM-серверы
  16. Невозможно разорвать соединение рабочего процесса, в котором ожидается завершение вызова COM-сервера
  17. Для обхода можно использовать создание COM-объектов в выделенных хост-процессах, настроив соответствующим образом COM+ приложение, и регистрировать идентификаторы этих процессов в привязке к сеансам COM-клиентов. Тогда при необходимости завершить серверное соединение такого сеанса можно сначала убить процесс COM-сервера, а потом и сам сеанс.
  18. При обращении к COM-объекту может возникать ошибка «Неизвестная ошибка». Возможные причины:
  19. Com-сервер перестал существовать. Возможные причины:
  20. Переполнение стека
  21. Невосстановимая ошибка
  22. Хост-процесс завершился
  23. Потеря связи с нелокальным COM-сервером
  24. Совпадение имен свойств и методов без параметров объекта создает неоднозначность обращения к ним через COM
  25. Например, если у справочника есть реквизит ПолноеНаименование, то из-за наличия метода ПолноеНаименование() обращение к реквизиту ПолноеНаименование через COM может привести к вызову метода ПолноеНаименование()
  26. Для обхода используем принцип “минимум COM-вызовов”

Com-технология VS веб-сервисы в локальной сети

Недостатки

  1. Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм
  2. Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов
  3. Привязка к семейству операционных систем (платформе) Windows

Преимущества

  1. Отсутствие необходимости изменять конфигурацию баз, к которым подключаемся
  2. Широкая функциональность
  3. Проще отладка
  4. Не требуется разворачивать и поддерживать веб-сервер

Захват клиентских лицензий

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

Заключение

Если вы хотите подробнее узнать об описанных особенностях, вы можете бесплатно скачать конфигурацию и демонстрационную базу продукта, для чего необходимо оформить предварительный заказ на Инфостарте на продукт 2iS:Интеграция. Несмотря на наличие в конфигурации защищенного модуля, 99% программного кода конфигурации открыто, то есть Вы можете изучить реализацию описанных приемов.

Поставляемый с платформой COM-компонент позволяет взаимодействовать между собой несколькио информационных баз, а также получать доступ к базам 1С:Предприятия из сторонних приложений. Подробнее можете прочитать на официальном сайте
.

Пример работы через COM-соединение мы рассматривали в одной из предыдущих статей . Сегодня рассмотрим действия в системе, необходимые для использования COM-компоненты.

Регистрация в системе

После установки платформы на комьютер COM-компонент должен быть установле автоматически установщиком. Файл внешней компоненты располагается в каталоге:

C:Program Files1cv82[версия платформы]bincomcntr.dll

Таким образом, при установке новке новой версии платформы компонент будет установлен новый и находится в соответствующей директории. Для использования COM-компоненты она должна быть зарегистрирована в операционной системе.

Бывают ситуации, когда программа установки не может автоматически зарегистрировать DLL в операционной системе, поэтому это приходится делать вручную. Также при установке новой версии платформы поверх уже установленной может понадобиться зарегистрировать comcntrl.dll
из каталога установленной версии.

Выполнить действия вручную можно с помощью командой строки, запущенной от имени администратора, следующим образом:

regsvr32 comcntrl.dll

запущенной в вышеуказанном каталоге.

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

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

Ситуация первая.
При попытке подключения через COM
-соединение
к базе-источнику выдается сообщение об ошибке. Что-то вроде: «Ошибка при вызове
конструктора (COMObject): -2147221164(0x80040154): Класс не зарегистрирован «.
Для устранения подобной ошибки перво-наперво нужно зарегистрировать библиотеку
клиента — приемника. Причем для разных версий клиентов одной версии платформы
нужно регистрировать свою библиотеку. То есть для разных сборок платформы версии
8.3 нужно заново регистрировать версию библиотеки нужного релиза платформы. Для
платформы версии 8.2 такой же подход.
Библиотека регистрируется следующим образом. Запускается Командная строка из-под
Администратора, в ней пишется команда

Regsvr32 «[Путь к библиотеке]bincomcntr.dll ,

Например, regsvr32 «c:Program Files (x86)1cv88.3.5.1119bincomcntr.dll» и
команда выполняется. Все открытые приложения 1С при этом лучше закрыть. При
успешной регистрации будет выдано сообщение об успехе. Если выдается сообщение
об ошибке, то нужно проверить путь, по которому находится библиотека, и все
права.
Также эту команду можно поместить в cmd-
файл и
запустить его с правами Администратора.

Если такая ошибка выпадает при попытке подключить к БД на платформе 7.7, то
следует проверить реестр на предмет наличия регистрации 7.7-коннектора. В
разделе HKEY_CLASSES_ROOT должны присутствовать ветки, изображенные на картинке:

Для правильной регистрации 7.7-коннектора следует один раз запустить 1С
Предприятие 7.7 от имени Администратора.

Ситуация вторая.
При попытке установить COM
-соединение
выпадает ошибка с сообщением о несоответствии версии клиента БД-источника. В
этом случае проблема решается регистрацией правильной версии библиотеки
comcntr.dllтак, как это было описано выше.

Ситуация третья.
При попытке подключения через COM
-соединение
к базе-источнику на платформе 1С 7.7 ошибок не выдается, но обработка «намертво»
«зависает». При снятии задачи соединение через консоль управления серверами 8.х
остается и не сбрасывается никакими ухищрениями, кроме перезапуска службы
сервера 1С. Такое явление происходит, когда осуществляется попытка соединения из
БД на платформе 8.х к БД на платформе 7.7 из сеанса сервера. Четко определенных
причин такого поведения программы здесь не приводится. Рекомендация одна —
использовать вызов подключения из сеанса клиента (&
НаКлиенте).

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

1. Заходим в Панель управления → Администрирование → Службы компонентов.

2. Переходим к ветке Компьютеры → Мой компьютер → Приложения COM+.


3. В контекстном меню выбираем Создать → Приложение. Откроется Мастер установки
приложений COM+. Выбираем «Создать новое приложение».

4. Имя нового приложения лучше написать чтобы было понятно о чем речь:
V8_ComConnector, способ активации — «серверное приложение».

5. На следующем шаге устанавливаем «Текущий пользователь». Нажимаем «Далее».В
ветке созданного приложения переходим на ветку «Роли» открываем роль
«CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную
запись под которой работает сервер 1С.

6. В ветке созданного приложения переходим на ветку «Компоненты» и создаем
компонент: Создать — Компонент Выбираем «Установка новых компонентов», и в
диалоге выбираем нужную DLL-ку (в данном примере: [Путь к
библиотеке]bincomcntr.dll).

7. В контекстном меню выбираем «Свойства». В открывшемся окне переходим на
вкладку «Безопасность».

8. Снимаем галку «Принудительная проверка доступа для приложений». Ставим галку
«Применить политику программных ограничений». Устанавливаем Уровень ограничений
— «Неограниченный»


9. Нажимаем «ОК».

Как в Windows x32(x86)/x64 зарегистрировать компоненту com-соединения comcntr.dll 1С 8.

Ответ на данный вопрос актуален в контексте натройки обменов между базами 1С с помощью прямого подключения. Один из вариантов установки/регистрации компоненты com-соединения приведен на странице: На ней описан вариант установки компоненты при установке/переустановке компонентов платформы 1С: Предприятие из стандартного пакета установки. Но случается и так, что все-таки com-компонента по каким-то таинственным пирчинам все же не регистрируется при вышеуказанной операции.

На это есть альтернативный вариант с помощью командной строки операционной системы. Забегая немного вперед, и чтобы обезопасить себя от ошибок при регистрации com-компоненты comcntr.dll через командную строку, подобных приведенной на скрине

Чтобы избежать ошибки «Модуль comcntr.dll загружен, но не удалось выполнить вызов DllRegisterServer, код ошибки 0x80070005» запускайте командную строку с правами администратора

В системе с разрядностью x32(x86) для платформы 1С: Предприятие 8.2

C:Program Files (x86)1cv82<номер_релиза>bin> regsvr32 comcntr.dll

Где <номер_релиза> — номер текущего используемого релиза плафтормы 1С 8.

Для платформы 1С: Предприятие 8.3 командная строка для регистрации com-компоненты будет выглядеть примерно так:

C:Program Files (x86)1cv8<номер_релиза>bin> regsvr32 comcntr.dll

На скрине, приведенном ниже в качестве пирмере для случая регистрация comcntr.dll в ОС x86 значение <номер_релиза> — «8.3.9.1818»

Теперь рассмотрим вариант для системы с разрядностью x64 для платформы 1С: Предприятие 8.2, альтернативный вариант:

C:WindowsSysWOW64>regsvr32 «C:Program Files (x86)1cv82<номер_релиза>bincomcntr.dll»

Для Windows x64 регистирация com-соединения 1С 8.3 может выглдяеть так:

C:WindowsSysWOW64>regsvr32 «C:Program Files (x86)1cv8<номер_релиза>bincomcntr.dll»

Если все-таки приведенный материал не помог, предлагается обратиться к альтернативным публикациям: Регистрация comcntr.dll-компоненты в 64-битной версии Microsoft Windows и Регистрация компоненты comcntr.dll для COM соединения с 1С 8 в 32-битной операционной системе

© www.. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

В свое время столкнулся с проблемой создания COM-соединения на стороне сервера. Проблема трудно диагностируется, т.к. код, прекрасно работающий под клиентом отказывается работать на сервере, например, если код исполняет регламентное задание.

Предлагаемая ниже методика позволяет избавиться от описываемой проблемы. К сожалению, после переустановки платформы все возвращается на круги своя и процедуру приходится повторять.

Http://www.steeltrace.ru/details/articleid/22/%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-1%D1%81-com-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-64-%D0%B1%D0%B8%D1%82%D0%BD%D1%8B%D0%BC%D0%B8-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8.aspx

Upd
. Дополнение: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),

то такой проблемы не будет. Уставщик позволяет поставить COM-коннектор без установки самого севера. Это полезно, когда приложение реализовано на платформе 8.3, а COM-соединение нужно к базам на 8.2.

За дополнение спасибо
brix8x
.

Приведен алгоритм настройки системы, со скрином к каждому действию.

2. Регистрация компоненты comcntr.dll

5. Старт сервера 1С. (обязательно:)

Вызываем консоль

Регистрируем компоненту. Компонента отсутствует, если установлен только сервер 1С. Почему-то 1С публикует ее только в составе клиента.

Upd
. Если компонента не регистрируется, то возможно придется сначала удалить старую компоненту, только затем встанет новая.
Делаем regsvr32 /u
«c:Program Files1cv88.2.18.82bincomcntr.dll»
Затем тоже самое, но без «/u» regsvr32 «c:Program Files1cv88.2.18.82bincomcntr.dll»

За дополнение спасибо
shur52
.

Запускаем службу компонентов. Описывается для Windows Server 2008 R2 Standart.

В ветке Components добавляем новую компоненту comcntr.dll

ВАЖНО!!! После установки нужно немного изменить свойства. Эта тонкость нигде не описана, без нее у меня не работало!

Перезапуск физического сервера

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83’

Часто бывает, что при настроенной синхронизации после обновления платформы появляется ошибка «Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83’». Так происходит потому, что автоматически не зарегистрировалась компонента comcntr.dll из-за проблем с правами пользователя на компьютере.

Решить данную проблему можно двумя способами.

Способ №1.

Переустановить платформу под правами Администратора или под пользователем, у которого есть такие права.

Способ №2.

Если не получилось как в способе №1, то можно вручную зарегистрировать самому эту компоненту.

Перед этим нам необходимо изменить Параметры контроль учетной записи.

Для Windows 7 нам необходимо зайти в Пуск затем в Панель управления.

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Панель управления и перейти по открывшейся ссылке.

В правом верхнем углу Панели управления выбрать Просмотр-Мелкие значки и затем в списке перейти в Учетные записи пользователей.

Учетные записи пользователей

Там выбрать Изменить параметры контроля учетных записей.

Параметры контроля учетных записей

Затем поставить ползунок в самом нижнем положении.


Купон на ОЗОН за покупку программ 1С

Ползунок параметров контроля учетных записей

И перезапустить компьютер.

После перезагрузки необходимо:

Для Windows 7 надо перейти в Пуск, затем в строке поиска ввести cmd.exe,нам покажет что найдена Командная строка и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Командная панель или cmd.exe и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

Запуск командной строки

У нас откроется Командная строка, где нам необходимо ввести команду:

1.Для платформы x86

Regsvr32 «C:Program Files (х86)1cv8номер версии вашей платформыbincomcntr.dll» (regsvr32пробел»C:Program Files (х86)1cv8номер версии вашей платформыbincomcntr.dll»).

Команда для платформы x86

2.Для платформы х64

Regsvr32 «C:Program Files1cv8номер версии вашей платформыbincomcntr.dll» (regsvr32пробел»C:Program Files1cv8номер версии вашей платформыbincomcntr.dll»).

Команда для платформы x64

Затем нажать клавишу Enter.

Если все сделали правильно, то увидите вот такое окно.

Успешное выполнение команды

После этого необходимо перезагрузить компьютер. Как включится, пробуйте снова сделать синхронизацию.

Понравилась статья? Поделить с друзьями:
  • 1а2904 ошибка бмв
  • 1zz fe ошибка р1349
  • 1xbet фатальная ошибка при выводе средств
  • 1xbet ошибка при пополнении счета что делать
  • 1xbet ошибка авторизации