DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
Код 1C v 8.х
БД = Новый XBase;
БД. Поля. Добавить( "Code" , "N" , 6 , 0 ) ;
БД. Поля. Добавить( "Name" , "S" , 30 ) ;
БД. СоздатьФайл( "C://1.dbf" ) ;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
БД. Добавить( ) ;
БД. Code = Выборка. Код;
БД. Name = Выборка. Наименование;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
БД = Новый XBase;
БД. ОткрытьФайл( "C://1.dbf" ) ;
Пока БД. Следующая( ) Цикл
Спр= Справочники. Клиенты. СоздатьЭлемент( ) ;
Спр. Код = БД. Сode;
Спр. Наименование = БД. Name;
Спр. Записать( ) ;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
Код 1C v 8.х
БД = Новый XBase;
БД. Поля. Добавить( "CODE" , "S" , 5 ) ;
БД. Поля. Добавить( "NAME" , "S" , 40 ) ;
БД. СоздатьФайл( Путь + "start.dbf" , Путь + "index.cdx" ) ;
БД. Индексы. Добавить( "IDXCODE" , "CODE" ) ;
ФлИБД = БД. СоздатьИндексныйФайл( Путь + "index.cdx" ) ;
БД. АвтоСохранение = Истина ;
Выборка = Справочники. Номенклатура. ВыбратьИерархически( ) ;
Пока Выборка. Следующий( ) Цикл
БД. Добавить( ) ;
БД. CODE = Выборка. Код;
БД. NAME = Выборка. Наименование;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
БД = Новый XBase;
БД. ОткрытьФайл( Путь + "start.dbf" , Путь + "index.cdx" ) ;
БД. ТекущийИндекс = БД. Индексы. IDXCODE;
Пока БД. Следующая( ) Цикл
Сообщить( БД. CODE) ;
Сообщить( БД. NAME) ;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
Код 1C v 7.x
НачВремя = _GetPerformanceCounter( ) ;
ДБФ = СоздатьОбъект( "XBASE" ) ;
ДБФ. ДобавитьПоле( "IsGroup" , "N" , 1 , 0 ) ;
ДБФ. ДобавитьПоле( "Level" , "N" , 1 , 0 ) ;
ДБФ. ДобавитьПоле( "ParentCode" , "S" , 8 , 0 ) ;
ДБФ. ДобавитьПоле( "Code" , "S" , 8 , 0 ) ;
ДБФ. ДобавитьПоле( "Descr" , "S" , 60 , 0 ) ;
ДБФ. КодоваяСтраница( 0 ) ;
ДБФ. СоздатьФайл( "c:\export.dbf" ) ;
ТЗ. ВыбратьСтроки( ) ;
Пока ТЗ. ПолучитьСтроку( ) = 1 Цикл
ДБФ. Добавить( ) ;
ДБФ. IsGroup= ТЗ. ЭтоГруппа;
ДБФ. Level= ТЗ. Уровень;
ДБФ. ParentCode = ТЗ. КодРодителя;
ДБФ. Code= ТЗ. Код;
ДБФ. Descr= СокрЛП( ТЗ. Наименование) ;
ДБФ. Записать( ) ;
КонецЦикла ;
ДБФ. ЗакрытьФайл( ) ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время выгрузки в DBF файл: " + Длительность+ " с" ) ;
НачВремя = _GetPerformanceCounter( ) ;
ДБФ = СоздатьОбъект( "XBASE" ) ;
ДБФ. КодоваяСтраница( 0 ) ;
ДБФ. ОткрытьФайл( "c:\export.dbf" ) ;
Если ДБФ. Открыта( ) = 0 Тогда
Сообщить( "Файл DBF не открыт !" , "!" ) ;
Возврат ;
КонецЕсли ;
КолСтр = ДБФ. КоличествоЗаписей( ) ;
н= 0 ;
ДБФ. Первая( ) ;
ПризнакГруппы = ДБФ. IsGroup;
ТекУровень = ДБФ. Level;
ТекКодРодителя = ДБФ. ParentCode;
ТекКод = ДБФ. Code;
ТекНаименоване = ДБФ. Descr;
н = н+ 1 ;
Состояние( "В файле прочитано записей " + н+ " из " + КолСтр) ;
Пока ДБФ. Следующая( ) = 1 Цикл
ПризнакГруппы = ДБФ. IsGroup;
ТекУровень = ДБФ. Level;
ТекКодРодителя = ДБФ. ParentCode;
ТекКод = ДБФ. Code;
ТекНаименоване = ДБФ. Descr;
н = н+ 1 ;
Состояние( "В файле прочитано записей " + н+ " из " + КолСтр) ;
КонецЦикла ;
ДБФ. ЗакрытьФайл( ) ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время чтения DBF файла: " + Длительность+ " с" ) ;
Код 1C v 7.x Процедура ПоказатьДБФ(дбф, имяФайла) далее
Процедура Сформировать()
перем дбф, флаг, папка;
тЗнач. Очистить( ) ;
флаг= ФС. ВыбратьФайл( 0 , имяФайла, папка, "Выберете DBF файл" , "|*.DBF" ) ;
Если флаг= 0 Тогда
возврат ;
КонецЕсли ;
дбф= СоздатьОбъект( "Xbase" ) ;
дбф. ОткрытьФайл( папка+ имяФайла) ;
папк= папка;
файл= имяФайла;
Если дбф. открыта( ) = 0 Тогда
Предупреждение( "Не могу открыть файл" + имяФайла) ;
возврат ;
КонецЕсли ;
ПоказатьДБФ( дбф, имяФайла) ;
КонецПроцедуры
Процедура ПоказатьДБФ(дбф, имяФайла)
Перем ин, имяПоля, тип, длина, точность, номСтроки;
для ин= 1 по дбф. КоличествоПолей( ) цикл
дбф. ОписаниеПоля( ин, имяПоля, тип, длина, точность) ;
тЗнач. НоваяКолонка( имяПоля, тип) ;
тЗнач. УстановитьПараметрыКолонки( ин, тип, длина, точность, , мин( 10 , длина) ) ;
конецЦикла ;
КолП= дбф. КоличествоПолей( ) ;
НомС= ДБФ. КоличествоЗаписей( ) ;
загТЗнач= "Файл " + имяФайла;
дбф. Первая( ) ;
номСтроки= 0 ;
Пока дбф. ВКонце( ) = 0 Цикл
номСтроки= номСтроки+ 1 ;
тЗнач. НоваяСтрока( номСтроки) ;
для ин= 1 по дбф. КоличествоПолей( ) цикл
тЗнач. УстановитьЗначение( номСтроки, ин, дбф. ПолучитьЗначениеПоля( ин) ) ;
КонецЦикла ;
дбф. Следующая( ) ;
конецЦикла ;
КонецПроцедуры