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