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

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

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

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

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

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

Типичные ситуации, где пользователь 1С сталкивается с DBF: загрузка классификаторов (ОКОФ, КЛАДР/ФИАС в старых поставках), обмен с торговым оборудованием (сканеры, весы, кассы), импорт данных из сторонних складских программ, выгрузки из государственных информационных систем и обмен с банковскими системами. Многие из этих сценариев работают годами, и переписывать их на другой формат никто не спешит.

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

DBF — это файл, в котором данные хранятся в виде простой таблицы: строки — это записи, столбцы — поля с фиксированными типами (строка, число, дата, логическое значение). Формат появился в составе СУБД dBase и стал фактическим стандартом обмена табличными данными ещё до появления XML и CSV в их современном виде.

Ключевые ограничения формата, которые важно знать при работе в 1С:

  • имена полей ограничены по длине (в классическом dBase III — до 10 символов);
  • строковые поля имеют фиксированную максимальную длину, обычно до 254 символов;
  • нет встроенной поддержки иерархий, ссылок между таблицами и сложных типов данных;
  • кодировка текста хранится в заголовке файла, но далеко не всегда указана корректно — отсюда «кракозябры» при чтении;
  • один DBF-файл — это одна таблица, без связей и индексной логики внутри (индексы хранятся в отдельных файлах).

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

Где DBF встречается в работе с 1С

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

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

Четвёртый сценарий — обмен с внешними контрагентами: некоторые банки, транспортные компании и государственные порталы принимают или отдают выгрузки в DBF. Если контрагент присылает файл с расширением .dbf, его можно открыть и обработать штатными средствами 1С без дополнительных программ.

Как открыть и просмотреть DBF-файл

Для быстрого просмотра содержимого DBF не обязательно писать код. Файл можно открыть в LibreOffice Calc или OpenOffice Calc — при открытии программа попросит указать кодировку, и это самый простой способ проверить, что внутри. Microsoft Excel старых версий тоже открывал DBF напрямую; в современных версиях поддержка ограничена, поэтому надёжнее использовать LibreOffice.

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

ДБФ = Новый XBase;

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

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

Пока ДБФ.Следующая() Цикл

Сообщить(Строка(ДБФ.NAME) + " | " + Строка(ДБФ.PRICE));

КонецЦикла;

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

Обратите внимание на строку с кодировкой: если её не указать или указать неверно, русский текст превратится в нечитаемые символы. Подробнее об этом — в разделе про кодировки.

Чтение и загрузка данных из DBF в 1С

Объект XBase работает как курсор: после открытия файла вы последовательно перебираете записи методом Следующая() и обращаетесь к полям по имени (ДБФ.NAME) или индексу. Перед чтением полезно изучить структуру файла — количество полей, их имена и типы доступны через коллекцию ДБФ.Поля.

Порядок загрузки DBF в 1С
  1. 1
    Откройте файл в LibreOffice Calc и убедитесь, что данные читаются, а структура понятна
  2. 2
    Определите кодировку файла: попробуйте OEM (866) и ANSI (1251), смотрите, где русский текст читается
  3. 3
    Напишите обработку: откройте файл через XBase с выбранной кодировкой
  4. 4
    Переберите записи методом Следующая() и сопоставьте поля DBF реквизитам объектов 1С
  5. 5
    Ищите существующие элементы справочников по коду или наименованию, чтобы не создать дубли
  6. 6
    Записывайте данные порциями или в транзакции, чтобы при ошибке не получить полузагруженные данные
  7. 7
    Проверьте результат: количество загруженных записей должно совпадать с количеством строк в файле

Типовой фрагмент загрузки номенклатуры из DBF выглядит так:

ДБФ = Новый XBase;

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

ДБФ.ОткрытьФайл(ИмяФайла);

Пока ДБФ.Следующая() Цикл

Товар = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(ДБФ.CODE));

Если Товар.Пустая() Тогда

НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();

НовыйТовар.Код = СокрЛП(ДБФ.CODE);

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

НовыйТовар.Записать();

КонецЕсли;

КонецЦикла;

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

Обязательно применяйте СокрЛП() к строковым полям: DBF дополняет строки пробелами до фиксированной длины поля, и «лишние» пробелы мешают поиску и сравнению. Числовые поля XBase обычно возвращает уже как числа, но при сомнениях проверяйте тип значения.

