Чтение и запись DBF в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать test.dbf, который используется в примерах ниже.

/// Как прочитать записи файла в формате dbf из 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакПрочитатьЗаписиФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF)
 
    // О формате dbf - https://ru.wikipedia.org/wiki/DBF    
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКФайлуDBF, // путь к базе
        , // путь к индексу
        Истина // только чтение
    );
 
    Сообщить("В таблице " + Таблица.КоличествоЗаписей() + " записей.");
    Сообщить("Таблица имеет кодировку: " + Таблица.Кодировка);
 
    Таблица.Первая(); // перешли к первой записи
    Пока Не Таблица.ВКонце() Цикл
        Если Не Таблица.ЗаписьУдалена() Тогда
            Сообщить(
                Строка(Таблица.EMPLOYEEID) + " " +
                Таблица.LASTNAME + " " + 
                Таблица.TITLE + " " +
                Таблица.ADDRESS            
            );
        КонецЕсли;
        Таблица.Следующая(); // переходим к следующей записи
    КонецЦикла;    
 
    Таблица.ЗакрытьФайл();
 
КонецПроцедуры
 
/// Как найти нужную запись в файле в формате dbf из 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакНайтиНужнуюЗаписьВФайлеВФорматеDBFНаКлиенте(ПутьКФайлуDBF)
 
    // О формате dbf - https://ru.wikipedia.org/wiki/DBF 
 
    // Файлы dbf могут быть очень большими и содержать сотни
    // тысяч записей. В этом случае полный перебор всех записей,
    // чтобы найти одну - не очень хорошая идея.
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКФайлуDBF, // путь к базе
        , // путь к индексу
        Ложь // открываем на запись
    );
 
    // Но для того, чтобы искать по ключу - нужен индексный файл,
    // включающий нужные нам поля. Если бы этот файл уже был у нас,
    // то мы бы передали его при открытии файла вышле, но у нас его
    // нет, а потому - займёмся его созданием.
 
    // создадим индекс только по полю EMPLOYEEID
    Таблица.Индексы.Добавить(
        "INDEX_EMPLOYEEID",  // имя индекса
        "EMPLOYEEID", // выражение индекса
        Истина  // уникальность создаваемого индекса
    );
 
    КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1c.ru";
    СоздатьКаталог(КаталогДляЭкспериментов);
 
    ПутьКФайлуИндекса = КаталогДляЭкспериментов + "\test.cdx";
 
    Таблица.СоздатьИндексныйФайл(ПутьКФайлуИндекса);
 
    Таблица.ЗакрытьФайл();
 
    // Заново открываем таблицу, уже на чтение и с индексным файлом,
    // который мы только что создали.    
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКФайлуDBF, // путь к базе
        ПутьКФайлуИндекса, // путь к индексу
        Истина // только чтение
    );
 
    // Найдём среди записей ту, у которой поле EMPLOYEEID равно 3.
 
    // В таблице всего один индекс INDEX_EMPLOYEEID.
    Таблица.ТекущийИндекс = Таблица.Индексы.Получить(0); 
 
    Таблица.Ключ.EMPLOYEEID = "3";
 
    ЗаписьНайдена = Таблица.НайтиПоКлючу("=");
 
    Если ЗаписьНайдена Тогда
        Сообщить("Запись найдена");
        Сообщить(
            Строка(Таблица.EMPLOYEEID) + " " +
            Таблица.LASTNAME + " " + 
            Таблица.TITLE + " " +
            Таблица.ADDRESS            
        );
    Иначе
        Сообщить("Запись не найдена");
    КонецЕсли;
 
    Таблица.ЗакрытьФайл();
 
КонецПроцедуры
 
