К статье
Практический материал

Разработка и Конфигурация · 12 мин

Что такое DBF-файл в 1С и как с ним работать

Что такое DBF-файл в 1С, как устроен формат, как читать и записывать DBF через объект XBase, какие есть ограничения и типичные ошибки при обмене данными.

DBF (DataBase File) — один из старейших форматов хранения табличных данных, который в экосистеме 1С используется до сих пор. Несмотря на возраст формата, с ним регулярно сталкиваются бухгалтеры и разработчики: банковские выписки, выгрузки из старых учётных систем, файлы обмена с торговым оборудованием и государственными сервисами нередко приходят именно в DBF.

В платформе «1С:Предприятие» для работы с этим форматом есть встроенный объект XBase, который позволяет читать, создавать и изменять DBF-файлы напрямую из встроенного языка — без внешних библиотек и компонентов. Это делает DBF удобным «посредником» при интеграции с программами, которые не понимают ни XML, ни JSON.

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

Что представляет собой формат DBF

DBF — это файл, содержащий одну таблицу: заголовок с описанием полей и последовательность записей фиксированной структуры. Каждая запись — это строка таблицы, каждое поле — колонка с заранее заданным типом и размером. Формат появился в СУБД dBASE и стал де-факто стандартом для простых табличных данных в эпоху DOS.

Важная особенность: один DBF-файл — это ровно одна таблица. Никаких связей между таблицами, встроенных запросов и хранимых процедур в нём нет. Если нужно передать несколько связанных таблиц, создают несколько DBF-файлов и связывают их логически на стороне принимающей программы.

Основные типы полей, с которыми работает 1С через XBase:

  • Character (S) — строка фиксированной длины, максимум 254 символа;
  • Numeric (N) — число с заданным количеством разрядов и знаков после запятой;
  • Date (D) — дата;
  • Logical (L) — логическое значение (истина/ложь);
  • Memo (M) — длинный текст, хранится в отдельном файле-спутнике (DBT/FPT).

Где DBF встречается в практике работы с 1С

Чаще всего DBF появляется в сценариях обмена с внешними системами. Типичные примеры: загрузка банковских выписок из устаревших банк-клиентов, приём каталогов товаров и прайсов от поставщиков, обмен с кассовым и весовым оборудованием, выгрузка данных для территориальных органов и фондов, миграция данных из программ, написанных на FoxPro или Clipper.

Вторая область — архивы. Многие организации хранят старые базы в DBF, и при переходе на 1С эти данные нужно прочитать и перенести в справочники и документы. Объект XBase справляется с этой задачей без конвертеров: файл открывается напрямую, записи перебираются в цикле.

Третий сценарий — временный обмен между базами 1С, когда нет возможности настроить прямое подключение или веб-сервис. Хотя для этого чаще используют XML или CSV, DBF иногда выбирают из-за строгой типизации полей: в отличие от CSV, типы данных в DBF заданы явно и не «плывут» при разборе.

Как прочитать DBF-файл в 1С через XBase

Чтение выполняется в несколько шагов: создаётся объект XBase, указывается путь к файлу, файл открывается, затем записи перебираются в цикле. Ниже — типовой пример кода:

ДБФ = Новый XBase;

ДБФ.Кодировка = КодировкаXBase.OEM;

ДБФ.ОткрытьФайл("C:\Обмен\price.dbf");

Если ДБФ.Первая() Тогда

Пока Не ДБФ.ВКонце() Цикл

КодТовара = ДБФ.KOD;

Наименование = СокрЛП(ДБФ.NAME);

Цена = ДБФ.PRICE;

// обработка значений

ДБФ.Следующая();

КонецЦикла;

КонецЕсли;

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

Обращение к полям идёт по имени через точку: ДБФ.NAME. Имена полей в DBF ограничены 10 символами и традиционно пишутся латиницей в верхнем регистре — это наследие dBASE. Если вы создаёте файл сами, закладывайте короткие понятные имена и ведите отдельное описание структуры для коллег.

Строковые поля в DBF имеют фиксированную длину и дополняются пробелами справа, поэтому после чтения почти всегда нужен СокрЛП(). Пропуск этого шага — частая причина «пустых» сравнений: строка "ТОВАР " не равна строке "ТОВАР".

