ТаблицаЗначений из DBF

SDV 34 7

Функция загружает данные из dbf файла в таблицу значений. За основу взято https://infostart.ru/public/103060/ Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672

// Функция загружает данные из dbf файла в таблицу значений.
// Зависит от ПутьКФайлу() https://fastcode.im/Templates/6672
// Параметры:
//  ИмяФайла - Строка - полный путь к файлу. Если не указан, то откроется диалог выбора пути к файлу.
//  Кодировка - КодировкаXBase - Если не указан, то КодировкаXBase.OEM
//
Функция ТаблицаЗначенийИзDBF(Кодировка = Неопределено, ПутьКФайлу = Неопределено) Экспорт
	
	Если Кодировка = Неопределено Тогда 
		Кодировка = КодировкаXBase.OEM;
	КонецЕсли;
	
	Если ПутьКФайлу = Неопределено Тогда
		ПутьКФайлу = ПутьКФайлу("Выберите dbf-файл","(*.dbf)|*.dbf",РежимДиалогаВыбораФайла.Открытие);
	КонецЕсли;
	
	// Открытие файла данных
	ФайлДанных = Новый XBase(ПутьКФайлу);
	ФайлДанных.Кодировка = Кодировка;
	Если Не ФайлДанных.Открыта() Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось открыть файл " + ПутьКФайлу;
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецЕсли;
	
	// Переменные и объекты, что бы не создавать постоянно в цикле
	ОписаниеБулево = Новый ОписаниеТипов("Булево");
	ОписаниеДаты = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата));
	
	// Создание таблицы значений
	ТаблицаЗначений = Новый ТаблицаЗначений;
	Для Каждого Поле из ФайлДанных.Поля Цикл
		Если Поле.Тип = "L" Тогда
			Тип = ОписаниеБулево;
		ИначеЕсли Поле.Тип = "D" Тогда
			Тип = ОписаниеДаты;
		ИначеЕсли (Поле.Тип = "N") ИЛИ (Поле.Тип = "F") Тогда
			Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(Поле.Длина, Поле.Точность));
		Иначе
			Тип = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(Поле.Длина));
		КонецЕсли;
		ТаблицаЗначений.Колонки.Добавить(Поле.Имя, Тип);
	КонецЦикла;
	
	// Заполнение строк таблицы
	Работаем = ФайлДанных.Первая();
	Пока Работаем Цикл
		СтрокаТаблицы = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ФайлДанных);
		Работаем = ФайлДанных.Следующая();
	КонецЦикла;
	
	ФайлДанных.ЗакрытьФайл();
	Возврат ТаблицаЗначений;
КонецФункции
Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз

Комментарии

SDV
#1, 19 апреля 2020 22:16

Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672


Похожие публикации

ТаблицаЗначенийВТаблицуХТМЛ

Сохранение таблицы значений в XML

Отбор по таблице значений

Дополнить таблицу значений - приемника данными из таблицы значений - источника

Типизация таблицы значений

Модератору