Справочники и Данные · 11 мин
Как открыть DBF-файл в 1С: рабочие способы и примеры кода
Как открыть DBF-файл в 1С: чтение через объект XBase, внешние обработки, загрузка в справочники. Кодировки, ошибки открытия, примеры кода и проверка результата.
Формат DBF (dBase/FoxPro) до сих пор встречается в обмене данными: банковские клиенты, старые складские программы, выгрузки из сторонних учётных систем часто отдают данные именно в этом виде. В 1С:Предприятии нет кнопки «Открыть DBF», как в Excel, — файл читается программно через встроенный объект XBase или через готовые обработки загрузки.
Выбор способа зависит от задачи. Если нужно разово посмотреть содержимое файла, проще воспользоваться универсальной обработкой загрузки табличных данных. Если DBF приходит регулярно и его нужно загружать в справочники или документы, пишется процедура на встроенном языке с построчным чтением записей.
Ниже разобраны оба подхода, типичные проблемы с кодировкой и блокировками файла, а также способы проверить, что данные загрузились корректно.
Что такое DBF и почему 1С не открывает его двойным кликом
DBF — табличный формат базы данных, где структура полей (имя, тип, длина) хранится в заголовке файла, а записи идут последовательно. Файл не содержит индексов внутри себя (они лежат в отдельных .cdx/.mdx-файлах), поэтому читать его можно последовательно, запись за записью.
1С:Предприятие — не просмотрщик файлов, а прикладная платформа. Двойной клик по DBF в проводнике запустит ассоциированную программу (Excel, LibreOffice), но не 1С. Для работы с такими файлами в платформе предусмотрен специальный объект встроенного языка — XBase, который существует именно для чтения и записи DBF.
Способ 1: чтение DBF программно через объект XBase
Это основной и самый гибкий метод. Объект XBase доступен на толстом и тонком клиенте, однако на тонком клиенте файл должен быть доступен по пути, видимому с машины, где выполняется код — чаще всего чтение делают на сервере.
Минимальный пример чтения файла и вывода содержимого первого поля каждой записи:
База = Новый XBase;
База.Кодировка = КодировкаXBase.OEM; // или ANSI — зависит от файла
База.ОткрытьФайл("C:\Обмен\price.dbf");
Если База.Открыта() Тогда
База.Первая();
Пока Не База.ВКонце() Цикл
Сообщить(База.NAME); // обращение к полю по имени
База.Следующая();
КонецЦикла;
База.ЗакрытьФайл();
Иначе
Сообщить("Не удалось открыть файл");
КонецЕсли;
Обращение к полям возможно по имени (База.NAME) или по индексу через метод ПолучитьЗначениеПоля(0). Перед чтением полезно узнать структуру файла: количество полей возвращает свойство КоличествоПолей (или метод КоличествоПолей() в зависимости от версии платформы), описание каждого поля — коллекция Поля.
База = Новый XBase;
База.Кодировка = КодировкаXBase.OEM;
База.ОткрытьФайл("C:\Обмен\price.dbf");
База.Первая();
Пока Не База.ВКонце() Цикл
Сообщить(База.NAME);
База.Следующая();
КонецЦикла;
База.ЗакрытьФайл();Способ 2: открыть DBF без программирования
Если задача — один раз посмотреть содержимое или перенести данные в справочник, писать код необязательно. Существуют внешние обработки (файлы .epf), которые открывают DBF как таблицу и позволяют сопоставить колонки полям справочника. Их запускают через меню «Файл → Открыть» в режиме Предприятия, если конфигурация не запрещает открытие внешних обработок.
Альтернативный путь — открыть DBF в Excel или LibreOffice Calc, сохранить как табличный документ (MXL, XLSX) или CSV и затем воспользоваться типовой обработкой «Загрузка данных из табличного документа», которая есть во многих конфигурациях на базе БСП (раздел «Администрирование» или «НСИ»). Это удобно, когда исходный файл нужно ещё и вручную почистить перед загрузкой.
Сравнение вариантов
Подходит для регулярной автоматической загрузки; требует навыков программирования и прав на изменение конфигурации или внешнюю обработку
Подходит для разовой загрузки в справочник без кода; нужен файл обработки и разрешение на открытие внешних файлов
Подходит, когда данные нужно просмотреть и отредактировать вручную; лишний шаг и риск потери форматов при пересохранении
Кодировка: почему вместо текста видны «кракозябры»
Самая частая проблема при открытии DBF — неверная кодировка. В файлах, созданных старыми DOS-программами и банк-клиентами, текст обычно в кодировке OEM (CP866), а в файлах из Windows-приложений — ANSI (CP1251). Если открыть OEM-файл с настройкой ANSI, кириллица превращается в нечитаемые символы.
Кодировка задаётся до открытия файла свойством Кодировка: КодировкаXBase.OEM или КодировкаXBase.ANSI. Если заранее неизвестно, какая используется, откройте файл в обоих режимах и посмотрите, в каком текст читается. Некоторые DBF-файлы содержат признак кодировки в заголовке, но далеко не все программы его корректно проставляют, поэтому практическая проверка надёжнее.
Загрузка данных из DBF в справочник 1С
Типовая задача — перенести, например, номенклатуру или контрагентов из DBF в справочник. Алгоритм: открыть файл, пройти по записям, для каждой найти существующий элемент по ключевому полю (код, ИНН, наименование) или создать новый, заполнить реквизиты и записать.
База = Новый XBase;
База.Кодировка = КодировкаXBase.OEM;
База.ОткрытьФайл(ПутьКФайлу);
База.Первая();
Пока Не База.ВКонце() Цикл
Элемент = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(База.NAME));
Если Элемент.Пустая() Тогда
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(База.NAME);
НовыйЭлемент.Записать();
КонецЕсли;
База.Следующая();
КонецЦикла;
База.ЗакрытьФайл();
При больших объёмах имеет смысл выводить прогресс и обрабатывать ошибки записи по каждому элементу, чтобы один «битый» объект не прервал всю загрузку. Также полезно сначала выполнить загрузку в тестовой копии базы и сверить количество загруженных элементов с количеством записей в файле.
- 1Скопируйте DBF-файл в каталог, доступный серверу 1С, и закройте его в других программах
- 2Определите кодировку файла, открыв его пробным кодом с OEM и ANSI
- 3Напишите цикл чтения: Первая(), затем Следующая() до ВКонце()
- 4Для каждой записи ищите существующий элемент справочника по ключевому полю или создавайте новый
- 5Запустите загрузку сначала на копии базы и сверьте количество записей и случайные значения
Типичные ошибки при открытии DBF и их решение
Ошибка «Файл не открывается» чаще всего означает, что файл занят другой программой (открыт в Excel или банк-клиенте), путь указан неверно или у учётной записи, под которой работает сервер 1С, нет прав на каталог. Проверьте, что файл закрыт везде, и что путь задан именно с точки зрения той машины, где исполняется код.
Если файл открывается, но записей ноль, а данные в нём точно есть, возможно, файл повреждён или это не DBF, а переименованный файл другого формата. Проверить проще всего, открыв его в текстовом редакторе или Excel: у настоящего DBF в начале виден служебный заголовок и имена полей.
Ещё одна проблема — числовые и датные поля, которые читаются как текст или с потерей точности. В DBF тип поля задан в структуре, и XBase возвращает значение соответствующего типа; если в справочнике реквизит строковый, а поле числовое, выполняйте явное преобразование через Строка() или Число() с обработкой возможных ошибок.
Запись и изменение DBF из 1С
Объект XBase позволяет не только читать, но и создавать DBF-файлы — это используется для выгрузок в сторонние системы. Структура описывается через коллекцию Поля (метод Добавить с типом, длиной и точностью), затем вызывается СоздатьФайл(), после чего записи добавляются методами Добавить() и Записать().
При изменении существующего файла учитывайте ограничения формата: длина строкового поля фиксирована, и слишком длинное значение будет обрезано без предупреждения. Имя поля в классическом DBF ограничено примерно десятью символами, что важно при обмене со старыми программами.
Как проверить, что загрузка прошла корректно
Минимальная проверка — сопоставить количество записей в файле (свойство КоличествоЗаписей или подсчёт в цикле) с количеством созданных/обновлённых элементов. Расхождение означает, что часть записей пропущена: например, из-за пометки удаления в самом DBF (удалённые записи физически остаются в файле) или из-за ошибок записи элементов.
Дополнительно стоит выборочно сравнить несколько записей: открыть файл в Excel и сверить значения ключевых полей с тем, что попало в справочник. Особое внимание — к кириллице (признак проблем с кодировкой) и к числам с дробной частью (признак неверной точности поля).
Как проверить результат
Совпадает с числом загруженных элементов
В базе меньше — часть записей пропущена или не записалась
Текст читается нормально
Кракозябры — неверная кодировка при открытии
Суммы и количества совпадают с источником
Обрезанные или округлённые значения — неверный тип поля
Частые вопросы
Можно ли открыть DBF в 1С без программирования вообще?
Да, если использовать внешнюю обработку загрузки табличных данных или сначала конвертировать файл через Excel/LibreOffice в табличный документ и загрузить типовой обработкой конфигурации. Штатной кнопки «открыть DBF» в платформе нет.
Почему XBase не открывает файл, хотя путь верный?
Чаще всего файл занят другой программой или недоступен с той машины, где выполняется код. Если код работает на сервере 1С, локальный путь вида C:\ указывает на диск сервера, а не вашего компьютера — файл нужно положить в доступный серверу каталог.
Как узнать структуру полей DBF-файла из 1С?
После открытия файла переберите коллекцию База.Поля: у каждого поля доступны имя, тип, длина и точность. Это удобно вывести в сообщение или таблицу значений перед написанием основной загрузки.
Что делать, если в DBF видны не все записи?
В формате DBF удалённые записи физически остаются в файле с пометкой удаления. Проверьте методом фильтрации или свойств записи, не помечены ли они на удаление, и при необходимости восстановите их либо учитывайте пометку при загрузке.
Можно ли работать с DBF в файловой и в клиент-серверной 1С одинаково?
Сам объект XBase работает одинаково, различие только в том, где физически должен лежать файл: в клиент-серверном варианте код обычно выполняется на сервере, поэтому файл должен быть доступен именно с сервера, а не с клиентской машины.
Что важно запомнить
DBF в 1С открывается объектом XBase: задаётся кодировка, вызывается ОткрытьФайл(), записи читаются в цикле. Для разовых задач подойдут внешние обработки или конвертация через Excel. Ключевые риски — неверная кодировка, незакрытый файл и неверный путь при серверном выполнении; результат всегда проверяйте по количеству записей и выборочной сверке значений.