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