Основная страница

 

Глава 38
Работа с базами данных формата
DBF


 

Основные понятия

Для облегчения понимания материала данного раздела читателем, не имеющим опыта работы с базами данных, ниже приводятся пояснения терминов, использованных при описании средства встроенного языка для работы с базами данных — агрегатного типа данных XBase.

Поля и записи

Если Вы не знакомы с концепцией базы данных, то ее можно себе представить в виде упорядоченного хранилища информации типа картотеки. Хорошим примером базы данных может служить телефонный справочник организации. Он содержит фамилии, номера телефонов и номера комнат всех сотрудников организации. Каждая строка справочника соответствует одной записи, а каждая колонка — полю. Каждое поле имеет наименование и характеристики информации для хранения которой оно предназначено: тип, длина, точность. Содержимое поля для конкретной записи называется значением поля. Отрывок телефонного справочника, приведенный ниже, иллюстрирует вышесказанное:

 

Поле

Поле

Поле

 

"Фамилия"

"№ комнаты"

"Телефон"

 

Иванов

25

513

Запись № 2 —>

Петров

31

274

 

Сидоров

25

513

 

Таблица, структура таблицы, файл базы данных

Весь справочник целиком в терминах баз данных называется таблицей. Состав входящих в таблицу полей определяет структуру таблицы, а состав входящих в таблицу записей — ее содержание. Каждая запись в таблице состоит из того же набора полей, что и таблица целиком, поэтому иногда употребляется термин структура записи. Это понятие адекватно структуре таблицы, хотя употребление первого термина представляется более корректным, т.к. таблица имеет структуру независимо от того, имеется ли в ней хотя бы одна запись.

Реализация баз данных формата DBF подразумевает, что каждая таблица хранится в отдельном файле. Поэтому в дальнейшем мы будем применять термин «файл базы данных» или «файл БД», имея в виду таблицу базы данных.

Индексы, выражения индекса и фильтра

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

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

Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе.

Назначение агрегатного типа данных XBase

Для работы с базами данных формата DBF в системе может использоваться специальный агрегатный тип данных — XBase. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из встроенного языка программы 1С:Предприятие. Каждый XBase-объект может быть связан с одним файлом базы данных.

Атрибуты объекта и поля базы данных

Объекты XBase имеют динамически изменяемый набор атрибутов, состав и тип которых зависит от структуры файла базы данных, с которым связан конкретный объект. Объект содержит в своих атрибутах информацию об одной текущей записи. Каждому полю файла базы данных соответствует один атрибут объекта. Наименование атрибута совпадает с именем поля.

Запись изменений в базу данных

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

Работа с индексными файлами

Следует иметь в виду, что одновременно XBase-объект может быть связан не более, чем с одним индексным файлом. Все изменения в базе данных, сделанные в сеансе работы с одним индексным файлом, никак не отражаются на остальных. Поэтому не рекомендуется иметь более одного индексного файла для БД. В противном случае, после каждого открытия БД с индексным файлом, отличным от открытого в предыдущем сеансе работы с базой, следует производить переиндексацию (обновление содержимого индексного файла).

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

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

Метод сжатия базы вызывает физическое уничтожение записей, помеченных как удаленные. Метод очистки базы вызывает физическое уничтожение всех записей. После применения этих методов восстановление удаленных записей становится невозможным.

Создание базы данных, индекса, индексного файла

Помимо работы с существующими базами данных, агрегатный тип XBase имеет набор методов, позволяющих создать новую базу данных произвольной структуры, новые индексы и новый индексный файл. Следует отметить, что, если использование методов, изменяющих структуру БД, возможно только для объектов, не связанных с базой данных (т. е. для вновь создаваемых БД), то создание новых индексов и индексного файла возможно как для создаваемых БД, так и для уже существующих и открытых.

Ограничения

Основное назначение объектов XBase — организация экспорта-импорта информации в/из внешних файлов формата DBF. Использование методов Xbase для доступа непосредственно к данным информационной базы системы 1С:Предприятие не рекомендуется.

Объекты XBase не поддерживают поля типа memo (см. ДобавитьПоле).

Поддерживаемые объектом XBase фукции, которые можно использовать в выражениях и фильтрах индексов перечислены в разделе «Выражение и фильтр индекса».

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

Контекст работы с XBase

Во всех программных модулях для работы с базами данных формата DBF следует использовать объекты типа XBase. Можно создать произвольное число объектов типа XBase при помощи функции СоздатьОбъект. Чтобы обратиться к атрибуту объекта или вызвать его метод, имя атрибута или метода (с указанием необходимых параметров) пишется через точку после имени объекта.

Русскоязычное написание ключевого слова XBase отсутствует.

Пример:

ДБФ = СоздатьОбъект("XBase");

ИмяФайла = "";

ИмяПути = "";

ФС.ВыбратьФайл(0, ИмяФайла, ИмяПути, , "*.*", , );

ПутьДБ = ИмяПути + ИмяФайла;

ДБФ.ОткрытьФайл(ПутьДБ);

Если ДБФ.Открыта() = 1 Тогда

   Предупреждение("База открыта", 2);

   ДБФ.Первая();

   ФИО = ДБФ.FIO;      // Подразумевается, что поле FIO имеется в открытой БД

   Предупреждение("Первым в " + ПутьДБ + " упомянут т." + ФИО, 5);

Иначе

   Предупреждение("НЕ смогли открыть Базу!", 2);

КонецЕсли;

Атрибуты объекта XBase

<Поле>

Предоставляет доступ к полю записи с именем «Поле». Имя поля должно совпадать с именем поля базы данных, с которой связан объект.

Синтаксис:

<Поле>

Описание:

Атрибут <Поле> предоставляет доступ к полю записи с именем «Поле». В тексте программного модуля под термином <Поле> понимается имя конкретного столбца файла базы данных, с которым связан объект.

