Подвал в табличном документе, форме и веб-клиенте 1С
Содержание
Подвал в 1С делают тремя разными способами, и выбор зависит от того, где он нужен. В печатной форме это либо нижний колонтитул табличного документа (повторяется на каждом листе при печати), либо отдельная область макета с итогами и подписями, которую выводят один раз в самом конце. В управляемой форме подвал — это группа элементов внизу экрана. В веб-клиенте — блок с CSS-позиционированием внутри поля HTML.
Колонтитул настраивают в редакторе макета или кодом через свойство КолонтитулНижний. Область-подвал рисуют в макете и выводят методом Вывести. Разберём каждый сценарий отдельно: от печатных форм до HTML-страницы.
Термины я использую общие для платформы 8.3 с интерфейсом «Такси». Пути к объектам метаданных одинаковы во всех типовых конфигурациях — макеты и формы лежат в дереве конфигурации в Конфигураторе.
Область итогов и подписей в макете печатной формы
Классический подвал печатного документа — это строка итогов, реквизиты организации и места для подписей («Руководитель», «Главный бухгалтер»). Делается он как отдельная горизонтальная область табличного макета.
Порядок действий в Конфигураторе:
- Откройте макет печатной формы (тип макета —
Табличный документ). - Выделите диапазон строк внизу макета, где будут итоги и подписи.
- Вызовите назначение имени области: главное меню
Таблица → Имена → Назначить имя…, задайте имя латиницей или кириллицей, напримерПодвал. - В ячейках оформите нужное: текст «Итого:», поля для суммы прописью, строки подписей.
- Значения, которые приходят из кода, задайте как параметры: выделите ячейку, в палитре свойств смените
ЗаполнениенаПараметри впишите имя параметра.
Вывод области в код печати идёт после «шапки» и строк таблицы — подвал выводится последним:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ТабДок = Новый ТабличныйДокумент;
// ... вывод шапки и строк ...
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.Руководитель = "Иванов И. И.";
ОбластьПодвал.Параметры.ИтогоСумма = ИтогоДокумента;
ТабДок.Вывести(ОбластьПодвал);
ТабДок.Показать();
Имя параметра в коде (ОбластьПодвал.Параметры.Руководитель) должно буква в букву совпадать с именем параметра, заданным в ячейке макета. Иначе присвоение упадёт с ошибкой «Поле объекта не обнаружено».
Сумму в подвале часто дублируют прописью. Отдельную библиотеку для этого ставить не нужно — в типовых конфигурациях есть готовая функция перевода числа в строку. Результат кладут в параметр подвала так же, как обычное значение:
ОбластьПодвал.Параметры.СуммаПрописью = РаботаСДенежнымиСуммами.СформироватьСуммуПрописью(
ИтогоСумма, "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
Точное имя функции зависит от конфигурации, поэтому проверьте его в общих модулях своей базы. Строки подписей («Руководитель ____», «Главный бухгалтер ____») удобно собрать из объединённых ячеек с нижней границей — так подчёркивание ляжет ровно под именем.
Если нужно, чтобы подвал не разрывался между страницами, выделите его строки и включите в меню Таблица запрет разрыва области — платформа перенесёт всю область целиком на следующий лист, а не разорвёт подписи пополам.
Нижний колонтитул: страницы, дата и реквизиты на каждом листе
Колонтитул — это повторяющийся текст в самом низу каждой печатной страницы: номер листа, дата печати, название организации. От области-подвала он отличается тем, что относится не к макету, а ко всему табличному документу и виден только при печати и в предварительном просмотре.
Текст нижнего колонтитула делится на три зоны — левую, центральную и правую. В них подставляют как обычный текст, так и служебные поля: номер страницы, общее число страниц, дату и время. Поля вставляются кнопками в диалоге колонтитулов (Таблица → Колонтитулы… при открытом табличном документе), а не набираются вручную — иначе вместо номера напечатается сам текст.
Программно колонтитул включают так:
ТабДок.КолонтитулНижний.Отображать = Истина;
ТабДок.КолонтитулНижний.ТекстПоЦентру = "ООО «Ромашка», ИНН 7701234567";
Если колонтитула не видно в обычном режиме — это нормально. Чтобы его проверить, откройте предварительный просмотр перед печатью (Файл → Предварительный просмотр). На экране табличный документ колонтитулы не показывает.
Когда нужны именно номера страниц («стр. 1 из 3»), вставьте поля номера и количества страниц через диалог колонтитулов. Так платформа сама пересчитает их при печати многостраничного документа.
Сравнение двух подходов:
| Что нужно | Область-подвал в макете | Нижний колонтитул |
|---|---|---|
| Итоги, подписи, реквизиты в конце | да | нет |
| Повтор на каждой странице | нет | да |
| Номер страницы, дата печати | неудобно | да |
| Настройка | в редакторе макета | свойство документа или диалог |
Как собрать подвал программно: итоги и количество строк
Динамическая нижняя часть отчёта — это подвал, который заполняется расчётными значениями: сумма по колонке, число выведенных строк, остаток. Логика простая: накапливаем итоги в переменных при выводе строк, затем передаём их в параметры подвала.
ИтогоСумма = 0;
КоличествоСтрок = 0;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Вывести(ОбластьСтрока);
ИтогоСумма = ИтогоСумма + СтрокаТЧ.Сумма;
КоличествоСтрок = КоличествоСтрок + 1;
КонецЦикла;
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма;
ОбластьПодвал.Параметры.КоличествоСтрок = КоличествоСтрок;
ТабДок.Вывести(ОбластьПодвал);
Число склеивать с текстом в лоб не стоит — для аккуратного вывода используйте Формат:
ОбластьПодвал.Параметры.ВсегоСтрок = СтрШаблон(
"Всего строк: %1", Формат(КоличествоСтрок, "ЧГ=0"));
Если отчёт построен на системе компоновки данных (СКД), подвал считать вручную не нужно. Ресурсы (суммируемые поля) задаются на закладке Ресурсы конструктора схемы, а строку общих итогов СКД добавляет на закладке Настройки в структуру отчёта. Добавьте ресурс — например, сумму — и общий итог появится внизу отчёта автоматически, с правильным пересчётом при любом наборе данных и отборов.
Это предпочтительный способ для отчётов, а ручной вывод через макет оставляют для печатных форм документов, где разметка фиксирована. Когда строк в таблице может не быть вовсе, выводите подвал с нулевыми итогами, а не пропускайте его — иначе печатная форма без подписей выглядит незавершённой.
Подвал в управляемой форме
В управляемой форме «подвал» — это нижняя группа элементов: строка с итогами, статус, служебные кнопки. Жёстко прибить элемент к низу формы, как в вебе, платформа не даёт — форма располагает элементы потоком сверху вниз. Поэтому подвалом становится последняя группа в дереве элементов.
Как сделать:
- В редакторе формы добавьте в конец дерева элементов обычную группу (
Добавить → Группа — обычная группа). - Для группы задайте горизонтальную группировку, чтобы элементы встали в строку.
- Внутрь положите нужное: надпись-декорацию с итогом, реквизит формы для суммы, кнопки.
- Чтобы группа прижималась к низу, у вышестоящей таблицы или списка включите растяжение по вертикали — тогда свободное место заберёт она, а группа останется внизу.
Для итоговой суммы заведите реквизит формы (например, ИтогоПоДокументу) и пересчитывайте его в обработчике изменения табличной части:
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
ПересчитатьИтог();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтог()
Сумма = 0;
Для Каждого Строка Из Объект.Товары Цикл
Сумма = Сумма + Строка.Сумма;
КонецЦикла;
ИтогоПоДокументу = Сумма;
КонецПроцедуры
Отдельно стоит командная панель формы: она добавляется автоматически и обычно стоит сверху. Если нужны кнопки именно внизу, добавьте свою командную панель последним элементом и свяжите её команды с группой.
Для форм списков и отчётов в нижнюю группу часто выносят итоговую строку и кнопку печати подвала. Надпись с итогом свяжите с реквизитом формы, а не вписывайте значение статически — тогда при пересчёте строка обновится сама. Высоту группы не фиксируйте жёстко: пусть платформа подбирает её под содержимое, иначе на разных масштабах интерфейса подвал будет обрезать текст.
Подвал для веб-клиента: поле HTML и стили CSS
Когда страница показывается через поле HTML документа на форме или формируется для публикации, подвал делают средствами HTML и CSS. Это единственный из сценариев, где работает классический «прилипающий» футер.
Поле HTML на форме связывают с реквизитом типа Строка, в который кладут готовую разметку:
<html>
<head>
<meta charset="utf-8">
<style>
body { margin: 0; padding-bottom: 48px; font-family: sans-serif; }
.podval {
position: fixed; left: 0; right: 0; bottom: 0;
height: 32px; line-height: 32px;
padding: 0 16px;
background: #f5f5f5; border-top: 1px solid #ccc;
font-size: 12px; text-align: center;
}
</style>
</head>
<body>
<!-- основное содержимое -->
<div class="podval">ООО «Ромашка» · ИНН 7701234567</div>
</body>
</html>
Ключевые моменты:
- 🔹
position: fixed; bottom: 0прижимает подвал к низу области просмотра. - 🔹
padding-bottomуbodyравен высоте подвала — иначе футер перекроет последние строки текста. - 🔹 Кодировку задавайте
utf-8, иначе кириллица в подвале превратится в «кракозябры».
Строку с разметкой присваивают реквизиту формы в коде:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтраницаHTML = СформироватьHTML(); // функция собирает текст выше
КонецПроцедуры
Для печати или отправки по почте HTML-страницы в конфигурации заводят макет типа HTML-документ. В него помещают готовую разметку с тем же CSS-подвалом, а параметры подставляют в коде перед выводом.
Частые ошибки при создании подвала
Короткий разбор типовых проблем и что с ними делать:
Вывести раньше строк таблицы. Переставьте вызов ТабДок.Вывести(ОбластьПодвал) в самый конец процедуры печати, после цикла по строкам.Вывести. Сверьте имена буква в букву и заполняйте параметры до вывода области.Таблица → Колонтитулы….Файл → Предварительный просмотр.body нет нижнего отступа. Добавьте padding-bottom, равный высоте блока .podval.Что ускорит работу и убережёт макет
Несколько приёмов, которые экономят время при частых правках печатных форм:
- Выносите подвал в отдельную именованную область даже для простых форм — так проще переиспользовать и править, не трогая остальной макет.
- Для отчётов считайте итоги средствами СКД (закладка
Итоги), а не кодом: схема пересчитает их сама при любом наборе данных. - Если подпись и реквизиты одинаковы в нескольких печатных формах, держите подвал в общем макете и получайте его через
ПолучитьОбщийМакет("ПодвалОрганизации"). Правка в одном месте применится везде. - Не хардкодьте реквизиты организации в макет — передавайте их параметрами, иначе при смене ИНН или названия придётся править каждый макет вручную.
- Правки типовых печатных форм выносите в расширение конфигурации (появились в 8.3.6), а не меняйте типовой макет напрямую — так обновление конфигурации не затрёт вашу доработку.
Перед доработкой макетов в рабочей базе сделайте резервную копию конфигурации. Выгрузите её через Конфигурация → Сохранить конфигурацию в файл — откатить одну правку проще, чем восстанавливать всю базу.
Частые вопросы
Чем подвал отличается от колонтитула?
Как добавить номер страницы в подвал?
Таблица → Колонтитулы… и вставьте поле номера страницы кнопкой. В области-подвале макета номера страниц недоступны — она не знает о разбивке на листы.Почему подвал не прижимается к низу управляемой формы?
Можно ли сделать подвал одинаковым для всех печатных форм?
ПолучитьОбщийМакет. Тогда правка реквизитов или подписей в одном месте применится ко всем формам.