К статье
Практический материал

Разработка и Конфигурация · 13 мин

1С: как получить факсимиле программно и вывести в печатную форму

Как программно получить факсимиле подписи в 1С: хранение картинки в базе, вывод в макет табличного документа, типовые механизмы БСП, примеры кода и типичные ошибки.

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

Типовой «кнопки факсимиле» в платформе нет — механизм либо уже реализован в конфигурации (в решениях на БСП есть подсистема работы с файлами и присоединенными картинками), либо его добавляют доработкой. Поэтому первый шаг — понять, что доступно в вашей конфигурации, и только потом писать код.

Ниже разобраны рабочие способы: хранение изображения подписи, получение его программно, вставка в макет табличного документа, а также ограничения, ошибки и юридические нюансы, о которых нужно помнить до внедрения.

Что понадобится перед началом работы

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

Требования к картинке практические, а не формальные: разрешение порядка 300 DPI, размер в пределах 300–600 пикселей по ширине, фон прозрачный. Слишком большая картинка увеличит размер файла печатной формы и замедлит формирование, слишком маленькая — будет размытой при печати.

Также заранее решите, чьи подписи понадобятся: одна подпись руководителя на всю организацию или разные подписи для сотрудников, организаций и договоров. От этого зависит структура хранения: константа, реквизит справочника «Организации», табличная часть или присоединенные файлы к физическому лицу.

Где хранить изображение подписи в базе

Самый простой вариант — реквизит типа «ХранилищеЗначения» в нужном объекте. Например, в справочнике «Организации» добавляют реквизиты «ФаксимилеДиректора» и «ФаксимилеГлавбуха», а в форму выводят поле картинки для загрузки. Для одной организации достаточно константы с тем же типом.

Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, БП 3.0, ЗУП 3.1), рациональнее использовать штатный механизм присоединенных файлов: картинка подписи прикрепляется к элементу справочника «Физические лица» или «Организации», а получить её можно через функции модуля РаботаСФайлами. Это даёт версионирование, хранение в томах и не требует изменения структуры метаданных.

Внешний файл на диске или сетевом ресурсе — третий вариант. Он подходит для тестирования или когда картинки централизованно обновляются извне, но в продуктиве ненадёжен: путь может оказаться недоступен с сервера 1С, а в клиент-серверном режиме файл должен быть доступен именно серверу, а не клиентскому компьютеру.

Сравнение вариантов хранения

Реквизит «ХранилищеЗначения»

Быстро реализовать, картинка всегда в базе. Минус — нужно менять конфигурацию и обновлять структуру БД.

Присоединенные файлы БСП

Не требует доработки метаданных, поддерживает тома и версии. Подходит только для конфигураций на БСП.

Файл на диске

Просто для отладки. Ненадёжно в клиент-серверном режиме и при переносе базы.

Как программно получить картинку факсимиле

Если картинка лежит в реквизите типа «ХранилищеЗначения», получение сводится к извлечению двоичных данных и созданию объекта «Картинка». Код выполняется на сервере в момент формирования печатной формы.

Функция ПолучитьФаксимиле(Организация) Экспорт

Хранилище = Организация.ФаксимилеДиректора; // реквизит типа ХранилищеЗначения

Если Хранилище = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;

ДвоичныеДанные = Хранилище.Получить();

Если ДвоичныеДанные = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;

Возврат Новый Картинка(ДвоичныеДанные);

КонецФункции

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

Важный приём: обертывайте получение картинки в функцию, возвращающую Неопределено при отсутствии подписи. Тогда печатная форма просто выйдет без факсимиле, а не упадёт с ошибкой — это критично, когда документы печатают пакетно.

bsl
// Вариант с присоединенными файлами БСП
Файлы = Новый Массив;
РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ФизЛицо, Файлы);
Для Каждого Файл Из Файлы Цикл
    Данные = РаботаСФайлами.ДвоичныеДанныеФайла(Файл);
    КартинкаПодписи = Новый Картинка(Данные);
    Прервать;
КонецЦикла;

Как вставить факсимиле в макет печатной формы

Способ 1: параметр макета с типом «Картинка»

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

ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");

Факсимиле = ПолучитьФаксимиле(Организация);

Если Факсимиле <> Неопределено Тогда

ОбластьПодпись.Параметры.ФаксимилеДиректора = Факсимиле;

КонецЕсли;

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

Этот способ самый управляемый: картинка привязана к ячейке, наследует её размеры и не «уезжает» при изменении макета. Ограничение — параметр-картинка масштабируется по ячейке, поэтому размеры ячейки нужно подобрать заранее, включив объединение ячеек при необходимости.

Способ 2: коллекция рисунков табличного документа

Альтернатива — добавить рисунок программно через ТабличныйДокумент.Рисунки.Добавить(). Рисунок позиционируется координатами и размерами в миллиметрах, что удобно, когда подпись должна перекрывать несколько областей или размещаться поверх текста.

Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

Рисунок.Картинка = Факсимиле;

Рисунок.Верх = 120; // мм от верха документа

Рисунок.Лево = 60; // мм от левого края

Рисунок.Высота = 12; // мм

Рисунок.Ширина = 40; // мм

Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);

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

Способ 3: рисунок в самом макете

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