Атрибут имеет смысл только если файл базы данных находится в открытом состоянии.

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

Пример:

ФИО = ДБФ.FIO;

Ключ

Предоставляет доступ к агрегатному типу данных типа «Ключ».

Синтаксис:

Ключ

Англоязычный синоним:

Key

Описание:

Агрегатный тип данных типа «Ключ» имеет только атрибуты. Состав атрибутов полностью повторяет атрибуты XBase-объекта за исключением того, что отсутствует атрибут «Ключ». Значения атрибутов используются XBase-объектом для вычисления выражения индекса при использовании метода НайтиПоКлючу.

Пример:

ДБФ.Ключ.FIO = ФИО;

ЗаписьНайдена = ДБФ.НайтиПоКлючу(0);

Методы объекта XBase

СоздатьФайл

Создать новый файл базы данных.

Синтаксис:

СоздатьФайл(<ПутьКБазе>, <ПутьКИндексу>)

Англоязычный синоним:

CreateFile

Параметры:

<ПутьКБазе>

Строковое выражение, содержащее путь к файлу базы данных формата DBF.

<ПутьКИндексу>

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

Описание:

Метод СоздатьФайл создает новый файл базы данных формата DBF. Если база с таким именем существует, то выдается ошибка.

Пример:

ДБФ = СоздатьОбъект("XBase");

// Определение полей и индексов новой БД

.....................

.....................

// Теперь физически создаем базу

ДБФ.СоздатьФайл("mydb.dbf", "mydb.cdx");

См. также: ДобавитьПоле, ДобавитьИндекс

ОткрытьФайл

Открыть существующую базу.

Синтаксис:

ОткрытьФайл(<ПутьКБазе>, <ПутьКИндексу>, <ТолькоЧтение>)

Англоязычный синоним:

OpenFile

Параметры:

<ПутьКБазе>

Строковое выражение, содержащее путь к файлу базы данных формата DBF.

<ПутьКИндексу>

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

<ТолькоЧтение>

Необязательный параметр. Число: 1 — файл открывается в режиме только чтение; 0 — файл открывается в режиме полного доступа (при этом файл открывается в эксклюзивном режиме). Значение по умолчанию — 0.

Описание:

Метод ОткрытьФайл открывает существующую базу данных формата DBF.

Пример:

// Подразумевается, что объект ДБФ уже создан и

// доступен в данном контексте

Процедура ОткрДБ()

   ИмяФайла = "";

   ИмяПути = "";

   ФС.ВыбратьФайл(0, ИмяФайла, ИмяПути, , "*.*", , );

   ПутьДБ = ИмяПути + ИмяФайла;

   ДБФ.ОткрытьФайл(ПутьДБ);

   Если ДБФ. Открыта() = 1 Тогда

      Предупреждение("База открыта", 2);

   Иначе

      Предупреждение("Не смогли открыть Базу!", 2);

   КонецЕсли;

КонецПроцедуры

Открыта

Прочитать значение флага открытия файла.

Синтаксис:

Открыта()

Англоязычный синоним:

IsOpen

Возвращаемое значение:

Число: 1 — база открыта; 0 — база не открыта.

Описание:

Метод Открыта возвращает значение флага открытия файла базы данных.

Пример:

См. предыдущий пример.

ЗакрытьФайл

Закрыть базу.

Синтаксис:

ЗакрытьФайл()

Англоязычный синоним:

CloseFile

Описание:

Метод ЗакрытьФайл закрывает ранее открытую или созданную базу данных формата DBF.

Пример:

Процедура ЗакрДБ()

   Если ДБФ.Открыта() = 1 Тогда

      ДБФ.ЗакрытьФайл();

   КонецЕсли;

КонецПроцедуры

ОчиститьФайл

Очистить все записи в базе.

Синтаксис:

ОчиститьФайл()

Англоязычный синоним:

Zap

Описание:

Метод ОчиститьФайл удаляет все записи в базе. При этом все существующие записи удаляются физически и не могут быть впоследствии восстановлены.

Пример:

Процедура ОчистДБ()

   Если Вопрос("Вы уверены, что надо очистить базу?", 1, 5) = 1 Тогда

      ДБФ.ОчиститьФайл();

   КонецЕсли;

КонецПроцедуры

См. также: Удалить, Восстановить

Сжать

Сжать базу, убрать удаленные записи.

Синтаксис:

Сжать()

Англоязычный синоним:

Pack

Описание:

Метод Сжать уменьшает размер файла базы данных, убирая записи, помеченные как удаленные.

Пример:

Процедура СжатьДБ()

   Если Вопрос("Уничтожить записи, помеченные как удаленные?", 1, 5) = 1 Тогда

      ДБФ.Сжать();

   КонецЕсли;

КонецПроцедуры

См. также: Удалить, Восстановить

Переиндексировать

Переиндексировать базу.

Синтаксис:

Переиндексировать()

Англоязычный синоним:

Reindex

Описание:

Метод Переиндексировать выполняет переиндексирование базы. Объекты XBase автоматически выполняют индексацию при изменениях базы данных, однако, при работе более чем с одним индексным файлом или после аварийных завершений может потребоваться принудительная переиндексация (для «своих» БД система 1С:Предприятие выполняет это автоматически).

Пример:

Процедура ПерИндДБ()

   Если ФлагАварийногоЗавершения = 1 Тогда

      ДБФ.Переиндексировать();

   КонецЕсли;

КонецПроцедуры

ПоказыватьУдаленные

Установить режим показа удаленных записей в базе.

Синтаксис:

ПоказыватьУдаленные(<Режим>)

Англоязычный синоним:

ShowDeleted

Параметры:

<Режим>

Необязательный параметр. Числовое выражение: 1 — установить режим показа удаленных записей в базе. 0 — снять режим.

