COM соединения к базам 1С на различных версиях платформы

Публикация № 276794

Разработка - Практика программирования

COMConnector COM соединение v82.comconnector

117
Долгое время искал возможность подключаться через COM соединение к серверным БД 1С, расположенных на разных серверах (с разными версиями платформ). Перечитал множество публикаций на эту тему, но однозначного для себя ответа не находил. Хочу поделиться своим скромным опытом в решении этой задачи. Может кому и пригодится...

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

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

Предполагается, что клиентские платформы установлены в стандартных каталогах и добраться до библиотек можно по пути типа: C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll

Для начала создадим для коннектора обертку COM+, чтобы вызовы происходили не в контексте 1cv8.exe (1cv8c.exe), а в контексте dllhost.exe

В интернете достаточно публикаций на тему как это сделать... Для начала можно указать comcntr любой имеющейся версии.

При регистрации comcntr.dll в реестре делается запись: 

HKEY_CLASSES_ROOT\CLSID\{2B0C1632-A199-4350-AA2D-2AEE3D2D573A}\InprocServer32 для 32 битной ОС

или HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{2B0C1632-A199-4350-AA2D-2AEE3D2D573A}\InprocServer32 для 64 битной ОС

значение по умолчанию которой указывает на расположение загружаемой библиотеки: C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll

Этим значением мы и будем оперировать. Перед установкой соединения читаем реестр, проверяем текущую версию коннектора и при необходимости заменяем ее на требуемую. После установки соединения в память загружается dllhost.exe, в контексте которого и работает коннектор. Для инициализации соединения к другой базе (с отличающейся версией платформы), ранее отработавшую библиотеку нужно выгрузить из памяти. К сожалению, у меня не получилось сделать это более цивилизованно, чем taskkill.exe /f /im dllhost.exe. Наверняка можно что-то покрасивее придумать...

Ну и самое главное: не забываем, что работать это будет только при запуске 1С с административными правами. Иначе взлетит исключение.

В итоге получаем примерно такой код:


 