Запись и создание DBF-файлов из 1С

XBase умеет не только читать, но и создавать DBF-файлы. Для этого перед записью нужно описать структуру: добавить поля с указанием имени, типа, длины и точности, затем вызвать метод СоздатьФайл().

ДБФ = Новый XBase;

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

ДБФ.Поля.Добавить("CODE", "S", 10); // строка, 10 символов

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

ДБФ.Поля.Добавить("PRICE", "N", 15, 2); // число, 15 знаков, 2 после запятой

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

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

ДБФ.CODE = "000001";

ДБФ.NAME = "Тестовый товар";

ДБФ.PRICE = 1250.50;

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

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

При создании файла для внешней системы уточните у её разработчиков требования к структуре: имена полей, типы, длины и кодировку. Несовпадение хотя бы одного параметра — самая частая причина, по которой принимающая программа не видит данные или читает их с ошибками.

Кодировки и типичные проблемы

Главная боль при работе с DBF — кодировка. В формате исторически используются однобайтовые кодовые страницы, и русский текст чаще всего записан либо в OEM (CP866, «DOS-кодировка»), либо в ANSI (Windows-1251). Если при чтении вы видите нечитаемые символы — кодировка указана неверно.

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

Как проверить корректность чтения DBF

Русский текст в строковых полях
Норма

Текст читается нормально

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

Нечитаемые символы — смените кодировку OEM/ANSI

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

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

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

Меньше — проверьте фильтры и обработку ошибок в цикле

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

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

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

Сдвиг разрядов — проверьте точность числовых полей

Строковые значения в справочниках
Норма

Без пробелов в начале и конце

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

Лишние пробелы — добавьте СокрЛП()

Вторая типичная проблема — помеченные на удаление записи. В DBF удаление записи физически не стирает её, а ставит пометку. XBase по умолчанию может показывать такие записи; проверяйте свойство ДБФ.ЗаписьУдалена() и пропускайте удалённые строки, если источник их не очищал.

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

Третья проблема — блокировка файла. Если DBF открыт другой программой (например, кассовым ПО), 1С не сможет его открыть на запись, а иногда и на чтение. Перед обработкой убедитесь, что файл не занят, и обрабатывайте исключения через Попытка...Исключение.

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

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

Сравнение форматов обмена для 1С

DBF

Подходит для обмена с устаревшими системами и торговым оборудованием. Ограничения: короткие имена полей, проблемы с кодировкой, одна таблица в файле

CSV/TXT

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

XML / JSON

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

COM / HTTP / веб-сервисы

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

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

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

Чем открыть DBF-файл без 1С?

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

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

Причина почти всегда в кодировке. Попробуйте последовательно КодировкаXBase.OEM (CP866) и КодировкаXBase.ANSI (Windows-1251). Если обе не помогают — откройте файл в LibreOffice, подберите кодировку там и посмотрите, какая именно подошла.

Можно ли работать с DBF в 1С без программирования?

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

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

Классический формат имеет ограничения на количество записей и размер файла (исторически — порядка 2 ГБ), но на практике раньше упираются в производительность: перебор сотен тысяч записей через XBase работает медленно. Для больших объёмов данных лучше использовать другие форматы обмена.

Чем DBF отличается от формата базы самой 1С?

Файл 1Cv8.1CD — это собственный формат информационной базы 1С, содержащий все объекты конфигурации, и он не имеет отношения к DBF. Путаница возникает из-за старой 1С 7.7, где данные действительно хранились в наборе DBF-файлов. В современных версиях DBF — только внешний формат обмена.

Безопасно ли удалять DBF-файлы после загрузки?

Если файл — промежуточный файл обмена и данные успешно загружены и проверены, его можно удалить или переместить в архив. Но если файл является частью работающего обмена с оборудованием или внешней системой, сначала убедитесь, что вторая сторона его не использует.

Итог

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

DBF — простой табличный формат обмена, который 1С читает и пишет через объект XBase. Главные правила работы: правильно указывайте кодировку (OEM или ANSI), очищайте строки через СокрЛП(), проверяйте пометки удаления и закрывайте файл после работы. Для новых интеграций выбирайте XML, JSON или веб-сервисы, а DBF оставьте для совместимости со старыми системами и оборудованием.