База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO? › RE: Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?
Для подключения из одной базы 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/