Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

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

COMОбъект: -2147221005(0x800401F3): Недопустимая строка с указанием класса
Я
   Mikhail Volkov
 
12.11.20 - 15:11
Перестало работать OLE-соединение "V83.Application": Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса. Тема заезженная, везде предлагают выполнить перерегистрацию платформы. Стоит 8.3.10.2466 х64, но клиентская часть 32-разрядная, делаю (под админом): regsvr32 "c:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll" (или надо regsvr32 "c:\Program Files (x86)\1cv8\8.3.10.2466\bin\comcntr.dll"?). Дальше надо сервер перезагрузить, или необязательно?
Читал статьи Ошибка V82.COMConnector на сервере 64. Решение проблемы (http://catalog.mista.ru/1c/articles/197627/) и Решение проблемы «Недопустимая строка
с указанием класса (https://efsaver.ru/docs/reshenie-problemy-nedopustimaya-stroka-s-ukazaniem-klassa.html), кое-что изменил/добавил в приложение COM+ V8COMConnector. Чтобы изменения вступили в силу, как перезапустить?
   Mikhail Volkov
 
1 - 12.11.20 - 15:36
Службы компонентов/Действие/Пуск?
   Kigo_Kigo
 
2 - 12.11.20 - 15:40
не помню что конкретно сделал, но статья с инфостарта не помогла, по моему привел разрядность к одному знаменателю
   Kigo_Kigo
 
3 - 12.11.20 - 15:41
сижу уже с начала создания темы вспоминаю как эту бяку победил, хоть убей не помню, помню точно что по статье делал, не вылечилось и сервант ребутил и клиента
   ДенисЧ
 
4 - 12.11.20 - 15:42
Взять regsvr32 не из system, а из SysWOW ?
   Mikhail Volkov
 
5 - 12.11.20 - 15:50
Не помогло... Службу Агент сервера 1С:Предприятия 8.3 (x86-64) перезапустить, выкинет пользователей?
(1) У Альфа-Авто должна быть 32-разрядная клиентская часть, иначе торговое оборудование не работает.
(4) Полностью C:\Windows\SysWOW64\regsvr32 "c:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll"? Не Program Files (x86)?
   ДенисЧ
 
6 - 12.11.20 - 15:52
(5) Если SysWOW, то (x86)
И наоборот
   Kigo_Kigo
 
7 - 12.11.20 - 15:52
(5) как ты пытаешься вызвать х64 ком объект с х32 разрядного клиента? ответ, никак, регистрируй на клиенте х32 компненту
   Mikhail Volkov
 
8 - 12.11.20 - 15:53
(4) Чтоб в силу вступило, что сделать?
   Kigo_Kigo
 
9 - 12.11.20 - 15:55
(8) Ничего, так должно все работать, у тебя из сабжа не создается ком объект, потому что он ее не видит, а точнее видит другой разрядности, это не проблема подключений к базе через ком(сервер х64,х32, не важно), это проблема создания объекта как такого
   Kassern
 
10 - 12.11.20 - 15:56
(0) делай обертку через службы компонентов для библиотеки comcntr.dll
   Mikhail Volkov
 
11 - 12.11.20 - 16:09
(9) Дык, как правильно ее регистрировать?
(10) Вроде все сделано. Описание: 1CV83 COM Connector Class, DLL: C:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll
   Kigo_Kigo
 
12 - 12.11.20 - 16:22
(11) а у тебя точно регистрация проходит?
   Kigo_Kigo
 
13 - 12.11.20 - 16:24
И так, делает reg.bat файл , вставляем туда строку
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.15.1830\bin\comcntr.dll"
pause

сохраняем, запускаем от имени администратора, пробуй, скрин о регистрации сюда
   Kigo_Kigo
 
14 - 12.11.20 - 16:25
(13) Пути поменять на свои, лучше полные
   Kigo_Kigo
 
15 - 12.11.20 - 16:26
для х32 путь в C:\Program Files (x86)\
   arsik
 
16 - 12.11.20 - 16:31
(0) Попробуй через Портативные инструменты разработчика http://devtool1c.ucoz.ru/load/osnovnye/portativnye_instrumenty_razrabotchika_dlja_1s_8_2/1-1-0-6
Там есть такой удобный инструмент, я через него всегда регистрирую, в непонятных ситуациях. http://devtool1c.ucoz.ru/index/upravlenie_com_klassami_1s/0-56
   Mikhail Volkov
 
17 - 12.11.20 - 16:55
(13) Успешное выполнение: https://ibb.co/z5h2fHc. Ошибка осталась. 1С надо перезапускать?
(16) Что им должен увидеть?
Вроде дело не в регистрации, в чем-то другом... Может служба какая-то отвалилась... Какая? Работало же раньше...
   Kigo_Kigo
 
18 - 12.11.20 - 17:01
1С конечно надо перезапустить
   Mikhail Volkov
 
19 - 12.11.20 - 17:03
(18) Не помогло.
   ZDenis
 
20 - 12.11.20 - 17:51
(19) У тебя com соединение на сервере ведь создается, причем тут клиентская часть. Вот на сервере и регистрируй dll. Причем, если сервер 64х, то и dll нужно соответствующую. Сперва лучше отмени уже сделанную регистрацию, чтобы в реестре путаницы не было.
   МимохожийОднако
 
21 - 12.11.20 - 17:59
В БСП и типовых конфигурациях есть функция ЗарегистрироватьCOMСоединитель()
   TormozIT
 
22 - 12.11.20 - 18:14
О да тут похоже все не понимают, что COMСоединитель и OLEAutomation (V8*.Application) - разные вещи и имеют существенные отличия в отношении контроля совместимости версий платформы и способа регистрации.
Кто хочет прокачать теорию, читайте тут все разжевано http://catalog.mista.ru/1c/articles/387577/
Кому нужно решение, в (16) уже дали ссылки - там все сделано очень универсально (как и весь ИР). Картинка на странице описания правда старовата уже. Запускать эту приблуду надо на том компьютере, где будет создаваться COM-объект (COM-клиент).
   Mikhail Volkov
 
23 - 12.11.20 - 19:49
(20) (22) Уже всяко пробовал, в том числе с ключом /u (с отменой регистрации). Другой вариант: переустановить платформу, при этом она зарегистрирует все компоненты заново. Но это крайний вариант. Вроде дело не в регистрации...
Службы компонентов как перезапустить? Хотя сервер перезагрузил (все вышли), не помогло!?
   Mikhail Volkov
 
24 - 12.11.20 - 22:16
Где, в какой ветке реестра Windows прописывается регистрация платформы?
   TormozIT
 
25 - 12.11.20 - 22:43
(23) Если ты пробовал все, что я рекомендовал, то покажи скриншот с COM классами в ИР.
   Mikhail Volkov
 
26 - 13.11.20 - 05:33
(25) Как это сделать? Это с помощью инструментов (16)? У меня их нет.
   TormozIT
 
27 - 13.11.20 - 07:54
(26) Почему у тебя их нет? Что ты делал, чтобы они у тебя появились?
   Mikhail Volkov
 
28 - 13.11.20 - 08:09
(27) Управление COM классами 1С
Просмотр и регистрация COM классов платформы 1С.
Все разрядности
Все типы классов
Все издания платформы
Генерация конфигурационного файла разрешения отладки COM-соединения
Можно указать для каждого класса нужную версию платформы из списка установленных
Пожалуй стоит поставить...
А "Регистрация утилиты администрирования серверов (8.3.10.2466)" - то, нет? Объект: "C:\Program Files (x86)\1cv8\8.3.10.2466\bin\RegMSC.cmd" выполнил:  C:\Program Files (x86)\1cv8\8.3.10.2466\bin>regsvr32 /n /i:user radmin.dll - Успешное выполнение DllInstall в radmin.dll, но ошибка осталась.
   TormozIT
 
29 - 13.11.20 - 08:14
(28) Поздравляю. Ты сделал первый шаг в правильном направлении - осознал, что "стоит поставить". Представляй, что я крепко держу тебя за руку, и потому делай уверенно следующий шаг.
   XLife
 
30 - 13.11.20 - 08:15
"C:\Program Files (x86)\1cv8\8.3.10.2466\bin\1cv8.exe" /regserver
 
 Рекламное место пустует
   Mikhail Volkov
 
31 - 13.11.20 - 08:21
(29) Не понял, что скачивать: ИНСТРУМЕНТЫ РАЗРАБОТЧИКА ПОРТАТИВНЫЕ 1С 8.2+ V5.67P или 1С 8.3 V5.67E (1С 8.2 смущает)?
(30) В командной строке (под админом)?
   XLife
 
32 - 13.11.20 - 08:24
(31) да... а потом на всякий случай: regsvr32 "C:\Program Files (x86)\1cv8\8.3.10.2466\bin\comcntr.dll"
   МимохожийОднако
 
33 - 13.11.20 - 08:27
(31) не смущайся. Скачивай
   TormozIT
 
34 - 13.11.20 - 08:31
(31) Там не 8.2, а 8.2+. Качай портативные
   Mikhail Volkov
 
35 - 13.11.20 - 08:33
(32) Сообщений не выдало, процесс OLE-соединения вроде пошел... сразу ошибку (0) не выкинула. О, Подключение выполнено к базе: 'Srvr="ANDROMEDA";Ref="PATRCA";' 13.11.2020 10:27:23 - успех! Посмотрю как в рабочей базе...
   TormozIT
 
36 - 13.11.20 - 08:44
(35) Только это не из-за (32), а из-за (30). Ну хоть кто то здесь знает разницу из (22).
   Mikhail Volkov
 
37 - 13.11.20 - 11:29
Все же, в какой ветке реестра Windows прописывается регистрация платформы?
(36) Статью в (22) читал, но по другому поводу: Альфа-Авто обычно ведет Com-обмены с УПП/КА1. Когда поддержка КА1 кончилась, создали базу ERP/КА2, но она потребовала более высокую версию платформы. С OLE-обменом возникли проблемы: https://i.ibb.co/pdrH9Wy/COM.jpg. Меняю версию зарегистрированной платформы, тогда нормально. Даже функции написал:

// Определяет версию подключаемого приложения, при не соответствии требуемой переключает ее для OLE

// для пользователей с административными правами
Функция ВерсияПодключаемогоПриложения(СтрокаПодключения) Экспорт
    СисИнфо = Новый СистемнаяИнформация;
    ТекущаяВерсия = СисИнфо.ВерсияПриложения;
    Если Найти(ТекущаяВерсия, "8.3") = 0 Тогда
        Возврат ТекущаяВерсия;
    КонецЕсли;
    ТребуемаяВерсия = ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ВысокаяВерсия, ПрежняяВерсия);
    х86 = Не ПодключенаВысокаяВерсия(СтрокаПодключения);
    WshShell = Новый COMОбъект("WScript.Shell");    Ключ = "";
    Значение = ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ);
    // Перключение версии OLE    

