DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// ПРИМЕР 1 // Запись данных справочника в DBF-файл: БД = Новый XBase; // проектируется структура таблицы, т.е. имена и типы полей БД.Поля.Добавить("Code","N",6,0); // числовое поле Код БД.Поля.Добавить("Name","S",30); // строковое поле Наименование // создание файла с указанной структурой БД.СоздатьФайл("C://1.dbf"); Выборка = Справочники.Клиенты.Выбрать(); Пока Выборка.Следующий() Цикл // создается новая пустая строка таблицы БД.Добавить(); // заполняем поля новой строки БД.Code = Выборка.Код; БД.Name = Выборка.Наименование; КонецЦикла; // зафиксировать изменения в файле БД.ЗакрытьФайл(); // Чтение данных из DBF-файла в справочник: БД = Новый XBase; БД.ОткрытьФайл("C://1.dbf"); // считываем файл построчно Пока БД.Следующая() Цикл // создаем новый элемент справочника Спр=Справочники.Клиенты.СоздатьЭлемент(); // переносим в реквизиты данные из текущей строки таблицы Спр.Код = БД.Сode; Спр.Наименование = БД.Name; Спр.Записать(); КонецЦикла; БД.ЗакрытьФайл(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// ПРИМЕР 2 // Выгрузка данных в DBF БД = Новый XBase; БД.Поля.Добавить("CODE", "S", 5); БД.Поля.Добавить("NAME", "S", 40); БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx"); БД.Индексы.Добавить("IDXCODE", "CODE"); ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx"); БД.АвтоСохранение = Истина; Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока Выборка.Следующий() Цикл БД.Добавить(); БД.CODE = Выборка.Код; БД.NAME = Выборка.Наименование; КонецЦикла; БД.ЗакрытьФайл(); // Загрузка данных из DBF БД = Новый XBase; БД.ОткрытьФайл(Путь + "start.dbf", Путь + "index.cdx"); БД.ТекущийИндекс = БД.Индексы.IDXCODE; Пока БД.Следующая() Цикл Сообщить(БД.CODE); Сообщить(БД.NAME); КонецЦикла; БД.ЗакрытьФайл(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// Выгрузка ТЗ, Таблицы значений в DBF файл НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма ДБФ = СоздатьОбъект("XBASE"); ДБФ.ДобавитьПоле("IsGroup","N",1,0); ДБФ.ДобавитьПоле("Level","N",1,0); ДБФ.ДобавитьПоле("ParentCode","S",8,0); ДБФ.ДобавитьПоле("Code","S",8,0); ДБФ.ДобавитьПоле("Descr","S",60,0); ДБФ.КодоваяСтраница(0); // Windows ДБФ.СоздатьФайл("c:\export.dbf"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДБФ.Добавить(); ДБФ.IsGroup= ТЗ.ЭтоГруппа; ДБФ.Level= ТЗ.Уровень; ДБФ.ParentCode = ТЗ.КодРодителя; ДБФ.Code= ТЗ.Код; ДБФ.Descr= СокрЛП(ТЗ.Наименование); ДБФ.Записать(); КонецЦикла; ДБФ.ЗакрытьФайл(); КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма // Рассчитываем продолжительность выполнения алгоритма в секундах Длительность = Окр((КонВремя-НачВремя)/1000,3); Сообщить("Время выгрузки в DBF файл: "+Длительность+" с"); // Загрузка ТЗ, Таблицы значений из DBF файла НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма ДБФ = СоздатьОбъект("XBASE"); ДБФ.КодоваяСтраница(0); // Windows ДБФ.ОткрытьФайл("c:\export.dbf"); Если ДБФ.Открыта()=0 Тогда Сообщить("Файл DBF не открыт !","!"); Возврат; КонецЕсли; КолСтр = ДБФ.КоличествоЗаписей(); н= 0; ДБФ.Первая(); ПризнакГруппы = ДБФ.IsGroup; ТекУровень = ДБФ.Level; ТекКодРодителя = ДБФ.ParentCode; ТекКод = ДБФ.Code; ТекНаименоване = ДБФ.Descr; н = н+1; Состояние("В файле прочитано записей "+н+" из "+КолСтр); Пока ДБФ.Следующая()=1 Цикл ПризнакГруппы = ДБФ.IsGroup; ТекУровень = ДБФ.Level; ТекКодРодителя = ДБФ.ParentCode; ТекКод = ДБФ.Code; ТекНаименоване = ДБФ.Descr; н = н+1; Состояние("В файле прочитано записей "+н+" из "+КолСтр); КонецЦикла; ДБФ.ЗакрытьФайл(); КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма // Рассчитываем продолжительность выполнения алгоритма в секундах Длительность = Окр((КонВремя-НачВремя)/1000,3); Сообщить("Время чтения DBF файла: "+Длительность+" с"); |