Возвращаемое значение:

Текущее числовое значение режима показа удаленных записей в базе (на момент до исполнения метода).

Описание:

Метод ПоказыватьУдаленные позволяет определить и изменить режим показа удаленных записей в базе. В случае, если параметр не указан, изменения режима не происходит.

Пример:

Процедура ПоказатьНомераУдалЗап()

   РежПокУд = ДБФ.ПоказыватьУдаленные(1);

   ДБФ.Первая();

   Пока ДБФ.ВКонце() = 0 Цикл

      Если ДБФ.ЗаписьУдалена() = 1 Тогда

         Предупреждение("Номер удаленной записи — " +

                         Строка(ДБФ.НомерЗаписи()), 3);

      КонецЕсли;

      Если ДБФ.Следующая() = 0 Тогда

         Прервать;

      КонецЕсли;

   КонецЦикла;

   ДБФ.ПоказыватьУдаленные(РежПокУд);

КонецПроцедуры

См. также: Удалить, Восстановить

Первая

Перейти на первую запись.

Синтаксис:

Первая()

Англоязычный синоним:

First

Возвращаемое значение:

Число: 1 — если действие выполнено; 0 — если действие не выполнено.

Описание:

Метод Первая предназначен для перехода на первую запись. Если не установлен текущий индекс, объект позиционируется на первую запись в базе данных, если установлен — на запись, имеющую самое младшее значение выражения текущего индекса (если индекс создавался с установленным флагом «Убывание», то наоборот).

Пример:

// Обнуляет значения всех полей первой записи

Процедура ОчистПервуюЗап()

   ДБФ.Первая();

   ДБФ.Очистить();

   ДБФ.Записать();

КонецПроцедуры

Последняя

Перейти на последнюю запись.

Синтаксис:

Последняя()

Англоязычный синоним:

Last

Возвращаемое значение:

Число: 1 — если действие выполнено; 0 — если действие не выполнено.

Описание:

Метод Последняя предназначен для перехода на последнюю запись. Если не установлен текущий индекс, объект позиционируется на последнюю запись в базе данных, если установлен — на запись, имеющую самое старшее значение выражения текущего индекса (если индекс создавался с установленным флагом «Убывание», то наоборот).

Пример:

// Вычисляет сумму полей AMOUNT всех существующих записей,

// начиная с последней записи и двигаясь к первой

Функция ВычислитьСумму()

   ДБФ.Последняя();

   Сумма = 0;

   Пока ДБФ.Вначале() = 0 Цикл

      Сумма = Сумма + ДБФ.AMOUNT;

      ДБФ.Предыдущая();

   КонецЦикла;

   Возврат Сумма;

КонецФункции

Следующая

Перейти на следующую запись.

Синтаксис:

Следующая()

Англоязычный синоним:

Next

Возвращаемое значение:

Число: 1 — получена следующая запись; 0 — следующая запись не найдена.

Описание:

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

Пример:

// Обнуляет значения всех полей всех существующих записей

Процедура ОчистЗап() ДБФ.Первая();

   Пока 1 = 1 Цикл

      ДБФ.Очистить();

      ДБФ.Записать();

      Если ДБФ.Следующая() = 0 Тогда

         Возврат;

      КонецЕсли;

   КонецЦикла;

КонецПроцедуры

Предыдущая

Перейти на предыдущую запись.

Синтаксис:

Предыдущая()

Англоязычный синоним:

Prev

Возвращаемое значение:

Число: 1 — получена предыдущая запись; 0 — предыдущая запись не найдена.

Описание:

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

Пример:

См. пример метода Последняя

НомерЗаписи

Возвращает значение номера текущей записи.

Синтаксис:

НомерЗаписи()

Англоязычный синоним:

RecNo

Возвращаемое значение:

Числовое значение — номер текущей записи.

Описание:

Метод НомерЗаписи возвращает физический порядковый номер текущей записи в файле базы данных. Результат не зависит от установки текущего индекса.

Пример:

Процедура ПоказатьНомераУдалЗап()

   РежПокУд = ДБФ.ПоказыватьУдаленные(1);

   ДБФ.Первая();

   Пока ДБФ.Вконце() = 0 Цикл

      Если ДБФ.ЗаписьУдалена() = 1 Тогда

         Стр1 = "Номер удаленной записи — ";

         Стр2 = Строка(ДБФ.НомерЗаписи());

         Предупреждение(Стр1 + Стр2, 3);

      КонецЕсли;

      Если ДБФ.Следующая() = 0 Тогда

         Прервать;

      КонецЕсли;

   КонецЦикла;

   ДБФ.ПоказыватьУдаленные(РежПокУд);

КонецПроцедуры

См. также: Перейти

Перейти

Перейти на запись по ее номеру записи.

Синтаксис:

Перейти(<НомерЗаписи>)

Англоязычный синоним:

GoTo

Параметры:

<НомерЗаписи>

Числовое выражение — физический порядковый номер записи в базе данных.

Описание:

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

Пример:

Процедура ИнформацияОЗаписи(НЗап)

   ДБФ.Перейти(НЗап);

   Стр3ап = "н." + ДБФ.НомерЗаписи();

   Стр3ап = Стр3ап + " Уд. " + ДБФ.ЗаписьУдалена();

   Стр3ап = СтрЗап + " Содержит -";

   Для КП = 1 По ДБФ.КоличествоПолей() Цикл

      СтрЗап = СтрЗап + Строка(ДБФ.ПолучитьЗначениеПоля(КП)) + "; ";

   КонецЦикла;

   Предупреждение(СтрЗап, 10);

КонецПроцедуры

См. также: НомерЗаписи

ВКонце

Прочитать значение флага конца файла базы банных.

Синтаксис:

ВКонце()

Англоязычный синоним:

EOF

Возвращаемое значение:

