Работа с файлами DBF

Работа с файлами DBF

DBF – широко распространенный формат хранения данных, появившийся в 80-х годах прошлого века. Впервые формат применялся в семействе СУБД dBase. В связи с популярностью и широким распространением dBase, было создано множество dBase-подобных программных продуктов, получивших собирательное название xBase. Несмотря на значительный возраст формата, он до сих пор достаточно широко используется. В данной статье рассматриваются способы работы с DBF из «1С:Предприятие».

Чтение файла DBF
Выгрузка в файл DBF
Работа с индексами
Удаление записей в файле DBF
Загрузка из DBF при помощи ADO



В «1С:Предприятие» для работы с файлами формата DBF(версия dBase III) применяется специальный программный объект – xBase. Работа с этим объектом обычно не вызывает трудностей.


Внимание!

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



Внимание!

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


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

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

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

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

ДБФ = Новый XBase; // Этап 1. Создание объекта XBase
ДБФ.ОткрытьФайл("D:\MyFile.dbf"); // Этап 2. Открытие файла
Пока Истина Цикл // Этап 3. Перебор строк файла
    Сообщить(ДБФ.NAME); // Пример обращения к значению поля
    Если НЕ ДБФ.Следующая() Тогда // Позиционирование на следующей записи
        Прервать;
    КонецЕсли;
КонецЦикла;
ДБФ.ЗакрытьФайл(); // Этап 4. Закрытие файла

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

Пока НЕ ДБФ.ВКонце() Цикл
    Сообщить(ДБФ.NAME);
    ДБФ.Следующая();
КонецЦикла;

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

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

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

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

ДБФ = Новый XBase; // Этап 1. Создание объекта XBase
ДБФ.Кодировка = КодировкаXBase.OEM; // Этап 2. Указание кодировки
ДБФ.Поля.Добавить("CODE", "S", 9); // Этап 3. Описание имени и типа поля
ДБФ.Поля.Добавить("NAME", "S", 40);
ДБФ.СоздатьФайл("D:\MyFile.dbf"); // Этап 4. Создание файла
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    ДБФ.Добавить(); // Добавление строки
    ДБФ.CODE = Выборка.Код; // Заполнение значения поля
    ДБФ.NAME = Выборка.Наименование;
    ДБФ.Записать(); // Запись строки
КонецЦикла;
ДБФ.ЗакрытьФайл(); // Этап 6. Закрытие файла

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

  • ANSI – формат Windows;
  • OEM – формат DOS.

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

Добавить(<Имя>, <Тип>, <Длина>, <Точность>)

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

  • «N» – число;
  • «S» – строка;
  • «D» – дата;
  • «L» – булево;
  • «F» – аналогично «N» – число.

Длина поля является обязательным для типов полей «N», «F» и «S».

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

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

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

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

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

ДБФ.Индексы.Добавить("INDCODE", "CODE");
ДБФ.СоздатьФайл("D:\MyFile.dbf", "D:\index.cdx");

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

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

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

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

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

ДБФ.ОткрытьФайл("D:\MyFile.dbf", "D:\index.cdx");
ДБФ.ТекущийИндекс = ДБФ.Индексы.INDCODE;

Внимание!

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

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

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

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

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

  • «=»;
  • «>=»;
  • «>»;
  • «<=»;
  • «<«.

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

ДБФ = Новый XBase;
ДБФ.ОткрытьФайл("D:\MyFile.dbf", "D:\index.cdx"); // При открытии файла DBF дополнительно указывается индексный файл
ДБФ.ТекущийИндекс = ДБФ.Индексы.INDCODE; // Установка текущего индекса

// поиск методом Найти:
Если ДБФ.Найти("000000003", "=") Тогда
    Сообщить("Найдено. Наименование элемента: " + ДБФ.NAME);
Иначе
    Сообщить("Не найдено");
КонецЕсли;

// поиск методом НайтиПоКлючу:
ДБФ.Ключ.CODE = "000000002";
Если ДБФ.НайтиПоКлючу("=") Тогда
    Сообщить("Найдено. Наименование элемента: " + ДБФ.NAME);
Иначе
    Сообщить("Не найдено");
КонецЕсли;

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

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

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

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

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

ДБФ.ОтображатьУдаленные = Истина;
Пока НЕ ДБФ.ВКонце() Цикл
    Если ДБФ.ЗаписьУдалена() Тогда
        ДБФ.Восстановить();
    КонецЕсли;
ДБФ.Следующая();
КонецЦикла;

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

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

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

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

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

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

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

