Чтение DBF-файла в 1С 8.3: объект XBase, конвертация, ODBC

· 9 мин

Содержание

Двойной щелчок по .dbf в 1С ничего не даёт: у платформы нет кнопки «Открыть DBF» в обычном интерфейсе. Читать такой файл придётся обработкой, которая использует встроенный объект XBase, либо заранее превратить файл в Excel или текст.

Чаще всего DBF приходит из банковских выгрузок, старых программ учёта, ГИС и контролирующих органов. Ниже — способы от простого к сложному, код для чтения и разбор кодировки, из-за которой вместо слов появляются «кракозябры».

Файл DBF перед работой скопируйте. Обработка, открывшая его на запись, может испортить данные.

Что такое DBF и как его читает платформа

DBF — файл с таблицей: в начале описание полей, дальше записи фиксированной длины. Рядом могут лежать дополнительные файлы:

  • 📄 .dbt или .fpt — тексты длинных полей (memo);
  • 🗂 .cdx, .ndx, .mdx — индексы;
  • 📦 .dbc — контейнер базы Visual FoxPro.

Платформа 1С:Предприятие 8.3 читает и пишет DBF через объект XBase языка 1С. Он работает с самим файлом, без Excel и драйверов. Поддерживаются классические форматы dBase и FoxPro.

Что важно знать до начала:

  • имя поля — не длиннее 10 символов, поэтому в файле встречаются сокращения вроде SUMMA_DOK;
  • нет типов «дата и время» в привычном виде: дата хранится отдельным полем;
  • кодировка в файле не гарантирована, её часто приходится задавать вручную.

Три способа открыть DBF: что выбрать

Сначала сравните варианты, потом выбирайте.

СпособКогда подходитМинусы
Обработка на объекте XBaseРегулярная загрузка, нужна точность типовНужен код или готовая обработка
Конвертация в Excel и загрузкаОдин раз, файл небольшойРучная работа, теряются длинные текстовые поля
ODBC или ADO (COM)Нужны запросы SQL к файлу, сложные выборкиДрайверы, разрядность, настройка в ОС

Для разового просмотра хватит Excel или LibreOffice Calc: оба открывают .dbf напрямую. Для повторяющегося обмена пишите обработку на XBase.

Встроенное чтение: объект XBase

Это основной способ. Минимальная обработка читает файл и выводит содержимое в табличный документ.

Процедура ПрочитатьDBF(ПутьКФайлу)

    ФайлDBF = Новый XBase;
    ФайлDBF.Кодировка = КодировкаXBase.ANSI;
    ФайлDBF.ОткрытьФайл(ПутьКФайлу);

    Для Каждого Поле Из ФайлDBF.Поля Цикл
        Сообщить("Поле: " + Поле.Имя + ", тип: " + Поле.Тип);
    КонецЦикла;

    ФайлDBF.Первая();
    Пока Не ФайлDBF.ВКонце() Цикл
        // значения полей читаются по имени поля
        ФайлDBF.Следующая();
    КонецЦикла;

    ФайлDBF.ЗакрытьФайл();

КонецПроцедуры

Состав свойств и методов проверьте в синтаксис-помощнике: откройте в Конфигураторе Справка → Синтакс-помощник и найдите XBase. Там же перечислены КодировкаXBase, типы полей и методы записи.

Что учесть при реальной работе:

  1. Разберите структуру до загрузки. Выведите список полей с типами и длиной. Это сэкономит время, если в файле нет ожидаемой колонки.
  2. Обрабатывайте пустые значения. Пустая дата в DBF часто хранится пробелами или нулями — проверяйте перед преобразованием.
  3. Закрывайте файл всегда. Незакрытый файл остаётся занятым, и повторная загрузка упадёт с ошибкой доступа.
  4. Не вызывайте чтение на клиенте под веб-клиентом. Файл должен лежать там, где его видит код: выполняйте чтение на сервере и передавайте файл как двоичные данные.

💡 Если нужны только данные для просмотра, загрузите записи в таблицу значений и покажите её на форме — так удобнее искать и фильтровать.