Число: 1 — указатель в файле находится за последней записью; 0 — конец файла не достигнут.

Описание:

Метод ВКонце возвращает значение флага конца файла.

Пример:

Функция МаксимальнаяПокупка()

   ДБФ.Первая();

   Уплачено = 0;

   Пока ДБФ.Вконце() = 0 Цикл

      Если ДБФ.AMOUNT > Уплачено Тогда

         Уплачено = ДБФ.AMOUNT;

      КонецЕсли;

      ДБФ.Следующая();

   КонецЦикла;

   Возврат Уплачено;

КонецПроцедуры

ВНачале

Прочитать значение флага начала файла.

Синтаксис:

ВНачале()

Англоязычный синоним:

BOF

Возвращаемое значение:

Число: 1 — указатель в файле находится перед первой записью; 0 — начало файла не достигнуто.

Описание:

Метод ВНачале возвращает значение флага начала файла.

Пример:

Функция СреднСтоимПокупки()

   ДБФ.Последняя();

   Уплачено = 0;

   Записей = 0;

   Пока ДБФ.ВКонце() = 0 Цикл

      Уплачено = Уплачено + ДБФ.AMOUNT;

      Записей = Записей + 1;

      ДБФ.Следующая();

   КонецЦикла;

   Если Записей > 0 Тогда

      Уплачено = Уплачено / Записей;

   КонецЕсли;

   Возврат Уплачено;

КонецПроцедуры

ТекущийИндекс

Установить/определить текущий индекс.

Синтаксис:

ТекущийИндекс(<НазваниеИндекса>)

Англоязычный синоним:

CurrentIndex

Параметры:

<НазваниеИндекса>

Необязательный параметр. Строковое выражение с названием индекса. Если параметр опущен, изменения текущего индекса не происходит.

Возвращаемое значение:

Строковое значение с названием текущего индекса (на момент до выполнения метода).

Описание:

Метод ТекущийИндекс устанавливает/определяет текущий индекс работы с базой. Установка текущего индекса работы с базой оказывает влияние на работу методов Найти, НайтиПоКлючу, Первая, Последняя, Следующая, Предыдущая.

Пример:

Процедура НайтиМладшийПоИндексу(Инд)

   ИмяТекИнд = ДБФ.ТекущийИндекс(Инд);

   ДБФ.Первая();

   ДБФ.ТекущийИндекс(ИмяТекИнд);

КонецПроцедуры

Найти

Найти запись по индексу.

Синтаксис:

Найти(<Ключ>, <Режим>)

Англоязычный синоним:

Find

Параметры:

<Ключ>

Строковое выражение со значением выражения текущего индекса.

<Режим>

Числовое выражение. Режим поиска записей:

0 — ищет запись на точное соответствие ключу (=);

1 — ищет запись на точное соответствие с ключом или большую (>=);

2 — ищет запись с большим ключом (>);

-1 (минус единица) — ищет запись на точное соответствие с ключом или меньшую(<=);

-2 (минус два) — ищет запись с меньшим ключом (<).

Возвращаемое значение:

Число: 1 — если действие выполнено (запись найдена); 0 — если действие не выполнено.

Описание:

Метод Найти позволяет найти запись, соответствующую данному значению <Ключ> ключа по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись.

Следует отметить, что вычисление значения индекса при работе XBase-объекта с базой данных производится объектом самостоятельно на основании выражения, переданного ему при создании ключа (см. описание метода ДобавитьИндекс). При вызове данного метода значение <Ключ> должно быть вычислено средствами встроенного языка, что может представлять определенные трудности, если индекс составной, поля, включенные в выражение индекса, отличны от строковых, и т. д. Поэтому применимость данного метода ограничена случаем использования простых строковых выражений индекса. В более сложных случаях следует применять универсальный метод НайтиПоКлючу.

Пример:

ЗаписьНайдена = ДБФ.Найти("Иванов", 0);

НайтиПоКлючу

Найти запись по индексу.

Синтаксис:

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

Англоязычный синоним:

FindByKey

Параметры:

<Режим>

Числовое выражение. Режим поиска записей:

0 — ищет запись на точное соответствие ключу (=);

1 — ищет запись на точное соответствие с ключом или большую (>=);

2 — ищет запись с большим ключом (>);

-1 (минус единица) — ищет запись на точное соответствие с ключом или меньшую(<=);

-2 (минус два) — ищет запись с меньшим ключом (<).

Возвращаемое значение:

Число: 1 — если действие выполнено (запись найдена); 0 — если действие не выполнено.

Описание:

Метод НайтиПоКлючу позволяет найти запись, соответствующую значениям атрибутов агрегатного объекта типа «Ключ» XBase-объекта по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись. Перед вызовом метода следует установить значения всех атрибутов агрегатного объекта типа «Ключ», которые участвуют в вычислении выражения текущего индекса (см. описание метода ДобавитьИндекс).

Пример:

ДБФ.Ключ.Name = "Иванов";

ДБФ.Ключ.DIV_ID = 15; // отдел новых разработок

ЗаписьНайдена = ДБФ.НайтиПоКлючу(0);  // поиск по составному, неоднородному ключу

ПолучитьЗначениеПоля

Получить значение поля записи.

Синтаксис:

ПолучитьЗначениеПоля(<НазваниеПоля>)

Англоязычный синоним:

GetFieldValue

Параметры:

<НазваниеПоля>

Строковое выражение с названием поля или числовое выражение с номером поля.

Возвращаемое значение:

Значение поля записи, тип зависит от типа поля.

Описание:

Метод ПолучитьЗначениеПоля позволяет определить значение поля текущей записи. Метод позволяет работать с базами данных неизвестной заранее структуры.

Пример:

