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

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

Как создать файл DBF в 1С

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

Формат DBF до сих пор востребован в обмене данными: банковские клиенты, старые учётные системы, загрузка классификаторов и выгрузка справочников нередко работают именно с ним. В 1С для создания и чтения DBF-файлов предназначен встроенный объект XBase, который доступен как в обычных, так и в управляемых формах без установки дополнительных компонентов.

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

Важно понимать ограничения формата заранее: длина имени поля в классическом DBF ограничена 10 символами, строковые поля имеют фиксированную длину, а кодировку нужно указывать явно, иначе кириллица в сторонних программах отобразится нечитаемо. Эти нюансы учтены в примерах ниже.

Что такое объект XBase и когда он нужен

XBase — это встроенный объект платформы 1С, предназначенный для работы с файлами формата DBF напрямую, без OLE-драйверов и сторонних библиотек. Он позволяет создавать файлы, читать, изменять и удалять записи, а также работать с индексными файлами.

Типичные сценарии применения: выгрузка справочника контрагентов или номенклатуры для старой учётной системы, формирование платёжных реестров для банка, загрузка адресных классификаторов, обмен с программами на Clipper или FoxPro. Если приёмник данных умеет читать только DBF — XBase является штатным и самым надёжным способом.

Описание структуры полей

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

Пример описания структуры для выгрузки справочника товаров:

БД = Новый XBase;

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

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

БД.Колонки.Добавить("NAME", "S", 100); // наименование

БД.Колонки.Добавить("PRICE", "N", 15, 2); // цена, число с 2 знаками

БД.Колонки.Добавить("ACTIVE", "L"); // логическое поле

БД.Колонки.Добавить("DATEREG", "D"); // дата

Типы полей задаются буквой: S — строка, N — число, D — дата, L — логическое значение, M — мемо. Для строк обязательно указывайте длину с запасом: если реальное значение длиннее, оно будет обрезано без предупреждения.

Создание файла и запись данных

После описания структуры вызывается метод СоздатьФайл(), которому передаётся путь к файлу. Затем в цикле добавляются записи: метод Добавить() создаёт новую пустую запись, полям присваиваются значения, метод Записать() фиксирует запись в файле.

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

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

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

БД.CODE = Лев(Выборка.Код, 10);

БД.NAME = Лев(Выборка.Наименование, 100);

БД.PRICE = Выборка.Цена;

БД.ACTIVE = Не Выборка.ПометкаУдаления;

БД.DATEREG = ТекущаяДатаСеанса();

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

КонецЦикла;

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

Обращение к полям записи выполняется по имени колонки, как к свойству объекта. Значения, не помещающиеся в отведённую длину, следует обрезать явно функцией Лев() — так поведение будет предсказуемым и контролируемым.

Порядок действий
  1. 1
    Создайте объект: БД = Новый XBase
  2. 2
    Задайте кодировку: БД.Кодировка = КодировкаXBase.ANSI
  3. 3
    Опишите колонки через БД.Колонки.Добавить() с типом и длиной
  4. 4
    Вызовите БД.СоздатьФайл() с полным путём к файлу
  5. 5
    В цикле: БД.Добавить(), присвоение полей, БД.Записать()
  6. 6
    Завершите работу методом БД.ЗакрытьФайл()
  7. 7
    Откройте файл в сторонней программе и проверьте данные

Кодировка и кириллица

Чаще всего проблемы возникают не с созданием файла, а с его открытием в других программах: вместо русских букв отображаются «кракозябры». Причина — несовпадение кодировки. Свойство Кодировка объекта XBase принимает значения КодировкаXBase.OEM (DOS, CP866) и КодировкаXBase.ANSI (Windows, CP1251).

Какую выбрать — зависит от программы-приёмника. Современные Windows-приложения и Excel обычно ожидают ANSI, старые DOS-утилиты и часть банковских систем — OEM. Если требования приёмника неизвестны, создайте тестовый файл с одной записью и проверьте отображение до запуска полной выгрузки.

Маршрут решения

Как выбрать действие

Файл откроют в Excel или современной Windows-программеУстановите КодировкаXBase.ANSI
Приёмник — DOS-утилита или старая банковская системаУстановите КодировкаXBase.OEM
Требования приёмника неизвестныСоздайте тестовый файл с кириллицей и проверьте отображение в обеих кодировках
Приёмник поддерживает CSV или XMLРассмотрите эти форматы вместо DBF — они лишены ограничений по длине полей

