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

Статья и приложенная к ней обработка представляет академический интерес. В ней приведен пример простого и масштабируемого создания 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.

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

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

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

Leave a Comment

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