Обработка по требованию пользователя создает 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.
Архиватор хранится в одном из макетов обработки и подготавливается к работе при открытии обработки (см. метод ПриОткрытии). При закрытии обработка подчищает за собой созданные ей файлы.
Затем файл архива переносится в то место на диске, которое указл пользователь в переменой «ПутьКФайлу».
Еще раз подчеркну то, что обработка написана для примера и должна представлять академический интерес.