Процедура ПерНаЗап(НЗап)

   ДБФ.Перейти(НЗап);

   Стр3ап = "" + ДБФ.НомерЗаписи() + "; " + ДБФ.ЗаписьУдалена() + "; ";

   Для КП = 1 По ДБФ.КоличествоПолей() Цикл

      СтрЗап = СтрЗап + Строка(ДБФ.ПолучитьЗначениеПоля(КП)) + "; ";

   КонецЦикла;

КонецПроцедуры

УстановитьЗначениеПоля

Установить значение поля.

Синтаксис:

УстановитьЗначениеПоля(<НазваниеПоля>, <Значение>)

Англоязычный синоним:

SetFieldValue

Параметры:

<НазваниеПоля>

Строковое выражение с названием поля или числовое выражение с номером поля.

<Значение>

Значение поля.

Описание:

Метод УстановитьЗначениеПоля позволяет установить новое значение атрибута объекта, соответствующего полю текущей записи. Для записи изменений в базу данных необходимо инициировать запись (см. «Назначение агрегатного типа данных Xbase»). Метод позволяет работать с базами данных неизвестной заранее структуры.

Пример:

ДБФ.УстановитьЗначениеПоля(НаименованиеПоля, 1234);

Добавить

Добавить новую пустую запись.

Синтаксис:

Добавить()

Англоязычный синоним:

Add

Описание:

Метод Добавить добавляет новую пустую запись. Атрибуты объекта обнуляются (см. метод Очистить). Для записи изменений в базу данных необходимо инициировать запись (см. «Назначение агрегатного типа данных Xbase»).

Пример:

Процедура ДобЗап(Поле!, Поле2)

   ДБФ.Добавить();

   // Определяем поля новой записи

   ДБФ.FIELD1 = Поле1;

   ДБФ.FIELD2 = Поле2;

   ДБФ.Записать();

КонецПроцедуры

Скопировать

Скопировать текущую запись.

Синтаксис:

Скопировать()

Англоязычный синоним:

Copy

Описание:

Метод Скопировать добавляет новую запись, копирующую текущую запись. Для записи изменений в базу данных необходимо инициировать запись (см. «Назначение агрегатного типа данных Xbase»).

Пример:

Процедура КопирЗап()

   ДБФ.Скопировать();

   ДБФ.Записать();

КонецПроцедуры

Автосохранение

Установить режим автоматического сохранения изменений в базе.

Синтаксис:

Автосохранение(<Режим>)

Англоязычный синоним:

AutoSave

Параметры:

<Режим>

Необязательный параметр. Числовое выражение: 1 — установить режим автоматического сохранения изменений в базе. 0 — снять режим.

Возвращаемое значение:

Текущее числовое значение режима автоматического сохранения изменений в базе (на момент до исполнения метода).

Описание:

Метод Автосохранение позволяет изменить режим автоматического сохранения изменений в базе.

При установленном режиме автосохранения любые изменения позиционирования объекта приводит к автоматической записи изменений атрибутов (если они происходили с текущей записью) в базу данных. Таким образом, применение метода Записать не имеет смысла при установленном режиме автосохранения. Чтобы отказаться от записи изменений в базу данных следует вызвать метод Отменить — при этом восстанавливаются значения атрибутов объекта до изменений и запись не происходит при изменении позиционирования.

При сброшенном режиме автосохранения записи при изменении позиционирования не происходит — для этого нужно вызвать метод Записать, причем до выполнения позиционирования. В этом режиме не имеет смысла метод Отменить, т. к. достаточно просто не выполнять записи.

Пример:

ДБФ.Автосохранение(1);

ДБФ.Новая();

ДБФ.РЮ = "Иванов";

ДБФ.PHONE = 215;

ДБФ.Новая();   // Произошла запись

ДБФ.FIO = "Петров";

ДБФ.PHONE = 215;

ДБФ.Отменить();

ДБФ.Новая(); // Записи не произошло

ДБФ.Автосохранение(0);

ДБФ.FIO = "Петров";

ДБФ.PHONE = 314;

ДБФ.Записать(); // Произошла запись

ДБФ.Новая();

ДБФ.FIO = "Сидоров";

ДБФ.PHONE = 215;

ДБФ.Новая(); // Записи не произошло

Записать

Записать изменения в базу.

Синтаксис:

Записать()

Англоязычный синоним:

Save

Описание:

Метод Записать выполняет запись изменений в базу данных. До его вызова все изменения объекта производились только в памяти и будут потеряны при осуществлении перехода к другой записи или закрытии базы данных, если отключен режим автосохранения (см. Автосохранение).

Пример:

См. пример метода Автосохранение

Отменить

Отменить запись изменения в базу.

Синтаксис:

Отменить()

Англоязычный синоним:

Cancel

Описание:

Метод Отменить отменяет запись изменения в базу (см. Автосохранение).

Пример:

см. пример метода Автосохранение

Удалить

Удалить текущую запись.

Синтаксис:

Удалить()

Англоязычный синоним:

Del

Описание:

Метод Удалить ставит пометку «удалена» на текущую запись. Физически запись из базы данных не удаляется и может быть впоследствии восстановлена. Полное удаление записей из БД с освобождением дискового пространства, занятого ими, производится вызовом методов Сжать и ОчиститьФайл.

Пример:

Процедура УдалЗап()

   ДБФ.Первая();

   Пока 1 = 1 Цикл

      ДБФ.Удалить();

      ДБФ.Записать();

      Если ДБФ.Следующая() = 0 Тогда

         Возврат;

      КонецЕсли;

   КонецЦикла;

КонецПроцедуры

ЗаписьУдалена

Возвращает значение флага удаления текущей записи.

Синтаксис:

ЗаписьУдалена()

Англоязычный синоним:

RecDeleted

Возвращаемое значение:

Число: 1 — запись удалена; 0 — запись не удалена.

Описание:

