Чтение DBF

ФайлВВР = Новый XBase;
ФайлВВР.ОткрытьФайл("с:\staff.dbf",Истина); //только для чтения 
ФайлВВР.Первая();
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(...);
//создание колонок 
Пока НЕ ФайлВВР.ВКонце() Цикл
 Нов = ТЗ.Добавить();
 Нов.Наименование = ФайлВВР.Name;
 //заполнение полей 
 ФайлВВР.Следующая();
КонецЦикла,
ФайлВВР.ЗакрытьФайл();

 

 

Запись DBF

// Обработчик выгрузки в DBF-файл
//
Процедура ВыгрузитьНоменВДБФ(Команда)
 Путь = "D:\dBase.dbf";
 ФайлНоменклатура = Новый XBase;
 ФайлНоменклатура.Кодировка = КодировкаXBase.OEM;
 
 //ФайлНоменклатура.поля.Добавить("KOD", "N", 10);
 ФайлНоменклатура.поля.Добавить("ARTIKUL","S",15);
 ФайлНоменклатура.поля.Добавить("NAIMEN","S",40);
 ФайлНоменклатура.поля.Добавить("EDIZM","S",10);
 ФайлНоменклатура.поля.Добавить("CENA","N",12,2);
 ФайлНоменклатура.поля.Добавить("NOMGROUP","S",20);
 //ФайлНоменклатура.поля.Добавить("SUM","F",12,2);
 
 ФайлНоменклатура.СоздатьФайл(Путь);
 ФайлНоменклатура.Записать();
 
 ФайлНоменклатура.ОчиститьФайл();
 Сообщить("Очищаем файл!");
 
 Запрос = Новый Запрос;
 
 Запрос.Текст = "ВЫБРАТЬ
 |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
 |    ЦеныНоменклатурыСрезПоследних.Номенклатура.НаименованиеПолное КАК НоменклатураНаименованиеПолное,
 |    ЦеныНоменклатурыСрезПоследних.Номенклатура.ТипНоменклатурыБухгалтерии КАК НоменклатураТипНоменклатурыБухгалтерии,
 |    ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК НоменклатураАртикул,
 |    ЦеныНоменклатурыСрезПоследних.Номенклатура.БазоваяЕдИзм КАК НоменклатураБазоваяЕдИзм,
 |    НоменклатурныеГруппы.ТипНоменклатурыБухгалтерии
 |ИЗ
 |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних,
 |    Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
 |ГДЕ
 |    НоменклатурныеГруппы.ТипНоменклатурыБухгалтерии В ИЕРАРХИИ(&ТипНоменклатурыБухгалтерии)";
 
 Запрос.УстановитьПараметр("ТипНоменклатурыБухгалтерии", Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Материалы"));
 Выборка = Запрос.Выполнить().Выгрузить();
 
 Пока Выборка.Следующий()Цикл 
 ФайлНоменклатура.Добавить();
 ФайлНоменклатура.ARTIKUL = Выборка.НоменклатураАртикул;
 ФайлНоменклатура.NAIMEN = Выборка.НоменклатураНаименованиеПолное;
 ФайлНоменклатура.NOMGROUP = Выборка.НоменклатураТипНоменклатурыБухгалтерии;
 ФайлНоменклатура.EDIZM = Выборка.НоменклатураБазоваяЕдИзм;
 ФайлНоменклатура.CENA = Выборка.Цена;
 ФайлНоменклатура.Записать();
 КонецЦикла;
 
 ФайлНоменклатура.ЗакрытьФайл();
 
 Сообщить("Все закончено. Вздохни с облегчением!;)");
 
КонецПроцедуры

Выгрузка таблицы значений в DBF.

Процедура СохранитьТЗвБДФ(ТЗ, Файл, Кодировка = Неопределено)
 ДБФ = Новый XBase;
 Если Кодировка = Неопределено Тогда
 Кодировка = КодировкаXBase.OEM;
 КонецЕсли;    
 ДБФ.Кодировка = Кодировка;
 
 Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
 Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
 Тип = "S";
 Длина = Колонка.ТипЗначения.КвалификаторыСтроки.Длина;
 Если Длина = 0 Тогда
 Длина = 100;
 КонецЕсли;    
 Точность = 0;
 
 ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда    
 Тип = "N";
 Длина = Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность;
 Точность = Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
 Если Длина = 0 Тогда
 Длина = 15;
 Точность = 3;
 КонецЕсли;    
 
 ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Дата")) Тогда    
 Тип = "D";
 Длина = 0;
 Точность = 0;
 
 ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Булево")) Тогда    
 Тип = "L";
 Дина = 0;
 Точность = 0;
 
 Иначе
 Тип = "S";
 Длина = 100;
 Точность = 0;
 КонецЕсли;    
 
 ДБФ.поля.Добавить(Колонка.Имя, Тип, Длина, Точность);
 КонецЦикла;
 ДБФ.СоздатьФайл(Файл);
 
 Для Каждого Стр ИЗ ТЗ Цикл
 ДБФ.Добавить();
 ЗаполнитьЗначенияСвойств(ДБФ, Стр);
 ДБФ.Записать();
 КонецЦикла;    
КонецПроцедуры

Процедура СохранитьТЗвБДФ(ТЗ, Файл, Кодировка = Неопределено)
    ДБФ = Новый XBase;
    Если Кодировка = Неопределено Тогда
        Кодировка = КодировкаXBase.OEM;
    КонецЕсли;    
    ДБФ.Кодировка = Кодировка;
    
    Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
        Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
            Тип = "S";
            Длина = Колонка.ТипЗначения.КвалификаторыСтроки.Длина;
            Если Длина = 0 Тогда
                Длина = 100;
            КонецЕсли;    
            Точность = 0;
            
        ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда    
            Тип = "N";
            Длина = Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность;
            Точность = Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
            Если Длина = 0 Тогда
                Длина = 15;
                Точность = 3;
            КонецЕсли;    
            
        ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Дата")) Тогда    
            Тип = "D";
            Длина = 0;
            Точность = 0;
            
        ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Булево")) Тогда    
            Тип = "L";
            Дина = 0;
            Точность = 0;
            
        Иначе
            Тип = "S";
            Длина = 100;
            Точность = 0;
        КонецЕсли;    
        
        ДБФ.поля.Добавить(Колонка.Имя, Тип, Длина, Точность);
    КонецЦикла;
    ДБФ.СоздатьФайл(Файл);
    
    Для Каждого Стр ИЗ ТЗ Цикл
        ДБФ.Добавить();
        ЗаполнитьЗначенияСвойств(ДБФ, Стр);
        ДБФ.Записать();
    КонецЦикла;    
КонецПроцедуры