Как прочесть DBF файл формата Visual FoxPro в 1С?

Программист IT и автоматизация бизнеса
← На главную

При интеграции 1С с внешними системами часто возникает необходимость загрузки данных из файлов формата DBF. Однако стандартные механизмы работы с файлами баз данных могут выдавать ошибки, если исходный файл выгружен из системы FoxPro. Разберем причинно-следственную связь таких ошибок и рассмотрим, как правильно прочесть подобный файл из кода 1С.

Причины возникновения ошибок при чтении DBF

Проанализируем базовые варианты работы с DBF и ошибки, с которыми сталкиваются разработчики:

  1. Использование штатного объекта XBase в 1С: При вызове метода ОткрытьФайл() платформа выводит ошибку «Формат файла отличен от .DBF». Это связано с тем, что встроенный объект XBase рассчитан на работу со стандартами dBASE III и dBASE IV, но не поддерживает специфическую структуру заголовков Visual FoxPro.
  2. Использование стандартных провайдеров Microsoft Jet или ACE через ADO: При выполнении запроса вида Select * from Table возникает исключительная ситуация: «Внешняя таблица не имеет предполагаемый формат». Изменение параметров соединения с dBASE III на dBASE IV в строке подключения проблему не решает, так как эти провайдеры также не умеют интерпретировать тип заголовка FoxPro.

Причина заключается в сигнатуре заголовка файла: таблицы Visual FoxPro содержат байты идентификации (например, 0x30), отличающиеся от стандартных таблиц dBASE. Из-за этого универсальные механизмы считывают такой файл как поврежденный или имеющий неизвестный формат.

Решение проблемы: использование провайдера VFPOLEDB

Для корректного взаимодействия с таблицами FoxPro необходимо использовать специализированный OLE DB поставщик данных — Microsoft OLE DB Provider for Visual FoxPro (VFPOLEDB).

Разберем по шагам порядок настройки и подключения:

  1. Установите провайдер VFPOLEDB в операционной системе. Его можно скачать с официального сайта Microsoft.
  2. Учитывайте разрядность платформы: провайдер VFPOLEDB существует только в 32-разрядной версии. Это означает, что код чтения файла должен выполняться либо в 32-битной клиенте 1С, либо через внешнее 32-битное соединение (например, через COM+ приложение на сервере).
  3. В строке подключения укажите имя каталога, в котором лежит DBF-файл, а имя самого файла используйте в тексте SQL-запроса.

Пример кода для чтения файла DBF через ADODB

Рассмотрим рабочий пример кода 1С для чтения данных из файла BD_PPSP.DBF, расположенного в каталоге D:\dbf\:


КаталогИБ = "D:\dbf\"; 

// Создаем COM-объект подключения
ОлеДБ = Новый COMОбъект("ADODB.Connection");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";

Попытка
    ОлеДБ.Open(Соединение);
Исключение
    Сообщить("Не удалось подключить провайдер VFPOLEDB: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Создаем объект команды и связываем с подключением
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = ОлеДБ;
Command.CommandText = "SELECT * FROM BD_PPSP.DBF";    

// Выполняем запрос и получаем набор записей
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();

Если НЕ RecordSet.EOF() Тогда
    RecordSet.MoveFirst();
    Пока НЕ RecordSet.EOF() Цикл
        // Обработка значения конкретного поля (например, "DTV")
        ЗначениеПоля = RecordSet.Fields.Item("DTV").Value;
        Сообщить(ЗначениеПоля);
        
        RecordSet.MoveNext();  
    КонецЦикла;
КонецЕсли;

// Закрываем соединение
RecordSet.Close();
ОлеДБ.Close();

Важные особенности строки подключения

Выясним назначение параметров, указываемых в строке подключения ConnectionString:

Благодаря использованию родного провайдера FoxPro файл успешно читается без необходимости его предварительной конвертации или перезаписи сторонними редакторами.

← На главную