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

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

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

Метод 1: Использование метода ВставитьОбласть

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

Рассмотрим синтаксис и ключевые особенности метода:

ВставитьОбласть(ИсходнаяОбласть, ОбластьПриемник, ТипСмещения, ЗаполнятьПараметры)

Для корректной работы этого метода мы должны убедиться, что размеры областей (количество строк и колонок) совпадают, иначе система выдаст ошибку. Проанализируем пример кода, который позволяет подготовить «слоеную» область перед выводом:


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

// Определяем целевой диапазон в области подвала, куда нужно вставить печать
// Например, это ячейки с 2 по 5 строку и с 3 по 6 колонку
ЦелеваяОбласть = ОбластьПодвал.Область("R2C3:R5C6");
ИсходнаяОбласть = ОбластьПечать.Область("R1C1:R4C4");

// Вставляем область печати в область подвала
ОбластьПодвал.ВставитьОбласть(ИсходнаяОбласть, ЦелеваяОбласть, ТипСмещенияТабличногоДокумента.БезСмещения);

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

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

Метод 2: Наложение с помощью коллекции Рисунки

Проанализируем более гибкий и современный подход. В 1С объекты типа РисунокТабличногоДокумента живут в отдельном слое «над» сеткой ячеек. Это идеальный вариант для печатей и подписей, так как они могут перекрывать границы ячеек, не удаляя их содержимое.

Рассмотрим алгоритм действий при таком подходе:

  1. Разместим в макете в области подвала пустой объект «Рисунок» (тип «Картинка») и дадим ему имя, например, ПечатьМенеджера.
  2. Установим свойства рисунка так, чтобы он был прозрачным (свойство Узор — «Без узора»).
  3. В коде программно заполним этот рисунок нужной картинкой.

Посмотрим на пример реализации:


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

// Обращаемся к рисунку внутри области по его имени
Попытка
    ОбластьМакета.Рисунки.ПечатьМенеджера.Картинка = БиблиотекаКартинок.ПечатьОрганизации;
Исключение
    // Обработка ситуации, если рисунок в макете не найден
КонецПопытки;

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

Преимущество этого способа в том, что печать будет выглядеть естественно, перекрывая линии подписей или текст, при этом сам текст ТабличногоДокумента останется нетронутым.

Метод 3: Программное добавление и позиционирование рисунка

Выясним, как поступить, если область печати должна располагаться в динамическом месте или если мы не хотим заранее добавлять рисунки в макет. Мы можем добавить рисунок в итоговый ТабличныйДокумент программно, вычислив координаты последней выведенной области.

Разберем по шагам, как это реализовать:


// 1. Сначала выводим подвал обычным способом
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
ТабДокумент.Вывести(ОбластьПодвала);

// 2. Определяем координаты для вставки печати
// Нам нужно знать, где закончился вывод. Используем высоту таблицы.
НомерПоследнейСтроки = ТабДокумент.ВысотаТаблицы;
// Находим ячейку, к которой привяжем печать (например, строка 10 колонка 5)
ЯчейкаПривязки = ТабДокумент.Область(НомерПоследнейСтроки - 3, 5); 

// 3. Добавляем рисунок в итоговый документ
НовыйРисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
НовыйРисунок.Картинка = БиблиотекаКартинок.ФаксимилеРуководителя;
НовыйРисунок.РазмернаяКартинка = ИзменяетРазмер.АвтоМасштаб;

// 4. Позиционируем рисунок. Метод УстановитьПривязку закрепит картинку за ячейками.
// Это гарантирует, что печать не «уплывет» при изменении масштаба или печати.
НовыйРисунок.УстановитьПривязку(ЯчейкаПривязки);

// Можно также задать точные размеры и положение в миллиметрах
НовыйРисунок.Верх = 5; // Смещение относительно верха области привязки
НовыйРисунок.Лево = 10;
НовыйРисунок.Ширина = 40;
НовыйРисунок.Высота = 30;

Важные рекомендации по работе с изображениями

Чтобы наложение выглядело качественно, проанализируем технические требования к самим файлам изображений и их свойствам в 1С:

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

← На главную