gifts2017

Пример обращения с файлами на тонком клиенте

Опубликовал Дмитрий Ивакин (pit201201) в раздел Программирование - Практика программирования

Статья и приложенная к ней обработка представляет академический интерес. В ней приведен пример простого и масштабируемого создания dbf-файлов на сервере. Получение их на клиенте. А затем создание архива из этих файлов внешним архиватором.

Обработка по требованию пользователя создает dbf-файлы на сервере с помощью процедур, описанных в модуле объекта. Эти действия выполняет нижеприведенная процедура.

&НаКлиенте
Процедура Выгрузить(Команда)
	
	Если не ЗначениеЗаполнено(ПутьКФайлу) Тогда 
		Сообщить ("Не выбран каталог выгрузки данных!");	
		Возврат;
	КонецЕсли;	
	
	ИмяАрхива = "dict"+СтрЗаменить(Формат(ТекущаяДата(),"ДЛФ=D"),".","")+".zip";
	
	ОчиститьВременнуюПапкуНаКлиенте();
	ОчиститьВременнуюПапкуНаСервере();
	
	СоздатьПапкуНаСервере();
	СоздатьПапкуНаКлиенте();	
	
	ВыгрузитьДанныеНаСервере(ИмяАрхива);
	ПереместитьФайлыССервераНаКлиент();
	ОчиститьВременнуюПапкуНаСервере();
	
	ВрКаталогКлиента = ПолучитьИмяВременнойПапкиНаКлиенте();
	ЗапаковатьФайлыВАрхивНаКлиенте(ВрКаталогКлиента+ИмяАрхива,ВрКаталогКлиента,"*.dbf");
	КопироватьФайл(ВрКаталогКлиента+ИмяАрхива,?(Прав(ПутьКФайлу,1)="\",ПутьКФайлу+"",ПутьКФайлу+"\")+ИмяАрхива);
	ОчиститьВременнуюПапкуНаКлиенте();
	
КонецПроцедуры

Файлы создаются на сервере с помощью запросов и процедуры ПерелитьТЗвXBase.

&НаСервере
Процедура ПерелитьТЗвXBase(ИмяДБФ,ДБФ,ТЗ)
	
	ДБФ.Кодировка = КодировкаXBase.OEM;
	ДБФ.СоздатьФайл(ИмяДБФ);
	Для Каждого Строка Из ТЗ Цикл
		ДБФ.Добавить();
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			ДБФ[Колонка.Имя]=Строка[Колонка.Имя];
		КонецЦикла;
		ДБФ.Записать();
	КонецЦикла;
	ДБФ.ЗакрытьФайл();
	
КонецПроцедуры	

&НаСервере
Процедура ВыгрузитьСтраны(КатВрФайлов) Экспорт;
	БД  = Новый XBase;
	БД.Поля.Добавить("Kod","S",3,0);
	БД.Поля.Добавить("Nai","S",30,0);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СтраныМира.Код КАК KOD,
		|	СтраныМира.Наименование КАК NAI
		|ИЗ
		|	Справочник.СтраныМира КАК СтраныМира";
	
	тз = Запрос.Выполнить().Выгрузить();
	ПерелитьТЗвXBase(СокрЛП(КатВрФайлов) + "OKSM.dbf",БД,тз);
	
КонецПроцедуры 

Единственным условием при написании процедур, аналогичных процедуре "ВыгрузитьСтраны", является то, что наименование полей XBase и наименование полей в запросе должны совпадать

Затем все файлы через временное хранилище с помощью набота процедур, приведенных в области "РаботаСФайламиКлиентСервер", переносятся во временную папку клиента. Во временной папке клиента они архивируются внешним архиватором. В моем примере использован 7z.

Архиватор хранится в одном из макетов обработки и подготавливается к работе при открытии обработки (см. метод ПриОткрытии). При закрытии обработка подчищает за собой созданные ей файлы.

Затем файл архива переносится в то место на диске, которое указл пользователь в переменой "ПутьКФайлу".

Еще раз подчеркну то, что обработка написана для примера и должна представлять академический интерес.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка с примерами
.epf 358,75Kb
17.11.15
5
.epf 1.0.0.1 358,75Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа