Рассмотрим практический пример выполнения прямого запроса к двум базам DBF одновременно для получения синхронизированных данных.

Для того чтобы использовать прямой доступ к данным с помощью Microsoft OLE DB Provider необходимо установить 1С++ и OLE DB Provider.

После записи ВК 1С++, допустим, в каталог ИБ, необходимо выполнить ее загрузку:

Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "1cpp.dll") = 0 Тогда
    Сообщить("ВК 1С++ не загружена!");
КонецЕсли;

Также необходимо установить скачанный драйвер OLE DB.

Все готово, можно приступать к написанию запроса.

Ниже приведен пример строки подключения и запроса и сам запрос. Цель запроса - получить сведения о том, какая номенклатура в сторонней базе была изменена, какая была добавлена для синхронизации данных между базами. Номенклатура в базах синхронизирована по коду. В константе КаталогиИББухгалтерии содержится, например, строка "G:\DB77\БазаБух\".

ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1; Set Deleted =Yes; data Source=" + КаталогИБ() + "; Mode=ReadWrite;
Extended Properties=""; User ID=""; Password=""; Mask Password=False; Collating Sequence=MACHINESN=""";
ОлеДБ.Соединение(Соединение);

ОлеДБКоманда = ОлеДБ.СоздатьКоманду();
ПутьКБазеБух = СокрЛП(Константа.КаталогИББухгалтерии);

ТекстЗапроса = "
|SELECT '(BRUSH_S[16776960])' as FormEx_ПланРаскраски
|, 1 as Пометка
|, Спр.Code as Код
|, Спр.Descr as Наим
|, IIF(ISNULL(Спр.Code), 'V', '') as Новый
|, IIF(Спр.Descr <> СпрБух.Descr, 'V', '') as Изменен
|, '' as Перенесен
|, СпрБух.Code as КодБух
|, СпрБух.Descr as НаимБух
|, IIF(СпрБух.IsFolder = 1, 'V', '') as Группа
|, СпрБух1.Code as Код1Бух
|, СпрБух1.Descr as Наим1Бух
|, СпрБух2.Code as Код2Бух
|, СпрБух2.Descr as Наим2Бух
|, СпрБух3.Code as Код3Бух
|, СпрБух3.Descr as Наим3Бух
|, Спр1.Code as Код1
|FROM БазаБух.@Справочник.Номенклатура as СпрБух
|LEFT JOIN БазаБух.@Справочник.Номенклатура as СпрБух1 ON СпрБух1.Id = СпрБух.ParentId
|LEFT JOIN БазаБух.@Справочник.Номенклатура as СпрБух2 ON СпрБух2.Id = СпрБух1.ParentId
|LEFT JOIN БазаБух.@Справочник.Номенклатура as СпрБух3 ON СпрБух3.Id = СпрБух2.ParentId
|LEFT JOIN $Справочник.Номенклатура as Спр ON Спр.Code = СпрБух.Code
|LEFT JOIN $Справочник.Номенклатура as Спр1 ON Спр1.Id = Спр.ParentId
|";                                                                  

глПарсерВторойБазы(ТекстЗапроса, "БазаБух", ПутьКБазеБух);

ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(ТекстЗапроса);

Код процедуры глПарсерВторойБазы:

Процедура глПарсерВторойБазы(ТекстЗапроса, ИмяБазы2, ПутьКБазе2) Экспорт
    глМД = СоздатьОбъект("MetaDataWork");
    ТекстЗапроса = глМД.ОбрМетаСКЛ(ТекстЗапроса);

    глМД2 = СоздатьОбъект("MetaDataWork");
    глМД2.ПрисоединитьМД(ПутьКБазе2 + "1Cv7.md");

    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@", "$");
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ИмяБазы2 + ".", ПутьКБазе2);
    ТекстЗапроса = глМД2.ОбрМетаСКЛ(ТекстЗапроса);
КонецПроцедуры // глПарсерВторойБазы()

В этой статье находится пример запроса к двум базам для SQL (без использования парсера для второй базы).

Другие статьи по прямым запросам:

Ускоряем регистрацию объектов в МОД (для SQL)

Проверка дублей строк с помощью 1С++

Аналог ON DUPLICATE KEY UPDATE в MS SQL

Как использовать УРБД в отличающихся конфигурациях

Примеры решения нестандартных задач на T-SQL в 1С

Как написать прямой запрос в 1С (DBF, 1sqlite)

Как написать прямой запрос в 1С (SQL) с помощью 1С++

Онлайн резервирование товаров на складе (online reservation)