Загрузка записей в таблицу значений

Практичный приём: сначала собрать данные в таблицу значений, а уже потом решать, что с ними делать. Колонки создавайте по списку полей файла, чтобы код не зависел от конкретной структуры.

ТаблицаДанных = Новый ТаблицаЗначений;
Для Каждого Поле Из ФайлDBF.Поля Цикл
    ТаблицаДанных.Колонки.Добавить(Поле.Имя);
КонецЦикла;

Дальше в цикле по записям добавляйте строку и переносите значения по именам колонок. Готовую таблицу можно показать на форме, выгрузить в табличный документ или сопоставить с реквизитами документа.

Плюсы такого подхода:

  • ✅ видно, что именно лежит в файле, до любых записей в базу;
  • ✅ легко отфильтровать пустые строки и дубли;
  • ✅ одну и ту же загрузку можно запускать на разных файлах.

Типы полей DBF и что с ними делать

Тип поля определяет, как читать значение. Для проверки выведите тип, как в примере выше, и сверьтесь с таблицей.

Тип в файлеЧто хранитНа что обратить внимание
СимвольныйТекст до 254 символовСправа часто лишние пробелы — обрежьте
ЧисловойЧисло заданной длиныЛишние знаки после запятой теряются
ДатаДата без времениПустая дата приходит как пробелы
ЛогическийДа или нетЗначения могут быть T, F, Y, N
MemoДлинный текст в отдельном файлеБез .dbt или .fpt поле пустое

Запись данных в DBF

Обратная задача возникает при выгрузке для банка или госпортала. Объект XBase умеет создавать файл: вы задаёте поля, добавляете записи и сохраняете. Перед выгрузкой проверьте требования получателя: имена полей, длины, кодировку и формат даты. Расхождение в одном символе приводит к отказу приёма файла.

Внешние обработки и готовые конвертеры

Писать код необязательно. На сайтах сообщества и в «Полезных ресурсах» хватает внешних обработок «Загрузка из DBF». Они обычно умеют сопоставить поля файла и реквизиты справочника или документа.

Как подключить внешнюю обработку :

  1. Скачайте файл .epf из надёжного источника.
  2. Откройте меню Файл → Открыть и выберите обработку.
  3. Либо подключите её в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, если такой раздел включён в вашей конфигурации.

Внешняя обработка выполняет произвольный код с вашими правами. Проверяйте источник и запускайте сначала на копии базы. Обработка из случайной темы форума может читать и менять данные.

Для конвертации вне 1С подойдут:

  • 📊 Excel — открывает DBF, сохраняет в .xlsx или .csv;
  • 🧾 LibreOffice Calc — тот же сценарий, кодировку выбирает при открытии;
  • 🛠 специальные программы-просмотрщики DBF — удобны, когда нужно только заглянуть в файл.

После конвертации в .xlsx загружайте данные обычными средствами: обработкой загрузки из табличного документа или справочником с шаблоном загрузки, если он есть в конфигурации.

Пошаговая загрузка DBF через промежуточный Excel

Метод подходит бухгалтеру, который не пишет код. Порядок такой.

Шаг 1. Подготовьте копию файла

Скопируйте .dbf и сопутствующие .dbt, .fpt в отдельную папку. Имена файлов должны быть латиницей без пробелов — так стабильнее работают старые драйверы.

Шаг 2. Откройте в Excel или Calc и проверьте кодировку

Откройте файл. Если вместо русских слов видны значки вроде Ђ, Џ или ÀÁ, кодировка выбрана неверно. В Calc при открытии можно указать «Кириллица (DOS/OEM 866)» или «Windows-1251».

Шаг 3. Сохраните в .xlsx

Проверьте, что числа не превратились в текст, а даты — в числа вида 45123. Исправьте формат столбцов до сохранения.

Шаг 4. Загрузите в 1С

Используйте обработку загрузки из табличного документа вашей конфигурации. Если её нет, подойдёт универсальная внешняя обработка. Сначала загрузите 5–10 строк и сверьте результат с исходным файлом.

Шаг 5. Сверьте итоги

