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