//    Если Не ПустаяСтрока(Значение) И Найти(Значение, ТребуемаяВерсия) = 0 Тогда    // ТекущаяВерсия <> ТребуемаяВерсия

//        Значение = СтрЗаменить(Значение, "Program Files" + ?(х86, "", " (x86)"), "Program Files" + ?(х86, " (x86)", ""));
//        Значение = СтрЗаменить(Значение, ТекущаяВерсия, ТребуемаяВерсия);

//        WshShell.RegWrite(Ключ, Значение);
//        ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",, Истина);

//        Сообщить("Переключили версию платформы на " + ТребуемаяВерсия, СтатусСообщения.Информация);
//    КонецЕсли;

    Возврат ?(ПустаяСтрока(Значение), ТекущаяВерсия, ТребуемаяВерсия);
КонецФункции// ВерсияПодключаемогоПриложения()


// Переключает на старую версию платформы для OLE-соединения, если она переключена на новую версию

// для пользователей с административными правами
Процедура ЗвершитьПодключениеOLE() Экспорт
    WshShell = Новый COMОбъект("WScript.Shell");    Ключ = "";
    Значение = ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ);
    Если ПустаяСтрока(Значение) Или Найти(Значение, "Program Files (x86)\1cv8\" + ПрежняяВерсия) > 0 Тогда
        Возврат;
    КонецЕсли;
    WshShell.RegWrite(Ключ, "C:\Program Files (x86)\1cv8\" + ПрежняяВерсия + "\bin\1cv8.exe");
    ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",, Истина);
КонецПроцедуры// ЗвершитьПодключениеOLE()


Функция ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ) Экспорт
    // значение HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e92b75e3-2ea1-4fec-b493-cef3ec59fca6}\LocalServer32 должно быть C:\Program Files\1cv8\8.3.14.1779\bin\1cv8.exe

    CLSID = "{E92B75E3-2EA1-4FEC-B493-CEF3EC59FCA6}";
    Ключ  = "HKEY_CLASSES_ROOT\Wow6432Node\CLSID\" + CLSID + "\LocalServer32\";
    Значение = "";
    Попытка
        Значение = WshShell.RegRead(Ключ);
    Исключение
        Сообщить("Произошла исключительная ситуация (WshShell.RegRead): Неверная ссылка на корень в разделе реестра " + Ключ + " - недостаточно прав на реестр Windows", СтатусСообщения.Внимание);
    КонецПопытки;
    Возврат Значение;
КонецФункции// ЗначениеКлючаЗарегистрированнойВерсииV83Application()


Но это только для пользователей с административными правами, пришлось от них отказаться. А метод COM (не OLE) нормально работает. Нашел на http://catalog.mista.ru/public/1042208/ метод открытия объекта по ссылке в другой базе (подобно OLE), написал:

// Открытие объекта по ссылке в базе ERP/КА2, работающей на более высокой версии платформы

//
Процедура ОткрытьОбъектВБазеВысокойВерсии(Ссылка) Экспорт
    Если обЗначениеНеЗаполнено(Ссылка) Тогда
        Предупреждение("Объект в " + БазаОрганизации(ОрганизацияТекущегоПодключенияКА()) + "не найден!", 60);
        Возврат;
    КонецЕсли;
    ИмяСервера     = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), 7, Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 8);    // "andromeda:1641";

    ИмяБазы         = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(ОбъектКА.СтрокаСоединенияИнформационнойБазы()) - Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7);    // "PatrERP";

    Если Не БазаКАОткрытаПользователем() Тогда
        Предупреждение("База '" + ИмяБазы + "' не открыта под пользователем '" + СокрЛП(ПараметрыСеанса.Пользователь) + "'", 60);
        Возврат;
    КонецЕсли;
    Объект = Ссылка.ПолучитьОбъект();
    ТипОбъекта     = СокрЛП(Объект.Метаданные().ПолноеИмя());
    GUID         = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор());
    НавигационныйGUID = Сред(GUID, 20 ,4) + Сред(GUID, 25, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Сред(GUID, 1, 8);
    ПутьОбъекта  = "e1cib/data/" + ТипОбъекта + "?ref=" + НавигационныйGUID;    
    НазваниеОкна = СокрЛП(ОбъектКА.Константы.ЗаголовокСистемы.Получить());    // "КА2 ИП Патрушева Г.М.";

    НазваниеОкна = СтрЗаменить(НазваниеОкна, """", """""");
    НазваниеОкна = СтрЗаменить(НазваниеОкна, " ", """ """);
    СерверБаза     = ИмяСервера + "\" + ИмяБазы;
    СерверБаза     = "/S""" """" + СерверБаза + """" """/URL""" """" + ПутьОбъекта;    // после СерверБаза? " /N""Администратор"" /P""2001221"

    ПутьКФайлу     = "\\corp.akit\workspace$\1c\1с_Архивы\";
    ПолныйПутьКФайлу = ПутьКФайлу + "ОткрытьСсылкуВДругойБазе.exe";
    ПолныйПутьОткрытияОбъекта = """""";    // вроде не нужно СтрЗаменить("c:\Program Files\1cv8\common\1cestart.exe ENTERPRISE " + СерверБаза," ",""" """);

    Файл = Новый Файл(ПолныйПутьКФайлу);
    Если Не Файл.Существует() Тогда
        Сообщить("Файл: '" + ПолныйПутьКФайлу + "' не существует.", СтатусСообщения.Информация);
        Возврат;
    КонецЕсли;
    Приложение = ПолныйПутьКФайлу
         + " " + НазваниеОкна
         + " " + ПутьОбъекта
         + " " + СерверБаза
         + " " + ПолныйПутьОткрытияОбъекта;
//    Сообщить(Приложение, СтатусСообщения.Информация);

    ЗапуститьПриложение(Приложение);
КонецПроцедуры// ОткрытьОбъектВБазеВысокойВерсии()
   acht
 
38 - 13.11.20 - 11:40
(37) > ПолныйПутьКФайлу = ПутьКФайлу + "ОткрытьСсылкуВДругойБазе.exe";

/URL <адрес>
— указывает необходимость перехода по ссылке. Поддерживаются ссылки формата e1c:
Если указана внешняя ссылка - выполняется поиск запущенного клиентского приложения с той же строкой соединения, которая указана в параметре. В найденном клиентском приложении не должно быть открыто модальное или блокирующее окно. После этого выполняется попытка перехода по локальной ссылке из исходной навигационной ссылки и активизируется основное окно приложения. В случае неудачи клиентское приложение продолжает работу. Если исходная навигационная ссылка не содержит локальной ссылки (содержит только адрес информационной базы), то попытка перехода не выполняется, активируется основное окно найденного клиентского приложения.
Если подходящего клиентского приложения не найдено, строка соединения определяется из параметра командной строки /URL.
Если указана локальная ссылка - клиентское приложение запускается в общем порядке. После запуска выполнится попытка перехода по переданной локальной ссылке.
Для ссылок формата http(s) всегда запускается (или находится активный) тонкий клиент.

© ООО "1С-Софт", 1996-2019. Все права защищены.
   Mikhail Volkov
 
39 - 13.11.20 - 11:55
(38) Что-то не понял к чему это, о чем?
   Mikhail Volkov
 
40 - 13.11.20 - 12:42
Не сразу заметил эту (0) ошибку, потому что в ЖР в отборе на вкладке Данные отмечаю лишь объекты заслуживающие внимание (например, по кассе). Тогда ошибки по другим объектам не видны. Можно как-то настроить отбор, чтобы события с ошибками все отображались. А события Информация - только отмеченные на вкладке Данные?
   acht
 
41 - 13.11.20 - 13:13
(39) ОткрытьСсылкуВДругойБазе.exe не нужен
   Mikhail Volkov
 
42 - 13.11.20 - 13:55
(41) Это как, почему? Не по теме, пиши в Открыть объект по найденной ссылке в другой базе
   Mikhail Volkov
 
43 - 13.11.20 - 17:33
На счет ЖР (40), смотреть либо ошибки, либо отмеченные объекты? Вместе никак?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.