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