Индексные файлы используются при работе с форматом 1с

Обновлено: 05.07.2024

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


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


DBF-ФАЙЛ :
1 Иванов
2 Абдулов
3 Барабанов
4 Мирнов
5 Раскольников
6 Комаров


Индекс по фамилии (по алфавиту) :
Абдулов 2
Барабанов 3
Иванов 1
Мирнов 4
Комаров 6
Раскольников 5


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


После создания структуры базы данных можно добавить индексы следующим образом:
Синтаксис: ДобавитьИндекс (< Название >, < Выражение >, < Уникальность >, < Убывание >, < Фильтр >)


Файл = СоздатьОбъект (“XBase”);
Файл . ДобавитьПоле (“NAME”, 1, 19, 3);
Файл . ДобавитьПоле (“PRICE”, 2, 25, 0);
Файл . ДобавитьИндекс (“IDXCODE”, “CODE”, 1, 0, “”);
Файл . ДобавитьИндекс (“IDXNAME”, “NAME”, 0, 0, “”);
Файл . ДобавитьИндекс (“IDXNAMECODE”, “NAME+CODE”, 0, 0, “”);
Файл . СоздатьФайл (“mydb.dbf”, “mydb.cdx”);


//1-й вариант
Файл . ТекущийИндекс (“IDXNAME”);
Файл . Найти (“Иванов”,0); //передается значение и режим поиска


//2-й вариант
Файл . ТекущийИндекс (“IDXNAMECODE”);
Файл . Ключ . NAME = “Иванов”;
Файл . Ключ . CODE = 123;
Файл . НайтиПоКлючу (0);


//после сбоя рекомендуется заново переформировать все индексы
Файл . Переиндексировать ();


В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.

Внимание!

При работе с файлами DBF следует помнить, что имя файла должно удовлетворять ограничению 8.3.

Внимание!

Объект xBase доступен как на стороне клиента, так и на стороне сервера. Следует продумывать клиент-серверное взаимодействие при решении каждой конкретной задачи.

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

Чтение данных из файла DBF производится за несколько последовательных этапов:

  1. Создание объекта XBase;
  2. Открытие файла;
  3. Последовательный перебор всех строк файла и считывание значений полей;
  4. Закрытие файла.

Рассмотрим этот процесс на примере:

Можно использовать несколько измененный алгоритм перебора строк файла:

Выгрузка в файл DBF

Этапы выгрузки в файл DBF:

  1. Создание объекта XBase;
  2. Указание кодировки (если не указать, то будет использоваться кодировка ANSI);
  3. Описание полей;
  4. Создание файла;
  5. Цикл с добавлением и заполнением строк;
  6. Закрытие файла.

Рассмотрим этот процесс на примере:

При указании кодировки используется тип КодировкаXBase , который может принимать два значения:

Добавление нового поля при описании структуры имеет синтаксис

Доступны следующие типы:

Работа с индексами

Совместно с файлом DBF может использоваться индексный файл, в котором может содержаться информация об одном или более индексе. Наличие индексов делает возможным использование поиска, а не только последовательного перебора всех строк файла.

При создании индексного файла следует задать:

  • Перечень индексов;
  • Путь сохранения индексного файла (на этапе 4 выгрузки).

Пример создания индексного файла:

Процедура добавления нового индекса имеет синтаксис:

Для использования индексов при чтении из файла DBF следует:

  • Указать путь к индексному файлу (на этапе 2 загрузки);
  • Задать текущий индекс.

Пример открытия файла DBF с использованием индексного файла:

Внимание!

При открытии файла DBF позиционирование происходит на первой записи в файле. Первая запись в файле не соответствует первой записи в индексе. В связи с этим при использовании индексов перед тем, как последовательно обходить строки, необходимо спозиционироваться на первой строке индекса. Это можно сделать методом Первая () , например:

Для поиска может использоваться одна из двух функций:

  • Найти (< Ключ >, < Режим >) ;
  • НайтиПоКлючу (< Режим >) .

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

Рассмотрим поиск в файле DBF на примерах:

Удаление записей в файле DBF

Удаление записи производится методом Удалить () :

Но при использовании этого метода запись не удаляется из файла безвозвратно, ей присваивается пометка удаления. При переборе строк помеченные на удаление записи пропускаются. Если необходимо обойти весь файл, включая помеченные на удаление записи, необходимо присвоить значение Истина свойству ОтображатьУдаленные объекта xBase. Узнать помечена запись на удаление или нет можно с помощью функции ЗаписьУдалена () . Для снятия пометки удаления используется метод Восстановить () .

Для непосредственного удаления помеченных записей используется метод Сжать () :

Если необходимо удалить все записи в файле непосредственно, то можно использовать метод ОчиститьФайл () :

Загрузка из DBF при помощи ADO

Для работы с файлами DBF может использоваться технология ADO. Драйверы ADO входят в состав операционной системы Windows и дополнительно их устанавливать не надо.

Рассмотрим пример кода для чтения из файла DBF по технологии ADO:

  • Provider – это используемый драйвер;
  • Data Source – путь, где находится файл DBF. Путь указывается с точностью до каталога. Имя файла используется в качестве имени таблицы в запросах;
  • Extended Properties – в случае обращения к файлам DBF является обязательным параметром. Можно указать формат файла

Внимание!

Остались вопросы?
Спросите в комментариях к статье.


&НаКлиенте
Процедура ЧтениеЗаписейФайлаВФорматеDBF ( ПутьКФайлуDBF )

ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF ,,Истина); // путь к базе, путь к индексу - необязателен, только чтение

Сообщить ( "Таблица DBF имеет кодировку: " + ТаблицаDBF . Кодировка );
Сообщить ( "В таблице " + ТаблицаDBF . КоличествоЗаписей () + " записей." );