Порядок чтения DBF в 1С
  1. 1
    Создайте объект: ДБФ = Новый XBase
  2. 2
    Укажите кодировку: ДБФ.Кодировка = КодировкаXBase.OEM (или ANSI — зависит от источника)
  3. 3
    Откройте файл методом ОткрытьФайл() с указанием пути
  4. 4
    Проверьте, что файл не пустой, методом Первая()
  5. 5
    Переберите записи в цикле Пока Не ДБФ.ВКонце() с переходом Следующая()
  6. 6
    Обрежьте пробелы у строковых полей через СокрЛП()
  7. 7
    Закройте файл методом ЗакрытьФайл()

Как создать и записать DBF-файл из 1С

Создание файла начинается с описания структуры: перед записью нужно объявить все поля с типами и размерами. Только после этого файл создаётся на диске и в него можно добавлять записи.

ДБФ = Новый XBase;

ДБФ.Кодировка = КодировкаXBase.OEM;

ДБФ.Поля.Добавить("KOD", "S", 10);

ДБФ.Поля.Добавить("NAME", "S", 100);

ДБФ.Поля.Добавить("PRICE","N", 15, 2);

ДБФ.Поля.Добавить("DT", "D");

ДБФ.СоздатьФайл("C:\Обмен\export.dbf");

ДБФ.Добавить();

ДБФ.KOD = "000123";

ДБФ.NAME = "Товар пример";

ДБФ.PRICE = 1490.50;

ДБФ.DT = ТекущаяДатаСеанса();

ДБФ.Записать();

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

При описании числовых полей важно правильно задать общую длину и точность: если значение не помещается в отведённое число разрядов, данные будут потеряны или файл станет нечитаемым для принимающей программы. Для денежных сумм обычно резервируют 15 разрядов с 2 знаками после запятой.

Даты в DBF хранятся в собственном внутреннем виде, и XBase корректно преобразует значения типа «Дата» из 1С. А вот время в стандартном поле типа D не сохраняется — если нужны часы и минуты, их придётся хранить отдельным строковым или числовым полем.

Кодировки: главная причина «кракозябр»

DBF-файлы создавались в разные эпохи и в разных кодировках. Два наиболее распространённых варианта — OEM (DOS, CP866) и ANSI (Windows, CP1251). Если файл создан в DOS-программе, а вы открыли его как ANSI, кириллица превратится в нечитаемые символы. Обратная ситуация даёт тот же эффект.

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

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

Контрольные точки

Как проверить результат обмена

Кириллица в строковых полях
Норма

Текст читается, совпадает с источником

Тревожный признак

Кракозябры — неверная кодировка OEM/ANSI

Числовые значения
Норма

Суммы и количества совпадают с источником

Тревожный признак

Обрезанные или нулевые значения — мала разрядность поля

Количество записей
Норма

Совпадает с количеством строк в источнике

Тревожный признак

Записей меньше — файл обрезан или прервана запись

Даты
Норма

Даты корректны и попадают в ожидаемый период

Тревожный признак

Пустые даты или 01.01.0001 — ошибка преобразования типов

Ограничения и типичные ошибки при работе с DBF в 1С

Формат DBF не поддерживает транзакции и одновременную запись из нескольких процессов. Если два сеанса 1С откроют один файл на запись, результат непредсказуем: повреждение заголовка, потеря записей, невозможность открыть файл. Для обмена используйте схему «один пишет — другой читает» с разнесением по времени или через временные файлы с переименованием.

Удаление записей в DBF — тоже особенность: метод удаления лишь помечает запись как удалённую, физически она остаётся в файле. Для окончательной очистки нужно упаковать файл методом Сжать(). Если принимающая программа не фильтрует помеченные записи, она может увидеть «удалённые» строки.

Ещё одна ловушка — путь к файлу при серверном выполнении. Если код выполняется на сервере 1С, путь "C:\Обмен\..." — это диск сервера, а не компьютера пользователя. Файл с клиента нужно сначала передать на сервер (например, через временное хранилище) или выполнять чтение на клиенте.