Порядок внедрения факсимиле
  1. 1
    Подготовьте PNG подписи с прозрачным фоном
  2. 2
    Выберите хранилище: реквизит-ХранилищеЗначения или присоединенные файлы БСП
  3. 3
    Загрузите картинку в базу через форму элемента
  4. 4
    Добавьте в макет параметр типа «Картинка» или планируйте вывод через Рисунки
  5. 5
    Напишите функцию получения картинки с возвратом Неопределено при отсутствии
  6. 6
    Вставьте вызов в процедуру формирования печатной формы
  7. 7
    Проверьте печать и сохранение в PDF для документа с подписью и без неё

Факсимиле в типовых конфигурациях без доработки

В конфигурациях на БСП (БП 3.0, УТ 11, ERP, ЗУП) часть задачи уже решена: есть хранение логотипов и изображений организаций, а в ряде форм — штатные места для подписей. Но «из коробки» автоматическая подстановка факсимиле во все печатные формы обычно не реализована — её добавляют через механизм дополнительных печатных форм и внешних обработок, не снимая конфигурацию с поддержки.

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

Проверка результата и типичные ошибки

После внедрения проверьте три сценария: документ с заполненной подписью, документ без подписи (форма должна сформироваться без ошибки и без пустой рамки) и пакетная печать нескольких документов. Дополнительно сохраните форму в PDF и убедитесь, что картинка не сместилась и не потеряла прозрачность.

Частые дефекты: подпись растянута или сплющена (несоответствие пропорций ячейки и картинки), чёрный фон вместо прозрачного (картинка сохранена в JPG), подпись обрезана при печати (рисунок вышел за границы области печати), пустое место вместо подписи в клиент-серверной базе (картинка читалась с диска клиента).

Типичные ошибки
01
Сохранение подписи в JPG — прозрачность теряется, на печати появляется белый или серый прямоугольник поверх линий формы.
02
Чтение картинки с локального диска в серверной процедуре — в клиент-серверном режиме файл недоступен, подпись не выводится.
03
Отсутствие проверки на Неопределено — пакетная печать падает на первом документе без загруженной подписи.
04
Фиксированные координаты рисунка при изменяемой высоте формы — подпись наезжает на таблицу товаров.
05
Хранение огромного скана подписи — печатные формы раздуваются, PDF формируется медленно.
Контрольные точки

Как проверить результат

Печатная форма документа с подписью
Норма

Факсимиле на своём месте, пропорции сохранены, фон прозрачный

Тревожный признак

Картинка растянута, с фоном или смещена на текст

Документ без загруженной подписи
Норма

Форма формируется, область подписи пустая, ошибок нет

Тревожный признак

Ошибка выполнения или пустая рамка рисунка

Сохранение в PDF
Норма

Подпись выглядит так же, как на экране

Тревожный признак

Картинка потерялась или искажена при экспорте

Пакетная печать 10–20 документов
Норма

Все формы с подписями, скорость приемлемая

Тревожный признак

Ошибки на отдельных документах, заметные задержки

Юридические ограничения и безопасность

Факсимильная подпись не равнозначна собственноручной: по общему правилу её использование допустимо, только если это прямо предусмотрено договором между сторонами или соглашением о документообороте. Для первичных учётных документов, налоговых и кадровых форм ориентируйтесь на требования законодательства и внутренние регламенты — во многих случаях факсимиле недопустимо, и документ нужно подписывать собственноручно или электронной подписью.

С точки зрения безопасности изображение подписи — чувствительный объект: любой, кто получит картинку, сможет подделать подпись. Ограничьте права на изменение реквизитов с факсимиле и на присоединенные файлы, ведите журнал загрузки картинок и не выкладывайте файлы подписей в общие сетевые папки.

Итог

Что важно запомнить

Факсимиле в 1С — это картинка в базе плюс код её вывода в макет печатной формы. Храните подпись в ХранилищеЗначения или присоединенных файлах БСП, выводите через параметр-картинку или коллекцию Рисунки, всегда обрабатывайте отсутствие подписи и заранее согласуйте юридическую допустимость факсимиле для каждого типа документов.

Частые вопросы

Можно ли вставить факсимиле без изменения конфигурации?

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

В каком формате лучше хранить изображение подписи?

Оптимален PNG с прозрачным фоном: он корректно накладывается на линии и текст табличного документа. JPG не поддерживает прозрачность и даёт видимый прямоугольник. Размер файла держите умеренным — достаточно ширины 300–600 пикселей.

Почему подпись видна на экране, но пропадает при печати или в PDF?

Чаще всего рисунок выходит за границы области печати страницы или добавлен с координатами, рассчитанными под другой масштаб. Проверьте поля страницы табличного документа и координаты рисунка, а также убедитесь, что картинка передаётся как объект «Картинка», а не как навигационная ссылка на временное хранилище, которое уже очищено.

Как сделать разные подписи для разных организаций или сотрудников?

Храните картинку в реквизите того объекта, к которому она относится: в элементе справочника «Организации» — для подписей по организации, в «Физических лицах» или пользователях — для персональных. В функции получения факсимиле передавайте владельца параметром и доставайте его картинку.

Работает ли факсимиле в тонком и веб-клиенте?

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

Можно ли вывести вместе с подписью факсимиле печати организации?

Да, механизм тот же: храните вторую картинку (оттиск печати) и выводите её отдельным рисунком или параметром макета. Обычно печать размещают так, чтобы она частично перекрывала подпись и не закрывала текст, — позицию подбирают координатами рисунка на тестовых документах.