ТаблицаDBF . Первая (); // перешли к первой записи
Пока Не ТаблицаDBF . ВКонце () Цикл //не последняя запись
Если Не ТаблицаDBF . ЗаписьУдалена () Тогда //нет пометки на удаление
Сообщить ( ТаблицаDBF . Kod + " " + ТаблицаDBF . Country + " " + Строка ( ТаблицаDBF . Population ) + " " + ТаблицаDBF . Continent );
КонецЕсли;
ТаблицаDBF . Следующая (); // переходим к следующей записи
КонецЦикла;
ТаблицаDBF . ЗакрытьФайл ();

&НаКлиенте
Процедура ПоискНужнойЗаписиВФайлеВФорматеDBF ( ПутьКФайлуDBF )

// Файлы dbf могут быть очень большими и содержать тысячи записей.
// В этом случае полный перебор всех записей,
// чтобы найти одну - плохая идея - поиск будет долгим.

ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF ,,); // путь к базе, путь к индексу, открываем на запись (Ложь)

// Но для того, чтобы искать по ключу - нужен индексный файл, включающий нужные нам поля. Если бы этот файл уже был у нас,
// то мы бы передали его при открытии файла вышле, но у нас его нет, а потому - займёмся его созданием.
// создадим индекс только по полю Population
ТаблицаDBF . Индексы . Добавить ( "INDEX_Population" , "Population" , ); // имя индекса, выражение индекса, уникальность создаваемого индекса (Истина)

КаталогDBFФайлов = "D:\World" ;
СоздатьКаталог ( КаталогDBFФайлов );

ПутьКФайлуИндекса = КаталогDBFФайлов + "\kldr.cdx" ; //имя файла не более 8 символов (включая расширение)

ТаблицаDBF . СоздатьИндексныйФайл ( ПутьКФайлуИндекса );

// Заново открываем таблицу, уже на чтение и с индексным файлом, который мы только что создали.
ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF , ПутьКФайлуИндекса ,Истина); // путь к базе, путь к индексу, только чтение

// Найдём среди записей ту, у которой поле Population равно 10.
// В таблице всего один индекс INDEX_Population.
ТаблицаDBF . ТекущийИндекс = ТаблицаDBF . Индексы . Получить ( 0 );
ТаблицаDBF . Ключ . Population = "10" ;

ЗаписьНайдена = ТаблицаDBF . НайтиПоКлючу ( " Запись найдена" );
Сообщить ( ТаблицаDBF . Kod + " " + ТаблицаDBF . Country + " " + Строка ( ТаблицаDBF . Population ) + " " + ТаблицаDBF . Continent );
Иначе
Сообщить ( "Запись не найдена" );
КонецЕсли;

Проверьте Ваши знания по теме “Механизмы интеграции и обмена данными в 1с” из тестирования 1с:Профессионал Платформа 8.3.

Список вопросов 1c :Профессионал Платформа 8.3 Глава 8

Навигация (только номера заданий)

0 из 54 заданий окончено

Информация

08. Механизмы интеграции и обмена данными

Вы уже проходили тест ранее. Вы не можете запустить его снова.

Вы должны войти или зарегистрироваться для того, чтобы начать тест.

Вы должны закончить следующие тесты, чтобы начать этот:

Результаты

Вы набрали 0 из 0 баллов ( 0 )

Рубрики

  • К простым типам
  • К сложным типам
  • Применить средства XML сериализации к данному типу значения нельзя
  • Любое количество индексных файлов
  • Количество индексных файлов, не превышающее количество полей в dbf файле
  • Не более трех индексных файлов
  • Не более одного индексного файла
  • В модуле приложения
  • В модуле внешнего соединения
  • В общем модуле
  • в OLE модуле
  • Только при использовании возможности распределения информационной базы данных
  • Только при использовании возможностей универсального обмена
  • Как средствами универсального обмена, так и распределением информационной базы
  • Данную топологию реализовать невозможно

При записи значения с использованием средств XML сериализации в XML документ:

  • Используются только методы, относящиеся к средствам XML сериалиации
  • Используются только возможности объекта "ЗаписьХМL"
  • Используются методы, относящиеся к средствам XML сериализации и объект "ЗаписьХМL"
  • Для записи преобразованного значения используется метод глобального контекста "ЗаписатьВФайл(ИмяФайла)"
  • В модуле приложения
  • В модуле внешнего соединения
  • В общем модуле
  • В СОМ модуле
  • Только при использовании возможности распределения информационной базы данных
  • Только при использовании возможностей универсального обмена
  • Как средствами универсального обмена, так и распределением информационной базы
  • Данную топологию реализовать невозможно
  • При отмеченном у данного плана обмена флаге "Распределенная база данных"
  • При не отмеченном у данного плана обмена флаге "Распределенная база данных"
  • Состояние данного флага на вызов этого обработчика события не влияет

При последовательном чтении из текстового файла невозможно:

  • Построчное чтение текста
  • Посимвольное чтение текста
  • Возможно как построчное, так и посимвольное чтение

В процедуре, которая будет вызываться при подключении к базе данных через СОМ, нельзя использовать:

  • ДокОбъект=Док.СоздатьДокумент()
  • Форма.Открыть()
  • Запрос=Новый Запрос
  • Нет правильного ответа

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

  • Только подчиненные базы (входящие в распределенную)
  • Главная (но она может и отсутствовать) и подчиненные базы
  • Полная структура определяется в корневой базе, у отдельно взятого экземпляра базы определены только те информационные базы, с которыми у нее идет непосредственный обмен

Для создания объекта, с использованием которого из одной базы 1С:Предприятие 8 будет производиться обращение через OLE к другой информационной базе 1С:Предприятие 8, используется конструктор:

Читайте также: