Для облегчения понимания материала данного раздела читателем, не имеющим опыта работы с базами данных, ниже приводятся пояснения терминов, использованных при описании средства встроенного языка для работы с базами данных — агрегатного типа данных XBase.
Если Вы не знакомы с концепцией базы данных, то ее можно себе представить в виде упорядоченного хранилища информации типа картотеки. Хорошим примером базы данных может служить телефонный справочник организации. Он содержит фамилии, номера телефонов и номера комнат всех сотрудников организации. Каждая строка справочника соответствует одной записи, а каждая колонка — полю. Каждое поле имеет наименование и характеристики информации для хранения которой оно предназначено: тип, длина, точность. Содержимое поля для конкретной записи называется значением поля. Отрывок телефонного справочника, приведенный ниже, иллюстрирует вышесказанное:
Поле |
Поле |
Поле |
|
"Фамилия" |
"№ комнаты" |
"Телефон" |
|
Иванов |
25 |
513 |
|
Запись № 2 —> |
Петров |
31 |
274 |
Сидоров |
25 |
513 |
|
… |
… |
… |
Весь справочник целиком в терминах баз данных называется таблицей. Состав входящих в таблицу полей определяет структуру таблицы, а состав входящих в таблицу записей — ее содержание. Каждая запись в таблице состоит из того же набора полей, что и таблица целиком, поэтому иногда употребляется термин структура записи. Это понятие адекватно структуре таблицы, хотя употребление первого термина представляется более корректным, т.к. таблица имеет структуру независимо от того, имеется ли в ней хотя бы одна запись.
Реализация баз данных формата DBF подразумевает, что каждая таблица хранится в отдельном файле. Поэтому в дальнейшем мы будем применять термин «файл базы данных» или «файл БД», имея в виду таблицу базы данных.
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Подробнее выражения индекса и фильтра, применительно к объектам XBase, рассмотрены в конце данного раздела. Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе.
Для работы с базами данных формата DBF в системе может использоваться специальный агрегатный тип данных — XBase. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из встроенного языка программы 1С:Предприятие. Каждый XBase-объект может быть связан с одним файлом базы данных.
Объекты XBase имеют динамически изменяемый набор атрибутов, состав и тип которых зависит от структуры файла базы данных, с которым связан конкретный объект. Объект содержит в своих атрибутах информацию об одной текущей записи. Каждому полю файла базы данных соответствует один атрибут объекта. Наименование атрибута совпадает с именем поля.
Каждый объект представляет собой структуру данных, расположенных в памяти компьютера и изменение содержимого его атрибутов не вызывает немедленного изменения в файлах базы данных. При включенном режиме автосохранения запись содержимого объекта в файлы БД происходит при изменении позиционирования (переход с следующей записи, поиск по ключу и т. д.), при выключенном режиме автосохранения запись изменений происходит только при вызове соответствующего метода объекта.
Следует иметь в виду, что одновременно XBase-объект может быть связан не более, чем с одним индексным файлом. Все изменения в базе данных, сделанные в сеансе работы с одним индексным файлом, никак не отражаются на остальных. Поэтому не рекомендуется иметь более одного индексного файла для БД. В противном случае, после каждого открытия БД с индексным файлом, отличным от открытого в предыдущем сеансе работы с базой, следует производить переиндексацию (обновление содержимого индексного файла).
Удаление записи из базы данных не приводит к физическому уничтожению ее на диске. В этом случае в специальном служебном поле записи, не доступном обычными средствами, ставится пометка об удалении. На записи, помеченные удаленными, позиционирования не происходит, если не включен специальный режим просмотра удаленннх записей. Имеется набор методов для включения/выключения специального режима просмотра, а также определения, является ли спозиционированная запись удаленной, и восстановления удаленной записи.
Метод сжатия базы вызывает физическое уничтожение записей, помеченных как удаленные. Метод очистки базы вызывает физическое уничтожение всех записей. После применения этих методов восстановление удаленных записей становится невозможным.
Помимо работы с существующими базами данных, агрегатный тип XBase имеет набор методов, позволяющих создать новую базу данных произвольной структуры, новые индексы и новый индексный файл. Следует отметить, что, если использование методов, изменяющих структуру БД, возможно только для объектов, не связанных с базой данных (т. е. для вновь создаваемых БД), то создание новых индексов и индексного файла возможно как для создаваемых БД, так и для уже существующих и открытых.
Основное назначение объектов XBase — организация экспорта-импорта информации в/из внешних файлов формата DBF. Использование методов Xbase для доступа непосредственно к данным информационной базы системы 1С:Предприятие не рекомендуется.
Объекты XBase не поддерживают поля типа memo (см. ДобавитьПоле).
Поддерживаемые объектом XBase фукции, которые можно использовать в выражениях и фильтрах индексов перечислены в разделе «Выражение и фильтр индекса».
Объекты XBase поддерживают только монопольный доступ к файлам. XBase-объекты поддерживают индексные файлы в формате CDX. Однако, использование внешними программами (например, FoxBase) индексных файлов, созданных с помощью объектов XBase, так же, как и использование объектами индексных файлов, созданных внешними программами, не рекомендуется из-за возможной несовместимости версий.
Во всех программных модулях для работы с базами данных формата DBF следует использовать объекты типа XBase. Можно создать произвольное число объектов типа XBase при помощи функции СоздатьОбъект. Чтобы обратиться к атрибуту объекта или вызвать его метод, имя атрибута или метода (с указанием необходимых параметров) пишется через точку после имени объекта.
Русскоязычное написание ключевого слова XBase отсутствует.
Пример:
ДБФ = СоздатьОбъект("XBase");
ИмяФайла = "";
ИмяПути = "";
ФС.ВыбратьФайл(0, ИмяФайла, ИмяПути, , "*.*", , );
ПутьДБ = ИмяПути + ИмяФайла;
ДБФ.ОткрытьФайл(ПутьДБ);
Если ДБФ.Открыта() = 1 Тогда
Предупреждение("База открыта", 2);
ДБФ.Первая();
ФИО = ДБФ.FIO; // Подразумевается, что поле FIO имеется в открытой БД
Предупреждение("Первым в " + ПутьДБ + " упомянут т." + ФИО, 5);
Иначе
Предупреждение("НЕ смогли открыть Базу!", 2);
КонецЕсли;
Предоставляет доступ к полю записи с именем «Поле». Имя поля должно совпадать с именем поля базы данных, с которой связан объект.
Синтаксис:
<Поле>
Описание:
Атрибут <Поле> предоставляет доступ к полю записи с именем «Поле». В тексте программного модуля под термином <Поле> понимается имя конкретного столбца файла базы данных, с которым связан объект.
Атрибут имеет смысл только если файл базы данных находится в открытом состоянии.
Состав атрибутов объекта может динамически изменяться в процессе исполнения 1С:Предприятия и определяется набором полей файла базы данных, с которым объект связан в данных момент времени.
Пример:
ФИО = ДБФ.FIO;
Предоставляет доступ к агрегатному типу данных типа «Ключ».
Синтаксис:
Ключ
Англоязычный синоним:
Key
Описание:
Агрегатный тип данных типа «Ключ» имеет только атрибуты. Состав атрибутов полностью повторяет атрибуты XBase-объекта за исключением того, что отсутствует атрибут «Ключ». Значения атрибутов используются XBase-объектом для вычисления выражения индекса при использовании метода НайтиПоКлючу.
Пример:
ДБФ.Ключ.FIO = ФИО;
ЗаписьНайдена = ДБФ.НайтиПоКлючу(0);
Создать новый файл базы данных.
Синтаксис:
СоздатьФайл(<ПутьКБазе>, <ПутьКИндексу>)
Англоязычный синоним:
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 — дата. |
Число. Год. |