8.х Выполнить запрос с помощью OLE

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Yury, 2 май 2012.

  1. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Здравствуйте,

    подскажите как подключиться из одной БД к другой БД по OLE, выполнить в ней запрос, а результат запроса вернуть в первую БД.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Что за платформа у вас ?
  3. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    8.2
  4. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Надо через COM.
    Запрос создаете через NewObject(), а результат запроса придется программно обрабатывать, если хотите использовать его в БД 1. Как обрабатывать - зависит от конкретной задачи. Вы дали слишком мало исходных данных.
  5. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Пример, можете показать? Данные исходные любые дам. Ну к примеру, нужно обработкой из БП выбрать запросом элементы справочника Номенклатура в УТ и в БП его проанализировать.
  6. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Во первых да, не OLE, но COM
    Во вторых
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Создается объект-коннектор
    БД = Новый COMObject("V81.COMConnector");
    // создается объект COM-соединение.
    //Параметры могут меняться в зависимости от типа БД (Клиен-Серверная или файловая)
    //путей к файлам, именам серверов, именам БД, логины и пароли
    //в общем RTFM
    СоединениеБД = cntr.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";");
    
    ЗапросБД = СоединениеБД.NewObject("Запрос");
    ЗапросБД.Текст =
    "ВЫБРАТЬ
    | Контрагенты.Ссылка,
    | Контрагенты.Наименование,
    | Контрагенты.Код,
    | Контрагенты.ДатаРождения
    |ИЗ
    | Справочник.Контрагенты КАК Контрагенты";
    ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
    
    Пока ВыборкаБД.Следующий() Цикл
    Код    = ВыборкаБД.Код; //строка или число, смотря как у вас настроен справочник Контрагенты в той БД
    Наименование = ВыборкаБД.Наименование; //строка
    ДР    = ВыборкаБД.ДатаРождения; //дата
    СсылкаБД  = ВыборкаБД.Ссылка; //COM объект, дающий доступ к реквизитам того контрагента из той БД.
    //Но кроме как читать/писать реквизиты (посредством получения объекта)
    //эта ссылка ни начто более ни годна. Ее нельзя передавать в запросы, в методы (публичные ф-ии и процедуры) той БД
    
    #Если Клиент Тогда
    ОбработкаПрерыванияПользователя();
    #КонецЕсли
    КонецЦикла;
    КонецПроцедуры
    
    Но есть особенности. Передавать "туда" (в подключенную БД) можно только "простые" типы: строка, число, булево, дата. Ссылочные типы передавать низя. Даже если это ссылки на объекты из той же БД.

Поделиться этой страницей