Odin | База знаний 1С

Как подключиться из...
 

Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Как из базы 1С на сервере MSSQL программно подключиться к другой базе 1C MSSQL и получить оттуда запросом нужные данные или выполнить в подключенной базе необходимые действия?



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Для подключения из одной базы 1С на сервере MSSQL к другой базе 1С на том же сервере и выполнения запросов, можно использовать библиотеку ADO (ActiveX Data Objects). Ниже приведен пример, как это можно сделать.

### Шаги для подключения и выполнения запросов:

1. **Создание функции для подключения к базе данных**:
Используйте объект `ADODB.Connection` для создания соединения с другой базой данных.

2. **Выполнение SQL-запросов**:
Используйте объект `ADODB.Command` для выполнения SQL-запросов и получения данных.

### Пример кода:

1C
Функция СоединитьСерверSQL(ИмяСервера, ИмяБазы, Логин, Пароль) Экспорт
    con = Новый COMОбъект("ADODB.Connection");
    con.ConnectionTimeout = 5;
    con.CommandTimeout = 0;
    con.CursorLocation = 3;

    // Формируем строку подключения
    con.ConnectionString = "Driver={SQL Server};Server=" + ИмяСервера + ";Database=" + ИмяБазы + ";Uid=" + Логин + ";Pwd=" + Пароль + ";";

    Попытка
        con.Open();
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

    Возврат con;
КонецФункции

Функция ПолучитьДанные(ТекстЗапроса, Соединение) Экспорт
    Таблица = Новый ТаблицаЗначений;
    cmd = Новый COMОбъект("ADODB.Command");
    cmd.ActiveConnection = Соединение;
    cmd.CommandText = ТекстЗапроса;

    Попытка
        rs = cmd.Execute();
        Для НомерСтолбца = 0 По rs.Fields.Count - 1 Цикл
            ИмяНовойКолонки = rs.Fields(НомерСтолбца).Name;
            Таблица.Колонки.Добавить(ИмяНовойКолонки);
        КонецЦикла;

        Если Не rs.eof Тогда
            rs.MoveFirst();
        КонецЕсли;

        Пока Не rs.eof Цикл
            НоваяСтрока = Таблица.Добавить();
            Для НомерСтолбца = 0 По rs.Fields.Count - 1 Цикл
                ИмяНовойКолонки = rs.Fields(НомерСтолбца).Name;
                Значение = rs.Fields.Item(ИмяНовойКолонки).Value;
                Если Значение  Null Тогда
                    НоваяСтрока[ИмяНовойКолонки] = Значение;
                КонецЕсли;
            КонецЦикла;
            rs.MoveNext();
        КонецЦикла;
    Исключение
        Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Таблица;
КонецФункции

// Пример использования
ИмяСервера = "ВашСервер";
ИмяБазы = "ИмяДругойБазы";
Логин = "ВашЛогин";
Пароль = "ВашПароль";

Соединение = СоединитьСерверSQL(ИмяСервера, ИмяБазы, Логин, Пароль);
Если Соединение  Неопределено Тогда
    ТекстЗапроса = "SELECT * FROM ВашаТаблица"; // Замените на ваш запрос
    Данные = ПолучитьДанные(ТекстЗапроса, Соединение);
    Соединение.Close();
КонецЕсли;

### Объяснение кода:
- **СоединитьСерверSQL**: Функция для создания соединения с другой базой данных. Принимает параметры: имя сервера, имя базы, логин и пароль.
- **ПолучитьДанные**: Функция для выполнения SQL-запроса и получения данных в виде таблицы значений.
- **Пример использования**: В конце кода показан пример, как использовать эти функции для подключения и получения данных.

### Важно:
- Убедитесь, что у вас есть необходимые права доступа к целевой базе данных.
- Проверьте, что SQL Server настроен для разрешения удаленных подключений.

Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1260010/



   
ОтветитьЦитата