Связь 8.2 и 7.7 по OLE управляемое приложение (нюансы подключения)

Казалось бы, тривиальная задача — связать 2 этих приложения. Многие это не раз успешно делали, море статей и примеров… А я как всегда наступил на грабли 🙁

Появилась задача связать «УНФ» (8.2 упр.форм.) и «Бух. ПРОФ» для синхронизации некоторых справочников (сама задача значения не имеет). Сперва казалось, что все просто, много раз такое делал. Сделал копии конфигураций (7.7 — SQL; 8.2 — клиент-сервер), создал обработку, в которую планировал всю эту синхронизацию поместить…и все. Дальше дело не пошло. Вот текст функции, которая выполняет подключение (лежит в серверном модуле):

Функция ПодключениеКИБ77(SQL,Путь,ИмяПользователя,Пароль,БазаОле) Экспорт
Если SQL = Ложь Тогда
БазаОле = Новый COMОбъект("V77.Application");
Иначе
БазаОле = Новый COMОбъект("V77s.Application");
КонецЕсли;
Если Не ПустаяСтрока(Путь) и Не ПустаяСтрока(ИмяПользователя) Тогда
СтрокаПодключения = "/D"""+СокрЛП(Путь)+""" /N"""+СокрЛП(ИмяПользователя)+""" /P"""+СокрЛП(Пароль)+"""";
Connection = БазаОле.Initialize(БазаОле.RMTrade , СтрокаПодключения,"NO_SPLASH_SHOW");
Сообщить("Подключение прошло нормально!");
Иначе
Сообщить("Не все данные указаны!");
БазаОле = "";
Возврат 0;
КонецЕсли;
Если Connection = 0 Тогда
Сообщить("Не подключились!!!");
БазаОле = "";
КонецЕсли;
Возврат Connection;
КонецФункции;

Ошибка при вызове конструктора (COMОбъект): Интерфейс не поддерживается.

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

Порылся в Интернете и нашел такую вот статью: http://mitkin.blogspot.com/2011/07/ole.html

Смысл ясен — соединение выполняется не от пользователя, который запускает клиента 8.2 а от пользователя, под которым запущен сервер Предприятия, который не может получить доступ к V77. По некоторым причинам делать точно как в статье не стал. Запустил сервер предприятия не под USR1CV82 а под Locale System и все заработало!!! Тут же от радости поменял параметры и попробовал подключиться к рабочей базе — и опять облом. Теперь ошибки не было, просто  Connection = 0. Не сразу дошло, что есть между рабочей базой и копией одно маленькое отличие. Файловая часть конфигурации 7.7 для копии лежит на локальном диске, а для рабочей — на сетевом. Снова перезапустил сервер, но теперь уже от имени доменного пользователя, который и к сетевому ресурсу доступ имеет, и в группу локальных администраторов входит. Дальше, вроде, без проблем пошло…

2 Comments

  1. DDos76

    Хорошая идея — «не USR1CV82 а под Locale System и все заработало!!!» Под администратором и то наверное безопаснее будет.

    Local System — это полный доступ ко всем ресурсам компьютера, подключение к сетевым ресурсам в контексте учетной записи компьютера, на котором запущена.

    Reply
  2. wunderland

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

    З.Ы. я давно уже заменил на администратора :))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *