Предыстория1:
Наше головное подразделение - постоянно меняет версии движка 1С 8.х и т.к. некоторые обмены построены на "V2.ComConnector" или "V3.ComConnector", то они постоянно навязывали тем самым нам обновлять движок тоже ..... что нам жутко ненравилось))
Решение:
На сервере на котором крутися нужный "сервер 1с" прописываем "ComConnector" в виде COM+ и теперь Он становится доступным даже на машине где вообще не установлена 1С!! (ВНИМАНИЕ!! при обновлении движка на этом сервере)
Предыстория2:
Существует у нас база на 1С 7.7 и база на 1С 8.2 - Необходимо было настроить авто-обмен в Фоновом задании на Сервере 64-бит 1с 8.2... Вот тут и получилась проблема "Сервер 1с 64-бит отказался работать с COM 1c 7.7(32 бит)"
Решение:
Как оказалось прописывание 32 бит компонента в COM+ обладает еще одним полезным свойством - т.е. вызов его в 64-бит приложении, следовательно прописываем COM "v77.Aplication" в COM+, что позволило запускать его на 64-бит сервере 1С.
Предыстория3:
RDP сервер на котором крутится 1с 7.7 использовала в обработках "V2.ComConnector" или "V3.ComConnector" .... все бы ничего, но постоянные проблемы с ком объектом из-за разных версий.
Решение:
Конечно сразу подумал о COM+
К сожалению метод СоздатьОбъект() в 1С 7.7 не имеет второго парамера и соответственно непозволяет удаленно создать COM+ ((((.
Но сразу подумал о COM объектах Windows, которые создаем в 1С, и через которые уже можно создать COM+ со вторым пораметром - т.е. удаленный COM+.
----------------------------------------------------
К публикации приложены файлы в одном архиве:
1)Картинки описывающие создание COM+ с необходимыми опциями, а также если УДАЛЕННЫЙ КОМПЬЮТЕР под управлением Windows 2008+ описывается создание необходимой роли для доступа по сети к COM+, и еще картинка с настройкой доступа для удаленного вызова COM+
2)Обработка для 1С 8.х получающая доступ к Удаленному COM+
3)Обработка для 1С 7.7 получающая доступ к Удаленному COM+
Еще раз всетаки хочу заострить внимание)))
COM+ в данном случае, создается именно, не на КОМП1 (где запущен код программы, и где даже вообще может несуществовать этот COM объект), а на удаленном КОПМП2!!!
Для обмена через COM
рекомендую использовать обмен по GUID (Внимание: Если объект по GUID ненайден то СОЗДАЕТСЯ Новый с нужным нам GUID - для дальнейещего использования ССЫЛОК на него - ПРЕДВАРИТЕЛЬНО записываем данный объект в базу)) )
// ВернутьОбъектПоGUID возвращает объект по GUID или создает новый
// объект если такого несуществует
// пример ТипОбъекта="Справочник"
// ИмяОбъекта ="Номенклатура"
//
Функция ВернутьОбъектПоGUID(GUID,ТипОбъекта,ИмяОбъекта,ЭтоГруппа=ЛОЖЬ) Экспорт
UUID = Новый УникальныйИдентификатор(GUID);
Если ТипОбъекта = "Справочник" Тогда
НоваяСсылка = Справочники[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
// нашли объект
НовыйОбъект = НоваяСсылка.ПолучитьОбъект();
Иначе
// не нашли объект
Если ЭтоГруппа Тогда
НовыйОбъект = Справочники[ИмяОбъекта].СоздатьГруппу();
Иначе
НовыйОбъект = Справочники[ИмяОбъекта].СоздатьЭлемент();
КонецЕсли;
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "Документ" Тогда
НоваяСсылка = Документы[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект =НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = Документы[ИмяОбъекта].СоздатьДокумент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "ПланВидовХарактеристик" Тогда
НоваяСсылка = ПланыВидовХарактеристик[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = ПланыВидовХарактеристик[ИмяОбъекта].СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "ПланСчетов" Тогда
НоваяСсылка = ПланыСчетов[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = ПланыСчетов[ИмяОбъекта].СоздатьСчет();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "ПланВидовРасчета" Тогда
НоваяСсылка = ПланыВидовРасчета[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = ПланыВидовРасчета[ИмяОбъекта].СоздатьВидРасчета();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "ПланОбмена" Тогда
НоваяСсылка = ПланыОбмена[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = ПланыОбмена[ИмяОбъекта].СоздатьУзел();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "БизнесПроцесс" Тогда
НоваяСсылка = БизнесПроцессы[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = БизнесПроцессы[ИмяОбъекта].СоздатьБизнесПроцесс();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
ИначеЕсли ТипОбъекта = "Задача" Тогда
НоваяСсылка = Задачи[ИмяОбъекта].ПолучитьСсылку(UUID);
Если Найти(СокрЛП(НоваяСсылка),"<Объект не найден>")=0 Тогда
НовыйОбъект=НоваяСсылка.ПолучитьОбъект();
Иначе
НовыйОбъект = Задачи[ИмяОбъекта].СоздатьЗадачу();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
КонецЕсли;
Иначе
Сообщение =Новый СообщениеПользователю;
Сообщение.Текст="Неизвестный тип объекта. При получении Объекта по GUID";
Сообщение.Сообщить();
Возврат Неопределено;
КонецЕсли;
Возврат НовыйОбъект;
КонецФункции