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

Программист 1С v8.3 (Обычные формы)
← На главную

При разработке печатных форм в системе 1С:Предприятие часто возникает задача жесткого позиционирования определенных данных. Одной из наиболее распространенных проблем является необходимость вывести "Подвал" (например, блок с подписями, печатями или рекламную информацию) строго в нижней части листа, независимо от того, сколько строк занимает основная табличная часть документа. По умолчанию 1С выводит области друг за другом, и если данных мало, подвал "подпрыгивает" к середине страницы, что выглядит не всегда эстетично и не соответствует стандартам некоторых бланков.

В этой статье мы подробно разберем, как программно сместить область в конец страницы, проанализируем работу метода ПроверитьВывод и рассмотрим дополнительные нюансы, связанные с настройками принтера и графическими объектами.

Метод заполнения пустого пространства циклом

Основная идея решения заключается в том, чтобы "забить" свободное пространство между основной табличной частью и подвалом пустыми строками. Мы будем добавлять пустую область до тех пор, пока очередная порция данных еще помещается на текущую страницу. Как только система сообщит, что данные перестали влезать — значит, мы достигли максимально возможного заполнения и можем выводить сам подвал.

Рассмотрим базовый алгоритм, который обсуждался на форуме. Предположим, у нас есть область Подвал, которую нужно прижать вниз, и область Пропуск, представляющая собой пустую строку.

Проанализируем программный код, реализующий этот подход:


// Получаем необходимые области из макета
ПоследняяОбласть = Макет.ПолучитьОбласть("Подвал");
ПустаяОбласть = Макет.ПолучитьОбласть("Пропуск");

// Создаем массив для проверки вывода. 
// Важно проверять связку: ПустаяСтрока + ИтоговыйПодвал
МассивДляПроверки = Новый Массив;
МассивДляПроверки.Добавить(ПустаяОбласть);
МассивДляПроверки.Добавить(ПоследняяОбласть);

// Цикл добавления пустых строк
Пока ТабДокумент.ПроверитьВывод(МассивДляПроверки) Цикл
    ТабДокумент.Вывести(ПустаяОбласть);    
КонецЦикла;

// Когда место закончилось, выводим сам подвал
ТабДокумент.Вывести(ПоследняяОбласть);

Тонкая настройка высоты "пустой строки"

При использовании стандартной высоты строки в области Пропуск вы можете заметить, что подвал все равно не доходит до самого края. Это происходит потому, что цикл прекращается, когда целая строка стандартной высоты (например, 15 пунктов) уже не влезает, хотя там могло остаться 10 пунктов свободного места.

Для максимально точного позиционирования выполним следующие действия:

  1. В макете для области Пропуск установим минимально возможную высоту строки (например, 1 или 2 пункта).
  2. Если вы не хотите менять макет, можно задать высоту программно перед циклом: ПустаяОбласть.Область().ВысотаСтроки = 1;.

Чем меньше высота "шага" (пустой строки), тем точнее будет прижат подвал к нижнему полю страницы. Это позволяет добиться визуального эффекта "приклеивания" к самому краю листа.

Нюансы использования метода ПроверитьВывод

Разберем ситуацию, когда ПроверитьВывод может работать некорректно. Этот метод эмулирует печать на текущий установленный в системе принтер. Если у пользователя не установлен принтер по умолчанию или настройки полей страницы в 1С конфликтуют с настройками драйвера, результат может быть непредсказуемым.

Важные рекомендации для повышения стабильности:

  1. Фиксация полей: Всегда явно устанавливайте размер нижнего поля. Это гарантирует, что 1С будет одинаково рассчитывать свободное место на разных компьютерах. ТабДокумент.НижнееПоле = 10; // Размер в миллиметрах
  2. Автомасштаб: Если свойство АвтоМасштаб установлено в значение Истина, метод ПроверитьВывод часто ошибается. Система пытается "ужать" документ, чтобы он влез по ширине, и это меняет пропорции высоты. Для точного прижимания подвала рекомендуется фиксировать масштаб (100%).
  3. Массив проверки: Обязательно добавляйте в массив для проверки обе области (пустую строку и сам подвал). Если проверять только пустую строку, цикл может остановиться слишком поздно, и подвал будет вытеснен на следующую чистую страницу.

Работа с картинками в подвале

Если ваша область Подвал содержит логотипы, печати или факсимиле, необходимо обратить внимание на свойства графических объектов в макете. В 1С объекты "Рисунок" имеют свойство Размещение.

Для корректного смещения вниз убедитесь, что выбрано значение "Перемещать с данными". Если установить "Не перемещать", то при программном добавлении пустых строк текст подвала уедет вниз, а картинки останутся висеть в воздухе посреди страницы.

Также стоит помнить, что картинки, выходящие за границы именованной области ячеек, могут искажать расчеты метода ПроверитьВывод. Старайтесь компоновать подвал так, чтобы все графические элементы находились строго внутри границ строк, входящих в область.

Альтернативный подход: Нижний колонтитул

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

Преимущества колонтитула:

Минусы:

Решение проблемы "Подвал на отдельном листе"

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


// Выводим основные данные
ТабДокумент.Вывести(ОбластьДанные);

// Переходим на новую страницу для формирования красивого финала
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

// Теперь запускаем цикл заполнения пустотами уже на новом листе
// Это гарантирует, что подвал будет внизу абсолютно пустой последней страницы
Пока ТабДокумент.ПроверитьВывод(МассивДляПроверки) Цикл
    ТабДокумент.Вывести(ПустаяОбласть);
КонецЦикла;
ТабДокумент.Вывести(ПоследняяОбласть);

Подведем итоги

Для реализации "прижатого" подвала в 1С 8.2/8.3 мы проанализировали механизм циклического вывода пустых строк с проверкой на заполнение страницы. Основными инструментами здесь выступают объект ТабличныйДокумент, методы ПроверитьВывод и Вывести. Соблюдение правил настройки высоты строк, фиксация полей страницы и правильное формирование массива для проверки позволяют добиться профессионального вида печатной формы, где все элементы подписи и итоги находятся строго на своих местах в нижней части бланка.

← На главную