Загрузка файла dbf в таблицу значений

1. Для начала надо выбрать файл с диска. Это можно сделать при помощи такой функции:

Функция ВыбратьФайл(ПолноеИмяФайла, Режим, Заголовок, Фильтр)
    Диалог = Новый ДиалогВыбораФайла(Режим);
    Диалог.Заголовок                 = Заголовок;
    Диалог.ПредварительныйПросмотр   = Ложь;
    Диалог.Фильтр                    = Фильтр;

    Если ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
        Диалог.ПолноеИмяФайла = ПолноеИмяФайла;
    КонецЕсли;

    Если Диалог.Выбрать() Тогда
        ПолноеИмяФайла= Диалог.ПолноеИмяФайла;
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
КонецФункции


ПолноеИмяФайла — переменная, где будет храниться путь к файлу;

Режим — Режим выбора файла;
Заголовок — заголовок диалога открытия файла;
Фильтр — Фильтр типов файла
Вызвать данную функция можно, например, из события НачалоВыбора поля ввода

Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка= Ложь;
	если Не ВыбратьФайл(ПутьКФайлу, РежимДиалогаВыбораФайла.Открытие, "Выбор файла данных", "*.dbf") тогда
		Сообщить("Не удалось выбрать файл!");
	КонецЕсли;
КонецПроцедуры

2. Открыть dbf файл

Функция ОткрытьФайл(Путь, Файл) Экспорт
	Файл = новый XBase;
	Файл.ОткрытьФайл(Путь);
	если Не Файл.Открыта() тогда
		возврат Ложь;
	КонецЕсли;
	Файл.Кодировка = КодировкаXBase.OEM;
	Возврат Истина;
КонецФункции

3. Загружаем открытый dbf файл в таблицу значений

Функция ЗагрузитьФайлВТаблицуЗначений(Файл,Путь) Экспорт
   Сообщить("Начало загрузки файла в таблицу значений файла"+Путь);

   МассивТиповСтрока = новый Массив;
   МассивТиповСтрока.Добавить(Тип("Строка"));

   МассивТиповЧисло = новый Массив;
   МассивТиповЧисло.Добавить(Тип("Число"));

   МассивТиповДата = новый Массив;
   МассивТиповДата.Добавить(Тип("Дата"));

   ТЗ = новый ТаблицаЗначений;

   попытка
      Для каждого Поле из Файл.поля цикл
	 ТЗ.Колонки.Добавить(Поле.Имя,Новый ОписаниеТипов(МассивТиповЧисло,?(Поле.Тип = "N",МассивТиповЧисло,?(Поле.Тип = "D",МассивТиповДата,МассивТиповСтрока))));	
      КонецЦикла;

      КоличествоКолонок = ТЗ.Колонки.Количество();
      сч = 1;

      Пока Не Файл.ВКонце() цикл
	  НоваяСтрока = ТЗ.Добавить();
	  ЗаполнитьЗначенияСвойств(НоваяСтрока,Файл);

	  для Колонка = 0 по КоличествоКолонок - 1 цикл
	     если ТипЗнч(НоваяСтрока[Колонка]) = Тип("Строка") тогда
		 НоваяСтрока[Колонка] = СокрЛП(НоваяСтрока[Колонка]);
	     конецесли;
	  КонецЦикла;

	  Сообщить("Обработана строка "+сч);

	  сч = сч + 1;
          Файл.Следующая();
      КонецЦикла;

      возврат ТЗ;
  исключение
      Сообщить("НЕ УДАЛОСЬ СОЗДАТЬ ТАБЛИЦУ ЗНАЧЕНИЙ!");
      Возврат Неопределено;
  КонецПопытки;
КонецФункции

4. Общая последовательность действий по загрузке файла dbf в таблицу значений, должна выглядеть так:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	если Не ОткрытьФайл(ПутьКФайлу, БД) тогда
		Сообщить("Не удалось открыть файл базы данных!");
		возврат;
	КонецЕсли;

	ТЗ = ЗагрузитьФайлВТаблицуЗначений(БД, ПутьКФайлу);	

	БД.ЗакрытьФайл();
КонецПроцедуры

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>