Допустим, мы делаем внешнюю печатную форму для документа, в котором содержится табличная часть.

В табличной части две колонки: "Номенклатура"и "Количество". Позиций номенклатуры в табличной части может быть довольно много, поэтому при печати таблица растянется на несколько страниц. Нам нужно сделать так, чтобы на всех страницах к таблице добавлялась шапка с именами колонок.

Для выполнения задачи воспользуемся методом табличного документа ПроверитьВывод(<Таблицы>).

Метод проверяет, умещаются ли переданные табличные документы на страницу при печати. Параметр <Таблицы> может иметь тип "Массив" или "Табличный документ". В параметре передаётся массив из проверяемых таблиц или табличный документ.

Возвращаемое значение метода: тип: Булево. Если умещаются – Истина, в противном случае – Ложь.

Итак, у нас есть макет с областями:

  • ШапкаДокумента
  • ШапкаТаблицыНоменклатура
  • СтрокаТаблицыНоменклатура
  • ПодвалДокумента

В модуле печатной формы находится процедура ЗаполнитьТабличныйДокумент(). Назначение процедуры понятно из названия. У процедуры есть параметр ДанныеДляПечати, в котором передаётся результат запроса с данными печатаемого документа. Строки таблицы "Номенклатура" в табличном документе заполняются при обходе выборки из результата запроса.

ОбластьСтрокаТаблицыНоменклатура = Макет.ПолучитьОбласть("СтрокаТаблицыНоменклатура");
НомерСтроки = 0;

Для каждого Элемент Из ТаблицаНоменклатура Цикл

	УстановитьПараметр(ОбластьСтрокаТаблицыНоменклатура, "Номенклатура", Элемент.Номенклатура);
	УстановитьПараметр(ОбластьСтрокаТаблицыНоменклатура, "Количество", Элемент.Количество);
	ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНоменклатура);
			
КонецЦикла;

При добавлении каждой новой строки в таблицу мы должны выяснить, помещается ли табличный документ на страницу. Для этого добавим области макета "ШапкаТаблицыНоменклатура" и "СтрокаТаблицыНоменклатура" в массив, который будем проверять с помощью метода ПроверитьВывод(), и организуем добавление шапки таблицы в нужных нам местах.

ОбластьШапкаТаблицыНоменклатура = Макет.ПолучитьОбласть("ШапкаТаблицыНоменклатура");
ОбластьСтрокаТаблицыНоменклатура = Макет.ПолучитьОбласть("СтрокаТаблицыНоменклатура");

МассивПроверкиВывода = Новый Массив;
МассивПроверкиВывода.Добавить(ОбластьШапкаТаблицыНоменклатура);
МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицыНоменклатура);

НомерСтроки = 0;

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

В результате получаем шапку таблицы на каждой из печатаемых страниц, гле есть табличная часть "Номенклатура".