Разработка и Конфигурация · 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) или индексу. Перед чтением полезно изучить структуру файла — количество полей, их имена и типы доступны через коллекцию ДБФ.Поля.
- 1Откройте файл в LibreOffice Calc и убедитесь, что данные читаются, а структура понятна
- 2Определите кодировку файла: попробуйте OEM (866) и ANSI (1251), смотрите, где русский текст читается
- 3Напишите обработку: откройте файл через XBase с выбранной кодировкой
- 4Переберите записи методом Следующая() и сопоставьте поля DBF реквизитам объектов 1С
- 5Ищите существующие элементы справочников по коду или наименованию, чтобы не создать дубли
- 6Записывайте данные порциями или в транзакции, чтобы при ошибке не получить полузагруженные данные
- 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С не сможет его открыть на запись, а иногда и на чтение. Перед обработкой убедитесь, что файл не занят, и обрабатывайте исключения через Попытка...Исключение.
Когда DBF подходит, а когда лучше выбрать другой формат
DBF оправдан, когда вторая сторона обмена жёстко требует этот формат: кассовое оборудование, старые банковские интерфейсы, готовые выгрузки внешних систем. Переделывать такой обмен ради «современности» обычно не имеет смысла — рабочий механизм надёжнее нового.
Сравнение форматов обмена для 1С
Подходит для обмена с устаревшими системами и торговым оборудованием. Ограничения: короткие имена полей, проблемы с кодировкой, одна таблица в файле
Простой обмен таблицами без строгой структуры. Минус: нет типизации, разделители и кавычки часто вызывают ошибки разбора
Современный обмен с типизацией, иерархией и проверкой структуры. Подходит для новых интеграций, но требует поддержки с обеих сторон
Прямой обмен между системами без файлов. Лучший вариант для регулярных интеграций, но требует разработки и доступности обеих систем
Для новых интеграций 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 оставьте для совместимости со старыми системами и оборудованием.