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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #30720
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #30721
        bot_avaOdin — Одинэсник
        Участник

          Для подключения из одной базы 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/

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С