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

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

Что такое XBase в 1С и как с ним работать

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

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

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

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

Что представляет собой объект XBase

XBase — это программный объект платформы 1С:Предприятие, который работает как «мини-CУБД» внутри кода. С его помощью можно открыть существующий DBF-файл или создать новый с нуля, описав структуру полей. Объект поддерживает добавление, изменение и удаление записей, а также навигацию по таблице: переход к первой, последней, следующей или конкретной записи.

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

Как создать и открыть DBF-файл

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

При описании структуры для каждого поля указываются имя, тип и размерность. XBase поддерживает типы: строка (S), число (N), дата (D), логическое (L) и мемо (M). Для числовых полей задаётся общая длина и количество знаков после запятой, для строковых — максимальная длина. Несоответствие типов при чтении чужого файла — частая причина ошибок, поэтому структуру входящего DBF стоит предварительно изучить.

bsl
ДБФ = Новый XBase();
ДБФ.Кодировка = КодировкаXBase.OEM;
ДБФ.ОткрытьФайл("C:\Обмен\sprav.dbf");
Если ДБФ.Первая() Тогда
    Пока Истина Цикл
        Сообщить(ДБФ.NAME);
        Если Не ДБФ.Следующая() Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
КонецЕсли;
ДБФ.ЗакрытьФайл();

Чтение и запись данных

Чтение выполняется последовательным перебором записей: метод Первая() устанавливает курсор на начало файла, Следующая() перемещает на следующую запись и возвращает Ложь, когда записи закончились. Обращение к полям идёт по имени через точку: ДБФ.KOD, ДБФ.NAME. Перед чтением полезно проверить количество записей методом КоличествоЗаписей(), чтобы отсечь пустые файлы.

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

Порядок загрузки данных из DBF
  1. 1
    Создайте объект: ДБФ = Новый XBase() и задайте кодировку
  2. 2
    Откройте файл методом ОткрытьФайл() с указанием полного пути
  3. 3
    Проверьте, что файл открылся и содержит записи
  4. 4
    Переберите записи через Первая()/Следующая(), читая поля по именам
  5. 5
    Перенесите значения в объекты 1С с проверкой дублей и типов
  6. 6
    Закройте файл методом ЗакрытьФайл() и зафиксируйте транзакцию

Кодировка и индексы

Самая коварная особенность DBF — кодировка. Файлы, созданные в DOS-программах, обычно используют кодировку OEM (CP866), а Windows-приложения — ANSI (CP1251). Если кодировку не указать или выбрать неверную, вместо русского текста вы получите «кракозябры». Кодировка задаётся свойством ДБФ.Кодировка = КодировкаXBase.OEM или ANSI до открытия файла.

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

Ограничения формата DBF

Формат DBF накладывает жёсткие ограничения, о которых нужно помнить при проектировании обмена. Имя поля ограничено 10 символами (в классическом варианте формата), длина строкового поля — 254 символами, количество полей и размер записи также ограничены. Длинные наименования, комментарии и адреса при выгрузке приходится обрезать или выносить в мемо-поля.

Кроме того, DBF не поддерживает NULL в привычном понимании, транзакции и ссылочную целостность — это просто таблица. Числа с плавающей точкой могут терять точность при неверно заданной разрядности. Если внешняя система допускает другой формат обмена, стоит оценить альтернативы до начала разработки.

Сравнение способов обмена

XBase (DBF)

Подходит для интеграции со старыми системами, кассами и банками, требующими именно DBF. Ограничения: короткие имена полей, проблемы кодировок, нет типов сложнее строки/числа/даты.

XML / JSON

Стандарт для современных обменов и веб-сервисов. Поддерживают иерархию, Unicode и строгую типизацию, но требуют, чтобы внешняя система умела с ними работать.

Табличные документы / Excel

Удобны, когда файл формирует или читает человек. Не подходят для полностью автоматического высокочастотного обмена из-за накладных расходов на разбор.

COM/ADO и прямые запросы

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

Типичные ошибки и их диагностика

Большинство проблем при работе с XBase сводится к нескольким повторяющимся сценариям. Неверная кодировка проявляется нечитаемыми русскими символами — решается переключением между OEM и ANSI. Ошибка «файл не найден» или отказ открытия часто означает, что код выполняется на сервере, а путь указан к диску клиентской машины, — файл нужно предварительно передать на сервер или поместить во временное хранилище.

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

