Функция загрузки из dbf

Универсальная функция чтения данных из dbf файлов и создания таблицы значений.

Функция возвращает таблицу значений с колонками, имена которых заданы в списке колонок. Далее по этой ТЗ легко заполнить, например, табличную часть используя ЗаполнитьЗначенияСвойств().

&НаСервере
// Функция загружает данные из указанного dbf файла в таблицу значений.
// Параметры:
//  ИмяФайла — строка — полный путь к файлу.
//  Кодировка — КодировкаXBase.
//  СписокКолонок — СписокЗначений — список колонок, которые будут прочитаны,
//      СписокКолонок.Значение — имя колонки в dbf файле,
//      СписокКолонок.Представление — имя колонки в таблице значений,
//      СписокКолонок.Пометка — читать колонку из файла; истина = читать,
//      ложь = колонка будет создана в итоговой ТЗ, но не заполнена.
//
Функция ЗаполнитьТЗизDBF(ИмяФайла, Кодировка, СписокКолонок)

    // Открытие файла данных
   
ФайлДанных = Новый XBase(ИмяФайла);
   
ФайлДанных.Кодировка = Кодировка;
    Если Не
ФайлДанных.Открыта() Тогда
       
Сообщение = Новый СообщениеПользователю;
       
Сообщение.Текст = «Не удалось открыть файл » + ИмяФайла;
       
Сообщение.Сообщить();
        Возврат Неопределено;
    КонецЕсли;

    // Переменные и объекты, что бы не создавать постоянно в цикле
   
ОписаниеБулево = Новый ОписаниеТипов(«Булево»);
   
ОписаниеДаты = Новый ОписаниеТипов(«Дата»,,, Новый КвалификаторыДаты(ЧастиДаты.Дата));

    // Создание таблицы значений
   
ТабЗнач = Новый ТаблицаЗначений;
    Для Каждого
Поле из ФайлДанных.Поля Цикл
       
Колонка = СписокКолонок.НайтиПоЗначению(Поле.Имя);
        Если
Колонка <> Неопределено Тогда
            Если
Поле.Тип = «L» Тогда
               
Тип = ОписаниеБулево;
            ИначеЕсли
Поле.Тип = «D» Тогда
               
Тип = ОписаниеДаты;
            ИначеЕсли (
Поле.Тип = «N») ИЛИ (Поле.Тип = «F») Тогда
               
Тип = Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(Поле.Длина, Поле.Точность));
            Иначе
               
Тип = Новый ОписаниеТипов(«Строка»,, Новый КвалификаторыСтроки(Поле.Длина));
            КонецЕсли;
           
ТабЗнач.Колонки.Добавить(Колонка.Представление, Тип);
        КонецЕсли;
    КонецЦикла;

    // Заполнение строк таблицы
   
Если (ТабЗнач.Колонки.Количество() <> 0) И (ФайлДанных.Первая()) Тогда
        Пока Истина Цикл
           
СтрокаТаб = ТабЗнач.Добавить();
            Для Каждого
Поле из ФайлДанных.Поля Цикл
               
Колонка = СписокКолонок.НайтиПоЗначению(Поле.Имя);
                Если (
Колонка <> Неопределено) И Колонка.Пометка Тогда
                   
СтрокаТаб[Колонка.Представление] = ФайлДанных[Поле.Имя];
                КонецЕсли;
            КонецЦикла;
            Если Не
ФайлДанных.Следующая() Тогда Прервать; КонецЕсли;
        КонецЦикла;
    КонецЕсли;

    ФайлДанных.ЗакрытьФайл();
    Возврат
ТабЗнач;
КонецФункции

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *