При разработке отчетов в системе 1С:Предприятие 8.2 (особенно в конфигурациях на обычных формах, таких как Бухгалтерия предприятия 2.0) часто возникает необходимость выводить подписи ответственных лиц в самом низу страницы. Если отчет занимает несколько листов, стандартный вывод области макета в конце документа не всегда подходит, так как подписи должны дублироваться на каждой странице. Для решения этой задачи идеально подходит механизм колонтитулов.
В этой статье мы подробно разберем, как правильно настроить автоматический нижний колонтитул, почему возникают ошибки типа Поле объекта не обнаружено и как сделать отчет профессиональным и удобным для печати.
Проанализируем типичную ситуацию, с которой сталкиваются начинающие разработчики. При попытке прописать код настройки колонтитула часто возникают ошибки выполнения. Рассмотрим причину их появления. Главная ошибка заключается в неверном понимании объектной модели 1С. Разработчик пытается обратиться к колонтитулу через ОтчетОбъект или напрямую через Макет.
Важно запомнить: свойство НижнийКолонтитул принадлежит исключительно объекту ТабличныйДокумент. Ни сам отчет (как объект метаданных), ни макет (как шаблон) не управляют параметрами печати в процессе вывода. Вывод колонтитулов — это настройка конкретного экземпляра сформированного документа, который мы показываем пользователю.
Если вы напишете ОтчетОбъект.НижнийКолонтитул, система выдаст ошибку, так как у объекта «Отчет» нет такого свойства. Нужно обращаться к той переменной, куда выводится результат (обычно это ТабДок или реквизит формы типа ТабличныйДокумент).
Рассмотрим правильный алгоритм программной настройки подписей. Допустим, у нас есть сформированный табличный документ. Нам необходимо, чтобы на каждой странице внизу по центру выводилась надпись «Составил __________ Иванов». Посмотрим на пример кода:
// Предположим, что ТабДок — это наш сформированный табличный документ
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДок.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДок.НижнийКолонтитул.ТекстВЦентре = "Составил _________________ Иванов Принял __________________ Петров П.П.";
ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт("Arial", 10, Истина); // Дополнительно можно задать шрифт
Разберем, что делает каждая строка в этом примере:
Выводить = Истина — это главный «рубильник». Без этой команды система проигнорирует все остальные настройки колонтитула.НачальнаяСтраница = 1 — указывает, с какой страницы начинать печать колонтитула. Иногда подписи не нужны на титульном листе, тогда здесь ставится значение 2.ТекстВЦентре — устанавливает строку, которая будет отображаться ровно посередине. Также существуют свойства ТекстСлева и ТекстСправа.ВертикальноеПоложение — определяет, будет ли текст прижат к самому низу или иметь отступ.Выясним, как сделать колонтитул более информативным. В 1С предусмотрены специальные теги-заполнители, которые автоматически подставляют системные данные при печати. Их можно комбинировать с вашим текстом.
Рассмотрим популярные теги:
Посмотрим на пример использования:
ТабДок.НижнийКолонтитул.ТекстСправа = "Страница [&Страница] из [&СтраницВсего]";
ТабДок.НижнийКолонтитул.ТекстСлева = "Дата формирования: [&Дата]";
Бывают ситуации, когда код написан верно, ошибок нет, но при просмотре документа подписей не видно. Проанализируем возможные причины. Чаще всего это связано с тем, что колонтитул «не влезает» в отведенные поля страницы.
За отображение отвечают два важных параметра табличного документа: ПолеСнизу и РазмерКолонтитулаСнизу. Если ПолеСнизу установлено в 0, то колонтитулу просто негде отобразиться, так как текст отчета занимает все пространство до края листа. Рекомендуется устанавливать ПолеСнизу не менее 10–20 мм, а РазмерКолонтитулаСнизу — около 10 мм.
Также проверьте свойство АвтоМасштаб. Если отчет очень широкий и система сильно его сжимает, чтобы уместить на один лист по ширине, текст колонтитула может стать практически нечитаемым или сместиться.
ТабДок.АвтоМасштаб = Истина; // Позволяет уместить отчет по ширине страницы
ТабДок.ПолеСнизу = 15; // Отступ от края листа до данных
ТабДок.РазмерКолонтитулаСнизу = 10; // Положение текста колонтитула
Разберем ситуацию, когда подписи нужны только один раз в самом конце отчета, а не на каждой странице. В этом случае использовать НижнийКолонтитул методически неверно. Вместо этого в макете отчета создается отдельная область (например, с именем «Подвал»), где рисуются линии подписей и указываются должности.
Процесс вывода в коде будет выглядеть так:
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
// Заполняем параметры области, если они есть
ОбластьПодвал.Параметры.ФИООтветственного = "Иванов И.И.";
// Выводим область после окончания основного цикла формирования данных
ТабДок.Вывести(ОбластьПодвал);
Если же стоит задача выводить подписи именно на каждой странице (как в строгих реестрах), то мы возвращаемся к использованию свойств объекта НижнийКолонтитул.
Если ваш отчет строится на базе СКД, то программно обращаться к табличному документу в форме может быть поздно или неудобно. В СКД настройку можно сделать визуально без написания кода:
Система сама применит эти настройки при компоновке результата в табличный документ.
Таким образом, мы рассмотрели все основные способы добавления подписей. Главное правило — всегда проверяйте, к какому объекту вы обращаетесь, и не забывайте настраивать поля страницы, чтобы ваш текст был виден при печати.