Типичные ошибки
01
Не задана кодировка перед открытием — русский текст читается как набор символов. Задавайте КодировкуXBase.OEM или ANSI до ОткрытьФайл().
02
Обращение к полю по имени, которого нет в файле, — исключение в рантайме. Проверяйте состав полей через коллекцию ДБФ.Поля.
03
Запись строки длиннее размера поля — значение молча обрезается, данные теряются. Проверяйте СтрДлина() перед присваиванием.
04
Забытый ЗакрытьФайл() — файл остаётся заблокированным, следующая обработка падает с ошибкой доступа.
05
Чтение файла по локальному пути в серверном вызове — сервер не видит диск пользователя. Передавайте файл через хранилище или сетевой ресурс.

Когда XBase — правильный выбор, а когда нет

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

Если же формат обмена вы выбираете сами, DBF стоит оставить в прошлом. Современные варианты — XML, JSON, планы обмена, HTTP-сервисы — лишены ограничений на длину полей, поддерживают Unicode и вложенные структуры. Использовать DBF для нового обмена между двумя современными системами — сознательное создание технического долга.

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

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

Внешняя система принимает или отдаёт только DBFИспользуйте XBase, обязательно уточните кодировку и структуру полей у поставщика файла
Формат обмена выбираете выПредпочтите XML/JSON или планы обмена — DBF использовать не нужно
Нужно разово перенести данные из старой программыПрочитайте DBF через XBase в таблицу значений, сверьте итоги и загрузите в справочники 1С
Файл большой и поиск идёт по ключуСоздайте индекс и используйте Найти() вместо полного перебора записей

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

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

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

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

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

Совпадает с числом обработанных объектов 1С

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

Расхождение — ищите пропущенные записи или ошибки в цикле

Русские символы
Норма

Текст читается корректно при повторном открытии файла

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

Кракозябры — неверная кодировка, пересоздайте файл с другой

Числа и суммы
Норма

Значения совпадают с точностью до заданной разрядности

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

Округление или нули — проверьте длину и точность числового поля

Даты
Норма

Даты соответствуют источнику

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

Пустые даты — проверьте тип поля и приведение значений

Часто задаваемые вопросы

Чем XBase отличается от работы с DBF через ADO или ODBC?

XBase — штатный объект платформы, он не требует установки драйверов и работает одинаково на клиенте и сервере. ADO/ODBC даёт SQL-подобные запросы и гибче при сложных выборках, но зависит от установленных в системе провайдеров и обычно доступен только на Windows-клиенте.

Почему при чтении DBF русские буквы отображаются неправильно?

Причина почти всегда в кодировке: файл создан в DOS-кодировке (OEM, CP866), а читается как ANSI, или наоборот. Установите свойство Кодировка объекта XBase в нужное значение до открытия файла. Если неизвестно, какая кодировка у файла, попробуйте обе и сравните результат.

Можно ли с помощью XBase изменить структуру существующего DBF-файла?

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

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

Объект доступен на сервере и в толстом/тонком клиенте, включая работу сервера на Linux. В веб-клиенте прямой доступ к файловой системе ограничен, поэтому файл сначала помещают во временное хранилище и передают на сервер, где обработка выполняется обычным образом.

Как узнать структуру чужого DBF-файла перед загрузкой?

Откройте файл через XBase и переберите коллекцию ДБФ.Поля: у каждого поля доступны имя, тип, длина и точность. Эти сведения можно вывести в сообщение или таблицу значений и по ним построить соответствие полям объектов 1С.

Что делать, если DBF-файл не открывается с ошибкой?

Проверьте, что путь доступен именно тому процессу, который выполняет код (сервер не видит локальные диски клиента), что файл не занят другой программой и не имеет нулевой размер. Если файл повреждён, иногда помогает открытие и пересохранение в сторонних просмотрщиках DBF, но надёжнее запросить файл у источника повторно.

Итог

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

XBase — встроенный объект 1С для чтения и записи DBF-файлов без внешних драйверов. Ключевые правила: задавайте кодировку до открытия, проверяйте типы и длины полей, закрывайте файл после работы и сверяйте количество записей после обмена. Для новых интеграций, где формат не задан внешней системой, выбирайте XML, JSON или планы обмена.