АДО = Новый COMОбъект("ADODB.Connection"); // Создание COM-объекта
АДО.Open("Provider=Microsoft.Jet.OLEDB.4.0;
         |Data Source=""D:\"";
         |Extended Properties=DBASE III");
БД = АДО.Execute("Select * from MyFile"); // запрос с получением всех записей из файла MyFile.DBF
Пока БД.EOF=0 Цикл //Цикл по записям файла DBF
    Сообщить(БД.Fields("Name").value); // Пример обращения к значению поля       
    БД.MoveNext(); //Переходим к следующей записи
КонецЦикла;
АДО.Close();

В приведенном примере используется строка подключения «Provider=Microsoft.Jet.OLEDB.4.0;Data Source= «D:\»;Extended Properties=DBASE III». В этой строке:

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

Внимание!

При чтении указанным способом кодировка по-умолчанию – OEM. Для того, чтобы изменить кодировку на ANSI необходимо в реестре Windows присвоить параметру HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase\DataCodePage значение «ANSI».


 

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

 

Смотри также:

Создание диаграммы Excel из 1С
Подключение к базе 1С через COM
Работа с файлами Excel

11 комментариев

  1. Есть ли способы открыть для чтения файл DBF, уже кем-то открытый («занятый»)? Приведенные в статье методы выдают ошибку в случае совместного доступа к файлу.

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

    Цены на услуги:
    Аренда сим-карт РФ 5/10/20/30 дней — 500/750/1000/1500 рублей. ( Не ограниченный прием смс ).
    Аренда от 10 симкарт 30 дней — 1000 рублей. ( Не ограниченный прием смс ).
    Прием 1 смс — 100 рублей ( Для тех кому надо принять одну или несколько смс и аренда сим-карты ему не нужна ).

    Аренда сим-карт под фин. операции 15/30 дней — 2000/4000 рублей.

    Аренда сим-карт UK Англия 5/10/20/30 дней — 750/1000/1500/2000 рублей. ( Не ограниченный прием смс ).
    Прием 1 смс — 500 рублей ( Для тех кому надо принять одну или несколько смс и аренда сим-карты ему не нужна ).

    Аренда сим-карт DE Германия 5/10/20/30 дней — 750/1000/1500/2000 рублей. ( Не ограниченный прием смс ).
    Прием 1 смс — 500 рублей ( Для тех кому надо принять одну или несколько смс и аренда сим-карты ему не нужна ).

    Важная информация:
    По окончании аренды, вы можете продлить те же самые сим-карты или запросить новые.
    По окончании аренды, храню сим-карту 1 день.
    Не храню сим-карты для разовых приемов смс.
    Если используете сим-карты для фин. операций, проверяйте их на возможность проводить платежи.

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

    Оплата:
    Гарант/BTC/QIWI/YANDEX

    Контакты:
    Telegram — @TarasikUK

  3. Добрый день господа
    Какое время года выбрать для бурения скважины Бурение в разные периоды года
    Если вы завершаете строительство собственного дома, самое время выбрать и место для бурения скважины. Так ваш участок будет менее всего поврежден и будущая отделка дома не пострадает. Не забудьте также учесть все важные факторы, чтобы процесс бурения прошел без всяческих неожиданностей.

    Компания «БурТехСервис» осуществляет бурение круглый год. Для этого в распоряжении имеется целый арсенал техники, бурильной и строительной для проведения земельных работ. Имеющаяся техника предусматривает бурение и заезды на любые участки. Есть крупно- и малогабаритная техника, прицеп-бытовка для бригады, грузовики и краны для перевозки оборудования и материалов. Подробнее с техникой вы можете ознакомиться здесь.

    Весна

    + не нужно очищать участок от снега

    + цена бурения дешевле в тех местах, где нет грунтовых вод и не закрывают дороги

    – трудности с заездом на участок ввиду таяния снега, дождей

    – бурение затруднено если грунтовые воды высокие

    – на заболоченной местности проведение бурения не представляется возможным

    Лето

    + почва сухая – удобный заезд

    + летом высокая потребность в воде для питья и полива

    + летом удобно проводить бурение местах высоких грунтовых вод

    – цены на бурение выше

    – очереди на бурение также большие

    – соседи могут проявлять к вам излишнее внимание и быть назойливыми

    Осень

    + понижение цен на бурение, осенние скидки и акции

    + осенью растения отцветают – не страшно повредить участок и ландшафт

    – на заболоченной местности проведение бурения не представляется возможным

    – сроки бурения могут смещаться ввиду неустойчивости погоды

    – если осенью дожди частые и сильные – имеет смысл подождать, чтобы почва слегка подмерзла

    Зима

    + почва зимой сухая и твердая – ущерб вашему участку минимален

    + действуют зимние скидки на бурение и приятные подарки

    + в холодное время года соседи меньше проявляют любопытство и назойливость

    + оптимально проводить бурение местах высоких грунтовых вод

    – если зимой много снега, требуется очищать участок для бурения, а также дорогу для осуществления заезда бурильной техники

    – при сильных морозах (ниже -18) рекомендуем подождать, пока немного не потеплеет (нельзя недооценивать человеческий фактор)

    – процесс бурения зимой всегда немного длительнее, ввиду погодных условий и холодов

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

    Соорудить скважину в твердой и мерзлой почве не составит труда для нашей бурильной техники. “БурТехСервис” располагает арсеналом средств для любых погодных условий. К тому же, обеспечив работой нашу буровую бригаду и не давая простаивать бурильной технике, наша компания поощрит наших дорогих заказчиках значительными скидками на бурение в зимнюю пору и новогодними подарками.

    Мы ценим ваше время! Обратитесь к нам – и наши инженера дадут вам грамотную консультацию по любому вопросу бурения и обустройства скважины.

  4. Добрый день господа
    Гарантия на скважину и систему водоснабжения Компания “БурТехСервис” предоставляет следующие гарантии на выполненные работы:
    Бурение скважины:
    Гарантию сроком на 5 лет

    Обустройство скважины:
    Гарантию сроком на 12 месяцев

    Монтаж канализации:
    Гарантию сроком на 12 месяцев

    Таким образом, по окончанию выполненных работ вы получаете настоящие гарантии от компании “БурТехСервис”.

    burenie-skvazhin-garantiya
    Гарантийные случаи по скважине:
    Появление в воде глины, песка;
    Отсутствие воды в скважине.
    Не являются гарантийными случаями:
    Наличие посторонних предметов в скважине после сдачи ее заказчику;
    Самостоятельное несогласованное изменение конструкции скважины;
    Изменение химического состава воды в водоносном горизонте;
    Несогласованное внесение изменений в электрическую схему подключения водоподъемного оборудования;
    Несогласованное внесение изменений в настройках инженерного оборудования;
    Резкое понижение статического и динамического уровня воды в скважине.
    Бурение скважины на воду с последующим ее обустройством с гарантией от “БурТехСервис” это возможность иметь чистую воду у себя на участке долгие годы!

  5. Добрый день друзья
    Обустройство скважины с адаптером Рассмотрим пошаговый процесс монтажа адаптера
    Раскапывают траншею глубиной ниже уровня замерзания (1,5-2 метра) и шириной 0,5 метров для удобства монтажа.
    В обсадной трубе сверлят отверстие требуемого диаметра и обрабатывают его края.
    Подготавливают адаптер: сначала его очищают от технологической смазки, затем для надежной фиксации обрабатывают герметиком уплотнительные кольца.
    В обсадную трубу опускают адаптер , используя Т-образный ключ. Резьбовую часть заводят в подготовленное отверстие. Затем обе части конструкции соединяют между собой.
    К погружному насосу подключают питающий и греющий кабель. Верх обсадной трубы обрезают и закрывают крышкой.
    Монтируются вспомогательные приборы.
    Проверка работоспособности системы и ее герметичности.
    Засыпают траншею песком.
    Монтаж завершен.

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

    Компания «БурТехСервис» осуществляет бурение круглый год. Для этого в распоряжении имеется целый арсенал техники, бурильной и строительной для проведения земельных работ. Имеющаяся техника предусматривает бурение и заезды на любые участки. Есть крупно- и малогабаритная техника, прицеп-бытовка для бригады, грузовики и краны для перевозки оборудования и материалов. Подробнее с техникой вы можете ознакомиться здесь.

    Весна

    + не нужно очищать участок от снега

    + цена бурения дешевле в тех местах, где нет грунтовых вод и не закрывают дороги

    – трудности с заездом на участок ввиду таяния снега, дождей

    – бурение затруднено если грунтовые воды высокие

    – на заболоченной местности проведение бурения не представляется возможным

    Лето

    + почва сухая – удобный заезд

    + летом высокая потребность в воде для питья и полива

    + летом удобно проводить бурение местах высоких грунтовых вод

    – цены на бурение выше

    – очереди на бурение также большие

    – соседи могут проявлять к вам излишнее внимание и быть назойливыми

    Осень

    + понижение цен на бурение, осенние скидки и акции

    + осенью растения отцветают – не страшно повредить участок и ландшафт

    – на заболоченной местности проведение бурения не представляется возможным

    – сроки бурения могут смещаться ввиду неустойчивости погоды

    – если осенью дожди частые и сильные – имеет смысл подождать, чтобы почва слегка подмерзла

    Зима

    + почва зимой сухая и твердая – ущерб вашему участку минимален

    + действуют зимние скидки на бурение и приятные подарки

    + в холодное время года соседи меньше проявляют любопытство и назойливость

    + оптимально проводить бурение местах высоких грунтовых вод

    – если зимой много снега, требуется очищать участок для бурения, а также дорогу для осуществления заезда бурильной техники

    – при сильных морозах (ниже -18) рекомендуем подождать, пока немного не потеплеет (нельзя недооценивать человеческий фактор)

    – процесс бурения зимой всегда немного длительнее, ввиду погодных условий и холодов

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

    Соорудить скважину в твердой и мерзлой почве не составит труда для нашей бурильной техники. “БурТехСервис” располагает арсеналом средств для любых погодных условий. К тому же, обеспечив работой нашу буровую бригаду и не давая простаивать бурильной технике, наша компания поощрит наших дорогих заказчиках значительными скидками на бурение в зимнюю пору и новогодними подарками.

    Мы ценим ваше время! Обратитесь к нам – и наши инженера дадут вам грамотную консультацию по любому вопросу бурения и обустройства скважины.

  7. Добрый день господа
    Какое время года выбрать для бурения скважины
    Бурение в разные периоды года
    Если вы завершаете строительство собственного дома, самое время выбрать и место для бурения скважины. Так ваш участок будет менее всего поврежден и будущая отделка дома не пострадает. Не забудьте также учесть все важные факторы, чтобы процесс бурения прошел без всяческих неожиданностей.

    Компания «БурТехСервис» осуществляет бурение круглый год. Для этого в распоряжении имеется целый арсенал техники, бурильной и строительной для проведения земельных работ. Имеющаяся техника предусматривает бурение и заезды на любые участки. Есть крупно- и малогабаритная техника, прицеп-бытовка для бригады, грузовики и краны для перевозки оборудования и материалов. Подробнее с техникой вы можете ознакомиться здесь.

    Весна

    + не нужно очищать участок от снега

    + цена бурения дешевле в тех местах, где нет грунтовых вод и не закрывают дороги

    – трудности с заездом на участок ввиду таяния снега, дождей

    – бурение затруднено если грунтовые воды высокие

    – на заболоченной местности проведение бурения не представляется возможным

    Лето

    + почва сухая – удобный заезд

    + летом высокая потребность в воде для питья и полива

    + летом удобно проводить бурение местах высоких грунтовых вод

    – цены на бурение выше

    – очереди на бурение также большие

    – соседи могут проявлять к вам излишнее внимание и быть назойливыми

    Осень

    + понижение цен на бурение, осенние скидки и акции

    + осенью растения отцветают – не страшно повредить участок и ландшафт

    – на заболоченной местности проведение бурения не представляется возможным

    – сроки бурения могут смещаться ввиду неустойчивости погоды

    – если осенью дожди частые и сильные – имеет смысл подождать, чтобы почва слегка подмерзла

    Зима

    + почва зимой сухая и твердая – ущерб вашему участку минимален

    + действуют зимние скидки на бурение и приятные подарки

    + в холодное время года соседи меньше проявляют любопытство и назойливость

    + оптимально проводить бурение местах высоких грунтовых вод

    – если зимой много снега, требуется очищать участок для бурения, а также дорогу для осуществления заезда бурильной техники

    – при сильных морозах (ниже -18) рекомендуем подождать, пока немного не потеплеет (нельзя недооценивать человеческий фактор)

    – процесс бурения зимой всегда немного длительнее, ввиду погодных условий и холодов

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

    Соорудить скважину в твердой и мерзлой почве не составит труда для нашей бурильной техники. “БурТехСервис” располагает арсеналом средств для любых погодных условий. К тому же, обеспечив работой нашу буровую бригаду и не давая простаивать бурильной технике, наша компания поощрит наших дорогих заказчиках значительными скидками на бурение в зимнюю пору и новогодними подарками.Мы ценим ваше время! Обратитесь к нам – и наши инженера дадут вам грамотную консультацию по любому вопросу бурения и обустройства скважины.

Добавить комментарий

Ваш e-mail не будет опубликован.