Выгрузка в Эксель, управляемые формы

Публикация № 566078

Обмен - Загрузка и выгрузка в Excel

Выгрузка эксель excel в файл выбор папки Управляемые формы сохранение внешняя обработка УФ отчет шаблон вызов процедуры модуля объекта из

7
Как-то раз меня попросили сделать обработку выгрузки в эксель и тут возникли проблемы то с сохранением файла на сервере, то с заполнением данными на клиенте. В итоге я решил заполнить файл на сервере как обычный табличный документ, а записать его на клиенте. 

Сначала создаем обработку с реквизитом ПапкаСохранения, тип строка

Создаем форму отчета и переносим реквизит на форму:

Создание формы

Затем в процедуру НачалоВыбора этого реквизита впишем код:

	Режим = РежимДиалогаВыбораФайла.ВыборКаталога; 
	ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); 
	ДиалогОткрытия.Каталог = ""; 
	ДиалогОткрытия.МножественныйВыбор = Ложь; 
	ДиалогОткрытия.Заголовок = "Выберите каталог"; 

	Если ДиалогОткрытия.Выбрать() Тогда 
		ПутьККаталогу = ДиалогОткрытия.Каталог; 
	КонецЕсли;
	Если Прав(Элемент.ТекстРедактирования,1) <> "\" Тогда
		Отчет.ПапкаСохранения = ПутьККаталогу+"\";
	Иначе
		Отчет.ПапкаСохранения = ПутьККаталогу;
	КонецЕсли;

Создаем команду для запуска нашей обработки и переносим ее на форму:

команда

Добавляем в модуль формы две процедуры:

&НаКлиенте
Процедура КнопкаСформировать(Команда)
	
	//Для уникальности имени файла добавим к его имени дату и время создания
	ДатаВремя = СтрЗаменить(ТекущаяДата(),":",".");
	ИмяФайла = "Выгрузка_"+ДатаВремя;
	//Добавим выбранный каталог к к именя файла 
	ПолноеИмяФайла = Отчет.ПапкаСохранения+ИмяФайла+".xls";
	
	//Создадим табличный документ
	ТабДок = Новый ТабличныйДокумент;
	
	//Создадим файл эксель: Запишем нашу вновь созданную таблицу в файл 
	ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
	
	//Заполним таблицу на сервере
	КнопкаСформироватьНаСервере(ТабДок);
	
	//Запишем заполненную таблицу в этот же файл
	ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);

	
 КонецПроцедуры
 
&НаСервере
Процедура КнопкаСформироватьНаСервере(ТабДок)
	//Прочитаем наш отчет на сервере, чтобы стали доступны процедуры из модуля объект этого отчета
	Документ = РеквизитФормыВЗначение("Отчет");
	//Вызовем нашу процедуру заполнения
	Документ.ЗаполнитьТаблицуНаСервере(ТабДок);
	
КонецПроцедуры

Далее создаем макет и заполняем его данными в экспортной процедуре из модуля объекта:


Процедура ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт
	Макет = ПолучитьМакет("МакетВыгрузки");
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	
	ТабДок.Вывести(ОбластьЗаголовок);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Контрагенты.Наименование,
		|	Контрагенты.НаименованиеПолное
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
		ТабДок.Вывести(ОбластьСтрока);
	КонецЦикла;
	
	
КонецПроцедуры

В итоге у нас получается такая вот обработка:

обработка

7

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

Наименование Файл Версия Размер
Обработка выгрузки в эксель
.erf 11,49Kb
06.12.16
29
.erf 11,49Kb 29 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. user858649 30.11.17 21:52 Сейчас в теме
Здравствуйте. Подскажите пожалуйста, где именно прописать Процедуру ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт

Я скачал файл, открыл, и не могу понять где описывается это экспортная функция,

Тоесть, где писать код:

Процедура ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт
	Макет = ПолучитьМакет("МакетВыгрузки");
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	
	ТабДок.Вывести(ОбластьЗаголовок);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Контрагенты.Наименование,
		|	Контрагенты.НаименованиеПолное
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
		ТабДок.Вывести(ОбластьСтрока);
	КонецЦикла;
	
	
КонецПроцедуры
Показать
2. virtmon 24 16.03.18 08:40 Сейчас в теме
Код нужно писать в модуле объекта. В данном случае в модуле нашей обработки.
3. Istur 1414 11.05.18 23:11 Сейчас в теме
ТабДок = Новый ТабличныйДокумент;
ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
КнопкаСформироватьНаСервере(ТабДок);
ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);

Все это избыточно. Достаточно:
ТабДок = КнопкаСформироватьНаСервере();
ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);

где табличный документ полностью формируется на сервере и отдается на клиент, а не формируется на клиенте, записывается, передается на сервер и возвращается.Что за ересь.
4. Evgeny12 11.12.18 13:48 Сейчас в теме
Добрый день!
Заценил неперадаваемое "ФормаСформировать" и "КнопкаСформировать", еще "Сформировать".
Не смог повторить такое на внешнем отчете, что сделал не так, не пойму?
5. virtmon 24 13.12.18 13:19 Сейчас в теме
Скачай обработку, да посмотри
6. int_vera4ka 22.01.19 10:30 Сейчас в теме
Добрый день! файл у меня создался, но почемуто пустой . не подскажете в чем дело? Спасибо.
7. int_vera4ka 22.01.19 10:40 Сейчас в теме
8. user615675_lllveritaslll 30.01.19 11:20 Сейчас в теме
(7) Здравствуйте. Подскажите в чем была проблема? тоже создается пустой файл
9. int_vera4ka 31.01.19 09:17 Сейчас в теме
(8) Добрый день! Я заплутала в наименованиях отчета , и реквизитов .
все должно быть как в прикрепленном файле.
Прикрепленные файлы:
10. virtmon 24 12.02.19 15:54 Сейчас в теме
(9) Извините за долгий ответ. Я был в круизе) В моем примере файлик записывается 2 раза: сначала пустой, потом заполненный. Если файл у вас записывается пустой, то либо он не заполняется данными либо второй раз попросту не записывается.
Оставьте свое сообщение