Рассмотрим случай, когда надо сформировать пакет табличных документов и все их записать в один файл.
Используем для этого ПакетОтображаемыхДокументов().
Сначала мы его создаем, а потом добавляем в него элементы:
Пакет = Новый ПакетОтображаемыхДокументов();
ТабДок = ...;
ЭлементПакета = Пакет.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДок);
ЭлементПакета.Наименование = ИмяЭлемента;
Наименование элемента используется для разнесения табличных документов по разным листам в файле Excel. Если для разных элементов задать одно имя, то табличные документы будут выведены последовательно на одном листе.
Пример:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) экспорт
ПапкаВыгрузки = КаталогВременныхФайлов();
МассивПакетов = ПолучитьПакетыОтображаемыхДокументов(ОбъектыНазначения);
Для Каждого СтруктураПакет Из МассивПакетов Цикл
//ПакетОтображаемыхДокументов в файл
//формируем полное имя файла и убираем недопустимые символы
//ИмяФайла = ПапкаВыгрузки + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураПакет.ИмяФайла) + ".pdf";
//ФорматФайла = ТипФайлаПакетаОтображаемыхДокументов.PDF;
ИмяФайла = ПапкаВыгрузки + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураПакет.ИмяФайла) + ".xlsx";
ФорматФайла = ТипФайлаПакетаОтображаемыхДокументов.XLSX;
СтруктураПакет.Пакет.Записать(ИмяФайла , ФорматФайла);
//Файл открыть
ФайловаяСистемаКлиент.ОткрытьФайл(ИмяФайла);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПакетыОтображаемыхДокументов(ОбъектыНазначения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| _ДемоСчетНаОплатуПокупателю.Ссылка КАК Ссылка,
| _ДемоСчетНаОплатуПокупателю.Контрагент КАК Контрагент,
| _ДемоСчетНаОплатуПокупателю.Организация КАК Организация,
| ПРЕДСТАВЛЕНИЕ(_ДемоСчетНаОплатуПокупателю.Контрагент) КАК КонтрагентПредставление,
| ПРЕДСТАВЛЕНИЕ(_ДемоСчетНаОплатуПокупателю.Организация) КАК ОрганизацияПредставление
|ИЗ
| Документ._ДемоСчетНаОплатуПокупателю КАК _ДемоСчетНаОплатуПокупателю
|ГДЕ
| _ДемоСчетНаОплатуПокупателю.Ссылка В(&Ссылка)
|
|УПОРЯДОЧИТЬ ПО
| _ДемоСчетНаОплатуПокупателю.Контрагент,
| _ДемоСчетНаОплатуПокупателю.Организация,
| _ДемоСчетНаОплатуПокупателю.Дата
|ИТОГИ ПО
| Контрагент,
| Организация
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Ссылка", ОбъектыНазначения);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
МассивПакетов = Новый Массив();
Пока ВыборкаКонтрагент.Следующий() Цикл
ВыборкаОрганизация = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаОрганизация.Следующий() Цикл
Пакет = Новый ПакетОтображаемыхДокументов();
ОбластиОбъектов = Новый СписокЗначений();
ТабДокОрг = Обработки._ДемоПечатьКарточкиОрганизации.СформироватьКарточкуОрганизации(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВыборкаОрганизация.Организация) ,ОбластиОбъектов);
ЭлементПакета = Пакет.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокОрг);
ЭлементПакета.Наименование = ВыборкаОрганизация.ОрганизацияПредставление; // для формировния листов в Excel
ВыборкаДетальныеЗаписи = ВыборкаОрганизация.Выбрать();
МассивСчетов = Новый Массив();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивСчетов.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
ТабДокСчет = Документы._ДемоСчетНаОплатуПокупателю.ПечатьСчетаЗаказа(МассивСчетов,ОбластиОбъектов,"Счет",Ложь);
ЭлементПакета = Пакет.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокСчет);
ЭлементПакета.Наименование = "Счета"; // для формировния листов в Excel. Если для разных табличных документов указано одно наименование, то они добавляются на один лист
МассивПакетов.Добавить(Новый Структура("ИмяФайла,Пакет",ВыборкаОрганизация.КонтрагентПредставление + "_" + ВыборкаОрганизация.ОрганизацияПредставление,Пакет));
КонецЦикла;
КонецЦикла;
Возврат МассивПакетов;
КонецФункции
|