Типичные ошибки
01
Не указана кодировка — кириллица превращается в кракозябры, данные приходится перезагружать
02
Сравнение строк без СокрЛП() — поиск по справочнику не находит совпадений из-за хвостовых пробелов
03
Путь к файлу задан на клиенте, а код выполняется на сервере — файл не найден
04
Числовое поле объявлено слишком узким — крупные суммы обрезаются без предупреждения
05
Запись в файл, который уже открыт другим процессом — повреждение DBF
06
Забыт метод ЗакрытьФайл() — файл остаётся заблокированным до конца сеанса

Когда DBF подходит, а когда лучше выбрать другой формат

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

Для новых интеграций между современными системами DBF — плохой выбор. XML и JSON поддерживают вложенные структуры, Unicode и не имеют ограничений на длину имён полей. CSV проще для ручного просмотра, а для обмена между базами 1С есть штатные механизмы: планы обмена, EnterpriseData, веб-сервисы.

Сравнение форматов обмена

DBF

Обязателен при обмене со старым ПО и оборудованием; строгая типизация, но лимиты на длину полей и проблемы с кодировками

XML / JSON

Новые интеграции, вложенные структуры, Unicode; требуют описания схемы, но не имеют ограничений DBF

CSV

Простые плоские таблицы для ручной обработки; типы не заданы, разделители и кавычки часто ломают разбор

Практический критерий прост: если хотя бы одна сторона обмена требует DBF — используйте DBF через XBase. Если формат свободен — выбирайте современный вариант и не закладывайте ограничения сорокалетней давности в новую интеграцию.

Маршрут решения

Как выбрать действие

Файл пришёл от банка, поставщика или оборудования в DBFЧитайте через XBase, подберите кодировку OEM/ANSI на тестовом файле
Нужно отдать данные в старую программуСоздайте DBF с заранее согласованной структурой полей и кодировкой
Обе системы современные и формат не заданИспользуйте XML/JSON или штатные механизмы обмена 1С вместо DBF
Нужно перенести архив из FoxPro/ClipperПрочитайте DBF через XBase и загрузите в справочники и документы 1С

Часто задаваемые вопросы

Можно ли открыть DBF-файл без программирования?

Да, для просмотра содержимого подойдут LibreOffice Calc, Excel (старые версии открывают DBF напрямую) или специализированные просмотрщики DBF. Но для загрузки данных в справочники и документы 1С всё равно потребуется обработка с использованием XBase.

Почему после чтения DBF русские буквы отображаются неправильно?

Файл создан в другой кодировке. Попробуйте сменить значение свойства Кодировка с КодировкаXBase.OEM на КодировкаXBase.ANSI или наоборот и открыть файл заново. Одна из двух кодировок почти всегда даёт корректный результат.

Есть ли ограничение на размер DBF-файла при работе из 1С?

Классический формат DBF имеет ограничение порядка 2 ГБ на файл, что соответствует сотням тысяч или миллионам записей в зависимости от ширины строки. На практике для обменов таких объёмов лучше избегать: разбивайте выгрузку на части, это надёжнее и быстрее.

Чем XBase отличается от работы через OLE DB или ODBC?

XBase — встроенный объект платформы, он не требует установки драйверов и работает одинаково на клиенте и сервере. Доступ через OLE DB/ODBC зависит от установленных в системе драйверов, которые могут отсутствовать или отличаться версиями, поэтому для DBF в 1С почти всегда используют именно XBase.

Как передать в DBF длинный текст длиннее 254 символов?

Стандартное строковое поле ограничено 254 символами. Варианты: разбить текст на несколько полей, использовать поле типа Memo (но оно требует файла-спутника и поддержки со стороны принимающей программы) или сократить данные до сути, например передавать код вместо полного наименования.

Можно ли работать с DBF в файловой и клиент-серверной 1С одинаково?

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

Итог

Что важно запомнить

DBF в 1С — это способ обмена табличными данными со старыми программами и оборудованием через встроенный объект XBase. Ключевые правила: всегда задавайте кодировку, обрезайте пробелы в строках, проверяйте разрядность числовых полей, не допускайте одновременной записи в один файл и выбирайте DBF только тогда, когда формат задан второй стороной обмена.