Функция ОбновитьКлючРеестра(знач Ключ, знач ТребуемаяВерсия)
	WshShell = Новый COMОбъект("WScript.Shell");	
	Значение = WshShell.RegRead(Ключ);
	Значение1= СтрЗаменить(Значение, "\", Символы.ПС);
	ВерсияОпределена = ложь;
	Для ТекНомер=1 По СтрЧислоСтрок(Значение1) Цикл
		ТекущаяВерсия = СтрПолучитьСтроку(Значение1, ТекНомер);
		Если Лев(ТекущаяВерсия,2)="8." Тогда
			ВерсияОпределена = истина;
			прервать;
		КонецЕсли; 
	КонецЦикла; 
	Если ВерсияОпределена и ТекущаяВерсия<>ТребуемаяВерсия Тогда
		Значение = СтрЗаменить(Значение, ТекущаяВерсия, ТребуемаяВерсия);
		WshShell.RegWrite(Ключ, Значение);
		Возврат Истина;
	иначе 
		Возврат ложь;
	КонецЕсли; 
КонецФункции

Процедура НастроитьКоннектор(знач ТребуемаяВерсия)
	Обновлен = ОбновитьКлючРеестра("HKEY_CLASSES_ROOT\CLSID\{2B0C1632-A199-4350-AA2D-2AEE3D2D573A}\InprocServer32\", ТребуемаяВерсия);
	Если Обновлен Тогда
		ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",,Истина);
	КонецЕсли; 
КонецПроцедуры

 


Сам вызов осуществляю примерно так:

Для каждого СтрокаТЧ Из СписокБаз Цикл
    НастроитьКоннектор(СтрокаТЧ.Платформа);
    V8 = Новый COMObject ("V82.COMConnector");

    ............

КонецЦикла

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

 Опробовано на COM соединениях из толстого клиента к серверным базам на платформах 8.2.x.x

117

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. fancy 08.05.14 07:01 Сейчас в теме
А если убьете "чужой" dllhost?
ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",,Истина);
2. JusteRU 08.05.14 08:02 Сейчас в теме
Про административные права немного не понял. Т.е. требуется запускать сервер приложений с административными правами?
3. kapustinag 10.05.14 16:09 Сейчас в теме
(2) JusteRU, Административные права нужны не серверу приложений, а клиентскому процессу 1С-Предприятие, из которого будут выполняться перенастройки ключа реестра, в котором содержится путь к comcntr.dll.
4. amon_ra 3 14.05.14 10:15 Сейчас в теме
способ отличный, но вот только права админа все омрачают(((
5. mmch 121 14.05.14 10:24 Сейчас в теме
Недавно столкнулся с похожей проблемой при переходе на 8.3, КОМ соединение вызывалось именно &НаСеревере
в итоге была ОШИБКА ПРИ СОЗДАНИИ COMОбъект Интерфейс не поддерживается.

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

Переустановка платформы 1с, установка сервера:

*Ставим серверную версию из дистрибутива \\Платформа\X.X.XX.XX\windows64.rar на все рабочие сервера 1с
*обязательно ставим возможность подключения через COM-соединение
*обязательно ставим возможность подключения через WEB-соединение
*Ставим клиентскую часть на все компьютеры в сети из дистрибутива \\Платформа\X.X.XX.XX\windows.rar
*Обязательно ставим клиентскую часть на сервера, т.к. без этого не будут работать подключения через COM-объект
*обязательно ставим возможность подключения через WEB-соединение
*ОШИБКА ПРИ СОЗДАНИИ COMОбъект Интерфейс не поддерживается при всех выполненных действиях:
*Например при запуске на сервере 83, COMОбъект 82, тогда необходимо пользователя USR1CV8 добавить в группу Локальные Администраторы (Диспетчер сервера - Конфигурация - Локальные пользователи - группы - Администраторы)

тогда подключение работает в контексте 1cv8.exe...
* правда администраторам придется поступиться безопасностью...
6. EvgeniuXP 14.05.14 18:15 Сейчас в теме
По-моему с 8.х нет проблем соединяться и получать и отправлять данные по COM-соединению... а вот как сделать для 7.7 - тоже кучу нарыл, но так еще не сделал - либо простые способы, где ТЗ не знаешь как передать, либо - сложно - какие-то dll, как их к веб-сервису прикрутить и потом в 1С-ке "получить" OLE и передать параметром ТЗ, а в 7.7 на основании этой ТЗ создать элементы справочника. Только нашел как вызывать глобальные функции, да примитивные типы передавать... с ТЗ подружить не могу пока что...
8. Созинов 15.05.14 10:09 Сейчас в теме
(6) EvgeniuXP, проблемы возникают из-за разных релизов на сервере. Бывают ситуации когда приходится держать разные версии серверов (у нас допустим это 8.2.15.319, 8.2.18.61, 8.2.19.90 и 8.1 и 8.3.3.721) и если стоит задача получать данные со всех серверов - то это трудновато через COM.
Автору +
winterspring; pt_olga; +2 Ответить
7. EvgeniuXP 14.05.14 18:20 Сейчас в теме
хотя уже на всё плюнул 8.3 (отправка ТЗ) -> веб-сервис -> 7.7 (получение ТЗ и создание элементов в справочнике)

и начал изучать основательно С#.
9. kiruha 381 04.06.14 10:25 Сейчас в теме
Мы обычно делаем банально
regsvr32 "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll" (для 8.2.18.61 из сабжа например)
Зачем нужна обертка ? И чем плох такой простой метод ?
22. M_Volkov 2 02.08.17 07:29 Сейчас в теме
(9)
regsvr32 "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll" чем плох такой простой метод ?

Права админа нужны. А нужно, чтобы Com-соединение устанавливалось под любым пользователем 1С.
10. DoctorRoza 04.06.14 15:35 Сейчас в теме
ИМХО, все как в России, когда полы грязные, не ноги отряхиваем, а щетку апгрейдим! Когда в it-экосистеме предприятия стоят разные версии 8.x, тогда нужно давать по рукам админу! А за статью плюс! :)
bomber99544; +1 3 Ответить
11. servs 67 06.06.14 13:16 Сейчас в теме
(10) бывают фирмы, которые обслуживают базы клиентов на своем сервере, у каждого клиента должна быть своя версия. (это я Вам для расширения кругозора объяснил)
18. selig 27.04.15 09:31 Сейчас в теме
(11) servs, а еще бывают конфигурации от горячо любимых разработчиков, которые тупят на новых версиях платформы
16. besica 11.12.14 23:44 Сейчас в теме
(10) DoctorRoza, 1С бух не хочет работать на платформах ниже 8.3.5.... А не типовая база на 100+ пользователей произвольно виснет у различных пользователей на 8.3.5. платформе, при этом на 8.3.4 все отлично работает. А базы друг с другом общаться должны по чуть чуть и по запросу, но в течении дня.
Автору огромный +)))
12. Serg3141 10 30.06.14 11:54 Сейчас в теме
супер, мне помогло - на двух серверах разные версии 1С, необходимо было сделать передачу, а приводить версии в соответствие не дает начальник из-за загруженности на более старом сервере 1С и из-за принципа "не трожь, все и так работает"
13. zakiap 14.10.14 03:43 Сейчас в теме
А не проще ли сделать алиасы на COM объекты в нужном виде и использовать их потом так:

В8 = Новый COMОбъект("V8.2.19.83.COMConnector");
В8 = Новый COMОбъект("V8.3.5.1119.COMConnector");
Прикрепленные файлы:
14. leonid_kirienko 117 15.10.14 18:51 Сейчас в теме
(13) zakiap, для разных версий (8.2, 8.3) применение алиасов может и пройдет, но для разных сборок одной версии платформы - нет. UID коннектора один и тот же - вот беда.
25. M_Volkov 2 20.07.19 17:34 Сейчас в теме
(14)
для разных версий (8.2, 8.3) применение алиасов может и пройдет, но для разных сборок одной версии платформы - нет. UID коннектора один и тот же - вот беда.
Беда не в этом: пробовал по COM соединения с базами 1С на различных версиях платформы "Без перерегистрации и СМС", но беда в том, что создается только COM соединение V83.COMConnector с ограниченными возможностями, запускается небольшая серверная часть. Для моих задач нужно OLE соединение V83.Application. По Вашей методике (и вообще) это возможно?
Прикрепленные файлы:
15. Tolpinski 56 16.10.14 09:27 Сейчас в теме
Через "regsvr32 "C:\Program Files (x86)\1cv82\8.2." срабатывает как то странно, с задержкой, видно как и пишется из за "dllhost.exe"
В общем спасибо, работает!
17. jobkostya1c8 17.12.14 20:11 Сейчас в теме
Тоже хороший материал для создания универсальных обработок, которые должны работать "где попало и подцепляться куда попало". Поставил плюс чтоб запомнить.
19. e.kogan 1850 19.03.16 21:46 Сейчас в теме
Ветки реестра нет :(
Tolpinski; +1 Ответить
20. XelOla 16 10.10.16 16:46 Сейчас в теме
Здравствуйте! Подскажите пожалуйста, как чтобы версии были одинаковые? В ограничениях ISAPI и CGI задала разрешение 1C Web-service Extension на версию платформы 8.3.8.2054. Что еще надо сделать? Или установка платформы была неправильная? (ставила не я)
Прикрепленные файлы:
21. Sanario 20 05.06.17 10:31 Сейчас в теме
HKEY_CLASSES_ROOT\CLSID\{2B0C1632-A199-4350-AA2D-2AEE3D2D573A}\InprocServer32\ - а CLSID ветки всегда будет именно такой?
romulanin; hexhoc; +2 Ответить
23. M_Volkov 2 02.08.17 08:53 Сейчас в теме
Статья хорошая, нужная, не плохо бы ее обновить. Может появились возможности Com-обмена без админских прав под любым пользователем 1С.
24. avgyr77 01.04.18 14:35 Сейчас в теме
в увс 1с без адмиснких конектит
Оставьте свое сообщение

См. также

Приватный блокчейн и 1С популярно 6

Статья no Нет файла Бесплатно (free) Практика программирования Блокчейн

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

02.09.2019    2235    mkalimulin    140       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

Кодогенерация и метагенерация в 1С 26

Статья Программист Нет файла Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    4966    kirovsbis    28       

Интеграция сценарного тестирования в процесс разработки 81

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    5302    grumagargler    7       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Управляй качеством кода 1С с помощью SonarQube 244

Статья Программист Нет файла Россия Бесплатно (free) Практика программирования

Управляй техническом долгом проектов 1С с помощью SonarQube. В статье рассматривается пример применения SonarQube при разработке.

07.07.2019    21048    olegtymko    204       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    8134    m-rv    2       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    10722    m-rv    16       

О времени и 1С 212

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

01.04.2019    19377    YPermitin    60       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф") 5

Статья Системный администратор Программист Нет файла Россия Кассовые операции Бесплатно (free) Практика программирования Разработка ККМ

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

17.03.2019    3632    dmarenin    0       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Быстрее чем INSERT! BULK-операции и примеры использования 112

Статья Системный администратор Программист Нет файла Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Разработка Внешние источники данных Перенос данных из 1C8 в 1C8

Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

09.03.2019    12475    YPermitin    38       

Как писать понятные коммиты 68

Статья Программист Нет файла Россия Бесплатно (free) Практика программирования Разработка

Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

06.03.2019    8756    Scorpion4eg    35       

Перенос данных БП 3.0 => УТ 11 / КА 2 / ERP 2 (ЕРП) (перенос остатков, документов и справочной информации из "1С:Бухгалтерия предприятия 8", ред.3.0). Обновлено до БП 3.0.73.х, УТ 11.4.10.х, КА 2.4.10.х., ERP 2.4.10.х! Промо

Переносятся документы за выбранный период, справочная информация и остатки по счетам бух. учета в программу УТ 11 / КА 2 / ЕРП 2 (ERP). Переносятся все возможные виды операций ввода остатков на нужную дату. Есть отбор по периоду переноса документов и фильтр по организации, доступен выбор даты ввода остатков. Если нужно переносить что-то дополнительно, то обычно бесплатно добавляем это в перенос . Смотрите видеодемонстрацию со звуком - советами по переносу и рекомендациями настройки программ.

29700 руб.

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Перенос данных УТ 10.3 => УТ 11 / КА 2 / ERP 2 (ЕРП 2) (документы, остатки и справочная информация из "1С:Управление торговлей, ред. 10.3" в УТ 11 / КА 2 / ERP 2). Обновлен до УТ 10.3.56.х, УТ 11.4.10.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Уже более 100 компаний приобрели перенос и выполнили переход на УТ 11 / КА 2 / ERP 2 с помощью нашей разработки! Обработка перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2 позволяет перенести не только остатки на указанную дату (как типовой перенос), но и все возможные документы за выбранный период. При выходе новых релизов этих программ оперативно выпускаем обновление обработки. Предоставляем техническую поддержку. Можем сделать бесплатный тестовый перенос!

29700 руб.

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Новогодние скидки на авторское ПО Промо

В преддверии праздника в Маркетплейсе на Инфостарт действует скидка на все платные авторские программы. Размер скидок начинается от 10%. Советуем не откладывать покупки, многие наши партнеры повышают цены на свои продукты именно в начале нового года.

Расширяем свой багаж 2

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Алгоритм решения возможной нетиповой задачи на собеседовании.

29.01.2019    3986    scientes    15       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

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

7500 рублей