Сравните количество строк и контрольные суммы по числовым полям. Расхождение в числе строк — частый признак потерянных записей, помеченных на удаление.

Кодировка и технические нюансы

Самая частая проблема — нечитаемый русский текст. Причина проста: старые программы пишут DBF в DOS-кодировке (кодовая страница 866), а современные — в Windows-1251.

Что видитеВероятная причинаЧто сделать
Символы вроде ‚Ђ, ЏЌФайл в 866, прочитан как 1251Поменять кодировку на OEM
Символы вроде ÀÁÂ, ÏФайл в 1251, прочитан как другойВыбрать ANSI
Знаки ? вместо буквСимволы потеряны при сохраненииВзять исходный файл заново

Для объекта XBase кодировка задаётся свойством Кодировка: значения ANSI и OEM соответствуют двум основным случаям. Если нужной кодировки нет, прочитайте поле как есть и перекодируйте строку своим кодом.

Другие нюансы:

  • 🔤 числа с запятой и точкой: десятичный разделитель в DBF всегда точка, независимо от региональных настроек;
  • 🗓 даты хранятся как ГГГГММДД, пустая дата — пробелы;
  • 🗑 записи могут быть помечены на удаление, но физически лежать в файле;
  • 📏 длинный текст в memo хранится отдельным файлом, без него поле читается пустым.

Если файл большой (сотни тысяч строк), читайте порциями и пишите в базу в транзакциях, иначе обработка надолго займёт память.

Альтернативы: ODBC и COM-соединение

Когда нужны SQL-запросы к файлу или фильтры на стороне источника, подключают файл как базу данных.

ADO через COM

Через COM-объект ADODB.Connection можно открыть папку с DBF как источник данных. Ниже общий вид, строку соединения подберите под свой драйвер.

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрокаСоединения);   // строка зависит от установленного драйвера

Набор = Новый COMОбъект("ADODB.Recordset");
Набор.Open("SELECT * FROM ИмяФайлаБезРасширения", Соединение);

Что нужно проверить:

  1. Разрядность. 32-разрядная 1С работает с 32-разрядными драйверами, 64-разрядная — с 64-разрядными. Несовпадение даёт ошибку «поставщик не найден».
  2. Драйвер установлен. Для DBF и FoxPro используются драйверы dBase/Visual FoxPro. Их наличие смотрите в «Источники данных ODBC» Windows.
  3. Доступ на сервере. В клиент-серверном варианте COM создаётся на сервере 1С, а не на вашем компьютере. Драйвер должен стоять там.

⚠️ В облачных и Linux-развёртываниях COM недоступен. Там остаются XBase и конвертация.

Выбирайте ODBC/ADO, когда файл нужно именно запрашивать (WHERE, JOIN по нескольким DBF). Для простого чтения всех строк XBase надёжнее и не требует установки драйверов.

Частые ошибки и как их устранить

Диагностика: выберите симптом

Ещё две ловушки:

  • 🔢 Имена полей в верхнем регистре и до 10 символов. Если в коде пишете Номер_документа, а в файле NOM_DOC, обращение не сработает.
  • 🧮 Числовое поле заданной длины: значение, не влезающее в неё, обрезается при записи в DBF.

Частые вопросы

Можно ли открыть DBF в 1С без программирования?
Да, через внешнюю обработку загрузки из DBF или через промежуточный Excel. Для постоянной работы лучше один раз настроить обработку на XBase.
Почему в 1С вместо текста «кракозябры»?
Файл записан в DOS-кодировке (866), а читается как Windows-1251, или наоборот. Смените значение Кодировка у объекта XBase.
Как записать данные из 1С в DBF?
Тем же объектом XBase: создайте файл, задайте поля, добавляйте записи и сохраняйте. Учтите ограничение 10 символов на имя поля.
Нужен ли Excel для чтения DBF?
Нет. Объект XBase читает файл напрямую. Excel нужен только как посредник при ручной конвертации.
Работает ли чтение DBF в веб-клиенте?
Файл читайте на сервере. Пользователь передаёт файл через диалог выбора, а серверный код открывает его из временного хранилища.