Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 12:49

Почему не создается COM соединение из модуля "УстановитьВнешнееСоединениеСБазой(

Автор VID1234, 15 фев 2022, 19:02

0 Пользователей и 1 гость просматривают эту тему.

VID1234

Здравствуйте. Пытаюсь из общего модуля подключится к другой базе, но не как не выходит! Создал свой модуль установил галочки "Сервер, Внешнее соединение", но не выходит, хотя передается и строка подключения и все
Попытка
         Connector = Новый COMОбъект("V83.COMConnector");
        COM = Connector.connect(СтрокаСоединения);
         Возврат COM;
     Исключение
          Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
          Возврат Неопределено;
     КонецПопытки;
Но на строке COM = Connector.connect(СтрокаСоединения); прерывается и уходит в исключение.
После через глобальный поиск нашел функцию:
Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт
   
    Результат = Новый Структура;
    Результат.Вставить("Соединение");
    Результат.Вставить("КраткоеОписаниеОшибки", "");
    Результат.Вставить("ПодробноеОписаниеОшибки", "");
    Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь);
   
    #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
        ПодключениеНедоступно = ОбщегоНазначения.ЭтоLinuxСервер();
        КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux.'");
    #Иначе
        ПодключениеНедоступно = ЭтоLinuxКлиент() Или ЭтоOSXКлиент() Или ЭтоМобильныйКлиент();
        КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе доступно только на клиенте под управлением ОС Windows.'");
    #КонецЕсли
   
    Если ПодключениеНедоступно Тогда
        Результат.Соединение = Неопределено;
        Результат.КраткоеОписаниеОшибки = КраткоеОписаниеОшибки;
        Результат.ПодробноеОписаниеОшибки = КраткоеОписаниеОшибки;
        Возврат Результат;
    КонецЕсли;
   
    #Если Не МобильныйКлиент Тогда
        Попытка
            //COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector"
            COMConnector = Новый COMОбъект(ИмяCOMСоединителя()); // "V83.COMConnector"
        Исключение
            Информация = ИнформацияОбОшибке();
            СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключиться к другой программе: %1'");
           
            Результат.ОшибкаПодключенияКомпоненты = Истина;
            Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация));
            Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация));
           
            Возврат Результат;
        КонецПопытки;
   
        ФайловыйВариантРаботы = Параметры.ВариантРаботыИнформационнойБазы = 0;
       
        // Проверка корректности указания параметров.
        ОшибкаПроверкиЗаполнения = Ложь;
        Если ФайловыйВариантРаботы Тогда
           
            Если ПустаяСтрока(Параметры.КаталогИнформационнойБазы) Тогда
                СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано месторасположение каталога информационной базы.'");
                ОшибкаПроверкиЗаполнения = Истина;
            КонецЕсли;
           
        Иначе
           
            Если ПустаяСтрока(Параметры.ИмяСервера1СПредприятия) Или ПустаяСтрока(Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия) Тогда
                СтрокаСообщенияОбОшибке = НСтр("ru = 'Не заданы обязательные параметры подключения: ""Имя сервера""; ""Имя информационной базы на сервере"".'");
                ОшибкаПроверкиЗаполнения = Истина;
            КонецЕсли;
           
        КонецЕсли;
       
        Если ОшибкаПроверкиЗаполнения Тогда
           
            Результат.ПодробноеОписаниеОшибки = СтрокаСообщенияОбОшибке;
            Результат.КраткоеОписаниеОшибки   = СтрокаСообщенияОбОшибке;
            Возврат Результат;
           
        КонецЕсли;
       
        // Формирование строки соединения.
        ШаблонСтрокиСоединения = "[СтрокаБазы][СтрокаАутентификации]";
       
        Если ФайловыйВариантРаботы Тогда
            СтрокаБазы = "File = ""&КаталогИнформационнойБазы""";
            СтрокаБазы = СтрЗаменить(СтрокаБазы, "&КаталогИнформационнойБазы", Параметры.КаталогИнформационнойБазы);
        Иначе
            СтрокаБазы = "Srvr = ""&ИмяСервера1СПредприятия""; Ref = ""&ИмяИнформационнойБазыНаСервере1СПредприятия""";
            СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяСервера1СПредприятия",                     Параметры.ИмяСервера1СПредприятия);
            СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяИнформационнойБазыНаСервере1СПредприятия", Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия);
        КонецЕсли;
       
        Если Параметры.АутентификацияОперационнойСистемы Тогда
            СтрокаАутентификации = "";
        Иначе
           
            Если СтрНайти(Параметры.ИмяПользователя, """") Тогда
                Параметры.ИмяПользователя = СтрЗаменить(Параметры.ИмяПользователя, """", """""");
            КонецЕсли;
           
            Если СтрНайти(Параметры.ПарольПользователя, """") Тогда
                Параметры.ПарольПользователя = СтрЗаменить(Параметры.ПарольПользователя, """", """""");
            КонецЕсли;
           
            СтрокаАутентификации = "; Usr = ""&ИмяПользователя""; Pwd = ""&ПарольПользователя""";
            СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ИмяПользователя",    Параметры.ИмяПользователя);
            СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ПарольПользователя", Параметры.ПарольПользователя);
        КонецЕсли;
       
        СтрокаСоединения = СтрЗаменить(ШаблонСтрокиСоединения, "[СтрокаБазы]", СтрокаБазы);
        СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "[СтрокаАутентификации]", СтрокаАутентификации);
       
        Попытка
            Результат.Соединение = COMConnector.Connect(СтрокаСоединения);
        Исключение
            Информация = ИнформацияОбОшибке();
            СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключиться к другой программе: %1'");
           
            Результат.ОшибкаПодключенияКомпоненты = Истина;
            Результат.ПодробноеОписаниеОшибки     = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация));
            Результат.КраткоеОписаниеОшибки       = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация));
        КонецПопытки;
    #КонецЕсли
   
    Возврат Результат;
   
КонецФункции
Но на //COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector"
COMConnector = Новый COMОбъект(ИмяCOMСоединителя()); // "V83.COMConnector" строках, также прерывается ошибку пишет, подключение не возможно установлен безопасный режим! Как быть!
Вообще мне это необходимо, чтобы в СКД получить вычисляемое поле из модуля общего!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск