DBF-файлы (XBase)

Опубликовано Опубликовано в рубрике 1C Программирование, Разное

Сразу оговорюсь статья не моя, вот честная ссылка на автора:

Автор статьи: Волшебник | Редакторы: kiruha
Последняя редакция №3 от 01.12.06 | История
URL: http://kb.mista.ru/article.php?id=190

Чтение файла DBF

Запись в файл DBF

Работа со структурой файла DBF
Например, создадим файл, идентичный по структуре исходному.

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

Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа «строковый» приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».
Работа с индексами

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

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

Основное правило: индекс нужен, чтобы быстро искать нужную запись.
DBF-ФАЙЛ

Индексный файл

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

После сбоя рекомендуется заново переформировать все индексы

В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык. Отбор по значению поля. Часто возникают вопросы по фильтрации файла БД по значению определенного поля. Предположим, что в предыдущем примере сотрудники работают в разных подразделениях «Офис» и «Филиал», и нужно вывести всех сотрудников работающих в офисе. Нетрудно увидеть, что в языке нет явных способов получить записи по фильтру, но имея индекс тем не менее, данную операцию можно эффективно (без перебора всех записей) осуществить.

1. Создадим файл индекса, если он ранее не был создан

2. Откроем Файл базы с индексом

3.Прейдем на первую запись

4. И так как все записи упорядочены по индексу — достаточно пройтись
по записям, пока не встретится запись с другим значением поля «Otdel» :

Более подробно см. типовую — работа с адресным классификатором