Метод ЗаписьУдалена возвращает значение флага удаления текущей записи.

Пример:

Процедура Восст3ап()

   ТекРежим = ДБФ.ПоказыватьУдаленные(1);

   ДБФ.Первая(};

   Пока 1 = 1 Цикл

      Если ДБФ.ЗаписьУдалена() = 1 Тогда

         ДБФ.Восстановить();

         ДБФ.Записать();

      КонецЕсли;

      Если ДБФ.Следующая() = 0 Тогда

         ДБФ.ПоказыватьУдаленные(ТекРежим);

         Возврат;

      КонецЕсли;

   КонецЦикла;

КонецПроцедуры

Восстановить

Восстановить текущую запись.

Синтаксис:

Восстановить()

Англоязычный синоним:

Recall

Описание:

Метод Восстановить восстанавливает текущую запись.

Пример:

См. пример метода Удалить

Очистить

Очистить текущую запись. Обнуляет все атрибуты объекта.

Синтаксис:

Очистить()

Англоязычный синоним:

Clear

Описание:

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

Пример:

Процедура ОчистЗап()

   ДБФ.Первая();

   Пока 1=1 Цикл

      ДБФ.Очистить();

      ДБФ.Записать();

      Если ДБФ.Следующая() = 0 Тогда

         Возврат;

      КонецЕсли;

   КонецЦикла;

КонецПроцедуры

КоличествоЗаписей

Возвращает количество записей в базе.

Синтаксис:

КоличествоЗаписей()

Англоязычный синоним:

RecCount

Возвращаемое значение:

Числовое значение — количество записей в базе.

Описание:

Метод КоличествоЗаписей возвращает количество записей в базе вместе с записями, помеченными, как удаленные.

Пример:

Предупреждение("Записей — " + Строка(ДБФ.КоличествоЗаписей()));

КоличествоПолей

Возвращает количество полей базы.

Синтаксис:

КоличествоПолей()

Англоязычный синоним:

FieldCount

Возвращаемое значение:

Числовое значение — количество полей базы.

Описание:

Метод КоличествоПолей возвращает количество полей базы. Может быть использован при работе с базой данных неизвестной заранее структуры.

Пример:

Процедура ОписПол()

   Перем Назв;

   Перем Тип;

   Перем Длин;

   Перем Точн;

   СпЗнач = СоздатьОбъект("СписокЗначений");

   СпЗнач.УдалитьВсе();

   Для КП = 1 По ДБФ.КоличествоПолей() Цикл

      ДБФ.ОписаниеПоля(КП, Назв, Тип, Длин, Точн);

      СпЗнач.ДобавитьЗначение("" + КП + "; " + Назв + "; " + Тип + "; " + Длин +

                              "; "+Точн);

   КонецЦикла;

КонецПроцедуры

КоличествоИндексов

Возвращает количество индексов в открытом индексном файле.

Синтаксис:

КоличествоИндексов()

Англоязычный синоним:

IndexCount

Возвращаемое значение:

Числовое значение — количество индексов в открытом индексном файле.

Описание:

Метод КоличествоИндексов возвращает количество индексов в открытом индексном файле. Может быть использован при работе с базой данных неизвестной заранее структуры.

Пример:

Процедура ОписИнд()

   Перем Назв;

   Перем Выр;

   Перем Уник;

   Перем Убыв;

   Перем Филт;

   СпЗнач = СоздатьОбъект("СписокЗначений");

   СпЗнач.УдалитьВсе();

   Для КП = 1 По ДБФ.КоличествоИндексов() Цикл

      ДБФ.ОписаниеИндекса(КП.Назв, Выр, Уник, Убыв, Филт);

      СпЗнач.ДобавитьЗначение("" + КП + "; " + Назв + "; " + Выр + "; " + Уник +

                              "; " + Убыв + "; " + Филт);

   КонецЦикла;

КонецПроцедуры

ОписаниеПоля

Возвращает описание поля.

Синтаксис:

ОписаниеПоля(<НомерПоля>, <НазваниеПоля>, <Тип>, <Длина>, <Точность>)

Англоязычный синоним:

GetFieldInfo

Параметры:

<НомерПоля>

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

<НазваниеПоля>

Идентификатор переменной, в которую данный метод вернет строковое значение названия поля.

<Тип>

Идентификатор переменной, в которую данный метод вернет числовое значение типа поля. Допустимые значения см. в описании метода ДобавитьПоле.

<Длина>

Идентификатор переменной, в которую данный метод вернет числовое значение — общую длину поля.

<Точность>

Идентификатор переменной, в которую данный метод вернет числовое значение — длину поля после десятичной точки (только для числовых полей).

Описание:

Метод ОписаниеПоля возвращает в параметрах <НазваниеПоля>, <Тип>, <Длина>, <Точность> описание поля с номером <НомерПоля>.

Пример:

См. пример метода КоличествоПолей

ОписаниеИндекса

Возвращает описание индекса.

Синтаксис:

ОписаниеИндекса(<НомерИндекса>, <НазваниеИндекса>, <Выражение>, <Уникальность>,

                <Убывание>, <Фильтр>)

Англоязычный синоним:

Getlndexinfo

Параметры:

<НомерИндекса>

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

<НазваниеИндекса>

Идентификатор переменной, в которую данный метод вернет строковое значение названия индекса.

<Выражение>

Идентификатор переменной, в которую данный метод вернет строковое значение — выражение индекса.

<Уникальность>

Идентификатор переменной, в которую данный метод вернет числовое значение — флаг уникальности индекса. 1 — уникальный. 0 — не уникальный.

<Убывание>

Идентификатор переменной, в которую данный метод вернет числовое значение — флаг направления убывания индекса. 1 — индекс по убыванию значения ключа. 0 — по возрастанию значения ключа.

<Фильтр>

