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, так же, как и использование объектами индексных файлов, созданных внешними программами, не рекомендуется из-за возможной несовместимости версий.
