|
Работа в 1С 38
Тема 12 Работа с DBF–файлами Цель:
Пояснения к работе Для работы с базами данных формата DBF в системе может использоваться специальный агрегатный тип данных – XBase. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из встроенного языка программы 1С: Предприятие. Основное назначение объектов XBase – организация экспорта–импорта информации в/из внешних файлов формата DBF. Каждый XBase–объект может быть связан с одним файлом базы данных. Объект создается при помощи функции СоздатьОбъект() с ключевым словом XBase, ссылка на который присваивается переменной: Пример: ДБФ = СоздатьОбъект("XBase"); Объекты XBase имеют динамически изменяемый набор атрибутов, состав и тип которых зависит от структуры файла базы данных, с которым связан конкретный объект. Объект содержит в своих атрибутах информацию об одной текущей записи. Каждому полю файла базы данных соответствует один атрибут объекта. Наименование атрибута совпадает с именем поля. В тексте программного модуля под термином <Поле> понимается имя конкретного столбца файла базы данных, с которым связан объект. Атрибут имеет смысл, только если файл базы данных находится в открытом состоянии. Состав атрибутов объекта может динамически изменяться в процессе исполнения 1С:Предприятия и определяется набором полей файла базы данных, с которым объект связан в данных момент времени. Пример: ФИО = ДБФ.FIO; Объекты XBase не поддерживают поля типа memo. Помимо работы с существующими базами данных, агрегатный тип XBase имеет набор методов, позволяющих создать новую базу данных произвольной структуры, новые индексы и новый индексный файл. Следует отметить, что, если использование методов, изменяющих структуру БД, возможно только для объектов, не связанных с базой данных (т. е. для вновь создаваемых БД), то создание новых индексов и индексного файла возможно как для создаваемых БД, так и для уже существующих и открытых. 12.1 Методы для работы с DBF–файлами СоздатьФайл(<ПутьКБазе>, <ПутьКИндексу>) – создает новый файл базы данных формата DBF. Если база с таким именем существует, то выдается ошибка. Параметры: <ПутьКБазе> – строковое выражение, содержащее путь к файлу базы данных формата DBF. <ПутьКИндексу> – необязательный параметр. Строковое выражение, содержащее путь к индексному файлу базы данных. Пример: ДБФ = СоздатьОбъект("XBase"); // Определение полей и индексов новой БД // … // Теперь физически создаем базу ДБФ.СоздатьФайл("mydb.dbf", "mydb.cdx"); Открыта() – возвращает значение флага открытия файла базы данных. Возвращаемое значение: 1 – база открыта; 0 – база не открыта. ОткрытьФайл(<ПутьКБазе>, <ПутьКИндексу>, <ТолькоЧтение>) – открывает существующую базу данных формата DBF. Параметры: <ПутьКБазе> – строковое выражение, содержащее путь к файлу базы данных формата DBF. <ПутьКИндексу> – необязательный параметр. Строковое выражение, содержащее путь к индексному файлу базы данных. <ТолькоЧтение> – необязательный параметр. 1 – файл открывается в режиме только чтение; 0 – файл открывается в режиме полного доступа (при этом файл открывается в эксклюзивном режиме). Значение по умолчанию – 0. Пример: // Подразумевает, что объект ДБФ уже создан и // доступен в данном контексте ДБФ.ОткрытьФайл(ПутьДБ); Если ДБФ.Открыта() = 1 Тогда
Иначе
КонецЕсли; ЗакрытьФайл() – закрывает ранее открытую или созданную базу данных формата DBF. Пример: Если ДБФ.Открыта() = 1 Тогда
КонецЕсли; ОчиститьФайл() – удаляет все записи в базе. При этом все существующие записи удаляются физически и не могут быть впоследствии восстановлены. Пример: Если Вопрос("Вы уверены, что надо очистить базу?", 1, 5) = 1 Тогда
КонецЕсли; Сжать() – удаляет записи, помеченные как удаленные. Пример: Если Вопрос("Уничтожить записи, помеченные как удаленные?", 1, 5) = 1 Тогда
КонецЕсли; Переиндексировать() – выполняет переиндексирование базы. Объекты XBase автоматически выполняют индексацию при изменениях базы данных, однако, при работе более чем с одним индексным файлом или после аварийных завершений может потребоваться принудительная переиндексация (для «своих» БД система 1С:Предприятие выполняет это автоматически). Пример: Если ФлагАварийногоЗавершения = 1 Тогда
КонецЕсли; ПоказыватьУдаленные(<Режим>) – позволяет определить и изменить режим показа записей, помеченных на удаление в базе. В случае, если параметр не указан, изменения режима не происходит. Параметры: <Режим> – необязательный параметр. 1 – установить режим показа удаленных записей в базе. 0 – снять режим. Возвращаемое значение: текущее числовое значение режима показа удаленных записей в базе (на момент до исполнения метода). Пример: РежПокУд = ДБФ.ПоказыватьУдаленные(1); Первая() – предназначен для перехода на первую запись. Возвращаемое значение: 1 – если действие выполнено; 0 – если действие не выполнено. Пример: // Обнуляет значения всех полей первой записи ДБФ.Первая(); Последняя() – предназначен для перехода на последнюю запись. Возвращаемое значение: 1 – если действие выполнено; 0 – если действие не выполнено. Пример: ДБФ.Последняя(); Следующая() – предназначен для позиционирования на следующую запись. Возвращаемое значение: 1 – получена следующая запись; 0 – следующая запись не найдена. ВКонце() – возвращает значение признака конца файла. Возвращаемое значение: 1 – конец файла достигнут; 0 – конец файла не достигнут. Пример: ДБФ.Первая(); Пока ДБФ.ВКонце() = 0 Цикл
КонецЦикла; Предыдущая() – предназначен для перехода на предыдущую запись. Возвращаемое значение: 1 – получена предыдущая запись; 0 – предыдущая запись не найдена. НомерЗаписи() – возвращает физический порядковый номер текущей записи в файле базы данных. Результат не зависит от установки текущего индекса. Возвращаемое значение: номер текущей записи. Пример: Ном=ДБФ НомерЗаписи(); Перейти(<НомерЗаписи>) – позволяет перейти на запись по ее физическому порядковому номеру в базе данных. Позволяет перейти на запись, помеченную удаленной, даже если не установлен режим просмотра удаленных записей. Параметры: <НомерЗаписи> – физический порядковый номер записи в базе данных. Пример: ДБФ.Перейти(3); ВНачале() – возвращает значение признака начала файла. Возвращаемое значение: 1 – начало файла не достигнуто; 0 – начало файла не достигнуто. ТекущийИндекс(<НазваниеИндекса>) – устанавливает/определяет текущий индекс работы с базой. Установка текущего индекса работы с базой оказывает влияние на работу методов Найти(), НайтиПоКлючу(), Первая(), Последняя(), Следующая(), Предыдущая(). Параметры: <НазваниеИндекса> – необязательный параметр. Строковое выражение с названием индекса. Если параметр опущен, изменения текущего индекса не происходит. Возвращаемое значение: строковое значение с названием текущего индекса (на момент до выполнения метода). Пример: ИмяТекИнд = ДБФ.ТекущийИндекс(Инд); ДБФ.Первая(); ДБФ.ТекущийИндекс(ИмяТекИнд); Найти(<Ключ>, <Режим>) – позволяет найти запись, соответствующую данному значению <Ключ> ключа по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись. Параметры: <Ключ> – строковое выражение со значением выражения текущего индекса. <Режим> – режим поиска записей: 0 – ищет запись на точное соответствие ключу (=); 1 – ищет запись на точное соответствие с ключом или большую (>=); 2 – ищет запись с большим ключом (>); –1 (минус единица) – ищет запись на точное соответствие с ключом или меньшую(<=); –2 (минус два) – ищет запись с меньшим ключом (<). Возвращаемое значение: 1 – если запись найдена; 0 – если запись не найдена. Пример: ЗаписьНайдена = ДБФ.Найти("Иванов", 0); ПолучитьЗначениеПоля(<НазваниеПоля>) – позволяет определить значение поля текущей записи. Параметры: <НазваниеПоля> – строковое выражение с названием поля или числовое выражение с номером поля. Возвращаемое значение: значение поля записи, тип зависит от типа поля. Пример: Знач=ДБФ.ПолучитьЗначениеПоля("КП"); УстановитьЗначениеПоля(<НазваниеПоля>, <Значение>) – позволяет установить новое значение поля текущей записи. Параметры: <НазваниеПоля> – строковое выражение с названием поля или числовое выражение с номером поля. <Значение> – значение поля. Описание: Пример: ДБФ.УстановитьЗначениеПоля(НаименованиеПоля, 1234); Добавить() – добавляет новую пустую запись. Для записи изменений в базу данных необходимо инициировать запись Пример: ДБФ.Добавить(); ДБФ.FIELD1 = Поле1; ДБФ.FIELD2 = Поле2; ДБФ.Записать(); Скопировать() – добавляет новую запись, копирующую текущую запись. Для записи изменений в базу данных необходимо инициировать запись Пример: ДБФ.Скопировать(); ДБФ.Записать(); Записать() – выполняет запись изменений в базу данных. До его вызова все изменения объекта производились только в памяти и будут потеряны при осуществлении перехода к другой записи или закрытии базы данных, если отключен режим автосохранения. Автосохранение(<Режим>) – позволяет изменить режим автоматического сохранения изменений в базе. При установленном режиме автосохранения любые изменения позиционирования объекта приводит к автоматической записи изменений атрибутов (если они происходили с текущей записью) в базу данных. При сброшенном режиме автосохранения записи при изменении позиционирования не происходит – для этого нужно вызвать метод Записать(), причем до выполнения позиционирования. Параметры: <Режим> – необязательный параметр. 1 – установить режим автоматического сохранения изменений в базе. 0 – снять режим. Возвращаемое значение: текущее числовое значение режима автоматического сохранения изменений в базе (на момент до исполнения метода). Пример: ДБФ.Автосохранение(1); ДБФ.Новая(); ДБФ.FIO = "Иванов"; ДБФ.PHONE = 215; ДБФ.Новая(); // Произошла запись ДБФ.FIO = "Петров"; ДБФ.PHONE = 215; ДБФ.Отменить(); ДБФ.Новая(); // Записи не произошло ДБФ.Автосохранение(0); ДБФ.FIO = "Петров"; ДБФ.PHONE = 314; ДБФ.Записать(); // Произошла запись ДБФ.Новая(); ДБФ.FIO = "Сидоров"; ДБФ.PHONE = 215; ДБФ.Новая(); // Записи не произошло Отменить() – отменяет запись изменения в базу. Удалить() – помечает текущую запись на удаление. Физически запись из базы данных не удаляется и может быть впоследствии восстановлена. Полное удаление записей из БД с освобождением дискового пространства, занятого ими, производится вызовом методов Сжать() и ОчиститьФайл(). Пример: ДБФ.Удалить(); ЗаписьУдалена() – возвращает значение флага пометки текущей записи на удаление. Возвращаемое значение: 1 – запись помечена на удаление; 0 – запись не помечена на удаление. Восстановить() – восстанавливает текущую запись, помеченную ранее на удаление. Пример: ДБФ.ПоказыватьУдаленные(1); Если ДБФ.ЗаписьУдалена() = 1 Тогда
КонецЕсли; Очистить() – обнуляет все поля записи. Атрибуты, соответствующие полям типа строковый приобретают значение «пустая строка», числовой – 0, логический – 0, дата – «пустая дата». Пример: ДБФ.Очистить(); КоличествоЗаписей() – возвращает количество записей в базе вместе с записями, помеченными, как удаленные. Возвращаемое значение: количество записей в базе. Пример: Предупреждение("Записей – " + Строка(ДБФ.КоличествоЗаписей())); КоличествоПолей() – возвращает количество полей базы. Может быть использован при работе с базой данных неизвестной заранее структуры. Возвращаемое значение: количество полей базы. ОписаниеПоля(<НомерПоля>, <НазваниеПоля>, <Тип>, <Длина>, <Точность>) – возвращает в параметрах <НазваниеПоля>, <Тип>, <Длина>, <Точность> описание поля с номером <НомерПоля>. Параметры: <НомерПоля> – номер поля, для которого требуется получить описание. <НазваниеПоля> – идентификатор переменной, в которую данный метод вернет строковое значение названия поля. <Тип> – идентификатор переменной, в которую данный метод вернет числовое значение типа поля. Допустимые значения см. в описании метода ДобавитьПоле(). <Длина> – идентификатор переменной, в которую данный метод вернет числовое значение – общую длину поля. <Точность> – идентификатор переменной, в которую данный метод вернет числовое значение – длину поля после десятичной точки (только для числовых полей). Пример: Для КП = 1 По ДБФ.КоличествоПолей() Цикл
КонецЦикла; КоличествоИндексов() – возвращает количество индексов в открытом индексном файле. Может быть использован при работе с базой данных неизвестной заранее структуры. Возвращаемое значение: количество индексов в открытом индексном файле. ОписаниеИндекса(<НомерИндекса>, <НазваниеИндекса>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр>) – возвращает в параметрах <НазваниеИндекса>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр> описание индекса с номером <НомерИндекса>. Параметры: <НомерИндекса> – номер индекса, для которого требуется получить описание. <НазваниеИндекса> – идентификатор переменной, в которую данный метод вернет строковое значение названия индекса. <Выражение> – идентификатор переменной, в которую данный метод вернет строковое значение – выражение индекса. <Уникальность> – идентификатор переменной, в которую данный метод вернет числовое значение – флаг уникальности индекса. 1 – уникальный. 0 – не уникальный. <Убывание> – идентификатор переменной, в которую данный метод вернет числовое значение – флаг направления убывания индекса. 1 – индекс по убыванию значения ключа. 0 – по возрастанию значения ключа. |
Loading
|