Идентификатор переменной, в которую данный метод вернет строковое значение — фильтр индекса.

Описание:

Метод ОписаниеИндекса возвращает в параметрах <НазваниеИндекса>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр> описание индекса с номером <НомерИндекса>. Выражение индекса и фильтр индекса описаны в разделе «Выражение и фильтр индекса».

Пример:

См. пример метода КоличествоИндексов

НомерПоля

Определить номер поля по названию.

Синтаксис:

НомерПоля(<НазваниеПоля>)

Англоязычный синоним:

FieldNo

Параметры:

<HaзвaниeПoля>

Строковое выражение с названием поля.

Возвращаемое значение:

Числовое значение номера поля.

Описание:

Метод НомерПоля предназначен для определения номера поля по его на-^анию.

Пример:

НомП = ДБФ.НомерПоля("CODE");

ДобавитьПоле

Добавить поле в структуру базы.

Синтаксис:

ДобавитьПоле(<Название>, <Тип>, <Длина>, <Точность>)

Англоязычный синоним:

AddField

Параметры:

<Название>

Строковое выражение — имя создаваемого поля.

<Тип>

Строковое или числовое выражение — тип создаваемого поля. Допустимые значения:

1 или"N" — число;

2 или "S" — строка;

3 или "D" — дата;

4 или "L" — логическое;

5 или "F" — то же, что и 1, т. е. число;

6 или "М" — memo (не поддерживается).

<Длина>

Числовое выражение — общая длина создаваемого поля.

<Точность>

Числовое выражение — длина создаваемого поля после десятичной точки (только для числовых полей).

Описание:

Метод ДобавитьПоле добавляет поле в описание структуры базы. Данный метод можно использовать только перед созданием новой базы.

Пример:

ДБФ = СоздатьОбъект("XBase");

ДБФ.ДобавитьПоле("CODE", 1, 19, 3);

ДБФ.ДобавитьПоле("NAME", 2, 25, 0);

ДБФ.СоздатьФайл("mydb.dbf");

См. также: СоздатьФайл, ДобавитьИндекс

ДобавитьИндекс

Добавить индекс в структуру базы.

Синтаксис:

ДобавитьИндекс(<Название>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр>)

Англоязычный синоним:

AddIndex

Параметры:

<Название>

Строковое выражение — имя создаваемого индекса.

<Выражение>

Строковое выражение — выражение индекса.

<Уникальность>

Числовое выражение — флаг уникальности индекса. 1 — уникальный. 0 — не уникальный.

<Убывание>

Числовое выражение — флаг направления убывания индекса: 1 — индекс по убыванию значения ключа. 0 — по возрастанию значения ключа.

<Фильтр>

Строковое выражение — фильтр индекса.

Описание:

Метод ДобавитьИндекс добавляет индекс в описание структуры базы. Выражение индекса и фильтр индекса описаны в разделе «Выражение и фильтр индекса».

Пример:

ДБФ = СоздатьОбъект("XBase");

ДБФ.ДобавитьПоле("CODE", 1, 19, 3);

ДБФ.ДобавитьПоле("NAME", 2, 25, 0);

ДБФ.ДобавитьИндекс("IDXCODE", "CODE", 1, 0, "");

ДБФ.ДобавитьИндекс("IDXNAME", "NAME", 0, 0, "");

ДБФ.СоздатьФайл("mydb.dbf", "mydb.cdx");

См. также: СоздатьФайл, ДобавитьПоле

СоздатьИндексныйФайл

Создать индексный файл.

Синтаксис:

СоздатьИндексныйФайл(<ИмяФайла>)

Англоязычный синоним:

CreateIndex

Параметры:

<ИмяФайла>

Строковое выражение — имя индексного файла.

Описание:

Метод СоздатьИндексныйФайл создает индексный файл. Создаваемый индексный файл будет содержать все индексы, которые были созданы на текущий момент методом ДобавитьИндекс.

Пример:

ДБФ.ДобавитьИндексСЧОХСОПЕ" , "CODE" , 1, 0, "" );

ДБФ.ДобавитьИндекс("IDXROOM", "ROOM+FIO", 0, 0, "");

ДБФ.СоздатьИндексныйФайл("IDXCNEW.CDX");

См. также: СоздатьФайл, ДобавитьИндекс, ОткрытьФайл

КодоваяСтраница

Установить режим кодировки.

Синтаксис:

КодоваяСтраница(<Режим>)

Англоязычный синоним:

SetCodePage

Параметры:

<Режим>

Необязательный параметр. Числовое выражение: 0 — Windows-кодировка; 1 — DOS-кодировка. Если параметр не задан, то режим кодировки не меняется (используется для определения текущего режима кодировки без его смены).

Возвращаемое значение:

Текущее числовое значение режима кодировки (на момент до исполнения метода).

Описание:

Метод КодоваяСтраница позволяет установить режим кодировки для чтения и записи значений строковых полей в файл базы данных.

Замечание. После открытия, XBase-объект всегда находится в режиме DOS-кодировки.

Пример:

ДБФ.КодоваяСтраница(1);

КодОшибки

Возвращает код последней ошибки.

Синтаксис:

КодОшибки()

Англоязычный синоним:

ErrorCode

Возвращаемое значение:

Числовое значение — код последней ошибки.

Описание:

Метод КодОшибки возвращает код завершения последней выполненной операции.

Пример:

КО = ДБФ.КодОшибки();

Возвращаемые коды ошибок:

Код ошибки

Причина ошибки

-10

Ошибка закрытия файла

-20

Ошибка создания файла

-30

Ошибка определения длины файла

-40

Ошибка установки длины файла

-50

Ошибка при попытке заблокировать файл

-60

Ошибка при открытии файла

-70

Ошибка чтения файла

-80

Ошибка удаления файла

-90

Ошибка переименования файла

-100

Ошибка позиционирования в файле

