Чтение DBF-файла в 1С 8.3: объект XBase, конвертация, ODBC
Содержание
Двойной щелчок по .dbf в 1С ничего не даёт: у платформы нет кнопки «Открыть DBF» в обычном интерфейсе. Читать такой файл придётся обработкой, которая использует встроенный объект XBase, либо заранее превратить файл в Excel или текст.
Чаще всего DBF приходит из банковских выгрузок, старых программ учёта, ГИС и контролирующих органов. Ниже — способы от простого к сложному, код для чтения и разбор кодировки, из-за которой вместо слов появляются «кракозябры».
Файл DBF перед работой скопируйте. Обработка, открывшая его на запись, может испортить данные.
Что такое DBF и как его читает платформа
DBF — файл с таблицей: в начале описание полей, дальше записи фиксированной длины. Рядом могут лежать дополнительные файлы:
- 📄
.dbtили.fpt— тексты длинных полей (memo); - 🗂
.cdx,.ndx,.mdx— индексы; - 📦
.dbc— контейнер базы Visual FoxPro.
Платформа 1С:Предприятие 8.3 читает и пишет DBF через объект XBase языка 1С. Он работает с самим файлом, без Excel и драйверов. Поддерживаются классические форматы dBase и FoxPro.
Что важно знать до начала:
- имя поля — не длиннее 10 символов, поэтому в файле встречаются сокращения вроде
SUMMA_DOK; - нет типов «дата и время» в привычном виде: дата хранится отдельным полем;
- кодировка в файле не гарантирована, её часто приходится задавать вручную.
Три способа открыть DBF: что выбрать
Сначала сравните варианты, потом выбирайте.
| Способ | Когда подходит | Минусы |
|---|---|---|
Обработка на объекте XBase | Регулярная загрузка, нужна точность типов | Нужен код или готовая обработка |
| Конвертация в Excel и загрузка | Один раз, файл небольшой | Ручная работа, теряются длинные текстовые поля |
| ODBC или ADO (COM) | Нужны запросы SQL к файлу, сложные выборки | Драйверы, разрядность, настройка в ОС |
Для разового просмотра хватит Excel или LibreOffice Calc: оба открывают .dbf напрямую. Для повторяющегося обмена пишите обработку на XBase.
Встроенное чтение: объект XBase
Это основной способ. Минимальная обработка читает файл и выводит содержимое в табличный документ.
Процедура ПрочитатьDBF(ПутьКФайлу)
ФайлDBF = Новый XBase;
ФайлDBF.Кодировка = КодировкаXBase.ANSI;
ФайлDBF.ОткрытьФайл(ПутьКФайлу);
Для Каждого Поле Из ФайлDBF.Поля Цикл
Сообщить("Поле: " + Поле.Имя + ", тип: " + Поле.Тип);
КонецЦикла;
ФайлDBF.Первая();
Пока Не ФайлDBF.ВКонце() Цикл
// значения полей читаются по имени поля
ФайлDBF.Следующая();
КонецЦикла;
ФайлDBF.ЗакрытьФайл();
КонецПроцедуры
Состав свойств и методов проверьте в синтаксис-помощнике: откройте в Конфигураторе Справка → Синтакс-помощник и найдите XBase. Там же перечислены КодировкаXBase, типы полей и методы записи.
Что учесть при реальной работе:
- Разберите структуру до загрузки. Выведите список полей с типами и длиной. Это сэкономит время, если в файле нет ожидаемой колонки.
- Обрабатывайте пустые значения. Пустая дата в DBF часто хранится пробелами или нулями — проверяйте перед преобразованием.
- Закрывайте файл всегда. Незакрытый файл остаётся занятым, и повторная загрузка упадёт с ошибкой доступа.
- Не вызывайте чтение на клиенте под веб-клиентом. Файл должен лежать там, где его видит код: выполняйте чтение на сервере и передавайте файл как двоичные данные.
💡 Если нужны только данные для просмотра, загрузите записи в таблицу значений и покажите её на форме — так удобнее искать и фильтровать.
Загрузка записей в таблицу значений
Практичный приём: сначала собрать данные в таблицу значений, а уже потом решать, что с ними делать. Колонки создавайте по списку полей файла, чтобы код не зависел от конкретной структуры.
ТаблицаДанных = Новый ТаблицаЗначений;
Для Каждого Поле Из ФайлDBF.Поля Цикл
ТаблицаДанных.Колонки.Добавить(Поле.Имя);
КонецЦикла;
Дальше в цикле по записям добавляйте строку и переносите значения по именам колонок. Готовую таблицу можно показать на форме, выгрузить в табличный документ или сопоставить с реквизитами документа.
Плюсы такого подхода:
- ✅ видно, что именно лежит в файле, до любых записей в базу;
- ✅ легко отфильтровать пустые строки и дубли;
- ✅ одну и ту же загрузку можно запускать на разных файлах.
Типы полей DBF и что с ними делать
Тип поля определяет, как читать значение. Для проверки выведите тип, как в примере выше, и сверьтесь с таблицей.
| Тип в файле | Что хранит | На что обратить внимание |
|---|---|---|
| Символьный | Текст до 254 символов | Справа часто лишние пробелы — обрежьте |
| Числовой | Число заданной длины | Лишние знаки после запятой теряются |
| Дата | Дата без времени | Пустая дата приходит как пробелы |
| Логический | Да или нет | Значения могут быть T, F, Y, N |
| Memo | Длинный текст в отдельном файле | Без .dbt или .fpt поле пустое |
Запись данных в DBF
Обратная задача возникает при выгрузке для банка или госпортала. Объект XBase умеет создавать файл: вы задаёте поля, добавляете записи и сохраняете. Перед выгрузкой проверьте требования получателя: имена полей, длины, кодировку и формат даты. Расхождение в одном символе приводит к отказу приёма файла.
Внешние обработки и готовые конвертеры
Писать код необязательно. На сайтах сообщества и в «Полезных ресурсах» хватает внешних обработок «Загрузка из DBF». Они обычно умеют сопоставить поля файла и реквизиты справочника или документа.
Как подключить внешнюю обработку :
- Скачайте файл
.epfиз надёжного источника. - Откройте меню
Файл → Открытьи выберите обработку. - Либо подключите её в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, если такой раздел включён в вашей конфигурации.
Внешняя обработка выполняет произвольный код с вашими правами. Проверяйте источник и запускайте сначала на копии базы. Обработка из случайной темы форума может читать и менять данные.
Для конвертации вне 1С подойдут:
- 📊 Excel — открывает DBF, сохраняет в
.xlsxили.csv; - 🧾 LibreOffice Calc — тот же сценарий, кодировку выбирает при открытии;
- 🛠 специальные программы-просмотрщики DBF — удобны, когда нужно только заглянуть в файл.
После конвертации в .xlsx загружайте данные обычными средствами: обработкой загрузки из табличного документа или справочником с шаблоном загрузки, если он есть в конфигурации.
Пошаговая загрузка DBF через промежуточный Excel
Метод подходит бухгалтеру, который не пишет код. Порядок такой.
Шаг 1. Подготовьте копию файла
Скопируйте .dbf и сопутствующие .dbt, .fpt в отдельную папку. Имена файлов должны быть латиницей без пробелов — так стабильнее работают старые драйверы.
Шаг 2. Откройте в Excel или Calc и проверьте кодировку
Откройте файл. Если вместо русских слов видны значки вроде Ђ, Џ или ÀÁ, кодировка выбрана неверно. В Calc при открытии можно указать «Кириллица (DOS/OEM 866)» или «Windows-1251».
Шаг 3. Сохраните в .xlsx
Проверьте, что числа не превратились в текст, а даты — в числа вида 45123. Исправьте формат столбцов до сохранения.
Шаг 4. Загрузите в 1С
Используйте обработку загрузки из табличного документа вашей конфигурации. Если её нет, подойдёт универсальная внешняя обработка. Сначала загрузите 5–10 строк и сверьте результат с исходным файлом.
Шаг 5. Сверьте итоги
Сравните количество строк и контрольные суммы по числовым полям. Расхождение в числе строк — частый признак потерянных записей, помеченных на удаление.
Кодировка и технические нюансы
Самая частая проблема — нечитаемый русский текст. Причина проста: старые программы пишут DBF в DOS-кодировке (кодовая страница 866), а современные — в Windows-1251.
| Что видите | Вероятная причина | Что сделать |
|---|---|---|
Символы вроде ‚Ђ, ЏЌ | Файл в 866, прочитан как 1251 | Поменять кодировку на OEM |
Символы вроде ÀÁÂ, Ï | Файл в 1251, прочитан как другой | Выбрать ANSI |
Знаки ? вместо букв | Символы потеряны при сохранении | Взять исходный файл заново |
Для объекта XBase кодировка задаётся свойством Кодировка: значения ANSI и OEM соответствуют двум основным случаям. Если нужной кодировки нет, прочитайте поле как есть и перекодируйте строку своим кодом.
Другие нюансы:
- 🔤 числа с запятой и точкой: десятичный разделитель в DBF всегда точка, независимо от региональных настроек;
- 🗓 даты хранятся как
ГГГГММДД, пустая дата — пробелы; - 🗑 записи могут быть помечены на удаление, но физически лежать в файле;
- 📏 длинный текст в memo хранится отдельным файлом, без него поле читается пустым.
Если файл большой (сотни тысяч строк), читайте порциями и пишите в базу в транзакциях, иначе обработка надолго займёт память.
Альтернативы: ODBC и COM-соединение
Когда нужны SQL-запросы к файлу или фильтры на стороне источника, подключают файл как базу данных.
ADO через COM
Через COM-объект ADODB.Connection можно открыть папку с DBF как источник данных. Ниже общий вид, строку соединения подберите под свой драйвер.
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрокаСоединения); // строка зависит от установленного драйвера
Набор = Новый COMОбъект("ADODB.Recordset");
Набор.Open("SELECT * FROM ИмяФайлаБезРасширения", Соединение);
Что нужно проверить:
- Разрядность. 32-разрядная 1С работает с 32-разрядными драйверами, 64-разрядная — с 64-разрядными. Несовпадение даёт ошибку «поставщик не найден».
- Драйвер установлен. Для DBF и FoxPro используются драйверы dBase/Visual FoxPro. Их наличие смотрите в «Источники данных ODBC» Windows.
- Доступ на сервере. В клиент-серверном варианте COM создаётся на сервере 1С, а не на вашем компьютере. Драйвер должен стоять там.
⚠️ В облачных и Linux-развёртываниях COM недоступен. Там остаются XBase и конвертация.
Выбирайте ODBC/ADO, когда файл нужно именно запрашивать (WHERE, JOIN по нескольким DBF). Для простого чтения всех строк XBase надёжнее и не требует установки драйверов.
Частые ошибки и как их устранить
.dbt или .fpt либо у него другое имя. Положите сопутствующий файл в ту же папку.Ещё две ловушки:
- 🔢 Имена полей в верхнем регистре и до 10 символов. Если в коде пишете
Номер_документа, а в файлеNOM_DOC, обращение не сработает. - 🧮 Числовое поле заданной длины: значение, не влезающее в неё, обрезается при записи в DBF.
Частые вопросы
Можно ли открыть DBF в 1С без программирования?
XBase.Почему в 1С вместо текста «кракозябры»?
Кодировка у объекта XBase.Как записать данные из 1С в DBF?
XBase: создайте файл, задайте поля, добавляйте записи и сохраняйте. Учтите ограничение 10 символов на имя поля.Нужен ли Excel для чтения DBF?
XBase читает файл напрямую. Excel нужен только как посредник при ручной конвертации.