Сначала создаем обработку с реквизитом ПапкаСохранения, тип строка
Создаем форму отчета и переносим реквизит на форму:
Затем в процедуру НачалоВыбора этого реквизита впишем код:
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите каталог";
Если ДиалогОткрытия.Выбрать() Тогда
ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;
Если Прав(Элемент.ТекстРедактирования,1) <> "\" Тогда
Отчет.ПапкаСохранения = ПутьККаталогу+"\";
Иначе
Отчет.ПапкаСохранения = ПутьККаталогу;
КонецЕсли;
Создаем команду для запуска нашей обработки и переносим ее на форму:
Добавляем в модуль формы две процедуры:
&НаКлиенте
Процедура КнопкаСформировать(Команда)
//Для уникальности имени файла добавим к его имени дату и время создания
ДатаВремя = СтрЗаменить(ТекущаяДата(),":",".");
ИмяФайла = "Выгрузка_"+ДатаВремя;
//Добавим выбранный каталог к к именя файла
ПолноеИмяФайла = Отчет.ПапкаСохранения+ИмяФайла+".xls";
//Создадим табличный документ
ТабДок = Новый ТабличныйДокумент;
//Создадим файл эксель: Запишем нашу вновь созданную таблицу в файл
ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
//Заполним таблицу на сервере
КнопкаСформироватьНаСервере(ТабДок);
//Запишем заполненную таблицу в этот же файл
ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
КонецПроцедуры
&НаСервере
Процедура КнопкаСформироватьНаСервере(ТабДок)
//Прочитаем наш отчет на сервере, чтобы стали доступны процедуры из модуля объект этого отчета
Документ = РеквизитФормыВЗначение("Отчет");
//Вызовем нашу процедуру заполнения
Документ.ЗаполнитьТаблицуНаСервере(ТабДок);
КонецПроцедуры
Далее создаем макет и заполняем его данными в экспортной процедуре из модуля объекта:
Процедура ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт
Макет = ПолучитьМакет("МакетВыгрузки");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДок.Вывести(ОбластьЗаголовок);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование,
| Контрагенты.НаименованиеПолное
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
КонецПроцедуры
В итоге у нас получается такая вот обработка: