При формировании печатных форм в 1С:Предприятие часто возникает задача размещения факсимиле (печати организации и подписи ответственного лица) непосредственно поверх текста подвала документа. Стандартный метод Вывести() просто добавляет области одну за другой сверху вниз, что не позволяет добиться эффекта наложения. В этой статье мы разберем несколько способов решения этой задачи: от использования метода ВставитьОбласть до работы с программным позиционированием рисунков.
Разберем ситуацию, когда нам необходимо перенести содержимое одной области (например, с печатью) в другую область (подвал) перед тем, как вывести результат в итоговый документ. Метод ВставитьОбласть позволяет скопировать ячейки из источника в приемник. Важно понимать, что этот метод именно копирует данные, а не создает прозрачный слой.
Рассмотрим синтаксис и ключевые особенности метода:
ВставитьОбласть(ИсходнаяОбласть, ОбластьПриемник, ТипСмещения, ЗаполнятьПараметры)
Для корректной работы этого метода мы должны убедиться, что размеры областей (количество строк и колонок) совпадают, иначе система выдаст ошибку. Проанализируем пример кода, который позволяет подготовить «слоеную» область перед выводом:
// Получаем нужные области из макета
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПечать = Макет.ПолучитьОбласть("Факсимилье");
// Определяем целевой диапазон в области подвала, куда нужно вставить печать
// Например, это ячейки с 2 по 5 строку и с 3 по 6 колонку
ЦелеваяОбласть = ОбластьПодвал.Область("R2C3:R5C6");
ИсходнаяОбласть = ОбластьПечать.Область("R1C1:R4C4");
// Вставляем область печати в область подвала
ОбластьПодвал.ВставитьОбласть(ИсходнаяОбласть, ЦелеваяОбласть, ТипСмещенияТабличногоДокумента.БезСмещения);
// Теперь выводим уже модифицированный подвал в итоговый документ
ТабДокумент.Вывести(ОбластьПодвал);
Важное ограничение: При использовании этого метода данные в ячейках-приемниках будут заменены данными из ячеек-источников. Если в подвале в этом месте уже был текст, он сотрется. Чтобы текст остался видимым под печатью, лучше использовать второй метод — работу с рисунками.
Проанализируем более гибкий и современный подход. В 1С объекты типа РисунокТабличногоДокумента живут в отдельном слое «над» сеткой ячеек. Это идеальный вариант для печатей и подписей, так как они могут перекрывать границы ячеек, не удаляя их содержимое.
Рассмотрим алгоритм действий при таком подходе:
ПечатьМенеджера.Узор — «Без узора»).Посмотрим на пример реализации:
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалЗаказа");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
// Обращаемся к рисунку внутри области по его имени
Попытка
ОбластьМакета.Рисунки.ПечатьМенеджера.Картинка = БиблиотекаКартинок.ПечатьОрганизации;
Исключение
// Обработка ситуации, если рисунок в макете не найден
КонецПопытки;
ТабДокумент.Вывести(ОбластьМакета);
Преимущество этого способа в том, что печать будет выглядеть естественно, перекрывая линии подписей или текст, при этом сам текст ТабличногоДокумента останется нетронутым.
Выясним, как поступить, если область печати должна располагаться в динамическом месте или если мы не хотим заранее добавлять рисунки в макет. Мы можем добавить рисунок в итоговый ТабличныйДокумент программно, вычислив координаты последней выведенной области.
Разберем по шагам, как это реализовать:
// 1. Сначала выводим подвал обычным способом
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
ТабДокумент.Вывести(ОбластьПодвала);
// 2. Определяем координаты для вставки печати
// Нам нужно знать, где закончился вывод. Используем высоту таблицы.
НомерПоследнейСтроки = ТабДокумент.ВысотаТаблицы;
// Находим ячейку, к которой привяжем печать (например, строка 10 колонка 5)
ЯчейкаПривязки = ТабДокумент.Область(НомерПоследнейСтроки - 3, 5);
// 3. Добавляем рисунок в итоговый документ
НовыйРисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
НовыйРисунок.Картинка = БиблиотекаКартинок.ФаксимилеРуководителя;
НовыйРисунок.РазмернаяКартинка = ИзменяетРазмер.АвтоМасштаб;
// 4. Позиционируем рисунок. Метод УстановитьПривязку закрепит картинку за ячейками.
// Это гарантирует, что печать не «уплывет» при изменении масштаба или печати.
НовыйРисунок.УстановитьПривязку(ЯчейкаПривязки);
// Можно также задать точные размеры и положение в миллиметрах
НовыйРисунок.Верх = 5; // Смещение относительно верха области привязки
НовыйРисунок.Лево = 10;
НовыйРисунок.Ширина = 40;
НовыйРисунок.Высота = 30;
Чтобы наложение выглядело качественно, проанализируем технические требования к самим файлам изображений и их свойствам в 1С:
Рисунки.Рисунок в 1С свойство Узор было установлено в значение Без узора. Это делает контейнер рисунка прозрачным.Рисунки. Последний добавленный рисунок будет выше всех.УстановитьПривязку(). Это критически важно для печатных форм, которые могут иметь разное количество строк в табличной части. Привязка к конкретной ячейке подвала гарантирует, что печать всегда останется на своем месте относительно текста.Таким образом, мы рассмотрели основные подходы к совмещению областей. Метод ВставитьОбласть полезен для манипуляций с данными ячеек, в то время как работа с коллекцией Рисунки является основным инструментом для качественного визуального наложения графических элементов в 1С.