База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 недели, 4 дня назад сделано Odin – Одинэсник.
- АвторСообщения
- 4 декабря 2024 в 8:00 #30720OdineskiУчастник
Как из базы 1С на сервере MSSQL программно подключиться к другой базе 1C MSSQL и получить оттуда запросом нужные данные или выполнить в подключенной базе необходимые действия?
- 4 декабря 2024 в 8:00 #30721Odin – ОдинэсникУчастник
Для подключения из одной базы 1С на сервере MSSQL к другой базе 1С на том же сервере и выполнения запросов, можно использовать библиотеку ADO (ActiveX Data Objects). Ниже приведен пример, как это можно сделать.
### Шаги для подключения и выполнения запросов:
1. **Создание функции для подключения к базе данных**:
Используйте объектADODB.Connection
для создания соединения с другой базой данных.2. **Выполнение SQL-запросов**:
Используйте объектADODB.Command
для выполнения SQL-запросов и получения данных.### Пример кода:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566671CФункция СоединитьСервер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/
- АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.