Справочники и Данные · 12 мин
Как открыть файл DBF в 1С: подробная инструкция
Как открыть файл DBF в 1С через объект XBase, обработку или загрузку в справочник. Разбор кодировок, структуры полей, типичных ошибок и готовых примеров кода.
Формат DBF до сих пор широко используется для обмена данными между программами: банковские выписки, выгрузки из старых учетных систем, классификаторы и справочники нередко приходят именно в этом виде. В 1С для работы с DBF-файлами есть встроенный объект XBase, который позволяет читать и записывать такие файлы без сторонних компонентов.
Открыть DBF в 1С можно тремя практическими путями: программно через XBase в конфигураторе, через готовую обработку загрузки в пользовательском режиме или сначала просмотрев файл в стороннем просмотрщике, чтобы понять его структуру. Выбор зависит от задачи: разовый просмотр, разовая загрузка или регулярный обмен.
Главная сложность при работе с DBF — не само открытие, а правильное определение структуры полей и кодировки. Ошибка в кодировке приводит к «кракозябрам» вместо русских букв, а неверная интерпретация типов полей — к потере данных при загрузке. Ниже разобраны все шаги с проверками результата.
Что такое DBF и когда он встречается в работе с 1С
DBF (DataBase File) — один из старейших форматов табличных данных, унаследованный от СУБД dBase. Файл состоит из заголовка с описанием полей (имя, тип, длина) и последовательности записей фиксированной длины. Именно жесткая структура делает формат удобным для потокового чтения, но накладывает ограничения: имя поля не длиннее 10 символов, длина строкового поля фиксирована, типов данных немного.
На практике DBF встречается при загрузке выписок из клиент-банков старых версий, при переносе данных из «дедовских» программ складского и кадрового учета, при получении классификаторов (например, ОКЕИ, банковских справочников) и при обмене с кассовым оборудованием. Поэтому уметь открывать такой файл полезно и бухгалтеру, и разработчику.
Предварительный просмотр: как узнать структуру файла
Прежде чем писать код загрузки, нужно понять, что внутри файла: какие поля есть, какого они типа и какой длины. Самый быстрый способ — открыть DBF в просмотрщике. Подойдут бесплатные утилиты вроде DBF Viewer, а также Excel старых версий или LibreOffice Calc, которые открывают DBF напрямую через «Файл → Открыть».
Если русские буквы отображаются нечитаемо, это сразу сигнализирует о проблеме кодировки: чаще всего файл записан в DOS-кодировке (CP866), а просмотрщик показывает его как Windows (CP1251). Запомните этот факт — он понадобится при настройке XBase.
Структуру можно узнать и программно: после открытия файла объект XBase хранит коллекцию Поля, где у каждого поля доступны свойства Имя, Тип и Длина. Это удобно, когда файлов много и ручной просмотр каждого нереален.
Попробуйте открыть как CP866 (OEM) вместо CP1251 (ANSI)
Проверьте тип и длину числовых полей в структуре
Убедитесь, что файл не открыт в другой программе, проверьте его размер
Открытие DBF программно через XBase
Основной способ внутри 1С — объект XBase. Последовательность действий всегда одинаковая: создать объект, задать кодировку, открыть файл, проверить успешность открытия, пройтись по записям. Ниже минимальный рабочий пример чтения.
База = Новый XBase;
База.Кодировка = КодировкаXBase.OEM; // для русских DOS-файлов
База.ОткрытьФайл("C:\Обмен\sprav.dbf");
Если НЕ База.Открыта() Тогда
Сообщить("Не удалось открыть файл DBF");
Возврат;
КонецЕсли;
База.Первая();
Пока НЕ База.ВКонце() Цикл
Сообщить("Код: " + База.CODE + ", Наименование: " + База.NAME);
База.Следующая();
КонецЦикла;
База.ЗакрытьФайл();
Обращение к полям идет по имени через точку (База.NAME), при этом регистр имени значения не имеет. Если имя поля заранее неизвестно, используйте конструкцию База.ПолучитьЗначениеПоля("NAME") или перебор коллекции База.Поля.
Методы навигации: Первая() — на первую запись, Следующая() — на следующую, ВКонце() — признак достижения конца файла. Также доступны Перейти(НомерЗаписи) и свойство КоличествоЗаписей() для произвольного доступа.
- 1Создайте объект: База = Новый XBase
- 2Задайте кодировку: База.Кодировка = КодировкаXBase.OEM
- 3Откройте файл: База.ОткрытьФайл(ПутьКФайлу)
- 4Проверьте База.Открыта() — если Ложь, прервите обработку
- 5Пройдите по записям циклом Первая()/Следующая()
- 6Закройте файл методом ЗакрытьФайл()
Кодировка: почему русские буквы превращаются в символы
Самая частая проблема при открытии DBF — неправильная кодировка. Свойство Кодировка объекта XBase принимает два значения: КодировкаXBase.OEM (DOS, CP866) и КодировкаXBase.ANSI (Windows, CP1251). Старые программы и выгрузки из DOS-приложений пишут в OEM, современные Windows-утилиты — чаще в ANSI.
Признак неверной кодировки — русский текст выглядит как набор латинских букв и символов псевдографики. Решение простое: закройте файл, смените значение свойства Кодировка на противоположное и откройте заново. Данные в самом файле при этом не повреждаются — кодировка влияет только на интерпретацию байтов при чтении и записи.
Если файл создается в 1С для передачи в другую систему, уточните требования принимающей стороны: банковские и кассовые программы нередко жестко ожидают именно OEM-кодировку, и файл в ANSI у них отобразится некорректно.
Загрузка данных из DBF в справочник или документ
Открыть файл — полдела, обычно требуется перенести данные в базу. Типовой сценарий: внутри цикла по записям DBF ищется существующий элемент справочника по коду или наименованию, и если не найден — создается новый. Поиск обязателен, иначе при повторной загрузке получите дубли.
Пока НЕ База.ВКонце() Цикл
Элемент = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(База.CODE));
Если Элемент.Пустая() Тогда
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Код = СокрЛП(База.CODE);
НовыйЭлемент.Наименование = СокрЛП(База.NAME);
НовыйЭлемент.Записать();
КонецЕсли;
База.Следующая();
КонецЦикла;
Обратите внимание на СокрЛП(): строковые поля DBF имеют фиксированную длину и дополняются пробелами справа, поэтому без обрезки пробелов сравнение и поиск будут работать некорректно. Числовые поля XBase обычно возвращает уже как числа, даты — как даты, но при сомнениях проверяйте тип значения отладчиком.
При больших объемах (десятки тысяч записей) оборачивайте загрузку в транзакцию или записывайте элементы порциями — это заметно ускоряет процесс и упрощает откат при ошибке. Перед загрузкой в рабочую базу обязательно сделайте резервную копию или отработайте на копии базы.
Открытие DBF без программирования
Если нужно просто посмотреть содержимое или сделать разовую загрузку, писать код необязательно. Во многих типовых конфигурациях есть универсальные обработки загрузки табличных данных (например, «Загрузка данных из табличного документа» в БСП-based конфигурациях): DBF можно предварительно открыть в Excel или LibreOffice и сохранить как таблицу, которую обработка поймет.
Также существуют внешние обработки «Чтение DBF» — они открываются в режиме 1С:Предприятие через «Файл → Открыть» и показывают содержимое файла в виде таблицы с возможностью выгрузки. Это удобный вариант для пользователя без доступа к конфигуратору.
Сравнение способов открытия DBF
Полный контроль: чтение, запись, создание файлов. Требует навыков программирования на встроенном языке
Подходит для разовой загрузки без кода. Ограничена возможностями конкретной обработки
Быстрый просмотр и конвертация в другой формат. Не загружает данные в 1С напрямую, возможны проблемы с кодировкой
Корректно показывает структуру и кодировки. Только просмотр и простой экспорт
Создание и запись DBF из 1С
XBase работает и в обратную сторону: можно создать новый DBF-файл и выгрузить в него данные из 1С. Для этого перед открытием описывается структура полей через База.Поля.Добавить(Имя, Тип, Длина, Точность), затем вызывается СоздатьФайл(Путь).
База = Новый XBase;
База.Кодировка = КодировкаXBase.OEM;
База.Поля.Добавить("CODE", "S", 10);
База.Поля.Добавить("NAME", "S", 100);
База.Поля.Добавить("PRICE", "N", 15, 2);
База.СоздатьФайл("C:\Обмен\export.dbf");
База.Добавить();
База.CODE = "00001";
База.NAME = "Товар 1";
База.PRICE = 150.50;
База.Записать();
База.ЗакрытьФайл();
Типы полей задаются одной буквой: S — строка, N — число (с указанием точности), D — дата, L — логическое. Помните про ограничение в 10 символов на имя поля: длинные имена будут обрезаны, что иногда приводит к конфликтам имен.
Проверка результата и типичные проблемы
После загрузки данных из DBF обязательно сверьте результат с источником. Минимальная проверка: количество загруженных записей должно совпадать с количеством записей в файле (его показывает База.КоличествоЗаписей()), а несколько случайных элементов должны совпадать по ключевым полям.
Отдельно проверьте записи с русским текстом, с дробными числами и с датами — именно на них чаще всего всплывают ошибки кодировки, точности и форматов. Если файл содержит помеченные на удаление записи (в DBF есть такой признак), решите, нужно ли их пропускать: метод Удалена() возвращает Истина для таких записей.
Как проверить результат загрузки
Совпадает с КоличествоЗаписей() исходного файла
Записей меньше — часть потеряна, больше — появились дубли
Наименования читаются корректно
Кракозябры — неверная кодировка, нужна перезагрузка
Дробная часть и разрядность сохранены
Числа округлены или обрезаны — неверно описана точность поля
Данные обновляются, дублей нет
Каждый запуск создает новые элементы — не работает поиск существующих
Частые вопросы
Чем открыть DBF-файл, чтобы просто посмотреть содержимое?
Быстрее всего — LibreOffice Calc или Excel (через «Файл → Открыть»), либо бесплатный DBF-просмотрщик. Если русский текст нечитаем, попробуйте при открытии выбрать кодировку Cyrillic DOS (866) вместо Windows (1251).
Почему XBase не открывает файл и Открыта() возвращает Ложь?
Чаще всего файл занят другой программой, указан неверный путь, или у пользователя нет прав на чтение. Также причиной может быть поврежденный заголовок файла. Проверьте, что файл открывается в стороннем просмотрщике, и что путь указан с учетом того, где выполняется код — на клиенте или на сервере.
Как понять, какая кодировка у моего DBF-файла?
Надежный признак — внешний вид русского текста при открытии в разных кодировках. Файлы из старых DOS-программ, банковских выгрузок и кассового ПО обычно в OEM (CP866), файлы, созданные Windows-приложениями, — в ANSI (CP1251). Попробуйте обе и выберите ту, где текст читается.
Можно ли открыть DBF на сервере 1С, если файл лежит на компьютере пользователя?
Напрямую нет: сервер видит только свою файловую систему. Нужно сначала передать файл на сервер — например, поместить его во временное хранилище через НачатьПомещениеФайлаНаСервер, а затем открыть XBase уже на сервере по полученному пути.
Как пропустить удаленные записи при чтении DBF?
Внутри цикла проверяйте метод База.Удалена(): если он возвращает Истина, запись помечена на удаление. Добавьте условие «Если НЕ База.Удалена() Тогда … КонецЕсли» вокруг обработки записи.
Есть ли ограничение на размер DBF-файла при работе через XBase?
Жесткого ограничения со стороны XBase нет, но классический формат DBF имеет собственные пределы по числу записей и размеру файла (порядка 2 ГБ). На практике файлы в сотни тысяч записей читаются без проблем, просто медленнее — для больших объемов стоит выводить индикатор прогресса.
Что важно запомнить
DBF в 1С открывается объектом XBase: задайте кодировку (чаще OEM), откройте файл, проверьте Открыта() и читайте записи циклом. Перед загрузкой в базу изучите структуру полей, обрезайте пробелы в строках и ищите существующие элементы, чтобы не создать дублей. Любую массовую загрузку сначала отрабатывайте на копии базы.