Многие сервисы предоставляют или принимают данные в DBF, потому работа с файлами DBF необходима. Например выгрузка о перечислениях заработной платы в банк.
Задача
Из табличной части документа «Начисление заработной платы» организовать выгрузку данных в файл формата DBF, файл должен содержать поля:
- NAME — ФИО сотрудника, строка 50;
- ACCOUNT — Номер лицевого счета, строка 20;
- AMOUNT — Сумма перечисления, число 15,2.
Имя файла произвольное, указывается пользователем.
В рамках данной задачи не рассматривается создание индексных файлов и чтение уже готовых файлов, данный функционал легко разрабатывается по справке.
Решение
Открываем синтакс-помощник, читаем справку о XBase и пешем функцию получения данных и формирования, по традиции код снабжен комментариями:
&НаСервере Функция СформироватьФайлВыгрузкиСервер(ДокументНачисления) // Получение данных для выгрузки Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументНачисления", ДокументНачисления); Запрос.Текст = "ВЫБРАТЬ | ДокументНачисления.ФИО, | ДокументНачисления.НомерСчета, | ДокументНачисления.Сумма |ИЗ | Документ.НачислениеЗаработнойПлаты.Начисления КАК ДокументНачисления |ГДЕ | ДокументНачисления.Ссылка = &ДокументНачисления"; Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Возврат Неопределено; КонецЕсли; // Метод ПолучитьИмяВременногоФайла() не подошел, // имя формируемого файла должно быть не более 8 символов ИмяФайла = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd") + ".dbf"; ВременныйФайл = КаталогВременныхФайлов() + ИмяФайла; // Создание файла и формирование таблицы ДБФ = Новый XBase(); ДБФ.Кодировка = КодировкаXBase.OEM; ДБФ.Поля.Добавить("NAME", "S", 100); ДБФ.Поля.Добавить("ACCUNT", "S", 20); ДБФ.Поля.Добавить("AMOUNT", "N", 15, 2); ДБФ.СоздатьФайл(ВременныйФайл); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл // Добавление строк таблицы ДБФ.Добавить(); ДБФ.УстановитьЗначениеПоля("NAME", ВРЕГ(Выборка.ФИО)); ДБФ.УстановитьЗначениеПоля("ACCUNT", Выборка.НомерСчета); ДБФ.УстановитьЗначениеПоля("AMOUNT", Выборка.Сумма); ДБФ.Записать(); КонецЦикла; // Закроем файл ДБФ.ЗакрытьФайл(); // Подготовим к передаче на клиент АдресВХ = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл)); Возврат АдресВХ; КонецФункции
Функция возвращает Неопределено или АдресВременногоХранилища, в которое помещен файл DBF.
Теперь остается написать команду, которая вызовет серверный метод и сохранит результат в файл на клиенте:
&НаКлиенте Процедура СформироватьФайлВыгрузки(Команда) Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; Состояние("Формирование файла", , "Формируется файл выгрузки в банк"); // Вызов сервеной функции с формированем файла РезультатВыгрузки = СформироватьФайлВыгрузкиСервер(Объект.ДокументНачисления); //Функция возвращает АдресВременногоХраналища или Неопределено Если РезультатВыгрузки = Неопределено Тогда Возврат; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(РезультатВыгрузки); ДвоичныеДанные.Записать(Объект.ПутьКФалу); Состояние("Файл сформирован", , "Сформирован файл выгрузки в банк"); КонецПроцедуры
Функционал относящийся к формированию файла DBF описан. Остальной функционал к теме не относится и легко описывается.