Чтение DBF

{codecitation class="brush: vb; gutter: true;" width="500px" }

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

{/codecitation}

 

 

Запись DBF

{codecitation style="brush: xml;"}

// Обработчик выгрузки в 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 = Выборка.Цена;
ФайлНоменклатура.Записать();
КонецЦикла;

ФайлНоменклатура.ЗакрытьФайл();

Сообщить("Все закончено. Вздохни с облегчением!;)");

КонецПроцедуры

{/codecitation}

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

{codecitation style="brush: xml;"}

Процедура СохранитьТЗвБДФ(ТЗ, Файл, Кодировка = Неопределено)
ДБФ = Новый XBase;
Если Кодировка = Неопределено Тогда
Кодировка = КодировкаXBase.OEM;
КонецЕсли;   
ДБФ.Кодировка = Кодировка;

Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
Тип = "S";
Длина = Колонка.ТипЗначения.КвалификаторыСтроки.Длина;
Если Длина = 0 Тогда
Длина = 100;
КонецЕсли;   
Точность = 0;

ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда   
Тип = "N";
Длина = Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность;
Точность = Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
Если Длина = 0 Тогда
Длина = 15;
Точность = 3;
КонецЕсли;   

ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Дата")) Тогда   
Тип = "D";
Длина = 0;
Точность = 0;

ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Булево")) Тогда   
Тип = "L";
Дина = 0;
Точность = 0;

Иначе
Тип = "S";
Длина = 100;
Точность = 0;
КонецЕсли;   

ДБФ.поля.Добавить(Колонка.Имя, Тип, Длина, Точность);
КонецЦикла;
ДБФ.СоздатьФайл(Файл);

Для Каждого Стр ИЗ ТЗ Цикл
ДБФ.Добавить();
ЗаполнитьЗначенияСвойств(ДБФ, Стр);
ДБФ.Записать();
КонецЦикла;   
КонецПроцедуры

{/codecitation}

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