Подкидываю еще пару приколов прямых запросов в ДБФ
Прикол 1. "Кеширование", блин.
В конфигурации есть несколько расходных накладных, которые делают практически одно и то же. (Конфигурация осталась еще с времен ТиС 7.0 - что-то вроде редакции 2.0). Для тестирования проведения этих документов есть юнит-тест. Он создает под каждый из этих документов приходную накладную, создает расходную накладную и проводит ее. Далее смотрит движения по регистрам. Так вот, обнаружил любопытственную вещь: после переписывания проведения под прямые запросы тест стал нормально проходить первый вид документов, а на остальных падал. Выяснил почему: при проведении второго вида документов документ видел нулевые остатки товара, хотя товар только что был специально оприходован. Если документ потом провести вручную, то он проводился. Если изменить порядок тестирования видов, то опять же первый вид документов проводится, а следующие падают. Вылечилось переподключением к базе: т.е. для глобального объекта вида "OLEDBData" при входе в модуль проведения выполняем сначала "Закрыть", а потом опять "Соединение". Очень похоже на то, что FoxPro пытается кешировать запросы, а отключить это я не смог...
Прикол 2. Несовместимость форматов 1С и FoxPro.
Создаем справочник "ТестовыйСправочник". В нем два реквизита: "Новый1" и "Новый2". Реквизиты текстовые. Создаем простейший запрос:
Процедура Сформировать()
ТекстЗапроса = "
|SELECT
| $Спр.Новый1 AS Новый1,
| $Спр.Новый2 AS Новый2
|FROM
| $Справочник.ТестовыйСправочник AS Спр
|";
Запрос = СоздатьОбъект ("ПрямойЗапрос");
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить ();
Выборка.ВыбратьСтроку ();
КонецПроцедуры
Все в порядке, пока длины этих реквизитов не превышают 255 символов. Если для них выставить длину побольше, то у меня перестает отображаться второй реквизит - выдаются пустые значения. То же самое, если файл справочника открыть через Excel: первый реквизит виден, а второй - фиг. Получается, что прямыми запросами не удается вытащить реквизиты, которые следуют после реквизитов со слишком большой длиной.