XBase (работа с DBF-файлами)

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

Запись DBF

Следующий фрагмент программы создает DBF-файл с двумя полями и выгружает в него справочник Номенклатура

ФайлВВР = Новый XBase;
 
ФайлВВР.Поля.Добавить("Name","S",100);
ФайлОВР.Поля.Добавить("Price","N",10,2);
ФайлВВР.Кодировка = КодировкаХВаве.ОЕМ;
ФайлВВР.СоздатьФайл("с:\obmen.dbf");
Товары = Справочники.Номенклатура.Выбрать();
Пока Товары.Следующий() Цикл
  ФайлВВР.Добавить();
  ФайлВВР.Name = Товары.Наименование;
	ФайлВВР.Price = Товары.Цена;
	ФайлВВР.Записать();
КонецЦикла;
ФайлВВР.ЗакрытьФайл();

можно в цикле указать ФайлВВР.Записать(); для записи изменений каждой записи файла, либо воспользоваться методом ФайлВВР.АвтоСохранение = Истина; при описание объекта XBase, тогда каждая запись автоматически будет сохраняться.

Чтение DBF

Чтение DBF-файла производится еще проще:

ФайлВВР = Новый XBase;
ФайлВВР.ОткрытьФайл("с:\obmen.dbf",.Истина);
ФайлВВР.Первая();
Пока НЕ ФайлВВР.ВКонце() Цикл
  НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
	НовыйТовар.Наименование = ФайлВВР.Name;
	НовыйТовар.Цена = ФайлВВР.Price;
	НовыйТовар.Записать() ;
	ФайлВВР.Следующая();
КонецЦикла,
ФайлВВР.ЗакрытьФайл();

Удаленные записи

Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом, размер файла остается прежним.

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

Индексы

Для упорядочивания содержимого DBF-файла и поиска в нем по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам.

Индексы хранятся в индексном файле, причем один индексный файл может содержать сразу несколько индексов. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы этого файла.

БД = Новый XBase; 
БД.Поля.Добавить("CODE", "S", 5); 
БД.Поля.Добавить("NAME", "S", 40); 
БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx"); 
БД.Индексы.Добавить("IDXCODE", "CODE"); 
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx");

Ограничения

Основное назначение объектов XBase – организация экспорта-импорта информации в/из внешних файлов формата DBF.

Объекты XBase не поддерживают поля типа memo.

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

ДБФ.СоздатьФайл("C:\obmen.dbf");
Если НЕ ДБФ.Открыта() Тогда
    Сообщить("Файл открыт в другой программе", СтатусСообщения.Важное);
    Возврат;
КонецЕсли;

XBase-объекты поддерживают индексные файлы в формате CDX. Однако, использование внешними программами (например, FoxBase) индексных файлов, созданных с помощью объектов XBase, так же, как и использование объектами индексных файлов, созданных внешними программами, не рекомендуется из-за возможной несовместимости версий.