При разработке печатных форм в 1С:Предприятие 8 часто возникает задача добавления факсимиле (подписей и печатей). Одной из самых распространенных проблем является автоматическая обрезка изображения, если оно хотя бы частично выходит за границы выводимой области макета. Платформа 1С работает с табличным документом посекционно, и если объект Рисунок не умещается в рамки секции, он либо обрезается, либо не отображается вовсе. В этой статье мы подробно разберем, как победить это ограничение и добиться эффекта «наложения» подписи на текст, как в графическом редакторе.
Прежде чем переходить к коду, давайте проанализируем ситуацию. Когда мы используем метод Вывести() для конкретной области макета, система подготавливает фрагмент табличного документа. Если в этом фрагменте находится рисунок, его границы жестко ограничиваются высотой строк и шириной колонок данной области. Если вы попытаетесь вручную в макете вытащить картинку за пределы выделенных строк, при формировании печатной формы «хвост» картинки просто исчезнет.
Для решения этой задачи мы рассмотрим несколько подходов: программное управление объектом Рисунок, использование прозрачности и правильное позиционирование в итоговом документе.
Рассмотрим самый надежный метод — программное создание объекта Рисунок в уже сформированном табличном документе или в области перед ее выводом. Этот метод позволяет игнорировать границы ячеек макета. Разберем по шагам, как это реализовать.
Для начала нам нужно получить изображение из хранилища (например, из присоединенных файлов или констант) и поместить его в область. Проанализируем следующий пример кода:
// Создаем новый рисунок в области макета
РисунокСПечатью = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
// Устанавливаем саму картинку, полученную из хранилища значений
РисунокСПечатью.Картинка = Новый Картинка(КартинкаИзХранилища.Получить());
// Настраиваем поведение картинки
РисунокСПечатью.РазмерКартинки = РазмерКартинки.АвтоРазмер;
РисунокСПечатью.Узор = ТипУзораТабличногоДокумента.БезУзора;
// Задаем координаты в миллиметрах относительно верхнего левого угла области
РисунокСПечатью.Верх = 45;
РисунокСПечатью.Лево = 80;
РисунокСПечатью.Ширина = 50;
РисунокСПечатью.Высота = 50;
// Убираем рамку вокруг картинки
РисунокСПечатью.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Важный нюанс: Чтобы картинка могла «залезать» на предыдущие области (например, подпись директора поверх линии расшифровки), координаты Верх и Лево могут иметь значения, которые визуально выводят рисунок за пределы ячеек. Однако, если мы добавляем рисунок в ОбластьМакета до вызова ТабДок.Вывести(ОбластьМакета), обрезка все равно может произойти.
Этот «хакерский» метод позволяет обойти ограничения платформы наиболее эффективно. Суть заключается в том, чтобы сначала вывести область в итоговый ТабличныйДокумент, а уже затем найти этот рисунок в итоговом документе и изменить его размеры и положение.
Рассмотрим алгоритм действий:
ФаксимилеДиректора.Пример программной реализации:
// Выводим область подвала в результирующий документ
ТабДок.Вывести(ОбластьПодвал);
// Ищем наш рисунок в итоговом документе по имени
ИмяРисунка = "ФаксимилеДиректора";
Рисунок = ТабДок.Рисунки.Найти(ИмяРисунка);
Если Рисунок <> Неопределено Тогда
// Теперь мы можем задать любые размеры,
// и они не будут ограничены областью макета
Рисунок.Высота = 40; // в мм
Рисунок.Ширина = 60; // в мм
// Сдвигаем рисунок вверх, чтобы он наложился на текст выше
Рисунок.Верх = Рисунок.Верх - 15;
КонецЕсли;
В этом случае ТабличныйДокумент воспринимает рисунок как объект всего документа, а не отдельной маленькой секции, что позволяет ему свободно перекрывать любые границы.
Выясним причину, почему иногда картинка перекрывает текст «белым квадратом». Это происходит из-за отсутствия прозрачного фона у изображения. Для корректного отображения печатей и подписей крайне важно использовать формат PNG с прозрачным слоем (Alpha-канал). Однако здесь есть несколько технических тонкостей:
ВыводитьНаПечать. Если оно выключено, вы будете видеть картинку на экране, но не получите ее на бумаге.Порядок (или методы УстановитьВперед(), УстановитьНазад()), чтобы управлять тем, находится ли подпись под текстом или над ним.Если вы не хотите снимать конфигурацию с поддержки (например, БП 3.0), рекомендуется реализовать описанную логику через Внешнюю печатную форму (ВПФ). Это позволит вам:
Чтобы подпись выглядела естественно, проанализируем процесс подготовки файла:
1. Отсканируйте подпись с высоким разрешением (не менее 300 DPI).
2. В графическом редакторе удалите фон, оставив только линии ручки.
3. Сохраните файл в формате PNG-24 с прозрачностью.
4. При загрузке в 1С установите свойство РазмерКартинки в значение Пропорционально или АвтоРазмер, чтобы избежать искажений (растягивания) росписи руководителя.
Использование программного метода управления рисунками в сочетании с форматом PNG дает наилучший результат: ваши документы будут выглядеть профессионально, а печати и подписи будут располагаться именно там, где это предусмотрено правилами документооборота, даже если они пересекают границы строк.