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

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

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

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

Метод 1: Использование объекта ФорматированнаяСтрока (для платформы 8.3.15 и выше)

Начиная с версии платформы 8.3.15, свойства колонтитулов табличного документа (ВерхнийКолонтитул и НижнийКолонтитул) получили поддержку объекта ФорматированнаяСтрока. Это позволяет комбинировать текст с разными шрифтами, цветами и, что самое важное, вставлять объекты типа Картинка.

Разберем по шагам, как это реализовать в коде. Предположим, у нас есть картинка подписи в общих картинках конфигурации (БиблиотекаКартинок.ПодписьРуководителя).


// Создаем массив для формирования сложной строки
МассивЧастей = Новый Массив;

// Добавляем текст с определенным оформлением
ШрифтТекста = Новый Шрифт("Arial", 10, Истина); // Жирный шрифт
МассивЧастей.Добавить(Новый ФорматированнаяСтрока("ПОСТАВЩИК: ", ШрифтТекста));

// Добавляем саму картинку из библиотеки картинок
МассивЧастей.Добавить(БиблиотекаКартинок.ПодписьРуководителя);

// Добавляем расшифровку подписи
МассивЧастей.Добавить(" /Иванов И.И./");

// Собираем итоговую форматированную строку
ИтоговыйКолонтитул = Новый ФорматированнаяСтрока(МассивЧастей);

// Устанавливаем в табличный документ
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.ТекстСлева = ИтоговыйКолонтитул;
ТабДок.РазмерКолонтитулаСнизу = 20; // Убедитесь, что места достаточно для картинки

Важный нюанс: если ваша картинка хранится не в метаданных (Библиотека картинок), а в справочнике или файле, вы можете загрузить её динамически, получив объект Картинка из двоичных данных или из хранилища значений. Для реализации подобного функционала в типовых конфигурациях можно использовать пример внешней печатной формы с выводом факсимиле и подписей на БСП.

Почему код не работает: Проблема режима совместимости

Часто программисты сталкиваются с ситуацией: платформа установлена современная (например, 8.3.22), код написан верно, но в колонтитуле вместо картинки выводится пустое место или просто текст. Проанализируем причину этой проблемы.

Основным ограничителем здесь выступает Режим совместимости конфигурации. Если в свойствах вашего корня конфигурации установлен режим совместимости ниже 8.3.15, то даже на самой новой платформе механизм ФорматированнаяСтрока в колонтитулах работать не будет. Платформа будет имитировать поведение старых версий, где колонтитул принимал только тип Строка.

Чтобы проверить это, выполним следующие действия:

  1. Откроем конфигуратор.
  2. Нажмем правой кнопкой на корне конфигурации — "Свойства".
  3. Найдем в самом низу списка свойство "Режим совместимости".

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

Метод 2: Имитация колонтитула (Ручная пагинация)

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

Разберем алгоритм работы с методом ПроверитьВывод():


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

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

// В цикле вывода данных договора:
Для Каждого СтрокаДанных Из СписокСтрок Цикл
    
    // Заполняем область данных...
    
    // Проверяем, поместится ли строка ВМЕСТЕ с подвалом на текущую страницу
    Если Не ТабДок.ПроверитьВывод(ПроверяемыеОбласти) Тогда
        // Если не влезает, выводим подвал на текущей странице
        ТабДок.Вывести(ОбластьПодвала);
        // Переходим на новую страницу
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ТабДок.Вывести(ОбластьСтроки);
    
КонецЦикла;

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

При использовании этого метода стоит помнить о нескольких моментах:

Метод 3: Программное добавление рисунков в ТабличныйДокумент

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

Каждый рисунок (объект РисунокТабличногоДокумента) может содержать картинку и иметь привязку к ячейкам или абсолютные координаты. Проанализируем пример кода:


// Добавляем рисунок в табличный документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = ПодписьКартинка; // Объект типа Картинка
Рисунок.ГраницаСверху = Ложь;
Рисунок.ГраницаСнизу = Ложь;
Рисунок.ГраницаСлева = Ложь;
Рисунок.ГраницаСправа = Ложь;

// Устанавливаем размер и положение
// Привязываем к конкретной области (например, к подвалу)
Рисунок.Расположить(ТабДок.Область("R10C2:R12C5")); 

Главная сложность здесь — расчет номера строки (R10) для каждой страницы. Вам все равно придется использовать логику из Метода 2, чтобы понимать, на какой строке заканчивается текущий лист, и вставлять туда рисунок программно.

Итоги и рекомендации

Мы рассмотрели три основных подхода к решению задачи. Выбор метода зависит от ваших технических условий:

  1. Самый правильный и современный: ФорматированнаяСтрока в свойствах колонтитула. Работает быстро, автоматически повторяется на всех листах, включая новые страницы при печати. Требует платформы и режима совместимости 8.3.15+.
  2. Самый надежный для старых систем: Ручной вывод области подвала через ПроверитьВывод(). Позволяет полностью контролировать внешний вид, но требует написания сложного алгоритма пагинации.
  3. Для фиксированных бланков: Использование коллекции Рисунки. Хорошо подходит, когда подпись должна стоять в строго определенном месте относительно сетки документа.

Помните, что при сохранении документа в формат XLS (старый формат Excel) картинки из колонтитулов могут не перенестись. Для гарантированного сохранения визуального оформления рекомендуется использовать форматы PDF или XLSX.

← На главную