Проверка результата

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

Проверка = Новый XBase;

Проверка.Кодировка = КодировкаXBase.ANSI;

Проверка.ОткрытьФайл("C:\Обмен\tovary.dbf");

Сообщить("Записей в файле: " + Проверка.КоличествоЗаписей());

Проверка.ЗакрытьФайл();

Второй способ — открыть файл в программе-приёмнике или в Excel и визуально убедиться, что строки читаются, числа имеют нужное количество знаков, даты распознаются, а логические поля отображаются корректно. Именно внешняя проверка выявляет проблемы кодировки и обрезанных строк.

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

Как проверить результат

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

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

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

Записей меньше — часть данных не выгрузилась или цикл прервался

Кириллица в строковых полях
Норма

Текст читается в программе-приёмнике

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

Нечитаемые символы — неверная кодировка

Длинные наименования
Норма

Текст помещается полностью

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

Значения обрезаны — увеличьте длину поля

Числа с копейками
Норма

Дробная часть сохранена

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

Числа округлены до целых — не задана точность поля

Типичные ошибки и ограничения

Самая частая ошибка — попытка создать файл в несуществующем каталоге. Метод СоздатьФайл() не создаёт промежуточные папки, поэтому путь нужно проверить заранее или создать каталог программно. Вторая типичная ситуация — забыт ЗакрытьФайл(): файл остаётся заблокированным, и приёмник не может его открыть.

Также учитывайте ограничения формата: имена полей длиннее 10 символов будут усечены, строки длиннее заданной длины — обрезаны, а при больших объёмах (сотни тысяч записей) DBF работает медленнее современных форматов. Если приёмник позволяет, для крупных выгрузок лучше подходят CSV, XML или прямой обмен через веб-сервисы.

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

Чтение созданного DBF-файла

Для чтения используется тот же объект, но вместо СоздатьФайл() вызывается ОткрытьФайл(). Перебор записей выполняется методами Первая(), Следующая() и проверкой ВКонце(). Кодировку при чтении нужно указывать ту же, что использовалась при записи.

БД = Новый XBase;

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

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

Если БД.Первая() Тогда

Пока Не БД.ВКонце() Цикл

Сообщить(БД.CODE + " — " + БД.NAME);

БД.Следующая();

КонецЦикла;

КонецЕсли;

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

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

Итог

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

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

Частые вопросы

Можно ли создать DBF без доступа к конфигуратору?

Да. Код с объектом XBase можно выполнить через внешнюю обработку (файл .epf), открыв её в режиме предприятия, если у пользователя есть право запуска внешних обработок. Изменять конфигурацию для этого не требуется.

Почему в Excel вместо русских букв отображаются символы?

Несовпадение кодировки. Файл, созданный с КодировкаXBase.OEM, Excel откроет как ANSI и наоборот. Пересоздайте файл с другим значением свойства Кодировка или откройте его в Excel через мастер импорта с явным указанием кодовой страницы.

Как выгрузить строку длиннее 254 символов?

Обычное строковое поле DBF ограничено по длине. Для длинных текстов используется мемо-поле (тип «M»), которое хранит данные в сопутствующем файле. Однако не все приёмники корректно читают мемо-поля — уточните это у стороны, принимающей файл.

Что делать, если файл не создаётся и возникает ошибка?

Проверьте три вещи: существует ли каталог из пути, есть ли у пользователя права на запись в него и не открыт ли файл с таким именем в другой программе. Также убедитесь, что структура колонок описана до вызова СоздатьФайл() — с пустой структурой файл не создаётся.

Можно ли дозаписывать данные в существующий DBF?

Да. Откройте файл методом ОткрытьФайл(), затем используйте те же Добавить() и Записать() — новые записи добавятся в конец. Убедитесь, что структура колонок при открытии совпадает со структурой файла, иначе значения попадут не в те поля.

Работает ли XBase на сервере и в тонком клиенте?

Объект XBase доступен на сервере, в толстом и тонком клиенте. В клиент-серверном режиме файл создаётся там, где выполняется код: при серверном вызове — на сервере, поэтому путь должен быть доступен с сервера, а готовый файл затем передаётся клиенту, например через временное хранилище.