Приветствую Вас ГостьСуббота, 15.11.2025, 03:07

Каталог статей


Сохранить несколько табличных документов в один файл

Рассмотрим случай, когда надо сформировать пакет табличных документов и все их записать в один файл.

Используем для этого ПакетОтображаемыхДокументов().

Сначала мы его создаем, а потом добавляем в него элементы:

Пакет = Новый ПакетОтображаемыхДокументов(); 
ТабДок = ...;
ЭлементПакета = Пакет.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДок);
ЭлементПакета.Наименование = ИмяЭлемента; 

Наименование элемента используется для разнесения табличных документов по разным листам в файле Excel. Если для разных элементов задать одно имя, то табличные документы будут выведены последовательно на одном листе.

Пример:

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) экспорт 
    
 ПапкаВыгрузки = КаталогВременныхФайлов();
    МассивПакетов = ПолучитьПакетыОтображаемыхДокументов(ОбъектыНазначения);
     
    Для Каждого СтруктураПакет Из МассивПакетов Цикл
        //ПакетОтображаемыхДокументов в файл
        //формируем полное имя файла и убираем недопустимые символы                
        
        //ИмяФайла = ПапкаВыгрузки + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураПакет.ИмяФайла) + ".pdf"; 
        //ФорматФайла = ТипФайлаПакетаОтображаемыхДокументов.PDF;        
        ИмяФайла = ПапкаВыгрузки + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураПакет.ИмяФайла) + ".xlsx"; 
        ФорматФайла = ТипФайлаПакетаОтображаемыхДокументов.XLSX;     
        
        СтруктураПакет.Пакет.Записать(ИмяФайла , ФорматФайла);
        //Файл открыть
        ФайловаяСистемаКлиент.ОткрытьФайл(ИмяФайла);
        
    КонецЦикла;     
    
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПакетыОтображаемыхДокументов(ОбъектыНазначения)

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

 

 

Категория: Программирование | Добавил: leshic (12.08.2025)
Просмотров: 6 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [52]
Регистры [7]
Формы [50]
Администрирование [53]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [57]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0