Универсальная печать таблицы значений для 1С 8

Если требуется выводить на печать данные из таблицы значений (табличного поля), то можно воспользоваться кодом из примера ниже. Код можно встроить в общий модуль и вызывать из любой обработки или формы документа.

Функция ПечатьТаблицыЗначений(ТЗ, Заголовок)
	Перем Результат;
	
	Результат = Новый ТабличныйДокумент;
	
	ПострПечать = Новый ПостроительОтчета;  
	
	ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);  
	ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);  
	ПострПечать.Выполнить(); 
	
	Для каждого Колонка Из ПострПечать.ВыбранныеПоля Цикл	 
		
		Колонка.Представление = ТЗ.Колонки[Колонка.Имя].Заголовок;	 
		
	КонецЦикла;  
	
	ПострПечать.ТекстЗаголовка = Заголовок;
	
	ПострПечать.Вывести(Результат); 
	
	Возврат Результат;
	
КонецФункции

 

Второй вариант распечатать произвольную таблицу значений это использовать макет. В этом варианте надо подготовить макет, поместить его, например, в "общие макеты". В макете надо сделать табличку с 2-мя именованными вертикальными областями "Основной", "Показатели"; с 3-мя именованными горизонтальными областями "Шапка", "Строка", "Итог". Далее перебором всех колонок ТЗ вывести их в табличный документ.

 

 

Функция ПечатьТаблицыЗначений(ТЗ, Заголовок="") Экспорт 	
	Результат = Новый ТабличныйДокумент;	
	
	Макет = ПолучитьМакет("МакетТЗ");	
	
	ОбластьШапкаОсновной=Макет.ПолучитьОбласть("Шапка|Основной");	
	ОбластьСтрокаОсновной=Макет.ПолучитьОбласть("Строка|Основной");	
	ОбластьИтогОсновной=Макет.ПолучитьОбласть("Итог|Основной");	
	ОбластьШапкаДОП=Макет.ПолучитьОбласть("Шапка|Показатели");	
	ОбластьСтрокаДОП=Макет.ПолучитьОбласть("Строка|Показатели");	
	ОбластьИтогДОП=Макет.ПолучитьОбласть("Итог|Показатели");
	
	ОбластьШапкаОсновной.Параметры.Заголовок = Заголовок;
	Результат.Вывести(ОбластьШапкаОсновной);	
	
	Для Каждого Колонка из Тз.Колонки Цикл
		Если Колонка.Имя = "НомерСтроки" Тогда
			Продолжить;			
		КонецЕсли;
		
		ОбластьШапкаДОП.Параметры.ИмяПоказателя=Колонка.Имя;		
		Результат.Присоединить(ОбластьШапкаДОП);		
	КонецЦикла;	
	
	счетчик=0;
	
	Для каждого стр из Тз Цикл		
		
		счетчик=счетчик+1;		
		
		ОбластьСтрокаОсновной.Параметры.счетчик=счетчик; 		
		
		Результат.Вывести(ОбластьСтрокаОсновной);		
		
		Для Каждого Колонка из Тз.Колонки ЦИКЛ	
			Если Колонка.Имя = "НомерСтроки" Тогда
				Продолжить;			
			КонецЕсли;
			
			
			ОбластьСтрокаДОП.Параметры.ЗначениеКолонки=стр[Колонка.Имя];			
			Результат.Присоединить(ОбластьСтрокаДОП);			
			
		КонецЦикла;		
		
	КонецЦикла;	
	
	Результат.Вывести(ОбластьИтогОсновной);	
	
	Для Каждого Колонка из Тз.Колонки ЦИКЛ		
		
		Если Колонка.Имя = "НомерСтроки" Тогда
			Продолжить;			
		КонецЕсли;
		
		
		ОбластьИтогДОП.Параметры.Итог=Тз.Итог(Колонка.Имя);		
		Результат.Присоединить(ОбластьИтогДОП);		
		
	КонецЦикла;
	
	//расчет ширины колонок
	Для СчКолонок = 1 По Результат.ШиринаТаблицы Цикл
		ШиринаКолонки = 3;
		Для СчСтрок = 2 По Результат.ВысотаТаблицы Цикл
			мОбласть = Результат.Область(СчСтрок, СчКолонок, СчСтрок, СчКолонок);
			ШиринаКолонки = Макс(СтрДлина(мОбласть.Текст), ШиринаКолонки);
		КонецЦикла;
		
		мОбласть.ШиринаКолонки = ШиринаКолонки;
	КонецЦикла;
	
	Возврат Результат;	
КонецФункции 

 Результат печати ниже. Обработку с примером можно скачать здесь.

Комментарии  
0 #2 Павел Васянин 13.12.2019 08:44
Спасибо !
Благодаря Вам съэкономил время !
Цитировать
+2 #1 Ираида, г.Березники 06.11.2019 06:22
Класс!!!! Коллеги, то что нужно!!!! :-)
Цитировать
Добавить комментарий