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