-110

Ошибка снятия блокировки с файла

-120

Ошибка записи в файл

-200

Файл не является базой данных DBF-формата

-210

Неопознанное имя поля

-220

Неопознанный тип поля

-230

Запись слишком длинная

-300

Индексный файл не содержит информации о записи

-310

Нарушение структуры индексного файла

-330

Указанное имя индекса недоступно

-340

Ошибка уникальности индекса

-400

Ожидается запятая или скобка

-410

Выражение не завершено

-422

IIF() требует параметров одинаковой длины

-425

У STR() и SUBSTR.O 2-й и 3-й параметры — константы

-430

Неверное число параметров

-440

Слишком сложное выражение

-450

Пропущена правая скобка

-460

Неверный тип подвыражения

-470

Неопознанная функция

-480

Неопознанный оператор

-490

Неопознанное значение

-500

Выражение не завершено символом двойной кавычки

-920

Недостаточно памяти

Выражение и фильтр индекса

При работе с индексами во время исполнения 1С:Предприятия XBase-объекты производят вычисление выражения индекса и фильтра. Выражение индекса и фильтра — это строковые выражения, составленные на специальном языке объектов XBase.

Выражение индекса используется для вычисления значения ключа для каждой записи базы данных. Результатом вычисления выражение должно быть значение одного из следующих типов: числовое, строковое, дата или булево. Выражение фильтра должно возвращать результат типа булево. Если значение выражения фильтра для конкретной записи базы данных равно истине, информация об этой записи будет включена в индексный файл, в противном случае индексный файл не будет содержать информацию об этой записи и позиционирование на эту запись XBase-объекта с данным текущим индексом производиться не будет.

Атрибуты (кроме "Ключ"), константы и функции могут быть использованы как части выражений. Части выражения могут объединяться с помощью других функций или операторов. Простейшим выражением может быть имя атрибута: "FULL_NAME". В таком случае тип выражения будет соответствовать типу атрибута.

Константы могут иметь числовой, строковый и булевый тип. Строковые константы заключаются в одиночные кавычки ('Строковая константа'). При необходимости включить в состав строковой константы символа двойной кавычки, его следует предварять обратной косой чертой, например, 'Фирма \"Вега\" '. Булевы константы записываются как .TRUE. или .Т. для обозначения истины и .FALSE. или .F. в противном случае.

Операторы используются для объединения частей выражения. Части выражения должны иметь тип, соответствующий оператору, например, оператор "/" (деление) работает с двумя числовыми значениями.

Порядок выполнения операторов в выражении соответствует общепринятому — с учетом скобок и приоритетов операторов. Например выражение "1+2*3" возвратит 7, а "(1+2)*3" возвратит 9.

Числовые операторы:

Имя оператора

Обозначение

Приоритет

Сложение

+

5

Вычитание

-

5

Умножение

*

6

Деление

/

6

В степень

** или ^

7

Строковые операторы:

Имя оператора

Обозначение

Приоритет

Объединение 1

+

5

Объединение 2

-

5

Оператор "Объединение 2" немного отличается тем, что пробелы в конце первой строки будут перемещены в конец результата. Например, результатом вычисления выражения " 'Иванов ' + 'И. И.' " будет "Иванов И. И.', а " 'Иванов ' - 'И. И.' " — 'ИвановИ.И.  '.

Операторы отношений:

Имя оператора

Обозначение

Приоритет

Равно

=

4

Не равно

<> или #

4

Меньше

<

4

Больше

>

4

Меньше или равно

<=

4

Больше или равно

>=

4

Содержит

$

4

Пример:

" 'CD' $ 'ABCD' " вернет ".Т."

" 8 < 7 " вернет ".F."

Логические операторы:

Имя оператора

Обозначение

Приоритет

Отрицание

.NOT.

3

И

.AND.

2

ИЛИ

.OR.

1

Функции, применяемые в выражениях

Функция

Параметр(ы)

Возвращаемое значение

DATE()

 

Тип даты. Системная дата.

DAY(Date)

Тип даты.

Число. Номер дня в месяце.

DTOC(Date)

Тип даты.

Строка. Представление даты в формате ММ/ДД/ГГ

DTOS(Date)

Тип даты.

Строка. Представление даты в формате ГГГГММДД

IIF(Log, IfTrue, IfFalse)

Log — выражение булева типа.

IfTrue, IfFalse — тип определяется во время исполнения. Должны иметь одинаковую длину и тип.

Тип совпадает с типом IfTrue и IfFalse.

Возвращает IfTrue, если значение вычисленного выражения Log равно истине, и IfFalse в противном случае.

LTRIM(String)

String — строка.

Строка. Исходная строка без ведущих пробелов.

Month(Date)

Date — дата.

Число. Номер месяца в году.

STOD(String)

String — строка. Представление даты в формате ГГГГММДД

Тип даты. Преобразованное в дату значение исходной строки.

STR(Number, Length, Decim)

Number — число. Преобразуемое число.

Length — число. Количество символов в возвращаемой строке, включая дес. точку.

Decim — число. Желаемое кол-во знаков после точки.

Строка. Результат преобразования числа в строковое представление.

SUBSTR(String, StartPos, Num)

String — строка. Исходная строка.

StartPos — число. Начальная позиция.

Num — число. Кол-во символов.

Строка. Подстрока, состоящая из Num символов от начальной позиции исходной строки.

TIME()

 

Строка. Системное время в представлении ЧЧ:ММ:СС

TRIM(String)

String — строка.

Строка. Исходная строка без заключительных пробелов.

UPPER(String)

String — строка.

Строка. Преобразование к верхнему регистру

VAL(String)

String — строка.

Число. Преобразование строки в число

YEAR(Date)

Date — дата.

Число. Год.







Перейти  к оглавлению: Описание встроенного языка