Разработка и Конфигурация · 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 имеют фиксированную длину и дополняются пробелами справа, поэтому после чтения почти всегда нужен СокрЛП(). Пропуск этого шага — частая причина «пустых» сравнений: строка "ТОВАР " не равна строке "ТОВАР".
- 1Создайте объект: ДБФ = Новый XBase
- 2Укажите кодировку: ДБФ.Кодировка = КодировкаXBase.OEM (или ANSI — зависит от источника)
- 3Откройте файл методом ОткрытьФайл() с указанием пути
- 4Проверьте, что файл не пустой, методом Первая()
- 5Переберите записи в цикле Пока Не ДБФ.ВКонце() с переходом Следующая()
- 6Обрежьте пробелы у строковых полей через СокрЛП()
- 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:\Обмен\..." — это диск сервера, а не компьютера пользователя. Файл с клиента нужно сначала передать на сервер (например, через временное хранилище) или выполнять чтение на клиенте.
Когда DBF подходит, а когда лучше выбрать другой формат
DBF оправдан, когда вторая сторона обмена — старая программа или оборудование, которое понимает только этот формат. Также он удобен для чтения архивов и миграций: структура файла самодокументируема, поля имеют явные типы, и разбор не требует сложного парсера.
Для новых интеграций между современными системами DBF — плохой выбор. XML и JSON поддерживают вложенные структуры, Unicode и не имеют ограничений на длину имён полей. CSV проще для ручного просмотра, а для обмена между базами 1С есть штатные механизмы: планы обмена, EnterpriseData, веб-сервисы.
Сравнение форматов обмена
Обязателен при обмене со старым ПО и оборудованием; строгая типизация, но лимиты на длину полей и проблемы с кодировками
Новые интеграции, вложенные структуры, Unicode; требуют описания схемы, но не имеют ограничений DBF
Простые плоские таблицы для ручной обработки; типы не заданы, разделители и кавычки часто ломают разбор
Практический критерий прост: если хотя бы одна сторона обмена требует DBF — используйте DBF через XBase. Если формат свободен — выбирайте современный вариант и не закладывайте ограничения сорокалетней давности в новую интеграцию.
Как выбрать действие
Часто задаваемые вопросы
Можно ли открыть 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 только тогда, когда формат задан второй стороной обмена.