Меню

Как вывести подвал на каждой странице табличного документа в 1С

В этой статье разберём, как программно обеспечить вывод подвала (например, подписи, итогов) внизу каждой страницы при печати табличного документа — даже если данные выводятся «целиком», а не построчно.

Суть задачи

Часто при формировании печатных форм (счетов, отчётов) требуется, чтобы определённые данные (подвал) отображались внизу каждой страницы, а не только в конце документа. Проблема в том, что при «сплошном» выводе данных сложно «прижать» подвал к низу страницы. Решаем это программным разбиением данных на порции.

Алгоритм решения

  1. Определить, сколько строк помещается на странице с подвалом.
    Используем метод ПроверитьВывод(), чтобы узнать, сколько строк можно вывести до перехода на новую страницу.
  2. Выводить данные порциями.
    • Вывести часть данных → подвал → перейти на новую страницу (ВывестиГоризонтальныйРазделительСтраниц()).
  3. Обработать последнюю страницу.
    Заполнить остаток страницы пустыми строками, чтобы «прижать» подвал вниз.

Пример кода

Вот рабочий фрагмент модуля:

Процедура Печать()
.................
	//Задаем массив проверки
	МассивОснова = Новый Массив;
	МассивОснова.Добавить(ОбластьМакетаОсновнойТекст);
	МассивОснова.Добавить(ОбластьПодписьПодвал);
		
	ТекСтрока = 1;
	ВсегоСтрок = ОбластьМакетаОсновнойТекст.ВысотаТаблицы;
		
	Пока ТекСтрока <= ВсегоСтрок Цикл
		МаксСтрок = 0;
		Для й=ТекСтрока По ВсегоСтрок Цикл
			ВремОбласть = ОбластьМакетаОсновнойТекст.ПолучитьОбласть(ТекСтрока,, й);
				
			МассивПроверки = Новый Массив;
			МассивПроверки.Добавить(ВремОбласть);
			МассивПроверки.Добавить(ОбластьПодписьПодвал);
				
			Если ТабличныйДокумент.ПроверитьВывод(МассивПроверки) Тогда
				МаксСтрок = й - ТекСтрока + 1;
			Иначе
				Прервать;
			КонецЕсли;
				
		КонецЦикла;
			
		//выводим промежуточную область и подвал
		ПоследняяСтрока = ТекСтрока + МаксСтрок - 1;
		ЧастьОснОбласть = ОбластьМакетаОсновнойТекст.ПолучитьОбласть(ТекСтрока,, ПоследняяСтрока);
		ТабличныйДокумент.Вывести(ЧастьОснОбласть);	
			
		Если ПоследняяСтрока <> ВсегоСтрок Тогда 
			ДополнитьСтраницуТабличногоДокумента(ТабличныйДокумент, ОбластьСтрокаПропуска, ОбластьПодписьПодвал);
			ТабличныйДокумент.Вывести(ОбластьПодписьПодвал);
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
			
		ТекСтрока = ТекСтрока + МаксСтрок;
				
	КонецЦикла;
.............
КонецПроцедуры
	
Функция ДополнитьСтраницуТабличногоДокумента(ТабличныйДокумент, СтрокаПропуска, ОбластьПодвала)  
	
    ДобавленоСтрок = 0;
    
    // Создаём массив для проверки
    ВыводимыеОбласти = Новый Массив;
    ВыводимыеОбласти.Добавить(СтрокаПропуска);
    ВыводимыеОбласти.Добавить(ОбластьПодвала);
    
    // Заполняем пустоту
    Пока ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) И ДобавленоСтрок < ТабличныйДокумент.ВысотаСтраницы
        Цикл
            ТабличныйДокумент.Вывести(СтрокаПропуска);
            ДобавленоСтрок = ДобавленоСтрок + 1;
        КонецЦикла;
    
    Возврат ДобавленоСтрок;		
	
КонецФункции

Разбор кода

  1. Инициализация:
    Создаётся массив МассивОснова для проверки вывода (данные + подвал).
  2. Цикл по строкам:
    ТекСтрока — текущая стартовая строка, ВсегоСтрок — общее количество строк (через ВысотаТаблицы).
  3. Определение МаксСтрок:
    Внутренний цикл проверяет, сколько строк поместится на странице вместе с подвалом. Если не помещается — прерывается.
  4. Вывод порции данных:
    Формируется область ЧастьОснОбласть (от ТекСтрока до ПоследняяСтрока), которая выводится.
  5. Обработка страницы:
    Если это не последняя страница:
    • заполняется остаток страницы пустыми строками (ДополнитьСтраницу...);
    • выводится подвал;
    • переходит на новую страницу.
  6. Обновление ТекСтрока:
    Текущая позиция сдвигается на МаксСтрок, цикл повторяется.

Ключевые моменты

  • Последняя страница: условие Если ПоследняяСтрока <> ВсегоСтрок предотвращает лишний разделитель в конце.
  • Функция ДополнитьСтраницу...: заполняет страницу пустыми строками, чтобы подвал «прижался» вниз.

Когда это полезно

  • Формирование печатных форм отчётов, накладных, счетов.
  • Обеспечение читаемости документа: ключевые данные (подвал) всегда на виду, независимо от длины данных.

Комментарии

Комментариев пока нет.

Добавить комментарий

Только авторизованные пользователи могут оставлять комментарии. Войдите или зарегистрируйтесь