/// Как добавить новые записи в уже существующий файл в
/// формате dbf из 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакДобавитьНовыеЗаписиВФайлВФорматеDBFНаКлиенте(ПутьКФайлуDBF)
 
    // О формате dbf - https://ru.wikipedia.org/wiki/DBF
 
    // Добавим в уже знакомый нам test.dbf 2 новые записи о работниках.
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКФайлуDBF, // путь к базе
        , // путь к индексу
        Ложь // открываем на запись
    );
 
    Таблица.Добавить();
    Таблица.EMPLOYEEID = "100";
    Таблица.LASTNAME = "Милькин";
    Таблица.TITLE = "Программист";
    Таблица.ADDRESS = "Владивосток";
    Таблица.Записать();
 
    Таблица.Добавить();
    Таблица.EMPLOYEEID = "101";
    Таблица.LASTNAME = "Милькина";
    Таблица.TITLE = "Биолог";
    Таблица.ADDRESS = "Владивосток";
    Таблица.Записать();
 
    Таблица.ЗакрытьФайл();
 
КонецПроцедуры
 
/// Как удалить определенные записи в файле в формате
/// dbf из 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакУдалитьОпределенныеЗаписиИзФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF)
 
    // О формате dbf - https://ru.wikipedia.org/wiki/DBF    
 
    // Удалим записи с LASTNAME Милькин и Милькина
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКФайлуDBF, // путь к базе
        , // путь к индексу
        Ложь // открываем на запись
    );
 
    Таблица.Первая();
 
    Пока Не Таблица.ВКонце() Цикл
        Если 
            СокрЛП(Таблица.LASTNAME) = "Милькин" Или
            СокрЛП(Таблица.LASTNAME) = "Милькина"
        Тогда
            Таблица.Удалить();
        КонецЕсли;
        Таблица.Следующая();
    КонецЦикла;
 
    // Но Удалить() только ставит пометку на
    // удаление, а чтобы реально удалить помеченные
    // на удаление записи нужно вызвать метод Сжать().
 
    Таблица.Сжать();
 
    Таблица.ЗакрытьФайл();
 
КонецПроцедуры
 
/// Как создать файл в формате dbf с нужными
/// полями из 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакСоздатьФайлВФорматеDBFНаКлиенте()
 
    // О формате dbf - https://ru.wikipedia.org/wiki/DBF
 
    НоваяТаблица = Новый XBase;
    НоваяТаблица.Кодировка = КодировкаXBase.ANSI;
 
    // Описываем колонки таблицы.
 
    НоваяТаблица.Поля.Добавить(
        "FIRSTNAME", // имя колонки
        "S", // тип
        100, // длина
    );
    НоваяТаблица.Поля.Добавить(
        "AGE",
        "N",
        10,
        0 // точность
    ) ;
 
    // Типы ещё бывают:
    // N - число
    // S - строка
    // D - дата
    // L - булево
    // F - число
 
    КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1c.ru";
    СоздатьКаталог(КаталогДляЭкспериментов);
 
    ПутьКНовомуDBF = КаталогДляЭкспериментов + "\new.dbf";    
 
    НоваяТаблица.СоздатьФайл(
        ПутьКНовомуDBF, // путь к базе
        // путь к индексу
    );
 
    НоваяТаблица.ЗакрытьФайл();
 
    Сообщить("Новый файл создан в '" + ПутьКНовомуDBF + "'.");
 
    // И уже теперь можем его открыть и добавить данные.
 
    Таблица = Новый XBase;
    Таблица.ОткрытьФайл(
        ПутьКНовомуDBF, // путь к базе
        , // путь к индексу
        Ложь // открываем на запись
    );    
 
    Таблица.Добавить();
    Таблица.FIRSTNAME = "Вова";
    Таблица.AGE = 31;
    Таблица.Записать();
 
    Таблица.Добавить();
    Таблица.FIRSTNAME = "Алёна";
    Таблица.AGE = 24;
    Таблица.Записать();    
 
    Таблица.ЗакрытьФайл();
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать test.dbf, который используется в примерах ниже.

Чтение и запись DBF в языке 1С 8.3, 8.2 (в примерах)

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

С уважением, (школа 1С программистов).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться: