Создание файла формата DBF в 1С
Задача: создать силами платформы 1c файл в формате DBF (выгрузка в формате dbf)
Решение: собственно в 1С всё есть. Будем использовать метод XBase. При работе с DBF важно помнить, что это очень старый формат хранения данных, но тем не менее до сих пор используется для различного вида обменов. Его ограничениями являются:
- длина имени файлов не более 8 символов, поэтому при генерации имени временного файла, не получится использовать функцию ПолучитьИмяВременногоФайла()
- файл не должен быть больше 2ггб
- имя колонки не может быть длиннее 10 символов
- файл создается НЕ в кодировке UTF-8 (он в такую не умеет)
- файл нужно сначала создать, потом закрыть, потом открыть и записать в него данные
А так, файл создаётся достаточно просто:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 	объект.РезультирующиеДанные.Очистить(); 		нс=объект.РезультирующиеДанные.Добавить(); 		нс.Код_фиас="1112232423"; 		нс.НомерКвартиры="43"; 		нс.Задолженость="20"; 		нс.Переплата="12"; 		нс.Услуга="КТВ+Домофон"; 		нс.ЛС_База="235465"; 		нс.ЛС_ЕПД="223234234"; 		нс.ЛС_Электрика="445457223"; 		нс.Адрес="г. Вологда,ул Лёнина 3"; 		нс.АдресДоставки="г. Сокол, ул Лёнина 4";	 КонецПроцедуры &НаСервере Функция ВыгрузитьDBFНаСервере()     	answer=Новый Структура("хранилище,имяфайла"); 	НоваяТаблица = Новый XBase;     НоваяТаблица.Кодировка = КодировкаXBase.ANSI;     НоваяТаблица.Поля.Добавить("fias","S",50); 	НоваяТаблица.Поля.Добавить("flat","S",10); 	НоваяТаблица.Поля.Добавить("credit","N",10,2); 	НоваяТаблица.Поля.Добавить("debet","N",10,2); 	НоваяТаблица.Поля.Добавить("service","S",50); 	НоваяТаблица.Поля.Добавить("ls_base","S",10); 	НоваяТаблица.Поля.Добавить("ls_epd","S",10); 	НоваяТаблица.Поля.Добавить("ls_electro","S",10); 	НоваяТаблица.Поля.Добавить("address","S",100); 	НоваяТаблица.Поля.Добавить("delivery","S",100); 	имя_фр_файла=Лев(Новый УникальныйИдентификатор(),8)+".dbf"; 	ПутьКНовомуDBF = КаталогВременныхФайлов()+"/"+имя_фр_файла;     НоваяТаблица.СоздатьФайл(ПутьКНовомуDBF);      НоваяТаблица.ЗакрытьФайл();	 	Таблица = Новый XBase;     Таблица.ОткрытьФайл(ПутьКНовомуDBF,, Ложь);    	 	для каждого стр из объект.РезультирующиеДанные цикл 	   Таблица.Добавить();  	   Таблица.fias = стр.Код_фиас;  	   Таблица.credit = стр.НомерКвартиры; 	   Таблица.debet = стр.Задолженость; 	   Таблица.service = стр.Переплата; 	   Таблица.ls_base = стр.Услуга; 	   Таблица.ls_epd = стр.ЛС_База; 	   Таблица.ls_electro = стр.ЛС_ЕПД; 	   Таблица.address = стр.address; 	   Таблица.delivery = стр.АдресДоставки;  	   Таблица.Записать();  	конеццикла;	 	Таблица.ЗакрытьФайл(); 	Двоичное=Новый ДвоичныеДанные(ПутьКНовомуDBF); 	answer.хранилище=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);	 	answer.имяфайла=имя_фр_файла; 	возврат answer;	 КонецФункции &НаКлиенте Процедура ВыгрузитьDBF(Команда) 	рез=ВыгрузитьDBFНаСервере(); 		Двоичное=ПолучитьИзВременногоХранилища(рез.хранилище);			 		ИмяФайла = КаталогВременныхФайлов() + рез.имяфайла;		 		Двоичное.Записать(ИмяФайла); 		ЗапуститьПриложение(ИмяФайла);	 КонецПроцедуры | 
