helpf.pro
Регистрация
 +2 
Распечатать

Выгрузка / Загрузка данных посредством DBF файлов?

DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
Код 1C v 8.х
  // ПРИМЕР 1
// Запись данных справочника в DBF-файл:
БД = Новый XBase;
// проектируется структура таблицы, т.е. имена и типы полей
БД.Поля.Добавить("Code","N",6,0); // числовое поле Код
БД.Поля.Добавить("Name","S",30); // строковое поле Наименование
// создание файла с указанной структурой
БД.СоздатьФайл("C://1.dbf");
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// создается новая пустая строка таблицы
БД.Добавить();
// заполняем поля новой строки
БД.Code = Выборка.Код;
БД.Name = Выборка.Наименование;
КонецЦикла;
// зафиксировать изменения в файле
БД.ЗакрытьФайл();

// Чтение данных из DBF-файла в справочник:
БД = Новый XBase;
БД.ОткрытьФайл("C://1.dbf");
// считываем файл построчно
Пока БД.Следующая() Цикл
// создаем новый элемент справочника
Спр=Справочники.Клиенты.СоздатьЭлемент();
// переносим в реквизиты данные из текущей строки таблицы
Спр.Код = БД.Сode;
Спр.Наименование = БД.Name;
Спр.Записать();
КонецЦикла;
БД.ЗакрытьФайл();

Код 1C v 8.х
  // ПРИМЕР 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);
КонецЦикла;
БД.ЗакрытьФайл();


Код 1C v 7.x
  // Выгрузка ТЗ, Таблицы значений в 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 файла: "+Длительность+" с");
Разместил:   Версии: | 7.x | 8.x |  Дата:   Прочитано: 91052
 +2 
Распечатать
Возможно, вас также заинтересует
База 1С вылетает, виснет, не грузится, падает с ошибкой? 0
Есть ряд методов, которыми можно попытаться " поднять" упавшую базу 1С 8.х Но сперва нужно сделать резервную копию! Сделайте резервную копию простым копированием папки базы, выгрузка не всегда может быть корректна. Удалить все файлы в папке базы,
Внутренняя ошибка компоненты DBENG8 0
Ошибка СУБД: Внутренняя ошибка компоненты dbeng8 по причине: Внутренняя ошибка компоненты dbeng8 Решение: 1: Тестирование исправление базы 2: Проверка базы используя chdbfl.exe 3: Обновить версию Платформы 4: Обновить dbeng8.dll в bin
Выборка данных из DBF файлов запросом 0
RS= Новый COMОбъект(" ADODB.Recordset" ); SSource = " S_elect * FROM nomen.dbf WHERE cost 100" ; SConnect = " Provider=MSDASQL.1;Persist Security Info=False;Data Source=nomen.dbf;Initial Catalog=D:" ; RS.Open(SSource,SConnect); Пока RS.EOF() =
Выгрузка / Загрузка данных посредством XML файлов? 1
В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных – ЗаписьXML и ЧтениеXML . Запись данных справочника в XML-файл: Запись = Новый ЗаписьXML; Запись.О
Выгрузка / Загрузка данных посредством текстовых (TXT) файлов 5
Для работы с текстовыми документами существуют три типа данных – ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста . Разница двух подходов состоит в способе загрузки документа: ТекстовыйДокумент загружает файл целиком и далее построчно обрабатывает е
Посмотреть все результаты поиска похожих
Комментарии
cons74
08.12.2014 14:52Комментарий: 3
cons74

В примере 1 нет ни признака автосохранения у БД, ни запись() после добавления строки в файл. Это ошибка.

DJ_Serega
03.04.2012 12:12Комментарий: 2
DJ_Serega
Olden, обычно первая запись это шапка *03
Olden
02.04.2012 15:46Комментарий: 1
Olden
Код 1C v 7.x
 Пока ДБФ.Следующая()=1 Цикл

Если так писать, то первую запись будем всегда пропускать.
Правильно так:
Код 1C v 8.х
 Пока НЕ ДБФ.ВКонце()=1 Цикл
//текст
ДБФ.Следующая();
КонецЦикла;
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.